{"version":3,"file":"softheon-lighthouse.mjs","sources":["../../../../projects/lighthouse/src/lib/shared/constants/messages.ts","../../../../projects/lighthouse/src/lib/shared/constants/storage-keys.ts","../../../../projects/lighthouse/src/lib/service-request/configs/service-request-config.ts","../../../../projects/lighthouse/src/lib/service-request/services/entity/abstract-entity.service.ts","../../../../projects/lighthouse/src/lib/core/services/message.service.ts","../../../../projects/lighthouse/src/lib/core/https/api.service.ts","../../../../projects/lighthouse/src/lib/service-request/services/entity/service-request-entity.service.ts","../../../../projects/lighthouse/src/lib/service-request/services/attachment/attachment.service.ts","../../../../projects/lighthouse/src/lib/service-request/models/forms/service-category-form.ts","../../../../projects/lighthouse/src/lib/service-request/models/forms/additional-information-form.ts","../../../../projects/lighthouse/src/lib/shared/helpers/form-validation-helper.ts","../../../../projects/lighthouse/src/lib/shared/constants/fields-to-form-controls.ts","../../../../projects/lighthouse/src/lib/service-request/services/form/form.service.ts","../../../../projects/lighthouse/src/lib/service-request/models/approvalProfile.ts","../../../../projects/lighthouse/src/lib/service-request/models/expediteProfile.ts","../../../../projects/lighthouse/src/lib/service-request/models/informationProfile.ts","../../../../projects/lighthouse/src/lib/service-request/models/internalProfile.ts","../../../../projects/lighthouse/src/lib/service-request/models/newValuesRow.ts","../../../../projects/lighthouse/src/lib/service-request/models/serviceRequestModel.ts","../../../../projects/lighthouse/src/lib/service-request/models/forms/service-request-form.ts","../../../../projects/lighthouse/src/lib/service-request/models/forms/service-request-model-form.ts","../../../../projects/lighthouse/src/lib/service-request/models/models-api.ts","../../../../projects/lighthouse/src/lib/service-request/services/service-request/service-request.service.ts","../../../../projects/lighthouse/src/lib/service-request/services/services-api.ts","../../../../projects/lighthouse/src/lib/shared/constants/constants.ts","../../../../projects/lighthouse/src/lib/service-request/languages/en.ts","../../../../projects/lighthouse/src/lib/service-request/languages/es.ts","../../../../projects/lighthouse/src/lib/shared/pipes/local-translate.pipe.ts","../../../../projects/lighthouse/src/lib/core/services/alert.service.ts","../../../../projects/lighthouse/src/lib/shared/constants/existing-fields-config.ts","../../../../projects/lighthouse/src/lib/shared/constants/issue-category-config.ts","../../../../projects/lighthouse/src/lib/shared/components/month-year-picker/month-year-picker.component.ts","../../../../projects/lighthouse/src/lib/shared/components/month-year-picker/month-year-picker.component.html","../../../../projects/lighthouse/src/lib/shared/components/year-picker/year-picker.component.ts","../../../../projects/lighthouse/src/lib/shared/components/year-picker/year-picker.component.html","../../../../projects/lighthouse/src/lib/shared/directives/numbers-only.directive.ts","../../../../projects/lighthouse/src/lib/service-request/components/service-request/service-category/service-category.component.ts","../../../../projects/lighthouse/src/lib/service-request/components/service-request/service-category/service-category.component.html","../../../../projects/lighthouse/src/lib/shared/components/file-uploader/file-uploader.component.ts","../../../../projects/lighthouse/src/lib/shared/components/file-uploader/file-uploader.component.html","../../../../projects/lighthouse/src/lib/service-request/components/service-request/additional-information/additional-information.component.ts","../../../../projects/lighthouse/src/lib/service-request/components/service-request/additional-information/additional-information.component.html","../../../../projects/lighthouse/src/lib/service-request/components/service-request/service-request.component.ts","../../../../projects/lighthouse/src/lib/service-request/components/service-request/service-request.component.html","../../../../projects/lighthouse/src/lib/service-request/components/components-api.ts","../../../../projects/lighthouse/src/lib/service-request/service-request-api.ts","../../../../projects/lighthouse/src/lib/shared/directives/letters-only.directive.ts","../../../../projects/lighthouse/src/lib/shared/pipes/phone-number.pipe.ts","../../../../projects/lighthouse/src/lib/shared/shared.module.ts","../../../../projects/lighthouse/src/lib/service-request/service-request.module.ts","../../../../projects/lighthouse/src/lib/core/core.module.ts","../../../../projects/lighthouse/src/lib/lighthouse.module.ts","../../../../projects/lighthouse/src/public-api.ts","../../../../projects/lighthouse/src/softheon-lighthouse.ts"],"sourcesContent":["/**\r\n * The enum for messages\r\n */\r\nexport enum Messages {\r\n    /** The api call start */\r\n    API_CALL_START,\r\n\r\n    /** The api all finish */\r\n    API_CALL_FINISH\r\n}","/**\r\n * The local storage keys constants\r\n */\r\nexport const StorageKeys = {\r\n    LANGUAGE: 'language',\r\n}\r\n","import { ServiceRequestModel } from '../models/serviceRequestModel';\r\nimport { AdditionalFieldsConfiguration } from './addition-fields-configuration';\r\nimport { ExistingAdditionalFieldsConfiguration } from './existing-fields-configuration';\r\nimport { IssueCategoryConfiguration } from './issue-category-configuration';\r\n\r\nexport class ServiceRequestConfig {\r\n\r\n    /** The service request model */\r\n    public serviceRequest: ServiceRequestModel;\r\n\r\n    /** The drawer id */\r\n    public drawerId: number;\r\n\r\n    /** The entity id */\r\n    public entityId: number;\r\n\r\n    /** The base uri for api call */\r\n    public baseUri: string;\r\n\r\n    /** The optional service request full uri for api call */\r\n    public serviceRequestFullUri: string;\r\n\r\n    /** The optional attachment full uri for api call */\r\n    public attachmentFullUri: string;\r\n\r\n    /** The flag to check whether the input uri is full uri */\r\n    public isFullUri: boolean;\r\n\r\n    /** The access token for api call */\r\n    public accessToken: string;\r\n\r\n    /** The path to language file */\r\n    public languagePath: string;\r\n\r\n    /** The path for encounter type */\r\n    public encounterType: string;\r\n\r\n    /** The api version */\r\n    public apiVersion: number;\r\n\r\n    /** The Issue Category Configured values */\r\n    public issueCategoryConfiguration: Array<IssueCategoryConfiguration>;\r\n\r\n    /** The Additional Questions Configured values */\r\n    public additionalFieldsConfig: Array<AdditionalFieldsConfiguration>;\r\n\r\n    /** The existing additional fields configuration */\r\n    public modifiedExistingFieldsConfig: Array<ExistingAdditionalFieldsConfiguration>;\r\n\r\n    /** The health coverage monthly premium, used to determine max hardship waiver amount */\r\n    public healthCoverageMonthlyPremium: number;\r\n\r\n    /** The constructor */\r\n    constructor() {\r\n        this.serviceRequest = null;\r\n        this.baseUri = 'https://localhost.softheon.com/lighthouse.api';\r\n        this.accessToken = '';\r\n        this.languagePath = '';\r\n        this.encounterType = '';\r\n        this.apiVersion = 1;\r\n        this.issueCategoryConfiguration = [];\r\n        this.additionalFieldsConfig = [];\r\n        this.modifiedExistingFieldsConfig = [];\r\n    }\r\n}\r\n","/** The abstract entity service */\r\nexport abstract class AbstractEntityService<T> {\r\n    /**\r\n     * Create entity.\r\n     * @param uri Target uri for api call.\r\n     * @param accessToken The access token for api call.\r\n     * @param model Model.\r\n     * @param isFullUri flag value to check the uri is full uri\r\n     * @param drawerId Drawer id.\r\n     */\r\n    public abstract createEntity(uri: string, accessToken: string, model: T, isFullUri?: boolean, drawerId?: number): Promise<T>;\r\n\r\n    /**\r\n     * Retrieve entity.\r\n     * \r\n     * @param uri Target uri for api call.\r\n     * @param accessToken The access token for api call.\r\n     * @param isFullUri flag value to check the uri is full uri\r\n     * @param drawerId Drawer id.\r\n     * @param entityId Model.\r\n     */\r\n    public abstract retrieveEntity(uri: string, accessToken: string, isFullUri?: boolean, drawerId?: number, entityId?: number): Promise<T>;\r\n\r\n    /**\r\n     * Update entity.\r\n     * @param uri Target uri for api call.\r\n     * @param accessToken The access token for api call.\r\n     * @param model Model.\r\n     * @param isFullUri flag value to check the uri is full uri\r\n     * @param drawerId Drawer id.\r\n     * @param entityId Entity id.\r\n     */\r\n    public abstract updateEntity(uri: string, accessToken: string, model: T, isFullUri?: boolean, drawerId?: number, entityId?: number): Promise<T>;\r\n\r\n    /**\r\n     * Delete entity.\r\n     * @param uri Target uri for api call.\r\n     * @param accessToken The access token for api call.\r\n     * @param isFullUri flag value to check the uri is full uri\r\n     * @param drawerId Drawer id.\r\n     * @param entityId Entity id.\r\n     */\r\n    public abstract deleteEntity(uri: string, accessToken: string, isFullUri?: boolean, drawerId?: number, entityId?: number): Promise<boolean>;\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { Subject, Observable } from 'rxjs';\r\n\r\n/** The message service */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class MessageService {\r\n  /** The subject for message */\r\n  private subject: Subject<any> = new Subject<any>();\r\n\r\n  /**\r\n   * Send message notification\r\n   * @param message The message content\r\n   */\r\n  public sendMessage(message: any): void {\r\n    this.subject.next({ content: message });\r\n  }\r\n\r\n  /**\r\n   * Clear the current messages\r\n   */\r\n  public clearMessages(): void {\r\n    this.subject.next(true);\r\n  }\r\n\r\n  /**\r\n   * Get the current messages\r\n   */\r\n  public getMessage(): Observable<any> {\r\n    return this.subject.asObservable();\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\n\r\nimport { MessageService } from '../services/message.service';\r\nimport { Messages } from '../../shared/constants/messages';\r\n\r\n/**\r\n * The API service\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ApiService {\r\n  /**\r\n   * The constructor\r\n   * @param http The http client\r\n   * @param messageService The message service for observable subscription\r\n   */\r\n  constructor(\r\n    private http: HttpClient,\r\n    private messageService: MessageService\r\n  ) { }\r\n\r\n  /**\r\n   * Performs HTTP GET request using the provided uri.\r\n   * @param fullUri the uri to GET from\r\n   * @param header the header for http request\r\n   */\r\n  public get<T>(fullUri: string, header?: HttpHeaders): Promise<T> {\r\n    const targetHeaders = header ? header : this.getHeader();\r\n    this.messageService.sendMessage(Messages.API_CALL_START);\r\n\r\n    return this.http.get<T>(fullUri, { headers: targetHeaders })\r\n      .toPromise()\r\n      .then(value => Promise.resolve(value as T))\r\n      .catch(error => Promise.reject(error))\r\n      .finally(() => this.messageService.sendMessage(Messages.API_CALL_FINISH));\r\n  }\r\n\r\n  /**\r\n   * Performs HTTP POST request using the provided uri.\r\n   * @param fullUri the uri to POST from\r\n   * @param content the content body for http request\r\n   * @param header the header for http request\r\n   */\r\n  public post<T>(fullUri: string, content: any, header?: HttpHeaders) {\r\n    const targetHeaders = header ? header : this.getHeader();\r\n    this.messageService.sendMessage(Messages.API_CALL_START);\r\n\r\n    return this.http.post<T>(fullUri, content, { headers: targetHeaders })\r\n      .toPromise()\r\n      .then(value => Promise.resolve(value as T))\r\n      .catch(error => Promise.reject(error))\r\n      .finally(() => this.messageService.sendMessage(Messages.API_CALL_FINISH));\r\n  }\r\n\r\n  /**\r\n   * Performs HTTP PUT request using the provided uri.\r\n   * @param fullUri the uri to PUT from\r\n   * @param content the content body for http request\r\n   * @param header the header for http request\r\n   */\r\n  public put<T>(fullUri: string, content: any, header?: HttpHeaders) {\r\n    const targetHeaders = header ? header : this.getHeader();\r\n    this.messageService.sendMessage(Messages.API_CALL_START);\r\n\r\n    return this.http.put<T>(fullUri, content, { headers: targetHeaders })\r\n      .toPromise()\r\n      .then(value => Promise.resolve(value as T))\r\n      .catch(error => Promise.reject(error))\r\n      .finally(() => this.messageService.sendMessage(Messages.API_CALL_FINISH));\r\n  }\r\n\r\n  /**\r\n   * Performs HTTP PATCH request using the provided uri.\r\n   * @param fullUri the uri to PATCH from\r\n   * @param content the content body for http request\r\n   * @param header the header for http request\r\n   */\r\n  public patch<T>(fullUri: string, content: any, header?: HttpHeaders) {\r\n    const targetHeaders = header ? header : this.getHeader();\r\n    this.messageService.sendMessage(Messages.API_CALL_START);\r\n\r\n    return this.http.patch<T>(fullUri, content, { headers: targetHeaders })\r\n      .toPromise()\r\n      .then(value => Promise.resolve(value as T))\r\n      .catch(error => Promise.reject(error))\r\n      .finally(() => this.messageService.sendMessage(Messages.API_CALL_FINISH));\r\n  }\r\n\r\n  /**\r\n   * Performs HTTP DELETE request using the provided uri.\r\n   * @param fullUri the uri to DELETE from\r\n   * @param header the header for http request\r\n   */\r\n  public delete<T>(fullUri: string, header?: HttpHeaders) {\r\n    const targetHeaders = header ? header : this.getHeader();\r\n    this.messageService.sendMessage(Messages.API_CALL_START);\r\n\r\n    return this.http.delete<T>(fullUri, { headers: targetHeaders })\r\n      .toPromise()\r\n      .then(value => Promise.resolve(value as T))\r\n      .catch(error => Promise.reject(error))\r\n      .finally(() => this.messageService.sendMessage(Messages.API_CALL_FINISH));\r\n  }\r\n\r\n  /**\r\n   * Returns a new http header with content type set to application/json\r\n   */\r\n  private getHeader = (): HttpHeaders => new HttpHeaders({ 'Content-Type': 'application/json' });\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpHeaders } from '@angular/common/http';\r\n\r\nimport { AbstractEntityService } from './abstract-entity.service';\r\nimport { ServiceRequestModel } from '../../models/models-api';\r\nimport { ApiService } from '../../../core/https/api.service';\r\n\r\n/** The service request entity service */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ServiceRequestEntityService extends AbstractEntityService<ServiceRequestModel> {\r\n  /**\r\n   * constructor\r\n   * @param apiService the api service\r\n   */\r\n  constructor(private readonly apiService: ApiService) {\r\n    super();\r\n  }\r\n\r\n  /**\r\n   * Perform the action to create service request entity to the server.\r\n   * @param uri the uri for api call\r\n   * @param accessToken the access token\r\n   * @param model the model for content body\r\n   * @param isFullUri flag to check the uri is for full uri\r\n   * @param drawerId the drawer id\r\n   */\r\n  public createEntity(uri: string, accessToken: string, model: ServiceRequestModel, isFullUri?: boolean, drawerId?: number): Promise<ServiceRequestModel> {\r\n    const targetUri = !!isFullUri ? uri : `${uri}/v1/servicerequest/${drawerId}`;\r\n    const headers = this.getHeader(accessToken);\r\n\r\n    return this.apiService.post(targetUri, model, headers);\r\n  }\r\n\r\n  /**\r\n   * Perform the action to retrieve service request entity from the server.\r\n   * @param uri the uri for api call\r\n   * @param accessToken the access token\r\n   * @param isFullUri flag to check the uri is for full uri\r\n   * @param drawerId the drawer id\r\n   * @param entityId the entity id\r\n   */\r\n  public retrieveEntity(uri: string, accessToken: string, isFullUri?: boolean, drawerId?: number, entityId?: number): Promise<ServiceRequestModel> {\r\n    const targetUri = !!isFullUri ? uri : `${uri}/v1/servicerequest/${drawerId}/${entityId}`;\r\n    const headers = this.getHeader(accessToken);\r\n\r\n    return this.apiService.get(targetUri, headers);\r\n  }\r\n\r\n  /**\r\n   * Perform the action to update service request entity to the server.\r\n   * @param uri the uri for api call\r\n   * @param accessToken the access token\r\n   * @param model the model for content body\r\n   * @param isFullUri flag to check the uri is for full uri\r\n   * @param drawerId the drawer id\r\n   * @param entityId the entity id\r\n   */\r\n  public updateEntity(uri: string, accessToken: string, model: ServiceRequestModel, isFullUri?: boolean, drawerId?: number, entityId?: number): Promise<ServiceRequestModel> {\r\n    const targetUri = !!isFullUri ? uri : `${uri}/v1/servicerequest/${drawerId}/${entityId}`;\r\n    const headers = this.getHeader(accessToken);\r\n\r\n    return this.apiService.patch(targetUri, model, headers);\r\n  }\r\n\r\n  /**\r\n   * Perform the action to delete service request entity from the server.\r\n   * @param uri the uri for api call\r\n   * @param accessToken the access token\r\n   * @param isFullUri flag to check the uri is for full uri\r\n   * @param drawerId the drawer id\r\n   * @param entityId the entity id\r\n   */\r\n  public deleteEntity(uri: string, accessToken: string, isFullUri?: boolean, drawerId?: number, entityId?: number): Promise<boolean> {\r\n    const targetUri = !!isFullUri ? uri : `${uri}/v1/servicerequest/${drawerId}/${entityId}`;\r\n    const headers = this.getHeader(accessToken);\r\n\r\n    return this.apiService.delete(targetUri, headers);\r\n  }\r\n\r\n  /**\r\n   * Returns a new http header with content type set to application/json with access token.\r\n   * @param accessToken token to authorize for api call\r\n   */\r\n  private getHeader(accessToken: string) {\r\n    return new HttpHeaders(\r\n      {\r\n        'Authorization': `Bearer ${accessToken}`,\r\n        'Content-Type': 'application/json'\r\n      }\r\n    );\r\n  }\r\n}\r\n","import { HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { ApiService } from '../../../core/https/api.service';\r\nimport { Attachment } from '../../../shared/models/attachment';\r\n\r\n/**\r\n * The attachment service\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class AttachmentService {\r\n  /**\r\n   * The constructor\r\n   * @param apiService The api service\r\n   */\r\n  constructor(private readonly apiService: ApiService) { }\r\n\r\n  /**\r\n   * Perform the action to create attachments to the target entity with api versioning.\r\n   * @param uri the target uri\r\n   * @param accessToken the access token\r\n   * @param attachments the attachment array to insert\r\n   * @param isFullUri the boolean flag to check the uri is full uri\r\n   * @param drawerId the target drawer id\r\n   * @param entityId the target entity id\r\n   * @param apiVersion the api version for Lighthouse api\r\n   */\r\n  public createAttachments(uri: string, accessToken: string, attachments: Attachment[], isFullUri?: boolean, drawerId?: number, entityId?: number, apiVersion?: number): Promise<void> {\r\n    let targetUri = !!isFullUri ? uri : `${uri}/v1/attachment/${drawerId}/${entityId}`;\r\n    const headers = this.getHeader(accessToken);\r\n    const formData = new FormData();\r\n    for (const attachment of attachments) {\r\n      formData.append('files', attachment.file, attachment.name);\r\n    }\r\n\r\n    // Api versioning\r\n    if (apiVersion && apiVersion == 2) {\r\n      targetUri = !!isFullUri ? uri : `${uri}/v2/attachment/batch`;\r\n      formData.append('drawerId', `${drawerId}`);\r\n      formData.append('folderId', `${entityId}`);\r\n    }\r\n\r\n    return this.apiService.post(targetUri, formData, headers);\r\n  }\r\n\r\n  /**\r\n   * Returns a new http header with content type set to application/json with access token.\r\n   * @param accessToken token to authorize for api call\r\n   */\r\n  private getHeader(accessToken: string) {\r\n    return new HttpHeaders(\r\n      {\r\n        'Authorization': `Bearer ${accessToken}`,\r\n      }\r\n    );\r\n  }\r\n}\r\n","import { Validators, FormArray } from '@angular/forms';\r\n\r\n/**\r\n * The model for service category form\r\n */\r\nexport const serviceCategoryForm: any = {\r\n    issue: ['', Validators.required],\r\n    severity: ['', Validators.required],\r\n    category: ['', Validators.required],\r\n    action: [''],\r\n    noticeType: [''],\r\n    invoicePeriod: [''],\r\n    taxYear: [''],\r\n    correctionType: [''],\r\n    correctionReason: [''],\r\n    newBalance: [''],\r\n    expectedPaidThroughDate: [''],\r\n    beginDate: [''],\r\n    endDate: [''],\r\n    groupPolicyNumber: [''],\r\n    spanFolderId: [''],\r\n    expectedStatus: [''],\r\n    expectedRate: [''],\r\n    expectedAPTC: [''],\r\n    expectedCSR: [''],\r\n    expectedPremium: [''],\r\n    expectedIssuerSubscriberId: [''],\r\n    expectedIssuerMemberId: [''],\r\n    reason: [''],\r\n    discountStartDate: [''],\r\n    discountEndDate: [''],\r\n    discountType: [''],\r\n    discountAmount: [''],\r\n    discountAmountType: [''],\r\n    discountApprovedOrDenied: [''],\r\n    contactDueDate: [''],\r\n    dedupMembers: new FormArray([]),\r\n    updateHandicap: [''],\r\n    exchangeMemberId: [''],\r\n    handicapStartDate: [''],\r\n    handicapEndDate: [''],\r\n    refundServiceRequestNumber: [''],\r\n    refundCreationDate: [''],\r\n    refundStatus: [''],\r\n    billingPeriod: ['']\r\n};\r\n\r\n/**\r\n * The model for dedup member form\r\n */\r\nexport const dedupMemberForm: any = {\r\n    memberName: ['', Validators.required],\r\n    memberId: ['', Validators.required],\r\n    planName: ['', Validators.required],\r\n    monthlyPremium: ['', Validators.required],\r\n    coverageStartDate: ['', Validators.required]\r\n}","/**\r\n * The model for additional information form\r\n */\r\nexport const additionalInformationForm: any = {\r\n    comments: ['']\r\n};","import { AbstractControl } from '@angular/forms';\r\n\r\n/**\r\n * The function to check required field for the target control\r\n * Referenced by https://stackoverflow.com/a/47010307\r\n * @param abstractControl The target form control\r\n */\r\nexport const hasRequiredField = (abstractControl: AbstractControl): boolean => {\r\n    if (abstractControl.validator) {\r\n        const validator = abstractControl.validator({} as AbstractControl);\r\n        if (validator && validator.required) {\r\n            return true;\r\n        }\r\n    }\r\n    if (abstractControl['controls']) {\r\n        for (const controlName in abstractControl['controls']) {\r\n            if (abstractControl['controls'][controlName]) {\r\n                if (hasRequiredField(abstractControl['controls'][controlName])) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n};\r\n","/**\r\n * Form controls to fields map\r\n */\r\nexport const FormControlsToFieldsMap: ReadonlyMap<string, string> = new Map<string, string>([\r\n    [\"serviceCategory.noticeType\", \"Notice Type\"],\r\n    [\"serviceCategory.invoicePeriod\", \"Invoice Period\"],\r\n    [\"serviceCategory.taxYear\", \"Tax Year\"],\r\n    [\"serviceCategory.correctionType\", \"Correction Type\"],\r\n    [\"serviceCategory.correctionReason\", \"Correction Reasons\"],\r\n    [\"serviceCategory.billingPeriod\", \"Invoice Correction\"],\r\n    [\"serviceCategory.newBalance\", \"Expected Balance\"],\r\n    [\"serviceCategory.expectedPaidThroughDate\", \"Expected Paid Through Date\"],\r\n    [\"serviceCategory.refundServiceRequestNumber\", \"Original Refund Service Request Number\"],\r\n    [\"serviceCategory.refundCreationDate\", \"Refund Service Request Date of Creation\"],\r\n    [\"serviceCategory.refundStatus\", \"Refund Status\"],\r\n    [\"serviceCategory.groupPolicyNumber\", \"Group/Policy Number\"],\r\n    [\"serviceCategory.spanFolderId\", \"Span Folder Id\"],\r\n    [\"serviceCategory.expectedStatus\", \"Expected Status\"],\r\n    [\"serviceCategory.expectedRate\", \"Expected Rate\"],\r\n    [\"serviceCategory.expectedAPTC\", \"Expected APTC\"],\r\n    [\"serviceCategory.expectedCSR\", \"Expected CSR\"],\r\n    [\"serviceCategory.expectedPremium\", \"Expected Premium\"],\r\n    [\"serviceCategory.expectedIssuerSubscriberId\", \"Expected Issuer Subscriber Id\"],\r\n    [\"serviceCategory.expectedIssuerMemberId\", \"Expected Issuer Member Id\"],\r\n    [\"serviceCategory.reason\", \"Reason\"],\r\n    [\"serviceCategory.beginDate\", \"Begin Date\"],\r\n    [\"serviceCategory.endDate\", \"End Date\"],\r\n    [\"serviceCategory.discountApprovedOrDenied\", \"Discount Approval Status\"],\r\n    [\"serviceCategory.discountStartDate\", \"Discount Start Date\"],\r\n    [\"serviceCategory.discountEndDate\", \"Discount End Date\"],\r\n    [\"serviceCategory.discountType\", \"Discount Type\"],\r\n    [\"serviceCategory.discountAmountType\", \"Discount Amount Type\"],\r\n    [\"serviceCategory.discountAmount\", \"Discount Amount\"],\r\n    [\"serviceCategory.updateHandicap\", \"Update Handicap\"],\r\n    [\"serviceCategory.exchangeMemberId\", \"Exchange Member Id\"],\r\n    [\"serviceCategory.handicapStartDate\", \"Start Date\"],\r\n    [\"serviceCategory.handicapEndDate\", \"End Date\"],\r\n]);\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { FormGroup, FormBuilder, Validators, FormArray, ValidatorFn, AbstractControl } from '@angular/forms';\r\n\r\nimport { ServiceRequestForm } from '../../models/forms/service-request-form';\r\nimport { serviceCategoryForm, dedupMemberForm } from '../../models/forms/service-category-form';\r\nimport { additionalInformationForm } from '../../models/forms/additional-information-form';\r\nimport { ServiceRequestModel, NewValuesRow } from '../../models/models-api';\r\nimport { hasRequiredField } from '../../../shared/helpers/form-validation-helper';\r\nimport { FormControlsToFieldsMap } from '../../../shared/constants/fields-to-form-controls';\r\nimport { ServiceRequestConfig } from '../../configs/service-request-config';\r\n\r\n/** The form service */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class FormService {\r\n  /** The service request form */\r\n  public serviceRequestForm: FormGroup;\r\n\r\n  /** The non required fields */\r\n  public nonRequiredFields: Map<string, string>;\r\n  \r\n  /** The service request config model */\r\n  public config: ServiceRequestConfig;\r\n\r\n  /**\r\n   * The constructor\r\n   * @param formBuilder The form builder\r\n   */\r\n  constructor(private formBuilder: FormBuilder) {\r\n    const serviceRequestFormInterface = {\r\n      serviceCategory: this.formBuilder.group(serviceCategoryForm),\r\n      additionalInformation: this.formBuilder.group(additionalInformationForm)\r\n    } as ServiceRequestForm;\r\n\r\n    this.serviceRequestForm = this.formBuilder.group(serviceRequestFormInterface);\r\n\r\n    // Add a listener to category field to update form validators.\r\n    this.serviceRequestForm.get('serviceCategory.category').valueChanges.subscribe((val: any) => {\r\n      this.updateFormValidation();\r\n    });\r\n    this.serviceRequestForm.get('serviceCategory.noticeType').valueChanges.subscribe((val: any) => {\r\n      this.updateFormValidation();\r\n    });\r\n    this.serviceRequestForm.get('serviceCategory.discountApprovedOrDenied').valueChanges.subscribe((val: any) => {\r\n      this.updateFormValidation();\r\n    });\r\n    this.serviceRequestForm.get('serviceCategory.discountType').valueChanges.subscribe((val: any) => {\r\n      this.updateFormValidation();\r\n    });\r\n    this.serviceRequestForm.get('serviceCategory.discountAmountType').valueChanges.subscribe((val: any) => {\r\n      this.updateFormValidation();\r\n    });\r\n  }\r\n\r\n  /**\r\n  * The function to update form validation based on the current form values\r\n  */\r\n  public updateFormValidation(): void {\r\n    // Initialize form validation status\r\n    Object.keys(this.serviceRequestForm.controls).forEach((groupKey: string) => {\r\n      const formGroup = this.serviceRequestForm.get(groupKey) as FormGroup;\r\n\r\n      Object.keys(formGroup.controls).forEach((key: string) => {\r\n        if (key !== 'issue' && key !== 'severity' && key !== 'category') {\r\n          const control = formGroup.get(key);\r\n          control.clearValidators();\r\n        }\r\n      });\r\n    });\r\n\r\n    // Reset form array\r\n    const dupMembersArray = this.serviceRequestForm.get('serviceCategory.dedupMembers') as FormArray;\r\n    while (dupMembersArray.controls.length > 0) {\r\n      dupMembersArray.removeAt(0);\r\n    }\r\n\r\n    const issue = this.serviceRequestForm.get('serviceCategory.issue').value;\r\n    const category = this.serviceRequestForm.get('serviceCategory.category').value;\r\n\r\n    // By default, the additional comments field are required.\r\n    this.serviceRequestForm.get('additionalInformation.comments').setValidators(Validators.required);\r\n\r\n    switch (issue) {\r\n      case 'Communications': {\r\n        switch (category) {\r\n          case 'Generate Notice': {\r\n            const noticeType = this.serviceRequestForm.get('serviceCategory.noticeType').value;\r\n\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.noticeType')) && !(this.nonRequiredFields.get(FormControlsToFieldsMap.get('serviceCategory.noticeType')) == 'Generate Notice')){\r\n              this.serviceRequestForm.get('serviceCategory.noticeType').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.noticeType')) && !(this.nonRequiredFields.get(FormControlsToFieldsMap.get('serviceCategory.noticeType')) == 'Generate Notice')){\r\n              this.serviceRequestForm.get('serviceCategory.contactDueDate').setValidators(Validators.required);\r\n            }\r\n            \r\n            this.serviceRequestForm.get('additionalInformation.comments').clearValidators();\r\n\r\n            switch (noticeType) {\r\n              case 'Duplicate Coverage Subsidies Ending': {\r\n                (this.serviceRequestForm.get('serviceCategory.dedupMembers') as FormArray).push(this.formBuilder.group(dedupMemberForm));\r\n                (this.serviceRequestForm.get('serviceCategory.dedupMembers') as FormArray).push(this.formBuilder.group(dedupMemberForm));\r\n                break;\r\n              }\r\n            }\r\n            break;\r\n          }\r\n          case 'Regenerate Notice': {\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.noticeType')) && !(this.nonRequiredFields.get(FormControlsToFieldsMap.get('serviceCategory.noticeType')) == 'Regenerate Notice')){\r\n              this.serviceRequestForm.get('serviceCategory.noticeType').setValidators(Validators.required);\r\n            }\r\n            break;\r\n          }\r\n          case 'Invoice Correction': {\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get(\"serviceCategory.invoicePeriod\"))){\r\n              this.serviceRequestForm.get('serviceCategory.invoicePeriod').setValidators(Validators.required);\r\n            }\r\n            break;\r\n          }\r\n          case '1095A Correction': {\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.taxYear'))){\r\n              this.serviceRequestForm.get('serviceCategory.taxYear').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.correctionType'))){\r\n              this.serviceRequestForm.get('serviceCategory.correctionType').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.correctionReason'))){\r\n              this.serviceRequestForm.get('serviceCategory.correctionReason').setValidators(Validators.required);\r\n            }\r\n            break;\r\n          }\r\n          case 'Generate New Invoice': {\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.billingPeriod'))){\r\n              this.serviceRequestForm.get('serviceCategory.billingPeriod').setValidators(Validators.required);\r\n            }\r\n            break;\r\n          }\r\n        }\r\n        break;\r\n      }\r\n      case 'Payments': {\r\n        switch (category) {\r\n          case 'Incorrect Balance Due': {\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.newBalance'))){\r\n              this.serviceRequestForm.get('serviceCategory.newBalance').setValidators(Validators.required);\r\n            }\r\n            break;\r\n          }\r\n          case 'Incorrect Paid Through Date': {\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.expectedPaidThroughDate'))){\r\n              this.serviceRequestForm.get('serviceCategory.expectedPaidThroughDate').setValidators(Validators.required);\r\n            }\r\n            break;\r\n          }\r\n          case 'Refund Investigation': {\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.refundServiceRequestNumber'))){\r\n              this.serviceRequestForm.get('serviceCategory.refundServiceRequestNumber').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.refundCreationDate'))){\r\n              this.serviceRequestForm.get('serviceCategory.refundCreationDate').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.refundStatus'))){\r\n              this.serviceRequestForm.get('serviceCategory.refundStatus').setValidators(Validators.required);\r\n            }\r\n            break;\r\n          }\r\n        }\r\n        break;\r\n      }\r\n      case 'Enrollment': {\r\n        switch (category) {\r\n          case 'Re-export Effectuation': {\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.groupPolicyNumber')) && !(this.nonRequiredFields.get(FormControlsToFieldsMap.get('serviceCategory.groupPolicyNumber')) == 'Re-export Effectuation')){\r\n              this.serviceRequestForm.get('serviceCategory.groupPolicyNumber').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.spanFolderId')) && !(this.nonRequiredFields.get(FormControlsToFieldsMap.get('serviceCategory.spanFolderId')) == 'Re-export Effectuation')){\r\n              this.serviceRequestForm.get('serviceCategory.spanFolderId').setValidators(Validators.required);\r\n            }\r\n            break;\r\n          }\r\n          case 'Incorrect Status': {\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.groupPolicyNumber')) && !(this.nonRequiredFields.get(FormControlsToFieldsMap.get('serviceCategory.groupPolicyNumber')) == 'Incorrect Status')){\r\n              this.serviceRequestForm.get('serviceCategory.groupPolicyNumber').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.expectedStatus'))){\r\n              this.serviceRequestForm.get('serviceCategory.expectedStatus').setValidators(Validators.required);\r\n            }\r\n            break;\r\n          }\r\n          case 'Incorrect Rate': {\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.groupPolicyNumber')) && !(this.nonRequiredFields.get(FormControlsToFieldsMap.get('serviceCategory.groupPolicyNumber')) == 'Incorrect Rate')){\r\n              this.serviceRequestForm.get('serviceCategory.groupPolicyNumber').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.expectedRate'))){\r\n              this.serviceRequestForm.get('serviceCategory.expectedRate').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.expectedAPTC'))){\r\n              this.serviceRequestForm.get('serviceCategory.expectedAPTC').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.expectedCSR'))){\r\n              this.serviceRequestForm.get('serviceCategory.expectedCSR').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.expectedPremium'))){\r\n              this.serviceRequestForm.get('serviceCategory.expectedPremium').setValidators(Validators.required);\r\n            }\r\n            break;\r\n          }\r\n          case 'Change Issuer ID': {\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.expectedIssuerSubscriberId'))){\r\n              this.serviceRequestForm.get('serviceCategory.expectedIssuerSubscriberId').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.expectedIssuerMemberId'))){\r\n              this.serviceRequestForm.get('serviceCategory.expectedIssuerMemberId').setValidators(Validators.required);\r\n            }\r\n            break;\r\n          }\r\n          case 'Change End Date': {\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.reason'))){\r\n              this.serviceRequestForm.get('serviceCategory.reason').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.groupPolicyNumber')) && !(this.nonRequiredFields.get(FormControlsToFieldsMap.get('serviceCategory.groupPolicyNumber')) == 'Change End Date')){\r\n              this.serviceRequestForm.get('serviceCategory.groupPolicyNumber').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.spanFolderId')) && !(this.nonRequiredFields.get(FormControlsToFieldsMap.get('serviceCategory.spanFolderId')) == 'Change End Date')){\r\n              this.serviceRequestForm.get('serviceCategory.spanFolderId').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.beginDate')) && !(this.nonRequiredFields.get(FormControlsToFieldsMap.get('serviceCategory.beginDate')) == 'Change End Date')){\r\n              this.serviceRequestForm.get('serviceCategory.beginDate').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.endDate')) && !(this.nonRequiredFields.get(FormControlsToFieldsMap.get('serviceCategory.endDate')) == 'Change End Date')){\r\n              this.serviceRequestForm.get('serviceCategory.endDate').setValidators(Validators.required);\r\n            }\r\n            break;\r\n          }\r\n          case 'Missing Policy': {\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.groupPolicyNumber')) && !(this.nonRequiredFields.get(FormControlsToFieldsMap.get('serviceCategory.groupPolicyNumber')) == 'Missing Policy')){\r\n              this.serviceRequestForm.get('serviceCategory.groupPolicyNumber').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.beginDate')) && !(this.nonRequiredFields.get(FormControlsToFieldsMap.get('serviceCategory.beginDate')) == 'Missing Policy')){\r\n              this.serviceRequestForm.get('serviceCategory.beginDate').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.endDate')) && !(this.nonRequiredFields.get(FormControlsToFieldsMap.get('serviceCategory.endDate')) == 'Missing Policy')){\r\n              this.serviceRequestForm.get('serviceCategory.endDate').setValidators(Validators.required);\r\n            }\r\n            break;\r\n          }\r\n          case 'Hardship Waiver': {\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.discountApprovedOrDenied'))){\r\n              this.serviceRequestForm.get('serviceCategory.discountApprovedOrDenied').setValidators(Validators.required);\r\n            }\r\n            if (this.serviceRequestForm.get('serviceCategory.discountApprovedOrDenied').value === 'Approved') {\r\n              if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.discountStartDate'))){\r\n                this.serviceRequestForm.get('serviceCategory.discountStartDate').setValidators(Validators.required);\r\n              }\r\n              if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.discountEndDate'))){\r\n                this.serviceRequestForm.get('serviceCategory.discountEndDate').setValidators(Validators.required);\r\n              }\r\n              if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.discountType'))){\r\n                this.serviceRequestForm.get('serviceCategory.discountType').setValidators(Validators.required);\r\n              }\r\n              if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.discountAmountType'))){\r\n                if(this.serviceRequestForm.get('serviceCategory.discountType').value === 'Flat'){\r\n                  this.serviceRequestForm.get('serviceCategory.discountAmountType').setValidators(Validators.required);\r\n                }\r\n              }\r\n              if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.discountAmount'))){\r\n                this.serviceRequestForm.get('serviceCategory.discountAmount').setValue(\"\");\r\n                if(this.serviceRequestForm.get('serviceCategory.discountType').value === 'Percentage'){\r\n                  this.serviceRequestForm.get('serviceCategory.discountAmount').setValidators([Validators.required, this.numberRangeValidator(0, 100)]); // 0 < x <= 100\r\n                }else if(this.serviceRequestForm.get('serviceCategory.discountAmountType').value === 'Other'){\r\n                  this.serviceRequestForm.get('serviceCategory.discountAmount').setValidators([Validators.required, this.numberRangeValidator(0, this.config.healthCoverageMonthlyPremium)]); // 0 < x <= Total Premium\r\n                }else if(this.serviceRequestForm.get('serviceCategory.discountAmountType').value === 'Health Coverage Monthly Premium'){\r\n                  this.serviceRequestForm.get('serviceCategory.discountAmount').setValue(this.config.healthCoverageMonthlyPremium);\r\n                }\r\n              }\r\n              this.serviceRequestForm.get('additionalInformation.comments').clearValidators();\r\n            }\r\n            break;\r\n          }\r\n          case 'Convert Enrollment Source': {\r\n            this.serviceRequestForm.get('additionalInformation.comments').clearValidators();\r\n            break;\r\n          }\r\n          case 'Update Handicap': {\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.updateHandicap'))){\r\n              this.serviceRequestForm.get('serviceCategory.updateHandicap').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.exchangeMemberId'))){\r\n              this.serviceRequestForm.get('serviceCategory.exchangeMemberId').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.handicapStartDate'))){\r\n              this.serviceRequestForm.get('serviceCategory.handicapStartDate').setValidators(Validators.required);\r\n            }\r\n            if(!this.nonRequiredFields.has(FormControlsToFieldsMap.get('serviceCategory.handicapEndDate'))){\r\n              this.serviceRequestForm.get('serviceCategory.handicapEndDate').setValidators(Validators.required);\r\n            }\r\n            break;\r\n          }\r\n        }\r\n        break;\r\n      }\r\n    }\r\n\r\n    // Apply the updated validators\r\n    Object.keys(this.serviceRequestForm.controls).forEach((groupKey: string) => {\r\n      const formGroup = this.serviceRequestForm.get(groupKey) as FormGroup;\r\n\r\n      Object.keys(formGroup.controls).forEach((key: string) => {\r\n        if (key !== 'issue' && key !== 'severity' && key !== 'category') {\r\n          const control = formGroup.get(key);\r\n          control.updateValueAndValidity({ emitEvent: false });\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  /**\r\n   * The function to update service request form group by the values from service request model.\r\n   * @param model The service request model\r\n   */\r\n  public updateServiceRequestForm(model: ServiceRequestModel): void {\r\n    // build map for NewValues table.\r\n    const newValuesMap = new Map<string, string>();\r\n    model.request.newValues.forEach((kvp: NewValuesRow) => {\r\n      newValuesMap.set(kvp.key, kvp.value);\r\n    });\r\n\r\n    // populate service category form\r\n    if (model.request.primaryRequest) {\r\n      this.serviceRequestForm.get('serviceCategory.issue').setValue(model.request.primaryRequest, { emitEvent: false });\r\n    }\r\n\r\n    if (model.expedite.severity) {\r\n      this.serviceRequestForm.get('serviceCategory.severity').setValue(model.expedite.severity, { emitEvent: false });\r\n    }\r\n\r\n    if (model.request.subcategory) {\r\n      this.serviceRequestForm.get('serviceCategory.category').setValue(model.request.subcategory, { emitEvent: false });\r\n    }\r\n\r\n    if (model.request.action) {\r\n      this.serviceRequestForm.get('serviceCategory.action').setValue(model.request.action, { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('notice_type')) {\r\n      this.serviceRequestForm.get('serviceCategory.noticeType').setValue(newValuesMap.get('notice_type'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('NoticeType')) {\r\n      this.serviceRequestForm.get('serviceCategory.noticeType').setValue(newValuesMap.get('NoticeType'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('invoice_period')) {\r\n      this.serviceRequestForm.get('serviceCategory.invoicePeriod').setValue(newValuesMap.get('invoice_period'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('year')) {\r\n      this.serviceRequestForm.get('serviceCategory.taxYear').setValue(newValuesMap.get('year'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('Correction')) {\r\n      this.serviceRequestForm.get('serviceCategory.correctionType').setValue(newValuesMap.get('Correction'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('Reason')) {\r\n      this.serviceRequestForm.get('serviceCategory.correctionReason').setValue(newValuesMap.get('Reason'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('new_balance')) {\r\n      this.serviceRequestForm.get('serviceCategory.newBalance').setValue(newValuesMap.get('new_balance'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('new_ptd')) {\r\n      this.serviceRequestForm.get('serviceCategory.expectedPaidThroughDate').setValue(newValuesMap.get('new_ptd'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('begin_date')) {\r\n      const value = newValuesMap.get('begin_date');\r\n      this.serviceRequestForm.get('serviceCategory.beginDate').setValue(value, { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('end_date')) {\r\n      this.serviceRequestForm.get('serviceCategory.endDate').setValue(newValuesMap.get('end_date'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('group_policy_number')) {\r\n      const value = newValuesMap.get('group_policy_number');\r\n      this.serviceRequestForm.get('serviceCategory.groupPolicyNumber').setValue(value, { emitEvent: false });\r\n    }\r\n\r\n    if ((newValuesMap.has('span_ID') && model.request.subcategory === 'Re-export Effectuation') ||\r\n      (newValuesMap.has('enrollment_span_folder_ID') && model.request.subcategory === 'Change End Date')) {\r\n      const value = newValuesMap.has('span_ID') && model.request.subcategory === 'Re-export Effectuation' ? newValuesMap.get('span_ID') : newValuesMap.get('enrollment_span_folder_ID');\r\n      this.serviceRequestForm.get('serviceCategory.spanFolderId').setValue(value, { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('new_status')) {\r\n      this.serviceRequestForm.get('serviceCategory.expectedStatus').setValue(newValuesMap.get('new_status'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('new_rate')) {\r\n      this.serviceRequestForm.get('serviceCategory.expectedRate').setValue(newValuesMap.get('new_rate'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('new_aptc')) {\r\n      this.serviceRequestForm.get('serviceCategory.expectedAPTC').setValue(newValuesMap.get('new_aptc'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('new_csr')) {\r\n      this.serviceRequestForm.get('serviceCategory.expectedCSR').setValue(newValuesMap.get('new_csr'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('new_premium')) {\r\n      this.serviceRequestForm.get('serviceCategory.expectedPremium').setValue(newValuesMap.get('new_premium'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('issuer_subscriber_ID')) {\r\n      this.serviceRequestForm.get('serviceCategory.expectedIssuerSubscriberId').setValue(newValuesMap.get('issuer_subscriber_ID'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('issuer_member_ID')) {\r\n      this.serviceRequestForm.get('serviceCategory.expectedIssuerMemberId').setValue(newValuesMap.get('issuer_member_ID'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('reason')) {\r\n      this.serviceRequestForm.get('serviceCategory.reason').setValue(newValuesMap.get('reason'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('Incentive Begin Date')) {\r\n      this.serviceRequestForm.get('serviceCategory.discountStartDate').setValue(newValuesMap.get('Incentive Begin Date'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('Incentive End Date')) {\r\n      this.serviceRequestForm.get('serviceCategory.discountEndDate').setValue(newValuesMap.get('Incentive End Date'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('Incentive Savings Type')) {\r\n      this.serviceRequestForm.get('serviceCategory.discountType').setValue(newValuesMap.get('Incentive Savings Type'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('Incentive Savings Rate')) {\r\n      this.serviceRequestForm.get('serviceCategory.discountAmount').setValue(newValuesMap.get('Incentive Savings Rate'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('Approval Status')) {\r\n      this.serviceRequestForm.get('serviceCategory.discountApprovedOrDenied').setValue(newValuesMap.get('Approval Status'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('ContactDueDate')) {\r\n      this.serviceRequestForm.get('serviceCategory.contactDueDate').setValue(newValuesMap.get('ContactDueDate'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('UpdateHandicap')) {\r\n      this.serviceRequestForm.get('serviceCategory.updateHandicap').setValue(newValuesMap.get('UpdateHandicap'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('ExchangeMemberID')) {\r\n      this.serviceRequestForm.get('serviceCategory.exchangeMemberId').setValue(newValuesMap.get('ExchangeMemberID'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('StartDate')) {\r\n      this.serviceRequestForm.get('serviceCategory.handicapStartDate').setValue(newValuesMap.get('StartDate'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('EndDate')) {\r\n      this.serviceRequestForm.get('serviceCategory.handicapEndDate').setValue(newValuesMap.get('EndDate'), { emitEvent: false });\r\n    }\r\n\r\n    if (newValuesMap.has('Invoice Period')) {\r\n      this.serviceRequestForm.get('serviceCategory.billingPeriod').setValue(newValuesMap.get('Invoice Period'), { emitEvent: false });\r\n    }\r\n\r\n    // TODO: Enable this feature later if dedup members need to be populated by the given service request model.\r\n    // Dedup members\r\n    // const dedupMembers = this.formBuilder.array([]);\r\n    // const memberNames = model.request.newValues.filter(v => v.key.startsWith('MemberName')).sort((a, b) => a.key > b.key ? 1 : -1);\r\n    // for (let i = 0; i < memberNames.length; i++) {\r\n    //   if (dedupMembers.length <= i) {\r\n    //     dedupMembers.push(this.formBuilder.group(dedupMemberForm));\r\n    //   }\r\n    //   dedupMembers.controls[i].get('memberName').setValue(memberNames[i].value, { emitEvent: false });\r\n    // }\r\n\r\n    // const memberIds = model.request.newValues.filter(v => v.key.startsWith('MemberId')).sort((a, b) => a.key > b.key ? 1 : -1);\r\n    // for (let i = 0; i < memberIds.length; i++) {\r\n    //   if (dedupMembers.length <= i) {\r\n    //     dedupMembers.push(this.formBuilder.group(dedupMemberForm));\r\n    //   }\r\n    //   dedupMembers.controls[i].get('memberId').setValue(memberIds[i].value, { emitEvent: false });\r\n    // }\r\n\r\n    // const planNames = model.request.newValues.filter(v => v.key.startsWith('PlanName')).sort((a, b) => a.key > b.key ? 1 : -1);\r\n    // for (let i = 0; i < planNames.length; i++) {\r\n    //   if (dedupMembers.length <= i) {\r\n    //     dedupMembers.push(this.formBuilder.group(dedupMemberForm));\r\n    //   }\r\n    //   dedupMembers.controls[i].get('planName').setValue(planNames[i].value, { emitEvent: false });\r\n    // }\r\n\r\n    // const monthlyPremiums = model.request.newValues.filter(v => v.key.startsWith('<onthlyPremium')).sort((a, b) => a.key > b.key ? 1 : -1);\r\n    // for (let i = 0; i < monthlyPremiums.length; i++) {\r\n    //   if (dedupMembers.length <= i) {\r\n    //     dedupMembers.push(this.formBuilder.group(dedupMemberForm));\r\n    //   }\r\n    //   dedupMembers.controls[i].get('monthlyPremium').setValue(monthlyPremiums[i].value, { emitEvent: false });\r\n    // }\r\n\r\n    // const coverageStartDates = model.request.newValues.filter(v => v.key.startsWith('CoverageStartDate')).sort((a, b) => a.key > b.key ? 1 : -1);\r\n    // for (let i = 0; i < coverageStartDates.length; i++) {\r\n    //   if (dedupMembers.length <= i) {\r\n    //     dedupMembers.push(this.formBuilder.group(dedupMemberForm));\r\n    //   }\r\n    //   dedupMembers.controls[i].get('coverageStartDate').setValue(coverageStartDates[i].value, { emitEvent: false });\r\n    // }\r\n\r\n    // for (let i = 0; i < dedupMembers.length; i++) {\r\n    //   (this.serviceRequestForm.get('serviceCategory.dedupMembers') as FormArray).push(dedupMembers.controls[i]);\r\n    // }\r\n\r\n    // populate additional information form\r\n    if (model.request.request) {\r\n      this.serviceRequestForm.get('additionalInformation.comments').setValue(model.request.request, { emitEvent: false });\r\n    }\r\n\r\n    // Update form validation\r\n    this.updateFormValidation();\r\n  }\r\n\r\n  /**\r\n   * The function to check the given field is required field\r\n   * @param key The key\r\n   */\r\n  public isRequiredField(key: string): boolean {\r\n    return hasRequiredField(this.serviceRequestForm.get(key));\r\n  }\r\n\r\n  /**\r\n   * The function to add from array element by the given key.\r\n   * @param key The key\r\n   */\r\n  public addArrayElement(key: string): void {\r\n    switch (key) {\r\n      case 'serviceCategory.dedupMembers': {\r\n        const array = this.serviceRequestForm.get(key) as FormArray;\r\n        array.push(this.formBuilder.group(dedupMemberForm));\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Range validator for number inputs\r\n   * @param min Minimum value (exclusive)\r\n   * @param max Maximum value (inclusive)\r\n   * @returns rangeError if min <= value or value > max error; otherwise, null.\r\n   */\r\n  public numberRangeValidator(min: number, max: number): ValidatorFn {\r\n    return (control: AbstractControl): { [key: string]: any } | null => {\r\n      if (!control.value) {\r\n        return null;\r\n      }\r\n      const value: number = Number(control.value);\r\n      if (value <= min || value > max) {\r\n        return { 'rangeError': {min, max} };\r\n      }\r\n      return null;\r\n    };\r\n  }\r\n}\r\n","/**\r\n * Softheon.API.Lighthouse.Web\r\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\r\n *\r\n * OpenAPI spec version: 1\r\n * \r\n *\r\n * NOTE: This class is auto generated by the swagger code generator program.\r\n * https://github.com/swagger-api/swagger-codegen.git\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\n/**\r\n * The ApprovalProfile.\r\n */\r\nexport interface ApprovalProfile { \r\n    /**\r\n     * The Approver.\r\n     */\r\n    approver?: string;\r\n}\r\n","/**\r\n * Softheon.API.Lighthouse.Web\r\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\r\n *\r\n * OpenAPI spec version: 1\r\n * \r\n *\r\n * NOTE: This class is auto generated by the swagger code generator program.\r\n * https://github.com/swagger-api/swagger-codegen.git\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\n/**\r\n * The ExpediteProfile.\r\n */\r\nexport interface ExpediteProfile { \r\n    /**\r\n     * The ExpediteSource.\r\n     */\r\n    expediteSource?: string;\r\n    /**\r\n     * The ExpediteMethod.\r\n     */\r\n    expediteMethod?: string;\r\n    /**\r\n     * The RequestedBy.\r\n     */\r\n    requestedBy?: string;\r\n    /**\r\n     * The EmailAddress.\r\n     */\r\n    emailAddress?: string;\r\n    /**\r\n     * The Severity.\r\n     */\r\n    severity?: number;\r\n    /**\r\n     * The ReOpenedCase.\r\n     */\r\n    reOpenedCase?: number;\r\n}\r\n","/**\r\n * Softheon.API.Lighthouse.Web\r\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\r\n *\r\n * OpenAPI spec version: 1\r\n * \r\n *\r\n * NOTE: This class is auto generated by the swagger code generator program.\r\n * https://github.com/swagger-api/swagger-codegen.git\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\n/**\r\n * The InformationProfile.\r\n */\r\nexport interface InformationProfile { \r\n    /**\r\n     * The EncounterType.\r\n     */\r\n    encounterType?: string;\r\n    /**\r\n     * The SubscriberID.\r\n     */\r\n    subscriberID?: string;\r\n    /**\r\n     * The MemberID.\r\n     */\r\n    memberID?: string;\r\n    /**\r\n     * The BrokerID.\r\n     */\r\n    brokerID?: string;\r\n    /**\r\n     * The EmployerID.\r\n     */\r\n    employerID?: string;\r\n    /**\r\n     * The LastName.\r\n     */\r\n    lastName?: string;\r\n    /**\r\n     * The FirstName.\r\n     */\r\n    firstName?: string;\r\n    /**\r\n     * The SSN.\r\n     */\r\n    ssn?: string;\r\n    /**\r\n     * The DOB.\r\n     */\r\n    dob?: string;\r\n    /**\r\n     * The GroupID.\r\n     */\r\n    groupID?: string;\r\n    /**\r\n     * The CompanyName.\r\n     */\r\n    companyName?: string;\r\n    /**\r\n     * The TIN.\r\n     */\r\n    tin?: string;\r\n    /**\r\n     * The Address1.\r\n     */\r\n    address1?: string;\r\n    /**\r\n     * The Address2.\r\n     */\r\n    address2?: string;\r\n    /**\r\n     * The City.\r\n     */\r\n    city?: string;\r\n    /**\r\n     * The State.\r\n     */\r\n    state?: string;\r\n    /**\r\n     * The Zip.\r\n     */\r\n    zip?: string;\r\n    /**\r\n     * The IncomingPhone.\r\n     */\r\n    incomingPhone?: string;\r\n    /**\r\n     * The HomePhone.\r\n     */\r\n    homePhone?: string;\r\n    /**\r\n     * The WorkPhone.\r\n     */\r\n    workPhone?: string;\r\n    /**\r\n     * The MobilePhone.\r\n     */\r\n    mobilePhone?: string;\r\n    /**\r\n     * The Fax.\r\n     */\r\n    fax?: string;\r\n    /**\r\n     * The EmailAddress.\r\n     */\r\n    emailAddress?: string;\r\n    /**\r\n     * The CurrentPaidThroughDate.\r\n     */\r\n    currentPaidThroughDate?: string;\r\n    /**\r\n     * The MemberEnrollmentFolderID.\r\n     */\r\n    memberEnrollmentFolderID?: string;\r\n    /**\r\n     * The MemberFolderID.\r\n     */\r\n    memberFolderID?: string;\r\n    /**\r\n     * The ReferenceQualifier.\r\n     */\r\n    referenceQualifier?: string;\r\n    /**\r\n     * The ReferenceID.\r\n     */\r\n    referenceID?: string;\r\n    /**\r\n     * The RemoteFolderID.\r\n     */\r\n    remoteFolderID?: number;\r\n}\r\n","/**\r\n * Softheon.API.Lighthouse.Web\r\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\r\n *\r\n * OpenAPI spec version: 1\r\n * \r\n *\r\n * NOTE: This class is auto generated by the swagger code generator program.\r\n * https://github.com/swagger-api/swagger-codegen.git\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\n/**\r\n * The InternalProfile.\r\n */\r\nexport interface InternalProfile { \r\n    /**\r\n     * The InternalResponse.\r\n     */\r\n    internalResponse?: string;\r\n    /**\r\n     * The ProcessType.\r\n     */\r\n    processType?: number;\r\n}\r\n","/**\r\n * Softheon.API.Lighthouse.Web\r\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\r\n *\r\n * OpenAPI spec version: 1\r\n * \r\n *\r\n * NOTE: This class is auto generated by the swagger code generator program.\r\n * https://github.com/swagger-api/swagger-codegen.git\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nexport interface NewValuesRow { \r\n    key?: string;\r\n    value?: string;\r\n}\r\n","/**\r\n * Softheon.API.Lighthouse.Web\r\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\r\n *\r\n * OpenAPI spec version: 1\r\n * \r\n *\r\n * NOTE: This class is auto generated by the swagger code generator program.\r\n * https://github.com/swagger-api/swagger-codegen.git\r\n * Do not edit the class manually.\r\n */\r\nimport { ApprovalProfile } from './approvalProfile';\r\nimport { ExpediteProfile } from './expediteProfile';\r\nimport { InformationProfile } from './informationProfile';\r\nimport { InternalProfile } from './internalProfile';\r\nimport { RequestProfile } from './requestProfile';\r\n\r\n\r\n/**\r\n * The ServiceRequestModel.\r\n */\r\nexport interface ServiceRequestModel { \r\n    /**\r\n     * The InformationProfile.\r\n     */\r\n    information?: InformationProfile;\r\n    /**\r\n     * The RequestProfile.\r\n     */\r\n    request?: RequestProfile;\r\n    /**\r\n     * The ExpediteProfile.\r\n     */\r\n    expedite?: ExpediteProfile;\r\n    /**\r\n     * The InternalProfile.\r\n     */\r\n    internal?: InternalProfile;\r\n    /**\r\n     * The ApprovalProfile.\r\n     */\r\n    approval?: ApprovalProfile;\r\n    drawerId?: number;\r\n    id?: number;\r\n    name?: string;\r\n    state?: ServiceRequestModel.StateEnum;\r\n}\r\nexport namespace ServiceRequestModel {\r\n    export type StateEnum = 'Undefined' | 'Available' | 'Locked' | 'Suspended' | 'Archived' | 'Deleted' | 'Canceled' | 'Complete' | 'Reviewed' | 'ReviewedSuspended' | 'ReviewedComplete' | 'Rejected' | 'RoutingSlipOpen' | 'ReviewedRoutingSlipOpen';\r\n    export const StateEnum = {\r\n        Undefined: 'Undefined' as StateEnum,\r\n        Available: 'Available' as StateEnum,\r\n        Locked: 'Locked' as StateEnum,\r\n        Suspended: 'Suspended' as StateEnum,\r\n        Archived: 'Archived' as StateEnum,\r\n        Deleted: 'Deleted' as StateEnum,\r\n        Canceled: 'Canceled' as StateEnum,\r\n        Complete: 'Complete' as StateEnum,\r\n        Reviewed: 'Reviewed' as StateEnum,\r\n        ReviewedSuspended: 'ReviewedSuspended' as StateEnum,\r\n        ReviewedComplete: 'ReviewedComplete' as StateEnum,\r\n        Rejected: 'Rejected' as StateEnum,\r\n        RoutingSlipOpen: 'RoutingSlipOpen' as StateEnum,\r\n        ReviewedRoutingSlipOpen: 'ReviewedRoutingSlipOpen' as StateEnum\r\n    };\r\n}\r\n","import { FormGroup } from '@angular/forms';\r\n\r\n/**\r\n * The model for service request form\r\n */\r\nexport interface ServiceRequestForm {\r\n    serviceCategory: FormGroup;\r\n    additionalInformation: FormGroup;\r\n};","/**\r\n * The model for service request\r\n */\r\nexport const serviceRequestModelForm: any = {\r\n    information: {\r\n        address2: '',\r\n        city: '',\r\n        encounterType: '',\r\n        subscriberID: '',\r\n        workPhone: '',\r\n        state: '',\r\n        memberID: '',\r\n        groupID: '',\r\n        incomingPhone: '',\r\n        lastName: '',\r\n        homePhone: '',\r\n        companyName: '',\r\n        address1: '',\r\n        brokerID: '',\r\n        emailAddress: '',\r\n        employerID: '',\r\n        memberFolderID: '',\r\n        memberEnrollmentFolderID: '',\r\n        mobilePhone: '',\r\n        remoteFolderID: 0,\r\n        zip: '',\r\n        ssn: '',\r\n        fax: '',\r\n        firstName: '',\r\n        tin: '',\r\n        dob: '',\r\n        currentPaidThroughDate: ''\r\n    },\r\n    request: {\r\n        subcategory: '',\r\n        request: '',\r\n        priorCase: 0,\r\n        action: '',\r\n        receivedDateTime: new Date(),\r\n        currentValue: '',\r\n        primaryRequest: '',\r\n        optOutOfEmails: 0,\r\n        articleID: '',\r\n        statusCode: 0,\r\n        newValue: '',\r\n        response: '',\r\n        newValues: []\r\n    },\r\n    expedite: {\r\n        emailAddress: '',\r\n        severity: 0,\r\n        requestedBy: '',\r\n        expediteSource: '',\r\n        reOpenedCase: 0,\r\n        expediteMethod: ''\r\n    },\r\n    internal: {\r\n        internalResponse: '',\r\n        processType: 0\r\n    },\r\n    approval: {\r\n        approver: ''\r\n    },\r\n    drawerId: 0,\r\n    id: 0,\r\n    name: '',\r\n    state: 'Undefined'\r\n};\r\n","/** Models public api */\r\nexport * from './approvalProfile';\r\nexport * from './expediteProfile';\r\nexport * from './informationProfile';\r\nexport * from './internalProfile';\r\nexport * from './newValuesRow';\r\nexport * from './requestProfile';\r\nexport * from './serviceRequestModel';\r\nexport * from './forms/additional-information-form';\r\nexport * from './forms/service-category-form';\r\nexport * from './forms/service-request-form';\r\nexport * from './forms/service-request-model-form';\r\n","import { Injectable } from '@angular/core';\r\nimport { FormGroup, FormArray } from '@angular/forms';\r\nimport { DatePipe } from '@angular/common';\r\n\r\nimport { ServiceRequestModel, serviceRequestModelForm, NewValuesRow } from '../../models/models-api';\r\n\r\n/** The service request service */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ServiceRequestService {\r\n  /** The service request model */\r\n  public serviceRequest: ServiceRequestModel;\r\n\r\n  /**\r\n   * The constructor\r\n   * @param datePipe The date pipe\r\n   */\r\n  constructor(\r\n    private datePipe: DatePipe\r\n  ) {\r\n    this.serviceRequest = serviceRequestModelForm;\r\n  }\r\n\r\n  /**\r\n   * The function to update current service request model.\r\n   * @param serviceRequestForm The form group for service request\r\n   */\r\n  public updateServiceRequest(serviceRequestForm: FormGroup, additionalFieldsFormControls: Array<string>): void {\r\n    const issue = serviceRequestForm.get('serviceCategory.issue').value;\r\n    const severity = serviceRequestForm.get('serviceCategory.severity').value;\r\n    const category = serviceRequestForm.get('serviceCategory.category').value;\r\n    const action = serviceRequestForm.get('serviceCategory.action').value;\r\n\r\n    this.serviceRequest.request.primaryRequest = issue;\r\n    this.serviceRequest.expedite.severity = severity;\r\n    this.serviceRequest.request.subcategory = category;\r\n    this.serviceRequest.request.action = action;\r\n\r\n    // Clear previously updated values\r\n    this.serviceRequest.request.newValues = [];\r\n\r\n    // Service category section\r\n    switch (issue) {\r\n      case 'Communications': {\r\n        switch (category) {\r\n          case 'Generate Notice': {\r\n            const noticeType = serviceRequestForm.get('serviceCategory.noticeType').value;\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'NoticeType', value: serviceRequestForm.get('serviceCategory.noticeType').value } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'ContactDueDate', value: this.getFormattedDate(serviceRequestForm.get('serviceCategory.contactDueDate').value) } as NewValuesRow);\r\n\r\n            switch (noticeType) {\r\n              case 'Duplicate Coverage Subsidies Ending': {\r\n                const dedupMembers = (serviceRequestForm.get('serviceCategory.dedupMembers') as FormArray).controls;\r\n                for (let i = 0; i < dedupMembers.length; i++) {\r\n                  const dedupMember = dedupMembers[i] as FormGroup;\r\n\r\n                  this.serviceRequest.request.newValues\r\n                    .push({ key: `MemberName${i + 1}`, value: dedupMember.get('memberName').value } as NewValuesRow);\r\n                  this.serviceRequest.request.newValues\r\n                    .push({ key: `MemberId${i + 1}`, value: dedupMember.get('memberId').value } as NewValuesRow);\r\n                  this.serviceRequest.request.newValues\r\n                    .push({ key: `PlanName${i + 1}`, value: dedupMember.get('planName').value } as NewValuesRow);\r\n                  this.serviceRequest.request.newValues\r\n                    .push({ key: `MonthlyPremium${i + 1}`, value: dedupMember.get('monthlyPremium').value } as NewValuesRow);\r\n                  this.serviceRequest.request.newValues\r\n                    .push({ key: `CoverageStartDate${i + 1}`, value: this.getFormattedDate(dedupMember.get('coverageStartDate').value) } as NewValuesRow);\r\n                }\r\n                break;\r\n              }\r\n            }\r\n            break;\r\n          }\r\n          case 'Regenerate Notice': {\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'notice_type', value: serviceRequestForm.get('serviceCategory.noticeType').value } as NewValuesRow);\r\n            break;\r\n          }\r\n          case 'Invoice Correction': {\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'invoice_period', value: serviceRequestForm.get('serviceCategory.invoicePeriod').value } as NewValuesRow);\r\n            break;\r\n          }\r\n          case '1095A Correction': {\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'year', value: serviceRequestForm.get('serviceCategory.taxYear').value } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'Correction', value: serviceRequestForm.get('serviceCategory.correctionType').value } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'Reason', value: serviceRequestForm.get('serviceCategory.correctionReason').value } as NewValuesRow);\r\n            break;\r\n          }\r\n          case 'Generate New Invoice': {\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'Invoice Period', value: serviceRequestForm.get('serviceCategory.billingPeriod').value } as NewValuesRow);\r\n            break;\r\n          }\r\n        }\r\n        break;\r\n      }\r\n      case 'Payments': {\r\n        switch (category) {\r\n          case 'Incorrect Balance Due': {\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'new_balance', value: serviceRequestForm.get('serviceCategory.newBalance').value } as NewValuesRow);\r\n            break;\r\n          }\r\n          case 'Incorrect Paid Through Date': {\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'new_ptd', value: serviceRequestForm.get('serviceCategory.expectedPaidThroughDate').value } as NewValuesRow);\r\n            break;\r\n          }\r\n          case 'Refund Investigation': {\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'Original Refund Service Request Number', value: serviceRequestForm.get('serviceCategory.refundServiceRequestNumber').value } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'Refund Service Request Date of Creation', value: this.datePipe.transform(serviceRequestForm.get('serviceCategory.refundCreationDate').value) } as NewValuesRow);\r\n            const refundStatus = serviceRequestForm.get('serviceCategory.refundStatus').value;\r\n            let serviceRequestStatus = 'Canceled';\r\n            if (refundStatus === 'refundPending') {\r\n              serviceRequestStatus = 'Open';\r\n            } else if (refundStatus === 'refundInProgress') {\r\n              serviceRequestStatus = 'In Progress';\r\n            } else if (refundStatus === 'refundIssued') {\r\n              serviceRequestStatus = 'Closed';\r\n            }\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'Refund Service Request Status', value: serviceRequestStatus } as NewValuesRow);\r\n            break;\r\n          }\r\n        }\r\n        break;\r\n      }\r\n      case 'Enrollment': {\r\n        switch (category) {\r\n          case 'Re-export Effectuation': {\r\n            this.serviceRequest.request.newValues\r\n              .push({\r\n                key: 'group_policy_number', value: serviceRequestForm.get('serviceCategory.groupPolicyNumber').value\r\n              } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'span_ID', value: serviceRequestForm.get('serviceCategory.spanFolderId').value } as NewValuesRow);\r\n            break;\r\n          }\r\n          case 'Incorrect Status': {\r\n            this.serviceRequest.request.newValues\r\n              .push({\r\n                key: 'group_policy_number', value: serviceRequestForm.get('serviceCategory.groupPolicyNumber').value\r\n              } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'new_status', value: serviceRequestForm.get('serviceCategory.expectedStatus').value } as NewValuesRow);\r\n            break;\r\n          }\r\n          case 'Incorrect Rate': {\r\n            this.serviceRequest.request.newValues\r\n              .push({\r\n                key: 'group_policy_number', value: serviceRequestForm.get('serviceCategory.groupPolicyNumber').value\r\n              } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'new_rate', value: serviceRequestForm.get('serviceCategory.expectedRate').value } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'new_aptc', value: serviceRequestForm.get('serviceCategory.expectedAPTC').value } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'new_csr', value: serviceRequestForm.get('serviceCategory.expectedCSR').value } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'new_premium', value: serviceRequestForm.get('serviceCategory.expectedPremium').value } as NewValuesRow);\r\n            break;\r\n          }\r\n          case 'Change Issuer ID': {\r\n            this.serviceRequest.request.newValues\r\n              .push({\r\n                key: 'issuer_subscriber_ID', value: serviceRequestForm.get('serviceCategory.expectedIssuerSubscriberId').value\r\n              } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({\r\n                key: 'issuer_member_ID', value: serviceRequestForm.get('serviceCategory.expectedIssuerMemberId').value\r\n              } as NewValuesRow);\r\n            break;\r\n          }\r\n          case 'Change End Date': {\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'reason', value: serviceRequestForm.get('serviceCategory.reason').value } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({\r\n                key: 'group_policy_number', value: serviceRequestForm.get('serviceCategory.groupPolicyNumber').value\r\n              } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({\r\n                key: 'enrollment_span_folder_ID', value: serviceRequestForm.get('serviceCategory.spanFolderId').value\r\n              } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'begin_date', value: serviceRequestForm.get('serviceCategory.beginDate').value } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'end_date', value: serviceRequestForm.get('serviceCategory.endDate').value } as NewValuesRow);\r\n            break;\r\n          }\r\n          case 'Missing Policy': {\r\n            this.serviceRequest.request.newValues\r\n              .push({\r\n                key: 'group_policy_number', value: serviceRequestForm.get('serviceCategory.groupPolicyNumber').value\r\n              } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'begin_date', value: serviceRequestForm.get('serviceCategory.beginDate').value } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({ key: 'end_date', value: serviceRequestForm.get('serviceCategory.endDate').value } as NewValuesRow);\r\n            break;\r\n          }\r\n          case 'Hardship Waiver': {\r\n            const approvedOrDenied = serviceRequestForm.get('serviceCategory.discountApprovedOrDenied').value;\r\n            this.serviceRequest.request.newValues.push({ key: 'Approval Status', value: approvedOrDenied } as NewValuesRow);\r\n            if (approvedOrDenied === 'Approved') {\r\n              this.serviceRequest.request.newValues\r\n                .push({\r\n                  key: 'Incentive Begin Date', value: this.getFormattedDate(new Date(serviceRequestForm.get('serviceCategory.discountStartDate').value))\r\n                } as NewValuesRow);\r\n              this.serviceRequest.request.newValues\r\n                .push({\r\n                  key: 'Incentive End Date', value: this.getFormattedDate(new Date(serviceRequestForm.get('serviceCategory.discountEndDate').value))\r\n                } as NewValuesRow);\r\n              this.serviceRequest.request.newValues\r\n                .push({\r\n                  key: 'Incentive Savings Type', value: serviceRequestForm.get('serviceCategory.discountType').value\r\n                } as NewValuesRow);\r\n              this.serviceRequest.request.newValues\r\n                .push({\r\n                  key: 'Incentive Savings Rate', value: serviceRequestForm.get('serviceCategory.discountAmount').value\r\n                } as NewValuesRow);\r\n              this.serviceRequest.request.newValues\r\n                .push({\r\n                  key: 'Incentive Program Name', value: 'Premium Waiver Discount'\r\n                } as NewValuesRow);\r\n            }\r\n            break;\r\n          }\r\n          case 'Convert Enrollment Source': {\r\n            this.serviceRequest.request.newValues.push({\r\n              key: 'NewSource', value: 'Non HIX'\r\n            } as NewValuesRow);\r\n            break;\r\n          }\r\n          case 'Update Handicap': {\r\n            this.serviceRequest.request.newValues\r\n              .push({\r\n                key: 'UpdateHandicap', value: serviceRequestForm.get('serviceCategory.updateHandicap').value\r\n              } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({\r\n                key: 'ExchangeMemberID', value: serviceRequestForm.get('serviceCategory.exchangeMemberId').value\r\n              } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({\r\n                key: 'StartDate', value: this.getFormattedDate(new Date(serviceRequestForm.get('serviceCategory.handicapStartDate').value))\r\n              } as NewValuesRow);\r\n            this.serviceRequest.request.newValues\r\n              .push({\r\n                key: 'EndDate', value: this.getFormattedDate(new Date(serviceRequestForm.get('serviceCategory.handicapEndDate').value))\r\n              } as NewValuesRow);\r\n            break;\r\n          }\r\n        }\r\n        break;\r\n      }\r\n    }\r\n    \r\n    // mapping additional fields form values to request model\r\n    additionalFieldsFormControls.forEach((formControl) => {\r\n      if (serviceRequestForm.get('serviceCategory.' + formControl).value) {\r\n        this.serviceRequest.request.newValues\r\n          .push({ key: formControl, value: serviceRequestForm.get('serviceCategory.' + formControl).value } as NewValuesRow);\r\n      }\r\n    });\r\n    // Additional information section\r\n    this.serviceRequest.request.request = serviceRequestForm.get('additionalInformation.comments').value;\r\n  }\r\n\r\n  /**\r\n   * The function to retrieve the formatted date\r\n   * @param date The date\r\n   */\r\n  private getFormattedDate(date: Date): string {\r\n    let year = date.getFullYear();\r\n    let month = (1 + date.getMonth()).toString().padStart(2, '0');\r\n    let day = date.getDate().toString().padStart(2, '0');\r\n\r\n    return month + '/' + day + '/' + year;\r\n  }\r\n}\r\n","/** Services public api */\r\nexport * from './entity/abstract-entity.service';\r\nexport * from './entity/service-request-entity.service';\r\nexport * from './attachment/attachment.service';\r\nexport * from './form/form.service';\r\nexport * from './service-request/service-request.service';\r\n","/**\r\n * Constants\r\n */\r\nexport const Constants = {\r\n    'validationKeys': {\r\n        'required': 'required',\r\n        'minLength': 'minlength',\r\n        'maxLength': 'maxlength',\r\n        'pattern': 'pattern',\r\n        'maskError': 'Mask error',\r\n        'email': 'email'\r\n    }\r\n}","/** The local default english verbiage */\r\nexport const defaultEnglishVerbiage = {\r\n    additionalInfoCommentsLabel: 'Comments',\r\n    commonButtonChooseFile: 'Choose File',\r\n    commonButtonNext: 'Next',\r\n    commonButtonPrev: 'Back',\r\n    commonButtonSubmitRequest: 'Submit Request',\r\n    commonSnackBarCheckRequiredField: 'Please check if there is any required field you missed.',\r\n    commonSnackBarClose: 'Close',\r\n    fileUploaderDragFileHere: 'Drag Files Here',\r\n    fileUploaderSnackbarFileSizeOver: 'Max file size limit is {{maxFileSize}} MB.',\r\n    fileUploaderSnackbarInvalidType: 'The file type for {{fileName}} is not supported.',\r\n    fileUploaderSnackbarQueueLimitOver: 'Queue limit is {{queueLimit}}.',\r\n    fileUploaderTableColumnAction: 'Action',\r\n    fileUploaderTableColumnName: 'Name',\r\n    fileUploaderTableColumnSize: 'Size',\r\n    fileUploaderWarningFileSizeOver: 'File size limit is over',\r\n    fileUploaderWarningQueueLimitOver: 'Queue limit is over',\r\n    serviceCategoryBeginDateLabel: 'Begin Date',\r\n    serviceCategoryCarrierNameLabel: 'Carrier Name',\r\n    serviceCategoryCarrierNamePlaceholder: 'Enter Carrier Name',\r\n    serviceCategoryCategoryLabel: 'Category',\r\n    serviceCategoryCategoryPlaceholder: 'Select Category',\r\n    serviceCategoryContactDueDateLabel: 'Contact Due Date',\r\n    serviceCategoryCorrectionReasonLabel: 'Correction Reason(s):',\r\n    serviceCategoryCorrectionTypeLabel: 'Correction Type:',\r\n    serviceCategoryCoverageEndDateLabel: 'Coverage End Date',\r\n    serviceCategoryCoverageStartDateLabel: 'Coverage Start Date',\r\n    serviceCategoryCurrentBillingPeriodInformation: 'An updated invoice will be created for the most recent billing period.',\r\n    serviceCategoryDateLabel: 'Date',\r\n    serviceCategoryDedupMemberAdd: 'Add Member',\r\n    serviceCategoryDedupMemberDelete: 'Delete Member',\r\n    serviceCategoryDiscountAmountError: 'Must be more than {{min}} and less than or equal to {{max}}.',\r\n    serviceCategoryDiscountAmountLabel: 'Discount Amount',\r\n    serviceCategoryDiscountAmountPlaceholder: 'Enter Discount Amount',\r\n    serviceCategoryDiscountApprovedOrDeniedLabel: 'Discount Approved or Denied',\r\n    serviceCategoryDiscountApprovedOrDeniedPlaceholder: 'Select Discount Approval Status',\r\n    serviceCategoryDiscountEndDateLabel: 'Discount End Date',\r\n    serviceCategoryDiscountStartDateLabel: 'Discount Start Date',\r\n    serviceCategoryDiscountTypeLabel: 'Discount Type',\r\n    serviceCategoryDiscountTypePlaceholder: 'Select Discount Type',\r\n    serviceCategoryDiscountAmountTypeLabel: 'Discount Amount Type',\r\n    serviceCategoryDiscountAmountTypePlaceholder: 'Select Discount Amount Type',\r\n    serviceCategoryDisplayedCategoriesAssistance: 'Other',\r\n    serviceCategoryDisplayedCategoriesCommunications: 'Generate Notice,Regenerate Notice,Invoice Correction,1095A Correction,Generate New Invoice',\r\n    serviceCategoryDisplayedCategoriesEnrollment: 'Re-export Effectuation,Incorrect Status,Incorrect Rate,Change Issuer ID,Change End Date,Missing Policy,Retro Enrollment,Retro Termination,Forward Enrollment,Hardship Waiver,Convert to Non-Hix Dental,Update Handicap',\r\n    serviceCategoryDisplayedCategoriesPayments: 'Incorrect Balance Due,Incorrect Paid Through Date,Bank Discrepancy,Missing Payment,Refund Investigation',\r\n    serviceCategoryDisplayedCorrectionReason: 'Part I - Recipient Information,Part II - Covered Individuals,Part III - Coverage Information',\r\n    serviceCategoryDisplayedCorrectionType: 'Void,Corrected',\r\n    serviceCategoryDisplayedDiscountApprovedOrDenied: 'Approved,Denied',\r\n    serviceCategoryDisplayedDiscountType: 'Flat,Percentage',\r\n    serviceCategoryDisplayedDiscountAmountType: 'Health Coverage Monthly Premium,Other',\r\n    serviceCategoryDisplayedGeneratedNoticeType: 'Duplicate Coverage Subsidies Ending',\r\n    serviceCategoryDisplayedIssues: 'Assistance,Communications,Payments,Enrollment',\r\n    serviceCategoryDisplayedReason: 'Death,Declined Coverage,Non-Payment,Plan Change,Termination of Benefits,Voluntary Withdrawal,Other',\r\n    serviceCategoryDisplayedRegeneratedNoticeType: 'Invoice,Cancellation Notice,Termination Notice,Late Payment Notice',\r\n    serviceCategoryDisplayedSeverities: 'Low,Medium,High,HICS - Level 1,HICS - Level 2',\r\n    serviceCategoryDisplayedUpdateHandicap: 'Add Handicap Indicator,Update Handicap Indicator',\r\n    serviceCategoryEndDateLabel: 'End Date',\r\n    serviceCategoryExchangeMemberIdLabel: 'Exchange Member Id',\r\n    serviceCategoryExchangeMemberIdPlaceholder: 'Enter Exchange Member Id',\r\n    serviceCategoryExpectedAPTCLabel: 'Expected APTC',\r\n    serviceCategoryExpectedAPTCPlaceholder: 'Enter Expected APTC',\r\n    serviceCategoryExpectedBalanceLabel: 'Expected Balance',\r\n    serviceCategoryExpectedCSRLabel: 'Expected CSR',\r\n    serviceCategoryExpectedCSRPlaceholder: 'Enter Expected CSR',\r\n    serviceCategoryExpectedIssuerMemberIdLabel: 'Expected Issuer Member Id',\r\n    serviceCategoryExpectedIssuerMemberIdPlaceholder: 'Enter Expected Issuer Member Id',\r\n    serviceCategoryExpectedIssuerSubscriberIdLabel: 'Expected Issuer Subscriber Id',\r\n    serviceCategoryExpectedIssuerSubscriberIdPlaceholder: 'Enter Expected Issuer Subscriber Id',\r\n    serviceCategoryExpectedPaidThroughDateLabel: 'Expected Paid Through Date',\r\n    serviceCategoryExpectedPremiumLabel: 'Expected Premium',\r\n    serviceCategoryExpectedPremiumPlaceholder: 'Enter Expected Premium',\r\n    serviceCategoryExpectedRateLabel: 'Expected Rate',\r\n    serviceCategoryExpectedRatePlaceholder: 'Enter Expected Rate',\r\n    serviceCategoryExpectedStatusLabel: 'Expected Status',\r\n    serviceCategoryExpectedStatusPlaceholder: 'Enter Expected Status',\r\n    serviceCategoryGroupPolicyLabel: 'Group/Policy Number',\r\n    serviceCategoryGroupPolicyNumberPlaceholder: 'Enter Group or Policy Number',\r\n    serviceCategoryIncorrectBalanceDuePlaceholder: 'Enter Expected Balance',\r\n    serviceCategoryInvoicePeriodLabel: 'Invoice Period:',\r\n    serviceCategoryInvoicePeriodPlaceholder: 'Invoice Period',\r\n    serviceCategoryIssueLabel: 'Issue',\r\n    serviceCategoryIssuePlaceholder: 'Select Issue',\r\n    serviceCategoryMemberIdLabel: 'Member Id',\r\n    serviceCategoryMemberIdPlaceholder: 'Enter Member Id',\r\n    serviceCategoryMemberNameLabel: 'Member Name',\r\n    serviceCategoryMemberNamePlaceholder: 'Enter Member Name',\r\n    serviceCategoryMonthlyPremiumLabel: 'Monthly Premium',\r\n    serviceCategoryMonthlyPremiumPlaceholder: 'Enter Monthly Premium',\r\n    serviceCategoryNoticeTypeLabel: 'Notice Type',\r\n    serviceCategoryNoticeTypePlaceholder: 'Select Notice Type',\r\n    serviceCategoryOriginalRefundServiceRequestNumberLabel: 'Original Refund Service Request Number',\r\n    serviceCategoryPlanNameLabel: 'Plan Name',\r\n    serviceCategoryPlanNamePlaceholder: 'Enter Plan Name',\r\n    serviceCategoryProofDueDateLabel: 'Proof Due Date',\r\n    serviceCategoryReasonLabel: 'Reason',\r\n    serviceCategoryReasonPlaceholder: 'Select Reason',\r\n    serviceCategoryRefundCanceledOption: \"Refund Canceled\",\r\n    serviceCategoryRefundInProgressOption: \"Refund In Progress\",\r\n    serviceCategoryRefundIssuedOption: \"Refund Issued\",\r\n    serviceCategoryRefundPendingOption: \"Refund Pending\",\r\n    serviceCategoryRefundRequestCreationDate: \"Refund Service Request Date of Creation\",\r\n    serviceCategoryRefundServiceRequestDateOfCreationDateLabel: 'Refund Service Request Date of Creation',\r\n    serviceCategoryRefundServiceRequestStatus: 'Refund Service Request Status',\r\n    serviceCategoryRefundStatusLabel: \"Refund Status\",\r\n    serviceCategoryRefundStatusPlaceholder: \"Select Refund Service Request Status\",\r\n    serviceCategorySeverityLabel: 'Severity',\r\n    serviceCategorySeverityPlaceholder: 'Select Level of Severity',\r\n    serviceCategorySpanFolderIdLabel: 'Span Folder Id',\r\n    serviceCategorySpanFolderIdPlaceholder: 'Enter Span Folder Id',\r\n    serviceCategoryStartDateLabel: 'Start Date',\r\n    serviceCategoryTaxYearPlaceholder: 'Tax Year',\r\n    serviceCategoryUpdateHandicapLabel: 'Update Handicap',\r\n    serviceCategoryUpdateHandicapPlaceholder: 'Select Update Handicap',\r\n    serviceRequestSnackbarCreateAttachmentFailure: 'Submit the additional attachment fails. Please reach out to our customer service team via Lighthouse portal.',\r\n    serviceRequestSnackbarCreateEntityFailure: 'Submit to create the service request fails. Please reach out to our customer service team via Lighthouse portal.'\r\n};\r\n","/** The local default spanish verbiage */\r\nexport const defaultSpanishVerbiage = {\r\n    additionalInfoCommentsLabel: 'Comentarios',\r\n    commonButtonChooseFile: 'Elija el archivo',\r\n    commonButtonNext: 'Próxima',\r\n    commonButtonPrev: 'atrás',\r\n    commonButtonSubmitRequest: 'Enviar peticion',\r\n    commonSnackBarCheckRequiredField: 'Compruebe si hay algún campo obligatorio que se haya perdido.',\r\n    commonSnackBarClose: 'Cerca',\r\n    fileUploaderDragFileHere: 'Arrastre los archivos aquí',\r\n    fileUploaderSnackbarFileSizeOver: 'El límite máximo de tamaño de archivo es {{maxFileSize}} MB.',\r\n    fileUploaderSnackbarInvalidType: 'El tipo de archivo para {{fileName}} no es apoyado.',\r\n    fileUploaderSnackbarQueueLimitOver: 'El límite de la cola es {{queueLimit}}.',\r\n    fileUploaderTableColumnAction: 'Acción',\r\n    fileUploaderTableColumnName: 'Nombre',\r\n    fileUploaderTableColumnSize: 'tamaño',\r\n    fileUploaderWarningFileSizeOver: 'El límite de tamaño de archivo ha terminado',\r\n    fileUploaderWarningQueueLimitOver: 'El límite de la cola ha terminado',\r\n    serviceCategoryBeginDateLabel: 'Fecha de inicio',\r\n    serviceCategoryCarrierNameLabel: 'Nombre de la compañía',\r\n    serviceCategoryCarrierNamePlaceholder: 'Ingrese el nombre del operador',\r\n    serviceCategoryCategoryLabel: 'Categoría',\r\n    serviceCategoryCategoryPlaceholder: 'selecciona una categoría',\r\n    serviceCategoryContactDueDateLabel: 'Fecha de vencimiento del contacto',\r\n    serviceCategoryCorrectionReasonLabel: 'Motivo (s) de corrección',\r\n    serviceCategoryCorrectionTypeLabel: 'Tipo de corrección',\r\n    serviceCategoryCoverageEndDateLabel: 'Fecha de finalización de la cobertura',\r\n    serviceCategoryCoverageStartDateLabel: 'Fecha de inicio de cobertura',\r\n    serviceCategoryCurrentBillingPeriodInformation: 'Se creará una factura actualizada para el período de facturación más reciente.',\r\n    serviceCategoryDateLabel: 'Fecha',\r\n    serviceCategoryDedupMemberAdd: 'Añadir miembro',\r\n    serviceCategoryDedupMemberDelete: 'Eliminar miembro',\r\n    serviceCategoryDiscountAmountError: 'Debe ser mas de {{min}} y menos de o igual a {{max}}.',\r\n    serviceCategoryDiscountAmountLabel: 'Importe de descuento',\r\n    serviceCategoryDiscountAmountPlaceholder: 'Ingrese el monto del descuento',\r\n    serviceCategoryDiscountApprovedOrDeniedLabel: 'Descuento aprobado o denegado',\r\n    serviceCategoryDiscountApprovedOrDeniedPlaceholder: 'Seleccionar estado de aprobación de descuento',\r\n    serviceCategoryDiscountEndDateLabel: 'Fecha de finalización del descuento',\r\n    serviceCategoryDiscountStartDateLabel: 'Fecha de inicio de descuento',\r\n    serviceCategoryDiscountTypeLabel: 'Tipo de descuento',\r\n    serviceCategoryDiscountTypePlaceholder: 'Seleccionar tipo de descuento',\r\n    serviceCategoryDiscountAmountTypeLabel: 'Tipo de modo de descuento',\r\n    serviceCategoryDiscountAmountTypePlaceholder: 'Seleccionar tipo de modo de descuento',\r\n    serviceCategoryDisplayedCategoriesAssistance: 'Otra',\r\n    serviceCategoryDisplayedCategoriesCommunications: 'Generar aviso,Aviso de regeneración,corrección de facturas,corrección 1095A,Generar nueva factura',\r\n    serviceCategoryDisplayedCategoriesEnrollment: 'Reexportación,Estado incorrecto,Tasa incorrecta,Cambiar ID del emisor,Fecha de finalización del cambio,Política faltante,Inscripción retro,Terminación retro,Inscripción directa,Descuento de exención de prima,Convertir a Dental no Hix,Actualizar discapacidad',\r\n    serviceCategoryDisplayedCategoriesPayments: 'Saldo vencido incorrecto,fecha de pago incorrecta,discrepancia bancaria,falta de pago,Investigacion de Reembolso',\r\n    serviceCategoryDisplayedCorrectionReason: 'Parte I - Información del destinatario,Parte II - Individuos cubiertos,Parte III - Información de cobertura',\r\n    serviceCategoryDisplayedCorrectionType: 'Vacío,corregido',\r\n    serviceCategoryDisplayedDiscountApprovedOrDenied: 'Aprobado,denegado',\r\n    serviceCategoryDisplayedDiscountType: 'Plano,porcentaje',\r\n    serviceCategoryDisplayedDiscountAmountType: 'Prima mensual de cobertuera,Otro',\r\n    serviceCategoryDisplayedGeneratedNoticeType: 'Fin de subsidios de cobertura duplicados, prueba de residencia del transportista',\r\n    serviceCategoryDisplayedIssues: 'Asistencia,Comunicaciones,Pagos,Inscripción',\r\n    serviceCategoryDisplayedReason: 'Fallecimiento,cobertura rechazada,falta de pago,cambio de plan,terminación de beneficios,retiro voluntario,otros',\r\n    serviceCategoryDisplayedRegeneratedNoticeType: 'Factura,aviso de cancelación,aviso de terminación,aviso de retraso en el pago',\r\n    serviceCategoryDisplayedSeverities: 'Bajo,Medio,Alto,HICS - Nivel 1,HICS - Nivel 2',\r\n    serviceCategoryDisplayedUpdateHandicap: 'Agregar indicador de discapacidad,Actualizar indicador de discapacidad',\r\n    serviceCategoryEndDateLabel: 'Fecha final',\r\n    serviceCategoryExchangeMemberIdLabel: 'ID de miembro de intercambio',\r\n    serviceCategoryExchangeMemberIdPlaceholder: 'Ingrese el ID de miembro de Exchange',\r\n    serviceCategoryExpectedAPTCLabel: 'APTC esperado',\r\n    serviceCategoryExpectedAPTCPlaceholder: 'Ingrese el APTC esperado',\r\n    serviceCategoryExpectedBalanceLabel: 'Balance esperado',\r\n    serviceCategoryExpectedCSRLabel: 'RSE esperada',\r\n    serviceCategoryExpectedCSRPlaceholder: 'Ingrese la CSR esperada',\r\n    serviceCategoryExpectedIssuerMemberIdLabel: 'ID de miembro del emisor esperado',\r\n    serviceCategoryExpectedIssuerMemberIdPlaceholder: 'Ingrese el ID de miembro del emisor esperado',\r\n    serviceCategoryExpectedIssuerSubscriberIdLabel: 'ID del suscriptor del emisor esperado',\r\n    serviceCategoryExpectedIssuerSubscriberIdPlaceholder: 'Ingrese la ID del suscriptor del emisor esperado',\r\n    serviceCategoryExpectedPaidThroughDateLabel: 'Fecha de pago prevista',\r\n    serviceCategoryExpectedPremiumLabel: 'Prima esperada',\r\n    serviceCategoryExpectedPremiumPlaceholder: 'Ingrese la prima esperada',\r\n    serviceCategoryExpectedRateLabel: 'Tasa esperada',\r\n    serviceCategoryExpectedRatePlaceholder: 'Ingrese la tasa esperada',\r\n    serviceCategoryExpectedStatusLabel: 'Estado esperado',\r\n    serviceCategoryExpectedStatusPlaceholder: 'Ingrese el estado esperado',\r\n    serviceCategoryGroupPolicyLabel: 'Número de grupo/política',\r\n    serviceCategoryGroupPolicyNumberPlaceholder: 'Ingrese el número de grupo o política',\r\n    serviceCategoryIncorrectBalanceDuePlaceholder: 'Ingrese el saldo esperado',\r\n    serviceCategoryInvoicePeriodLabel: 'Periodo de factura:',\r\n    serviceCategoryInvoicePeriodPlaceholder: 'Periodo de factura',\r\n    serviceCategoryIssueLabel: 'Problema',\r\n    serviceCategoryIssuePlaceholder: 'Seleccionar problema',\r\n    serviceCategoryMemberIdLabel: 'Identificación de miembro',\r\n    serviceCategoryMemberIdPlaceholder: 'Ingrese ID de miembro',\r\n    serviceCategoryMemberNameLabel: 'Nombre de miembro',\r\n    serviceCategoryMemberNamePlaceholder: 'Ingrese el nombre del miembro',\r\n    serviceCategoryMonthlyPremiumLabel: 'Prima mensual',\r\n    serviceCategoryMonthlyPremiumPlaceholder: 'Ingresar prima mensual',\r\n    serviceCategoryNoticeTypeLabel: 'Tipo de aviso',\r\n    serviceCategoryNoticeTypePlaceholder: 'Seleccionar tipo de aviso',\r\n    serviceCategoryOriginalRefundServiceRequestNumberLabel: 'Numero Original De Solicitud de Reembolso',\r\n    serviceCategoryPlanNameLabel: 'Nombre del plan',\r\n    serviceCategoryPlanNamePlaceholder: 'Ingrese el nombre del plan',\r\n    serviceCategoryProofDueDateLabel: 'Fecha de vencimiento de prueba',\r\n    serviceCategoryReasonLabel: 'Razón',\r\n    serviceCategoryReasonPlaceholder: 'Seleccionar motivo',\r\n    serviceCategoryRefundCanceledOption: \"Reembolso cancelado\",\r\n    serviceCategoryRefundInProgressOption: \"Reembolso en Proceso\",\r\n    serviceCategoryRefundIssuedOption: \"Reembolso Emitido\",\r\n    serviceCategoryRefundPendingOption: \"Reembolso Pendiente\",\r\n    serviceCategoryRefundRequestCreationDate: \"Fecha de Creacion de la Solicitud de Reembolso\",\r\n    serviceCategoryRefundServiceRequestDateOfCreationDateLabel: \"Fecha de Creacion de la Solicitud de Reembolso\",\r\n    serviceCategoryRefundServiceRequestStatus: \"Estatus de Solicitud de Reembolso\",\r\n    serviceCategoryRefundStatusLabel: \"Estatus de Reembolso\",\r\n    serviceCategoryRefundStatusPlaceholder: \"Seleccione el Estatus de solicitud de Reembolso\",\r\n    serviceCategorySeverityLabel: 'Gravedad',\r\n    serviceCategorySeverityPlaceholder: 'Seleccionar nivel de gravedad',\r\n    serviceCategorySpanFolderIdLabel: 'ID de carpeta de Span',\r\n    serviceCategorySpanFolderIdPlaceholder: 'Ingrese la ID de la carpeta Span',\r\n    serviceCategoryStartDateLabel: 'Fecha de inicio',\r\n    serviceCategoryTaxYearPlaceholder: 'Año fiscal',\r\n    serviceCategoryUpdateHandicapLabel: 'Actualizar discapacidad',\r\n    serviceCategoryUpdateHandicapPlaceholder: 'Seleccione Actualizar Hándicap',\r\n    serviceRequestSnackbarCreateAttachmentFailure: 'Enviar el archivo adjunto adicional falla. Comuníquese con nuestro equipo de servicio al cliente a través del portal Lighthouse.',\r\n    serviceRequestSnackbarCreateEntityFailure: 'Enviar para crear la solicitud de servicio falla. Comuníquese con nuestro equipo de servicio al cliente a través del portal Lighthouse.'\r\n};\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\nimport { defaultEnglishVerbiage } from \"../../service-request/languages/en\";\r\nimport { defaultSpanishVerbiage } from \"../../service-request/languages/es\";\r\nimport { StorageKeys } from \"../constants/storage-keys\";\r\n\r\n@Pipe({\r\n  name: \"localTranslate\",\r\n  standalone: false,\r\n})\r\nexport class LocalTranslatePipe implements PipeTransform {\r\n  /**\r\n   * Translates the value using local values\r\n   * @param value Value to translate locally\r\n   * @param args Arguments to translate\r\n   */\r\n  public transform(value: any, args?: any): any {\r\n    const keys = value.split(\".\");\r\n    const key = keys[keys.length - 1];\r\n\r\n    const currentLanguage = localStorage.getItem(StorageKeys.LANGUAGE);\r\n    const targetVerbiage =\r\n      currentLanguage === \"es\"\r\n        ? defaultSpanishVerbiage\r\n        : defaultEnglishVerbiage;\r\n    let translation: string = targetVerbiage[key] || value;\r\n    if (args) {\r\n      const params: string[] = Object.keys(args);\r\n      params.forEach(p => {\r\n        translation = translation.replace(new RegExp('{{' + p + '}}', 'g'), args[p]);\r\n      });\r\n    }\r\n    return translation;\r\n  }\r\n}\r\n","import { Injectable, ElementRef } from '@angular/core';\r\nimport { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';\r\nimport { FormGroup, AbstractControl, FormArray } from '@angular/forms';\r\n\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\nimport { LocalTranslatePipe } from '../../shared/pipes/local-translate.pipe';\r\nimport { Constants } from '../../shared/constants/constants';\r\n\r\n/**\r\n * The alert service\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class AlertService {\r\n  /** the translation ket for close text */\r\n  private readonly closeTextKey: string = 'commonSnackBarClose';\r\n\r\n  /**\r\n   * The constructor\r\n   * @param translateService The translate service.\r\n   * @param localTranslatePipe The local translate pipe.\r\n   * @param snackBar The snackbar to display message.\r\n   */\r\n  constructor(\r\n    private translateService: TranslateService,\r\n    private localTranslatePipe: LocalTranslatePipe,\r\n    private snackBar: MatSnackBar\r\n  ) { }\r\n\r\n  /**\r\n   * Opens a generic snack bar alert\r\n   * @param detailsTextKey text to show in the alert\r\n   * @param durationLength how long the alert should be shown before it fades\r\n   */\r\n  public openCustomSnackBarAlert(detailsTextKey: string, params: any = {}, durationLength: number = 3000): void {\r\n\r\n    const snackBarConfig = new MatSnackBarConfig();\r\n    snackBarConfig.duration = durationLength;\r\n    snackBarConfig.panelClass = ['red-snackbar'];\r\n\r\n    this.snackBar.open(this.getTranslatedMessage(detailsTextKey, params), this.getTranslatedMessage(this.closeTextKey), snackBarConfig);\r\n  }\r\n\r\n  /**\r\n   * Opens an alert with a the specific form validation error\r\n   * @param form the form to validate\r\n   * @param el the element reference from the forms page, used to set focus on invalid form\r\n   * @param durationLength how long the alert should be shown before it fades\r\n   */\r\n  public openFormInvalidSnackBarAlert(form: FormGroup, el: ElementRef, durationLength: number = 5000): void {\r\n    this.getWhatIsNotFilledOut(form, el, durationLength);\r\n  }\r\n\r\n  /**\r\n   * Iterates through a form (form group/form array) recursively to get the individual form control that is invalid\r\n   * @param form the form to validate\r\n   * @param el the element reference from the forms page, used to set focus on invalid form\r\n   * @param durationLength how long the alert should be shown before it fades\r\n   */\r\n  public getWhatIsNotFilledOut(form: FormGroup, el: ElementRef, durationLength: number): string {\r\n    for (let field in form.controls) {\r\n      let control = form.get(field);\r\n      if (!control.invalid) {\r\n        continue;\r\n      }\r\n      if (control instanceof FormArray) {\r\n        for (let formArrayField in control.controls) {\r\n          let formArrayControl = control.get(formArrayField);\r\n          if (!formArrayControl.invalid) {\r\n            continue;\r\n          }\r\n          if (formArrayControl instanceof FormGroup) {\r\n            return this.getWhatIsNotFilledOut(formArrayControl, el, durationLength)\r\n          }\r\n          else {\r\n            return this.getErrorMessage(formArrayControl, formArrayField, el, durationLength);\r\n          }\r\n        }\r\n      }\r\n      else if (control instanceof FormGroup) {\r\n        for (let formGroupField in control.controls) {\r\n          let formGroupControl = control.get(formGroupField);\r\n          if (!formGroupControl.invalid) {\r\n            continue;\r\n          }\r\n          if (formGroupControl instanceof FormGroup) {\r\n            return this.getWhatIsNotFilledOut(formGroupControl, el, durationLength)\r\n          }\r\n          else {\r\n            return this.getErrorMessage(formGroupControl, formGroupField, el, durationLength);\r\n          }\r\n        }\r\n      }\r\n      else {\r\n        return this.getErrorMessage(control, field, el, durationLength);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets the error message based on the form control that is invalid\r\n   * @param control the invalid form control\r\n   * @param field the field name that is invalid\r\n   * @param el the element reference from the forms page, used to set focus on invalid form\r\n   * @param durationLength how long the alert should be shown before it fades\r\n   */\r\n  public getErrorMessage(control: AbstractControl, field: string, el: ElementRef, durationLength: number): string {\r\n    let errorText = '';\r\n    const error = control.errors;\r\n    const errorKey = Object.keys(control.errors)[0]; // will only ever be one at a time even if multiple validation errors\r\n\r\n    const formattedFieldText = this.getFieldFormattedText(field);\r\n    switch (errorKey) {\r\n      case Constants.validationKeys.required: {\r\n        errorText = this.getTranslatedMessage('error.requiredError', { 'fieldName': formattedFieldText });\r\n        break;\r\n      }\r\n      case Constants.validationKeys.maxLength: {\r\n        const errorValues = Object.values(error)[0];\r\n        const requiredLength = Object.values(errorValues)[0];\r\n        const actualValue = Object.values(errorValues)[1];\r\n        errorText = this.getTranslatedMessage('error.maxLengthError', { 'fieldName': formattedFieldText, 'actualValue': actualValue, 'requiredLength': requiredLength });\r\n        break;\r\n      }\r\n      case Constants.validationKeys.minLength: {\r\n        let errorValues = Object.values(error)[0];\r\n        let requiredLength = Object.values(errorValues)[0];\r\n        let actualValue = Object.values(errorValues)[1];\r\n        errorText = this.getTranslatedMessage('error.minLengthError', { 'fieldName': formattedFieldText, 'actualValue': actualValue, 'requiredLength': requiredLength });\r\n        break;\r\n      }\r\n      case Constants.validationKeys.pattern:\r\n      case Constants.validationKeys.maskError:\r\n      case Constants.validationKeys.email: {\r\n        errorText = this.getTranslatedMessage('error.formatError', { 'fieldName': formattedFieldText });\r\n        break;\r\n      }\r\n      default: {\r\n        errorText = this.getTranslatedMessage('error.allFieldsRequired');\r\n        break;\r\n      }\r\n    }\r\n    this.setFocusToFormControl(el);\r\n    this.openCustomSnackBarAlert(errorText, durationLength);\r\n    return;\r\n  }\r\n\r\n  /**\r\n   * Formats the form control name to readable text to display to the user in an error alert\r\n   * @param field The field\r\n   */\r\n  public getFieldFormattedText(field: string): string {\r\n    let split = field.split(/(?=[A-Z])/); // splits a string by word\r\n    let formattedFieldText = '';\r\n    for (let i = 0; i < split.length; i++) {\r\n      split[i] = split[i].charAt(0).toUpperCase() + split[i].substring(1);\r\n      formattedFieldText += split[i] + ' ';\r\n    }\r\n\r\n    return formattedFieldText;\r\n  }\r\n\r\n  /**\r\n   * Sets focus to the first invalid form control element\r\n   * @param el Element to focus on\r\n   */\r\n  public setFocusToFormControl(el: ElementRef): void {\r\n    // find all invalid controls and focus the first control found\r\n    const invalidElements = el.nativeElement.querySelectorAll('input.ng-invalid, select.ng-invalid');\r\n    if (invalidElements.length > 0) {\r\n      invalidElements[0].focus(); // [0] will always be the form itself [1] will be the first control\r\n    }\r\n\r\n  }\r\n\r\n  /**\r\n   * Get the translated message\r\n   * @param messageKey en.json translation key for message\r\n   * @param interpolateParams additional params for message\r\n   */\r\n  public getTranslatedMessage(messageKey: string, interpolateParams?: any): string {\r\n    return this.localTranslatePipe.transform(this.translateService.instant(messageKey, interpolateParams));\r\n  }\r\n}\r\n","import { ExistingAdditionalFieldsConfiguration } from \"../../service-request/configs/existing-fields-configuration\";\r\n\r\n/**\r\n * Existing Additional fields config\r\n */\r\nexport const ExistingFieldsConfig: ExistingAdditionalFieldsConfiguration[] = [\r\n    {\r\n      issueType : \"Communications\",\r\n      category : \"Generate Notice\",\r\n      fieldName: \"Notice Type\",\r\n      inputOptions: [\"Duplicate Coverage Subsidies Ending\"],\r\n      inputDisplayOptions:[\"Duplicate Coverage Subsidies Ending\"],\r\n      required: true\r\n    } as ExistingAdditionalFieldsConfiguration,\r\n    {\r\n      issueType : \"Communications\",\r\n      category : \"Regenerate Notice\",\r\n      fieldName: \"Notice Type\",\r\n      inputOptions: ['Invoice', 'Cancellation Notice', 'Termination Notice', 'Late Payment Notice'],\r\n      inputDisplayOptions: ['Invoice', 'Cancellation Notice', 'Termination Notice', 'Late Payment Notice'],\r\n      required: true\r\n    } as ExistingAdditionalFieldsConfiguration,\r\n    {\r\n      issueType : \"Communications\",\r\n      category : \"Invoice Correction\",\r\n      fieldName: \"Invoice Period\",\r\n      required: true\r\n    } as ExistingAdditionalFieldsConfiguration,\r\n    {\r\n      issueType : \"Communications\",\r\n      category : \"1095A Correction\",\r\n      fieldName: \"Tax Year\",\r\n      required: true\r\n    } as ExistingAdditionalFieldsConfiguration,\r\n    {\r\n      issueType : \"Communications\",\r\n      category : \"1095A Correction\",\r\n      fieldName: \"Correction Type\",\r\n      inputOptions: ['Void', 'Corrected'],\r\n      inputDisplayOptions: ['Void', 'Corrected'],\r\n      required: true\r\n    } as ExistingAdditionalFieldsConfiguration,\r\n    {\r\n      issueType : \"Communications\",\r\n      category : \"1095A Correction\",\r\n      fieldName: \"Correction Reasons\",\r\n      inputOptions: ['Part I', 'Part II', 'Part III'],\r\n      inputDisplayOptions: ['Part I - Recipient Information','Part II - Covered Individuals','Part III - Coverage Information'],\r\n      required: true\r\n    } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Communications\",\r\n        category : \"Generate New Invoice\",\r\n        fieldName: \"Invoice Correction\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Payments\",\r\n        category : \"Incorrect Balance Due\",\r\n        fieldName: \"Expected Balance\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Payments\",\r\n        category : \"Incorrect Paid Through Date\",\r\n        fieldName: \"Expected Paid Through Date\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Payments\",\r\n        category : \"Refund Investigation\",\r\n        fieldName: \"Original Refund Service Request Number\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Payments\",\r\n        category : \"Refund Investigation\",\r\n        fieldName: \"Refund Service Request Date of Creation\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Payments\",\r\n        category : \"Refund Investigation\",\r\n        fieldName: \"Refund Status\",\r\n        inputOptions: ['refundPending', 'refundInProgress', 'refundIssued', 'refundCanceled'],\r\n        inputDisplayOptions: ['Refund Pending', 'Refund In Progress', 'Refund Issued', 'Refund Canceled'],\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Re-export Effectuation\",\r\n        fieldName: \"Group/Policy Number\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Re-export Effectuation\",\r\n        fieldName: \"Span Folder Id\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Incorrect Status\",\r\n        fieldName: \"Group/Policy Number\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Incorrect Status\",\r\n        fieldName: \"Expected Status\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Incorrect Rate\",\r\n        fieldName: \"Group/Policy Number\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Incorrect Rate\",\r\n        fieldName: \"Expected Rate\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Incorrect Rate\",\r\n        fieldName: \"Expected APTC\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Incorrect Rate\",\r\n        fieldName: \"Expected CSR\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Incorrect Rate\",\r\n        fieldName: \"Expected Premium\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Change Issuer ID\",\r\n        fieldName: \"Expected Issuer Subscriber Id\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Change Issuer ID\",\r\n        fieldName: \"Expected Issuer Member Id\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Change End Date\",\r\n        fieldName: \"Reason\",\r\n        inputOptions: ['Death', 'Declined Coverage', 'Non-Payment', 'Plan Change', 'Termination of Benefits',\r\n        'Voluntary Withdrawal', 'Other'],\r\n        inputDisplayOptions: ['Death','Declined Coverage','Non-Payment','Plan Change','Termination of Benefits','Voluntary Withdrawal','Other'],\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Change End Date\",\r\n        fieldName: \"Group/Policy Number\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Change End Date\",\r\n        fieldName: \"Span Folder Id\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Change End Date\",\r\n        fieldName: \"Begin Date\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Change End Date\",\r\n        fieldName: \"End Date\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Missing Policy\",\r\n        fieldName: \"Group/Policy Number\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Missing Policy\",\r\n        fieldName: \"Begin Date\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Missing Policy\",\r\n        fieldName: \"End Date\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Hardship Waiver\",\r\n        fieldName: \"Discount Approval Status\",\r\n        inputOptions: ['Approved', 'Denied'],\r\n        inputDisplayOptions: ['Approved', 'Denied'],\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Hardship Waiver\",\r\n        fieldName: \"Discount Type\",\r\n        inputOptions: ['Flat', 'Percentage'],\r\n        inputDisplayOptions: ['Flat', 'Percentage'],\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Hardship Waiver\",\r\n        fieldName: \"Discount Amount Type\",\r\n        inputOptions: ['Health Coverage Monthly Premium', 'Other'],\r\n        inputDisplayOptions: ['Health Coverage Monthly Premium', 'Other'],\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Hardship Waiver\",\r\n        fieldName: \"Discount Amount\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Hardship Waiver\",\r\n        fieldName: \"Discount Start Date\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Hardship Waiver\",\r\n        fieldName: \"Discount End Date\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Update Handicap\",\r\n        fieldName: \"Update Handicap\",\r\n        inputOptions: ['Add Handicap Indicator', 'Update Handicap Indicator'],\r\n        inputDisplayOptions: ['Add Handicap Indicator', 'Update Handicap Indicator'],\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Update Handicap\",\r\n        fieldName: \"Exchange Member Id\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration, \r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Update Handicap\",\r\n        fieldName: \"Start Date\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration,\r\n      {\r\n        issueType : \"Enrollment\",\r\n        category : \"Update Handicap\",\r\n        fieldName: \"End Date\",\r\n        required: true\r\n      } as ExistingAdditionalFieldsConfiguration\r\n  ];\r\n","import { IssueCategoryConfiguration } from \"../../service-request/configs/issue-category-configuration\";\r\n\r\n/**\r\n * Existing Additional fields config\r\n */\r\nexport const IssueCategoryConfig: IssueCategoryConfiguration[] = [\r\n    {\r\n      issueType: \"Assistance\",\r\n      categoryActionMap: new Map([\r\n        [\"Other\", \"HC_CRM_DIST_OTHER\"]\r\n      ])\r\n    } as IssueCategoryConfiguration,\r\n    {\r\n      issueType: \"Communications\",\r\n      categoryActionMap: new Map([\r\n        [\"Generate Notice\", \"HC_CRM_WF_ServiceRequest_CreateNotice\"],\r\n        [\"Regenerate Notice\", \"HC_CRM_DIST_Regenerate_Notice\"],\r\n        [\"Invoice Correction\", \"HC_CRM_DIST_Invoice_Correction\"],\r\n        [\"1095A Correction\", \"HC_CRM_DIST_1095A_Correction\"],\r\n        [\"Generate New Invoice\", \"HC_FIN_WF_ServiceRequest_Distribute_NewInvoice\"]\r\n      ])\r\n    } as IssueCategoryConfiguration,\r\n    {\r\n      issueType: \"Payments\",\r\n      categoryActionMap: new Map([\r\n        [\"Incorrect Balance Due\", \"HC_CRM_DIST_Incorrect_Balance_Due\"],\r\n        [\"Incorrect Paid Through Date\", \"HC_CRM_DIST_Incorrect_PTD\"],\r\n        [\"Bank Discrepancy\", \"HC_CRM_Bank_Discrepancy\"],\r\n        [\"Missing Payment\", \"HC_CRM_Missing_Payment\"],\r\n        [\"Refund Investigation\", \"HC_CRM_Refund_Investigation\"]\r\n      ])\r\n    } as IssueCategoryConfiguration,\r\n    {\r\n      issueType: \"Enrollment\",\r\n      categoryActionMap: new Map([\r\n        [\"Re-export Effectuation\", \"HC_CRM_DIST_Re_Export_Effectuation\"],\r\n        [\"Incorrect Status\", \"HC_CRM_DIST_Incorrect_Status\"],\r\n        [\"Incorrect Rate\", \"HC_CRM_Update_Financial_Information\"],\r\n        [\"Change Issuer ID\", \"HC_CRM_DIST_Change_Issuer_ID\"],\r\n        [\"Change End Date\", \"HC_CRM_DIST_Change_Term_Date\"],\r\n        [\"Missing Policy\", \"HC_CRM_Missing_Enrollment_Span\"],\r\n        [\"Retro Enrollment\", \"HC_CRM_WF_ServiceRequest_Retro_Enrollment\"],\r\n        [\"Retro Termination\", \"HC_CRM_WF_ServiceRequest_Retro_Termination\"],\r\n        [\"Forward Enrollment\", \"HC_CRM_WF_ServiceRequest_Forward_Enrollment\"],\r\n        [\"Hardship Waiver\", \"HC_CRM_WF_ServiceRequest_Apply_PremiumWaiver\"],\r\n        [\"Convert Enrollment Source\", \"HC_CRM_WF_ServiceRequest_Generate_EnrollmentSourceChange\"],\r\n        [\"Update Handicap\", \"HC_CRM_WF_ServiceRequest_Update_HandicapIndicator\"]\r\n      ])\r\n    } as IssueCategoryConfiguration\r\n  ]\r\n","import { Component, Input } from \"@angular/core\";\r\nimport { FormControl } from \"@angular/forms\";\r\nimport {\r\n  MomentDateAdapter,\r\n  MAT_MOMENT_DATE_ADAPTER_OPTIONS,\r\n} from \"@angular/material-moment-adapter\";\r\nimport {\r\n  DateAdapter,\r\n  MAT_DATE_FORMATS,\r\n  MAT_DATE_LOCALE,\r\n} from \"@angular/material/core\";\r\nimport { MatDatepicker } from \"@angular/material/datepicker\";\r\n\r\nimport moment from \"moment\";\r\nimport { Moment } from \"moment\";\r\n\r\n/**\r\n * The constants for month year format\r\n */\r\nexport const MY_FORMATS = {\r\n  parse: {\r\n    dateInput: \"MM/YYYY\",\r\n  },\r\n  display: {\r\n    dateInput: \"MM/YYYY\",\r\n    monthYearLabel: \"MMM YYYY\",\r\n    dateA11yLabel: \"LL\",\r\n    monthYearA11yLabel: \"MMMM YYYY\",\r\n  },\r\n};\r\n\r\n/**\r\n * The month year picker component\r\n */\r\n@Component({\r\n  selector: \"lighthouse-month-year-picker\",\r\n  templateUrl: \"./month-year-picker.component.html\",\r\n  styleUrls: [\"./month-year-picker.component.css\"],\r\n  standalone: false,\r\n  providers: [\r\n    {\r\n      provide: DateAdapter,\r\n      useClass: MomentDateAdapter,\r\n      deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],\r\n    },\r\n    { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\r\n  ],\r\n})\r\nexport class MonthYearPickerComponent {\r\n  /** The form control for month year value */\r\n  @Input()\r\n  public monthYearFormControl: FormControl = new FormControl();\r\n\r\n  /** The string value for placeholder */\r\n  @Input()\r\n  public placeholder: string;\r\n\r\n  /**\r\n   * The handler function for year selection event by date picker\r\n   * @param normalizedYear The value of year\r\n   */\r\n  public chosenYearHandler(normalizedYear: Moment): void {\r\n    const ctrlValue = moment().year(normalizedYear.year());\r\n    this.monthYearFormControl.setValue(ctrlValue);\r\n  }\r\n\r\n  /**\r\n   * The handler function for month selection event by date picker\r\n   * @param normalizedMonth The value of month\r\n   * @param datePicker The date picker dom\r\n   */\r\n  public chosenMonthHandler(\r\n    normalizedMonth: Moment,\r\n    datePicker: MatDatepicker<Moment>\r\n  ): void {\r\n    const ctrlValue = this.monthYearFormControl.value;\r\n    ctrlValue.month(normalizedMonth.month());\r\n    this.monthYearFormControl.setValue(ctrlValue);\r\n    datePicker.close();\r\n  }\r\n}\r\n","<mat-form-field>\r\n    <input id=\"monthYearPicker\" matInput [matDatepicker]=\"monthYearPicker\" [placeholder]=\"placeholder\"\r\n        [formControl]=\"monthYearFormControl\">\r\n    <mat-datepicker-toggle matSuffix [for]=\"monthYearPicker\"></mat-datepicker-toggle>\r\n    <mat-datepicker #monthYearPicker startView=\"multi-year\" (yearSelected)=\"chosenYearHandler($event)\"\r\n        (monthSelected)=\"chosenMonthHandler($event, monthYearPicker)\">\r\n    </mat-datepicker>\r\n</mat-form-field>","import { Component, Input } from \"@angular/core\";\r\nimport { FormControl } from \"@angular/forms\";\r\nimport {\r\n  MomentDateAdapter,\r\n  MAT_MOMENT_DATE_ADAPTER_OPTIONS,\r\n} from \"@angular/material-moment-adapter\";\r\nimport {\r\n  DateAdapter,\r\n  MAT_DATE_FORMATS,\r\n  MAT_DATE_LOCALE,\r\n} from \"@angular/material/core\";\r\nimport { MatDatepicker } from \"@angular/material/datepicker\";\r\n\r\nimport moment from \"moment\";\r\nimport { Moment } from \"moment\";\r\n\r\n/**\r\n * The constant for year format\r\n */\r\nexport const MY_FORMATS = {\r\n  parse: {\r\n    dateInput: \"YYYY\",\r\n  },\r\n  display: {\r\n    dateInput: \"YYYY\",\r\n    yearLabel: \"YYYY\",\r\n    dateA11yLabel: \"LL\",\r\n    yearA11yLabel: \"MMMM YYYY\",\r\n  },\r\n};\r\n\r\n/**\r\n * The year picker component\r\n */\r\n@Component({\r\n  selector: \"lighthouse-year-picker\",\r\n  templateUrl: \"./year-picker.component.html\",\r\n  styleUrls: [\"./year-picker.component.css\"],\r\n  standalone: false,\r\n  providers: [\r\n    {\r\n      provide: DateAdapter,\r\n      useClass: MomentDateAdapter,\r\n      deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],\r\n    },\r\n\r\n    { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\r\n  ],\r\n})\r\nexport class YearPickerComponent {\r\n  /** The form control for year value */\r\n  @Input()\r\n  public yearFormControl: FormControl = new FormControl();\r\n\r\n  /** The string value for placeholder */\r\n  @Input()\r\n  public placeholder: string;\r\n\r\n  /**\r\n   * The handler function for year selection event by date picker\r\n   * @param normalizedYear The value of year\r\n   * @param datePicker The date picker dom\r\n   */\r\n  public chosenYearHandler(\r\n    normalizedYear: Moment,\r\n    datePicker: MatDatepicker<Moment>\r\n  ): void {\r\n    const ctrlValue = moment().year(normalizedYear.year());\r\n    this.yearFormControl.setValue(ctrlValue);\r\n    datePicker.close();\r\n  }\r\n}\r\n","<mat-form-field>\r\n    <input id=\"yearPicker\" matInput [matDatepicker]=\"yearPicker\" [placeholder]=\"placeholder\"\r\n        [formControl]=\"yearFormControl\">\r\n    <mat-datepicker-toggle matSuffix [for]=\"yearPicker\"></mat-datepicker-toggle>\r\n    <mat-datepicker #yearPicker startView=\"multi-year\" (yearSelected)=\"chosenYearHandler($event, yearPicker)\">\r\n    </mat-datepicker>\r\n</mat-form-field>","import { Directive, ElementRef, HostListener, Input } from \"@angular/core\";\r\n\r\n/**\r\n * Numbers only directive\r\n */\r\n@Directive({\r\n  selector: \"[numbersOnly]\",\r\n  standalone: false,\r\n})\r\nexport class NumbersOnlyDirective {\r\n  /** True if only numbers allowed */\r\n  @Input() public numbersOnly: boolean;\r\n\r\n  /** The array of allowed keys */\r\n  private allowedKeys: Array<string> = [\r\n    \"backspace\",\r\n    \"delete\",\r\n    \"tab\",\r\n    \"escape\",\r\n    \"enter\",\r\n    \"period\",\r\n    \"numpaddecimal\",\r\n  ];\r\n\r\n  /**\r\n   * Constructs the directive\r\n   * @param el The element\r\n   */\r\n  constructor(private el: ElementRef) {}\r\n\r\n  /**\r\n   * Only allows number inputs\r\n   * @param event Key Event\r\n   */\r\n  @HostListener(\"keydown\", [\"$event\"]) onKeyDown(event) {\r\n    const e: KeyboardEvent = event;\r\n\r\n    if (this.numbersOnly) {\r\n      if (\r\n        this.allowedKeys.indexOf(e.code.toLowerCase()) !== -1 ||\r\n        // Allow: Ctrl+A\r\n        (e.code.toLowerCase() === \"keya\" && e.ctrlKey) ||\r\n        // Allow: Ctrl+C\r\n        (e.code.toLowerCase() === \"keyc\" && e.ctrlKey) ||\r\n        // Allow: Ctrl+X\r\n        (e.code.toLowerCase() === \"keyx\" && e.ctrlKey) ||\r\n        // Allow: spaces\r\n        e.code.toLowerCase() === \"space\" ||\r\n        // Allow: - (minus sign) on numpad or alphabet keyboard key\r\n        e.code.toLowerCase() === \"minus\" ||\r\n        e.code.toLowerCase() === \"numpadsubtract\"\r\n      ) {\r\n        // let it happen, don't do anything\r\n        return;\r\n      }\r\n\r\n      // Ensure that it is a number and stop the keypress\r\n      if (e.shiftKey || e.code.toLowerCase().match(/key[a-zA-Z]/g)) {\r\n        e.preventDefault();\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { Component, Input, OnInit } from \"@angular/core\";\r\nimport { FormArray, FormControl, FormGroup, Validators } from \"@angular/forms\";\r\nimport { MatCheckboxChange } from \"@angular/material/checkbox\";\r\nimport { MatSelectChange } from \"@angular/material/select\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\nimport { LocalTranslatePipe } from \"../../../../shared/pipes/local-translate.pipe\";\r\nimport { AdditionalFieldsConfiguration } from \"../../../configs/addition-fields-configuration\";\r\nimport { IssueCategoryConfiguration } from \"../../../configs/issue-category-configuration\";\r\nimport { FormService } from \"../../../services/form/form.service\";\r\nimport { ExistingAdditionalFieldsConfiguration } from \"../../../configs/existing-fields-configuration\";\r\nimport { ExistingFieldsConfig } from \"../../../../shared/constants/existing-fields-config\";\r\nimport { IssueCategoryConfig } from \"../../../../shared/constants/issue-category-config\";\r\n\r\n/**\r\n * The service category component\r\n */\r\n@Component({\r\n  selector: \"lighthouse-service-category\",\r\n  templateUrl: \"./service-category.component.html\",\r\n  styleUrls: [\"./service-category.component.css\"],\r\n  standalone: false,\r\n})\r\nexport class ServiceCategoryComponent implements OnInit {\r\n  /** The language path */\r\n  @Input()\r\n  public languagePath: string;\r\n\r\n  /** The Array of issue category configurations*/\r\n  @Input()\r\n  public issueCategoryConfiguration: Array<IssueCategoryConfiguration> = [];\r\n\r\n  /** The Array of additional questions configurations*/\r\n  @Input()\r\n  public additionalFieldsConfig: Array<AdditionalFieldsConfiguration> = [];\r\n\r\n  /** The Array of modified existing fields configurations*/\r\n  @Input()\r\n  public modifiedExistingFieldsConfig: Array<ExistingAdditionalFieldsConfiguration> =\r\n    [];\r\n\r\n  /** The service request form group */\r\n  public serviceRequestForm: FormGroup;\r\n\r\n  /** The selected issue */\r\n  public selectedIssue: string;\r\n\r\n  /** The selected category */\r\n  public selectedCategory: string;\r\n\r\n  /** The selected notice type */\r\n  public selectedNoticeType: string;\r\n\r\n  /** The selected correction reason set */\r\n  public selectedCorrectionReasonSet: Set<number> = new Set<number>();\r\n\r\n  /** The issue data list */\r\n  public issues: Array<string> = [];\r\n\r\n  /** The severity data list  */\r\n  public severities: Array<string> = [\r\n    \"Low\",\r\n    \"Medium\",\r\n    \"High\",\r\n    \"HICS - Level 1\",\r\n    \"HICS - Level 2\",\r\n  ];\r\n\r\n  /** The category data list */\r\n  public categoriesByIssue: Map<string, Array<string>> = new Map<\r\n    string,\r\n    Array<string>\r\n  >();\r\n\r\n  /** The generated notice type data list */\r\n  public generatedNoticeType: Array<string> = [\r\n    \"Duplicate Coverage Subsidies Ending\",\r\n  ];\r\n\r\n  /** The regenerated notice type data list */\r\n  public regeneratedNoticeType: Array<string> = [\r\n    \"Invoice\",\r\n    \"Cancellation Notice\",\r\n    \"Termination Notice\",\r\n    \"Late Payment Notice\",\r\n  ];\r\n\r\n  /** The reason data list */\r\n  public reason: Array<string> = [\r\n    \"Death\",\r\n    \"Declined Coverage\",\r\n    \"Non-Payment\",\r\n    \"Plan Change\",\r\n    \"Termination of Benefits\",\r\n    \"Voluntary Withdrawal\",\r\n    \"Other\",\r\n  ];\r\n\r\n  /** The discount type data list */\r\n  public discountType: Array<string> = [\"Flat\", \"Percentage\"];\r\n\r\n  /** The discount approved or denied data list */\r\n  public discountApprovedOrDenied: Array<string> = [\"Approved\", \"Denied\"];\r\n\r\n  /** The correction type data list */\r\n  public correctionType: Array<string> = [\"Void\", \"Corrected\"];\r\n\r\n  /** The correction reason data list */\r\n  public correctionReason: Array<string> = [\"Part I\", \"Part II\", \"Part III\"];\r\n\r\n  /** The update handicap data list */\r\n  public updateHandicap: Array<string> = [\r\n    \"Add Handicap Indicator\",\r\n    \"Update Handicap Indicator\",\r\n  ];\r\n\r\n  /** The maximum date */\r\n  public maxDate: Date = new Date();\r\n\r\n  /** The current billing period */\r\n  public currentBillingPeriod: String =\r\n    (((new Date().getMonth() + 1) % 12) + 1).toString().padStart(2, \"0\") +\r\n    \"/\" +\r\n    new Date().getFullYear();\r\n\r\n  /** The issue data list for drop down */\r\n  public displayedIssues: Array<string>;\r\n\r\n  /** The severity data list for drop down */\r\n  public displayedSeverities: Array<string>;\r\n\r\n  /** The category data list for drop down */\r\n  public displayedCategoriesByIssue: Map<string, Array<string>> = new Map<\r\n    string,\r\n    Array<string>\r\n  >();\r\n\r\n  /** The regenerated notice type data list for drop down */\r\n  public displayedRegeneratedNoticeType: Array<string>;\r\n\r\n  /** The generated notice type data list for drop down */\r\n  public displayedGeneratedNoticeType: Array<string>;\r\n\r\n  /** The reason data list for drop down */\r\n  public displayedReason: Array<string>;\r\n\r\n  /** The discount type data list for drop down */\r\n  public displayedDiscountType: Array<string>;\r\n\r\n  /** The discount type amount data list for dropdown */\r\n  public displayedDiscountAmountType: Array<string>;\r\n\r\n  /** The discount approved or denied data list for drop down */\r\n  public displayedDiscountApprovedOrDenied: Array<string>;\r\n\r\n  /** The correction type data list for radio button */\r\n  public displayedCorrectionType: Array<string>;\r\n\r\n  /** The correction reason data list for check boxes */\r\n  public displayedCorrectionReason: Array<string>;\r\n\r\n  /** The update handicap data list for drop down */\r\n  public displayedUpdateHandicap: Array<string>;\r\n\r\n  /** The additional form fields based on category selected */\r\n  public formFieldsBasedOnCategorySelected: Array<AdditionalFieldsConfiguration> =\r\n    [];\r\n\r\n  /** The display values for additional fields */\r\n  public displayOptionsByAdditionalField: Map<string, Array<string>> = new Map<\r\n    string,\r\n    Array<string>\r\n  >();\r\n\r\n  /** The additional fields display Check */\r\n  public additionalFieldsDisplay: boolean;\r\n\r\n  /** The values for additional field options */\r\n  public optionsByAdditionalField: Map<string, Array<string>> = new Map<\r\n    string,\r\n    Array<string>\r\n  >();\r\n\r\n  /** The dedup member form array */\r\n  public get dedupMembers(): FormArray {\r\n    return this.formService.serviceRequestForm.get(\r\n      \"serviceCategory.dedupMembers\"\r\n    ) as FormArray;\r\n  }\r\n\r\n  /** The existing fields config */\r\n  public existingFieldsConfig: ExistingAdditionalFieldsConfiguration[] = [];\r\n\r\n  /** The selected existing fields config based on issue and category*/\r\n  public selectedExistingFieldsConfig: ExistingAdditionalFieldsConfiguration[] =\r\n    [];\r\n\r\n  /**\r\n   * The constructor\r\n   * @param translateService The translate service for language\r\n   * @param localTranslatePipe The local translate pipe\r\n   * @param formService The form service\r\n   */\r\n  constructor(\r\n    private translateService: TranslateService,\r\n    private localTranslatePipe: LocalTranslatePipe,\r\n    private formService: FormService\r\n  ) {}\r\n\r\n  /**\r\n   * Initialize the component\r\n   */\r\n  public ngOnInit(): void {\r\n    this.serviceRequestForm = this.formService.serviceRequestForm;\r\n    this.initializeSelectedValue();\r\n    this.initializeTranslation();\r\n    this.intializeAdditionalFields();\r\n\r\n    //if the input issue configuration is empty, load with default configuration\r\n    if (this.issueCategoryConfiguration.length == 0) {\r\n      this.issueCategoryConfiguration = IssueCategoryConfig;\r\n    }\r\n\r\n    this.issueCategoryConfiguration.forEach((issueCategory) => {\r\n      this.issues.push(issueCategory.issueType);\r\n      this.categoriesByIssue.set(\r\n        issueCategory.issueType,\r\n        Array.from(issueCategory.categoryActionMap.keys())\r\n      );\r\n    });\r\n    this.existingFieldsConfig = ExistingFieldsConfig;\r\n    this.updateExistingFieldConfigs();\r\n  }\r\n\r\n  /**\r\n   * Update the existing field configs with the modified ones from the config\r\n   */\r\n  private updateExistingFieldConfigs(): void {\r\n    if (this.modifiedExistingFieldsConfig.length != 0) {\r\n      this.existingFieldsConfig = ExistingFieldsConfig.map((existingConfig) => {\r\n        const updatedConfigs = this.modifiedExistingFieldsConfig.find(\r\n          (modifiedConfig) =>\r\n            modifiedConfig.issueType === existingConfig.issueType &&\r\n            modifiedConfig.category === existingConfig.category &&\r\n            modifiedConfig.fieldName === existingConfig.fieldName\r\n        );\r\n        return updatedConfigs ? { ...updatedConfigs } : existingConfig;\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Update the current correction reason based on the check box selections\r\n   * @param event The triggered check box event\r\n   * @param index The current selected index\r\n   */\r\n  public onClickCorrectionReasonCheckBox(\r\n    event: MatCheckboxChange,\r\n    index: number\r\n  ): void {\r\n    if (event.checked) {\r\n      this.selectedCorrectionReasonSet.add(index);\r\n    } else {\r\n      this.selectedCorrectionReasonSet.delete(index);\r\n    }\r\n\r\n    let selectedReasons = \"\";\r\n    const correctedReasonsConfig = this.existingFieldsConfig.find(\r\n      (fieldConfig) =>\r\n        fieldConfig.category === \"1095A Correction\" &&\r\n        fieldConfig.issueType === \"Communications\" &&\r\n        fieldConfig.fieldName === \"Correction Reasons\"\r\n    );\r\n    for (let i = 0; i < correctedReasonsConfig.inputOptions.length; i++) {\r\n      if (this.selectedCorrectionReasonSet.has(i)) {\r\n        selectedReasons = selectedReasons + `${this.correctionReason[i]},`;\r\n      }\r\n    }\r\n\r\n    if (selectedReasons.length > 0) {\r\n      selectedReasons = selectedReasons.slice(0, -1);\r\n    }\r\n    this.serviceRequestForm\r\n      .get(\"serviceCategory.correctionReason\")\r\n      .setValue(selectedReasons);\r\n  }\r\n\r\n  /**\r\n   * Update the checkbox value in service category form group based on check box selections\r\n   * @param event The triggered check box event\r\n   * @param index The current selected index\r\n   * @param formControlName The form control name defined for the checkbox field\r\n   */\r\n  public onCheckBoxSelectionForAdditionalFields(\r\n    event: MatCheckboxChange,\r\n    index: number,\r\n    formControlName: string\r\n  ) {\r\n    let currentValue = \"\";\r\n    let options = this.optionsByAdditionalField.get(formControlName);\r\n    if (\r\n      this.serviceRequestForm.get(\"serviceCategory.\" + formControlName).value\r\n    ) {\r\n      currentValue = this.serviceRequestForm.get(\r\n        \"serviceCategory.\" + formControlName\r\n      ).value;\r\n    }\r\n    if (event.checked) {\r\n      currentValue =\r\n        currentValue === \"\"\r\n          ? options[index]\r\n          : currentValue + \",\" + options[index];\r\n    } else {\r\n      let checkedOptions = currentValue.split(\",\");\r\n      checkedOptions = checkedOptions.filter((obj) => obj !== options[index]);\r\n      currentValue = checkedOptions.join(\",\");\r\n    }\r\n    this.serviceRequestForm\r\n      .get(\"serviceCategory.\" + formControlName)\r\n      .setValue(currentValue);\r\n  }\r\n\r\n  /** Patches the default invoice period */\r\n  private patchDefaultInvoicePeriod(value: string): void {\r\n    if (value == \"Generate New Invoice\") {\r\n      this.serviceRequestForm\r\n        .get(\"serviceCategory.billingPeriod\")\r\n        .patchValue(this.currentBillingPeriod);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * load new fields based on the category selected and update form validation for that fields\r\n   */\r\n  private populateNewFieldsAndUpdateFormValidation(): void {\r\n    this.formFieldsBasedOnCategorySelected = [];\r\n    this.additionalFieldsConfig.forEach((element) => {\r\n      if (\r\n        element.issueType == this.selectedIssue &&\r\n        element.category == this.selectedCategory\r\n      ) {\r\n        this.serviceRequestForm\r\n          .get(\"serviceCategory.\".concat(element.formControlName))\r\n          .setValidators(Validators.required);\r\n        this.formFieldsBasedOnCategorySelected.push(element);\r\n      }\r\n    });\r\n\r\n    //Display Additional questions set to true if there are any\r\n    if (this.formFieldsBasedOnCategorySelected.length != 0) {\r\n      this.additionalFieldsDisplay = true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * load additional fields based on the category selected and update form validation for that fields\r\n   */\r\n  private populateExistingFieldsBasedOnCategorySelected(): void {\r\n    this.selectedExistingFieldsConfig = [];\r\n    this.existingFieldsConfig.forEach((element) => {\r\n      if (\r\n        element.issueType == this.selectedIssue &&\r\n        element.category == this.selectedCategory\r\n      ) {\r\n        this.selectedExistingFieldsConfig.push(element);\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Updates the action\r\n   * @param event The triggered mat select event\r\n   */\r\n  public updateAction(event: MatSelectChange): void {\r\n    let action = \"\";\r\n    this.issueCategoryConfiguration.forEach((element) => {\r\n      if (this.selectedIssue == element.issueType) {\r\n        action = element.categoryActionMap.get(event.value);\r\n      }\r\n    });\r\n    this.serviceRequestForm\r\n      .get(\"serviceCategory.action\")\r\n      .setValue(action, { emitEvent: false });\r\n    this.patchDefaultInvoicePeriod(event.value);\r\n    this.populateExistingFieldsBasedOnCategorySelected();\r\n    this.populateNewFieldsAndUpdateFormValidation();\r\n  }\r\n\r\n  /**\r\n   * The function to add dedup member\r\n   */\r\n  public addDedupMember(): void {\r\n    this.formService.addArrayElement(\"serviceCategory.dedupMembers\");\r\n  }\r\n\r\n  /**\r\n   * The function to remove dedup member\r\n   * @param index the target index to remove at\r\n   */\r\n  public removeDedupMember(index: number): void {\r\n    const array = this.formService.serviceRequestForm.get(\r\n      \"serviceCategory.dedupMembers\"\r\n    ) as FormArray;\r\n    array.removeAt(index);\r\n  }\r\n\r\n  /**\r\n   * The function to initialize the selected field values\r\n   */\r\n  private initializeSelectedValue(): void {\r\n    let control = this.serviceRequestForm.get(\"serviceCategory.issue\");\r\n    if (control) {\r\n      this.selectedIssue = control.value;\r\n    }\r\n\r\n    control = this.serviceRequestForm.get(\"serviceCategory.category\");\r\n    if (control) {\r\n      this.selectedCategory = control.value;\r\n    }\r\n\r\n    control = this.serviceRequestForm.get(\"serviceCategory.noticeType\");\r\n    if (control) {\r\n      this.selectedNoticeType = control.value;\r\n    }\r\n\r\n    control = this.serviceRequestForm.get(\"serviceCategory.correctionReason\");\r\n    if (control) {\r\n      const splits = control.value.split(\",\") as Array<string>;\r\n      splits.forEach((item: string) => {\r\n        this.selectedCorrectionReasonSet.add(+item);\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Initialize the list of data to be displayed\r\n   */\r\n  private initializeTranslation(): void {\r\n    this.translateService\r\n      .get(this.languagePath + \"serviceCategoryDisplayedIssues\")\r\n      .subscribe((text: string) => {\r\n        this.displayedIssues = this.localTranslatePipe\r\n          .transform(text)\r\n          .split(\",\");\r\n      });\r\n    this.translateService\r\n      .get(this.languagePath + \"serviceCategoryDisplayedSeverities\")\r\n      .subscribe((text: string) => {\r\n        this.displayedSeverities = this.localTranslatePipe\r\n          .transform(text)\r\n          .split(\",\");\r\n      });\r\n    this.translateService\r\n      .get(this.languagePath + \"serviceCategoryDisplayedCategoriesAssistance\")\r\n      .subscribe((text: string) => {\r\n        this.displayedCategoriesByIssue.set(\r\n          \"Assistance\",\r\n          this.localTranslatePipe.transform(text).split(\",\")\r\n        );\r\n      });\r\n    this.translateService\r\n      .get(\r\n        this.languagePath + \"serviceCategoryDisplayedCategoriesCommunications\"\r\n      )\r\n      .subscribe((text: string) => {\r\n        this.displayedCategoriesByIssue.set(\r\n          \"Communications\",\r\n          this.localTranslatePipe.transform(text).split(\",\")\r\n        );\r\n      });\r\n    this.translateService\r\n      .get(this.languagePath + \"serviceCategoryDisplayedCategoriesPayments\")\r\n      .subscribe((text: string) => {\r\n        this.displayedCategoriesByIssue.set(\r\n          \"Payments\",\r\n          this.localTranslatePipe.transform(text).split(\",\")\r\n        );\r\n      });\r\n    this.translateService\r\n      .get(this.languagePath + \"serviceCategoryDisplayedCategoriesEnrollment\")\r\n      .subscribe((text: string) => {\r\n        this.displayedCategoriesByIssue.set(\r\n          \"Enrollment\",\r\n          this.localTranslatePipe.transform(text).split(\",\")\r\n        );\r\n      });\r\n    this.translateService\r\n      .get(this.languagePath + \"serviceCategoryDisplayedRegeneratedNoticeType\")\r\n      .subscribe((text: string) => {\r\n        this.displayedRegeneratedNoticeType = this.localTranslatePipe\r\n          .transform(text)\r\n          .split(\",\");\r\n      });\r\n    this.translateService\r\n      .get(this.languagePath + \"serviceCategoryDisplayedGeneratedNoticeType\")\r\n      .subscribe((text: string) => {\r\n        this.displayedGeneratedNoticeType = this.localTranslatePipe\r\n          .transform(text)\r\n          .split(\",\");\r\n      });\r\n    this.translateService\r\n      .get(this.languagePath + \"serviceCategoryDisplayedReason\")\r\n      .subscribe((text: string) => {\r\n        this.displayedReason = this.localTranslatePipe\r\n          .transform(text)\r\n          .split(\",\");\r\n      });\r\n    this.translateService\r\n      .get(this.languagePath + \"serviceCategoryDisplayedDiscountType\")\r\n      .subscribe((text: string) => {\r\n        this.displayedDiscountType = this.localTranslatePipe\r\n          .transform(text)\r\n          .split(\",\");\r\n      });\r\n    this.translateService\r\n      .get(this.languagePath + \"serviceCategoryDisplayedDiscountAmountType\")\r\n      .subscribe((text: string) => {\r\n        this.displayedDiscountAmountType = this.localTranslatePipe\r\n          .transform(text)\r\n          .split(\",\");\r\n      });\r\n    this.translateService\r\n      .get(\r\n        this.languagePath + \"serviceCategoryDisplayedDiscountApprovedOrDenied\"\r\n      )\r\n      .subscribe((text: string) => {\r\n        this.displayedDiscountApprovedOrDenied = this.localTranslatePipe\r\n          .transform(text)\r\n          .split(\",\");\r\n      });\r\n    this.translateService\r\n      .get(this.languagePath + \"serviceCategoryDisplayedCorrectionType\")\r\n      .subscribe((text: string) => {\r\n        this.displayedCorrectionType = this.localTranslatePipe\r\n          .transform(text)\r\n          .split(\",\");\r\n      });\r\n    this.translateService\r\n      .get(this.languagePath + \"serviceCategoryDisplayedCorrectionReason\")\r\n      .subscribe((text: string) => {\r\n        this.displayedCorrectionReason = this.localTranslatePipe\r\n          .transform(text)\r\n          .split(\",\");\r\n      });\r\n    this.translateService\r\n      .get(this.languagePath + \"serviceCategoryDisplayedUpdateHandicap\")\r\n      .subscribe((text: string) => {\r\n        this.displayedUpdateHandicap = this.localTranslatePipe\r\n          .transform(text)\r\n          .split(\",\");\r\n      });\r\n  }\r\n\r\n  /**\r\n   * Initialize the additional fields in the form\r\n   */\r\n  private intializeAdditionalFields(): void {\r\n    this.additionalFieldsConfig.forEach((element) => {\r\n      //adding form control names in service category form group\r\n      (this.serviceRequestForm.get(\"serviceCategory\") as FormGroup).addControl(\r\n        element.formControlName,\r\n        new FormControl(\"\")\r\n      );\r\n\r\n      //loading values from config object\r\n      if (element.inputTypeOptions) {\r\n        this.optionsByAdditionalField.set(\r\n          element.formControlName,\r\n          element.inputTypeOptions\r\n        );\r\n      }\r\n    });\r\n  }\r\n}\r\n","<form [formGroup]=\"serviceRequestForm\">\r\n  <div fxLayout=\"column\" fxLayoutGap=\"2em\" formGroupName=\"serviceCategory\">\r\n    <!-- Required Inputs -->\r\n    <div fxLayout=\"row wrap\" fxLayout.lt-sm=\"column\" fxLayoutGap=\"2em\" fxLayoutAlign=\"flex-start\">\r\n      <!-- Issue -->\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryIssueLabel') | translate | localTranslate }}</mat-label>\r\n        <mat-select id=\"issue\" formControlName=\"issue\" [(value)]=\"selectedIssue\">\r\n          @if (issues) {\r\n          <mat-option value=\"\" selected>\r\n            {{ (languagePath + 'serviceCategoryIssuePlaceholder') | translate | localTranslate }}\r\n          </mat-option>\r\n          }\r\n          @for (item of issues; track item; let i = $index) {\r\n          <mat-option value=\"{{ issues[i] }}\">{{ item }}\r\n          </mat-option>\r\n          }\r\n        </mat-select>\r\n      </mat-form-field>\r\n      <!-- Severity -->\r\n      @if (selectedIssue) {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategorySeverityLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <mat-select id=\"severity\" formControlName=\"severity\">\r\n          @if (displayedSeverities) {\r\n          <mat-option value=\"\" selected>\r\n            {{ (languagePath + 'serviceCategorySeverityPlaceholder') | translate | localTranslate }}\r\n          </mat-option>\r\n          }\r\n          @for (item of displayedSeverities; track item; let i = $index) {\r\n          <mat-option value=\"{{ i + 1 }}\">{{ item }}\r\n          </mat-option>\r\n          }\r\n        </mat-select>\r\n      </mat-form-field>\r\n      }\r\n      <!-- Category -->\r\n      @if (selectedIssue) {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryCategoryLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <mat-select id=\"category\" formControlName=\"category\" [(value)]=\"selectedCategory\"\r\n          (selectionChange)=\"updateAction($event)\">\r\n          @if (categoriesByIssue?.get(selectedIssue)) {\r\n          <mat-option value=\"\" selected>\r\n            {{ (languagePath + 'serviceCategoryCategoryPlaceholder') | translate | localTranslate }}\r\n          </mat-option>\r\n          }\r\n          @for (item of categoriesByIssue?.get(selectedIssue); track item; let i = $index) {\r\n          <mat-option value=\"{{ categoriesByIssue.get(selectedIssue)[i] }}\">\r\n            {{ item }}\r\n          </mat-option>\r\n          }\r\n        </mat-select>\r\n      </mat-form-field>\r\n      }\r\n    </div>\r\n    <mat-divider class=\"service-category-mat-divider\"></mat-divider>\r\n\r\n    <!-- Additional Inputs -->\r\n    @for (formField of selectedExistingFieldsConfig; track formField) {\r\n    <div fxLayout=\"row wrap\" fxLayout.lt-sm=\"column\" fxLayoutGap=\"2em\" fxLayoutAlign=\"flex-start\"\r\n      class=\"additional-input-container\">\r\n      <!-- Notice Type -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Notice Type') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryNoticeTypeLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <mat-select id=\"noticeType\" formControlName=\"noticeType\" [(value)]=\"selectedNoticeType\">\r\n          <mat-option value=\"\" selected>\r\n            {{ (languagePath + 'serviceCategoryNoticeTypePlaceholder') | translate | localTranslate }}\r\n          </mat-option>\r\n          @for (item of formField.inputDisplayOptions; track item; let i = $index) {\r\n          <mat-option value=\"{{ formField.inputOptions[i]}}\">\r\n            {{ item }}</mat-option>\r\n          }\r\n        </mat-select>\r\n      </mat-form-field>\r\n      }\r\n      <!-- Invoice Period -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Invoice Period') {\r\n      <div fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <lighthouse-month-year-picker [monthYearFormControl]=\"serviceRequestForm.get('serviceCategory.invoicePeriod')\"\r\n          [placeholder]=\"((languagePath + 'serviceCategoryInvoicePeriodPlaceholder') | translate | localTranslate)\">\r\n        </lighthouse-month-year-picker>\r\n      </div>\r\n      }\r\n      <!-- Communications - 1095A Correction Category -->\r\n      <ng-container>\r\n        @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n        (formField.fieldName === 'Tax Year'|| formField.fieldName === 'Correction Type' || formField.fieldName ===\r\n        'Correction Reasons')) {\r\n        <div fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n          @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n          formField.fieldName === 'Tax Year'|| 'Correction Type' || 'Correction Reasons') {\r\n          <div fxLayout=\"column\" fxLayoutGap=\"1.5em\">\r\n            <!-- Tax Year -->\r\n            @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required\r\n            && formField.fieldName === 'Tax Year') {\r\n            <lighthouse-year-picker [yearFormControl]=\"serviceRequestForm.get('serviceCategory.taxYear')\"\r\n              [placeholder]=\"((languagePath + 'serviceCategoryTaxYearPlaceholder') | translate | localTranslate) + ' *'\">\r\n            </lighthouse-year-picker>\r\n            }\r\n            <!-- Correction Type -->\r\n            @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required\r\n            && formField.fieldName === 'Correction Type') {\r\n            <mat-label id=\"correction-type-label\">\r\n              {{ (languagePath + 'serviceCategoryCorrectionTypeLabel') | translate | localTranslate }}\r\n            </mat-label>\r\n            <mat-radio-group aria-labelledby=\"correction-type-label\" class=\"correction-type-group\"\r\n              formControlName=\"correctionType\">\r\n              @for (item of formField.inputDisplayOptions; track item; let i = $index) {\r\n              <mat-radio-button class=\"correction-type-button\" id=\"correction-type-button-id-{{ i }}\"\r\n                value=\"{{ formField.inputOptions[i]}}\">\r\n                {{ item }}\r\n              </mat-radio-button>\r\n              }\r\n            </mat-radio-group>\r\n            }\r\n            <!-- Correction Reason -->\r\n            @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required\r\n            && formField.fieldName === 'Correction Reasons') {\r\n            <mat-label id=\"correction-reason-label\">\r\n              {{ (languagePath + 'serviceCategoryCorrectionReasonLabel') | translate | localTranslate\r\n              }}\r\n            </mat-label>\r\n            @for (reason of formField.inputDisplayOptions; track reason; let i = $index) {\r\n            <mat-checkbox id=\"correction-reason-id-{{ i }}\" (change)=\"onClickCorrectionReasonCheckBox($event, i)\">\r\n              {{ reason }}\r\n            </mat-checkbox>\r\n            }\r\n            }\r\n          </div>\r\n          }\r\n        </div>\r\n        }\r\n      </ng-container>\r\n      <!-- Communications - Generate New Invoice Category -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Invoice Correction') {\r\n      <div fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label class=\"current-billing-info\">\r\n          {{ (languagePath + 'serviceCategoryCurrentBillingPeriodInformation') | translate | localTranslate }}\r\n        </mat-label>\r\n        <div fxLayout=\"row\" fxLayoutAlign=\"flex-start\">\r\n          <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n            <mat-label>\r\n              {{ (languagePath + 'serviceCategoryInvoicePeriodLabel') | translate | localTranslate }}\r\n            </mat-label>\r\n            <input id=\"currentBillingPeriod\" matInput [value]=\"currentBillingPeriod\" formControlName=\"billingPeriod\"\r\n              readonly />\r\n          </mat-form-field>\r\n        </div>\r\n      </div>\r\n      }\r\n      <!-- New Balance -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Expected Balance') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryExpectedBalanceLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"newBalance\" matInput\r\n          placeholder=\"{{ (languagePath + 'serviceCategoryExpectedBalanceLabel') | translate | localTranslate }}\"\r\n          value=\"\" formControlName=\"newBalance\">\r\n      </mat-form-field>\r\n      }\r\n      <!-- Expected Paid Through Date -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Expected Paid Through Date') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>\r\n          {{ (languagePath + 'serviceCategoryExpectedPaidThroughDateLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"expectedPaidDatepicker\" matInput [matDatepicker]=\"expectedPaidDatepicker\"\r\n          formControlName=\"expectedPaidThroughDate\">\r\n        <mat-datepicker-toggle matSuffix [for]=\"expectedPaidDatepicker\"></mat-datepicker-toggle>\r\n        <mat-datepicker #expectedPaidDatepicker></mat-datepicker>\r\n      </mat-form-field>\r\n      }\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      (formField.fieldName === 'Original Refund Service Request Number' || formField.fieldName === 'Refund Service\r\n      Request Date of Creation' || formField.fieldName === 'Refund Status')) {\r\n      <div fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <div fxLayout=\"column\" fxLayoutGap=\"1.5em\">\r\n          <!-- Original Refund Service Request Number -->\r\n          @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n          formField.fieldName === 'Original Refund Service Request Number') {\r\n          <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n            <mat-label>\r\n              {{ (languagePath + 'serviceCategoryOriginalRefundServiceRequestNumberLabel') | translate |\r\n              localTranslate }}\r\n            </mat-label>\r\n            <input id=\"refundServiceRequestNumber\" matInput value=\"\" formControlName=\"refundServiceRequestNumber\">\r\n          </mat-form-field>\r\n          }\r\n          <!-- Refund Service Request Date of Creation -->\r\n          @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n          formField.fieldName === 'Refund Service Request Date of Creation') {\r\n          <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n            <mat-label>\r\n              {{ (languagePath + 'serviceCategoryRefundRequestCreationDate') | translate | localTranslate\r\n              }}\r\n            </mat-label>\r\n            <input id=\"refundServiceRequestCreationDate\" matInput [matDatepicker]=\"datepicker\" [max]=\"maxDate\"\r\n              formControlName=\"refundCreationDate\">\r\n            <mat-datepicker-toggle matSuffix [for]=\"datepicker\"></mat-datepicker-toggle>\r\n            <mat-datepicker #datepicker></mat-datepicker>\r\n          </mat-form-field>\r\n          }\r\n          <!-- Refund Service Request Status -->\r\n          @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n          formField.fieldName === 'Refund Status') {\r\n          <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n            <mat-label>\r\n              {{ (languagePath + 'serviceCategoryRefundStatusLabel') | translate | localTranslate }}\r\n            </mat-label>\r\n            <mat-select id=\"refundStatus\" formControlName=\"refundStatus\">\r\n              <mat-option value=\"\" selected>\r\n                {{ (languagePath + 'serviceCategoryRefundStatusPlaceholder') | translate |\r\n                localTranslate }}\r\n              </mat-option>\r\n              @for (item of formField.inputDisplayOptions; track item; let i = $index) {\r\n              <mat-option value=\"{{ formField.inputOptions[i]}}\">\r\n                {{ item }}</mat-option>\r\n              }\r\n            </mat-select>\r\n          </mat-form-field>\r\n          }\r\n        </div>\r\n      </div>\r\n      }\r\n      <!-- Reason -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Reason') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryReasonLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <mat-select id=\"reason\" formControlName=\"reason\">\r\n          @if (displayedReason) {\r\n          <mat-option value=\"\" selected>\r\n            {{ (languagePath + 'serviceCategoryReasonPlaceholder') | translate | localTranslate }}\r\n          </mat-option>\r\n          }\r\n          @for (item of formField.inputDisplayOptions; track item; let i = $index) {\r\n          <mat-option value=\"{{ formField.inputOptions[i]}}\">\r\n            {{ item }}</mat-option>\r\n          }\r\n        </mat-select>\r\n      </mat-form-field>\r\n      }\r\n      <!-- Group/Policy Number -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Group/Policy Number') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryGroupPolicyLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"groupPolicyNumber\" matInput\r\n          placeholder=\"{{ (languagePath + 'serviceCategoryGroupPolicyNumberPlaceholder') | translate | localTranslate }}\"\r\n          value=\"\" formControlName=\"groupPolicyNumber\">\r\n      </mat-form-field>\r\n      }\r\n      <!-- Span Folder ID -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Span Folder Id') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategorySpanFolderIdLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"spanFolderId\" matInput\r\n          placeholder=\"{{ (languagePath + 'serviceCategorySpanFolderIdPlaceholder') | translate | localTranslate }}\"\r\n          value=\"\" formControlName=\"spanFolderId\">\r\n      </mat-form-field>\r\n      }\r\n      <!-- Begin Date -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Begin Date') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryBeginDateLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"beginDate\" matInput [matDatepicker]=\"beginDatepicker\" formControlName=\"beginDate\">\r\n        <mat-datepicker-toggle matSuffix [for]=\"beginDatepicker\"></mat-datepicker-toggle>\r\n        <mat-datepicker #beginDatepicker></mat-datepicker>\r\n      </mat-form-field>\r\n      }\r\n      <!-- End Date -->\r\n      @if (serviceRequestForm.get('serviceCategory.beginDate').value && formField.issueType === selectedIssue &&\r\n      formField.category === selectedCategory && formField.required && formField.fieldName === 'Begin Date') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryEndDateLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"endDate\" matInput [matDatepicker]=\"endDatepicker\" formControlName=\"endDate\"\r\n          [min]=\"serviceRequestForm.get('serviceCategory.beginDate').value\">\r\n        <mat-datepicker-toggle matSuffix [for]=\"endDatepicker\"></mat-datepicker-toggle>\r\n        <mat-datepicker #endDatepicker [startAt]=\"serviceRequestForm.get('serviceCategory.beginDate').value\">\r\n        </mat-datepicker>\r\n      </mat-form-field>\r\n      }\r\n      <!-- Expected Status -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Expected Status') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryExpectedStatusLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"expectedStatus\" matInput\r\n          placeholder=\"{{ (languagePath + 'serviceCategoryExpectedStatusPlaceholder') | translate | localTranslate }}\"\r\n          value=\"\" formControlName=\"expectedStatus\">\r\n      </mat-form-field>\r\n      }\r\n      <!-- Expected Rate -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Expected Rate') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryExpectedRateLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"expectedRate\" matInput\r\n          placeholder=\"{{ (languagePath + 'serviceCategoryExpectedRatePlaceholder') | translate | localTranslate }}\"\r\n          value=\"\" formControlName=\"expectedRate\">\r\n      </mat-form-field>\r\n      }\r\n      <!-- Expected APTC -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Expected APTC') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryExpectedAPTCLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"expectedAPTC\" matInput\r\n          placeholder=\"{{ (languagePath + 'serviceCategoryExpectedAPTCPlaceholder') | translate | localTranslate }}\"\r\n          value=\"\" formControlName=\"expectedAPTC\">\r\n      </mat-form-field>\r\n      }\r\n      <!-- Expected CSR -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Expected CSR') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryExpectedCSRLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"expectedCSR\" matInput\r\n          placeholder=\"{{ (languagePath + 'serviceCategoryExpectedCSRPlaceholder') | translate | localTranslate }}\"\r\n          value=\"\" formControlName=\"expectedCSR\">\r\n      </mat-form-field>\r\n      }\r\n      <!-- Expected Premium -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Expected Premium') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryExpectedPremiumLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"expectedPremium\" matInput\r\n          placeholder=\"{{ (languagePath + 'serviceCategoryExpectedPremiumPlaceholder') | translate | localTranslate }}\"\r\n          value=\"\" formControlName=\"expectedPremium\">\r\n      </mat-form-field>\r\n      }\r\n      <!-- Expected Issuer Subscriber ID -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Expected Issuer Subscriber Id') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>\r\n          {{ (languagePath + 'serviceCategoryExpectedIssuerSubscriberIdLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"expectedIssuerSubscriberId\" matInput\r\n          placeholder=\"{{ (languagePath + 'serviceCategoryExpectedIssuerSubscriberIdPlaceholder') | translate | localTranslate }}\"\r\n          value=\"\" formControlName=\"expectedIssuerSubscriberId\">\r\n      </mat-form-field>\r\n      }\r\n      <!-- Expected Issuer Member ID -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Expected Issuer Member Id') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>\r\n          {{ (languagePath + 'serviceCategoryExpectedIssuerMemberIdLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"expectedIssuerMemberId\" matInput\r\n          placeholder=\"{{ (languagePath + 'serviceCategoryExpectedIssuerMemberIdPlaceholder') | translate | localTranslate }}\"\r\n          value=\"\" formControlName=\"expectedIssuerMemberId\">\r\n      </mat-form-field>\r\n      }\r\n      <!-- Discount Approved or Denied -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Discount Approval Status') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>\r\n          {{ (languagePath + 'serviceCategoryDiscountApprovedOrDeniedLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <mat-select id=\"discountApprovedOrDenied\" formControlName=\"discountApprovedOrDenied\">\r\n          @if (discountApprovedOrDenied) {\r\n          <mat-option value=\"\" selected>\r\n            {{ (languagePath + 'serviceCategoryDiscountApprovedOrDeniedPlaceholder') | translate |\r\n            localTranslate }}\r\n          </mat-option>\r\n          }\r\n          @for (item of formField.inputDisplayOptions; track item; let i = $index) {\r\n          <mat-option value=\"{{ formField.inputOptions[i]}}\">\r\n            {{ item }}</mat-option>\r\n          }\r\n        </mat-select>\r\n      </mat-form-field>\r\n      }\r\n      <!-- Discount Type -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Discount Type' &&\r\n      serviceRequestForm.get('serviceCategory.discountApprovedOrDenied').value === 'Approved') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryDiscountTypeLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <mat-select id=\"discountType\" formControlName=\"discountType\">\r\n          @if (displayedDiscountType) {\r\n          <mat-option value=\"\" selected>\r\n            {{ (languagePath + 'serviceCategoryDiscountTypePlaceholder') | translate | localTranslate }}\r\n          </mat-option>\r\n          }\r\n          @for (item of formField.inputDisplayOptions; track item; let i = $index) {\r\n          <mat-option value=\"{{ formField.inputOptions[i]}}\">\r\n            {{ item }}</mat-option>\r\n          }\r\n        </mat-select>\r\n      </mat-form-field>\r\n      }\r\n      <!-- Discount Amount Type -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Discount Amount Type' &&\r\n      serviceRequestForm.get('serviceCategory.discountApprovedOrDenied').value === 'Approved' &&\r\n      serviceRequestForm.get('serviceCategory.discountType').value === 'Flat') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryDiscountAmountTypeLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <mat-select id=\"discountAmountType\" formControlName=\"discountAmountType\">\r\n          @if (displayedDiscountAmountType) {\r\n          <mat-option value=\"\" selected>{{ (languagePath + 'serviceCategoryDiscountAmountTypePlaceholder') | translate |\r\n            localTranslate }}</mat-option>\r\n          }\r\n          @for (item of formField.inputDisplayOptions; track item; let i = $index) {\r\n          <mat-option value=\"{{ formField.inputOptions[i]}}\">\r\n            {{ item }}\r\n          </mat-option>\r\n          }\r\n        </mat-select>\r\n      </mat-form-field>\r\n      }\r\n      <!-- Discount Amount -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Discount Amount' &&\r\n      serviceRequestForm.get('serviceCategory.discountApprovedOrDenied').value === 'Approved' &&\r\n      (serviceRequestForm.get('serviceCategory.discountType').value === 'Percentage' ||\r\n      (serviceRequestForm.get('serviceCategory.discountType').value === 'Flat' &&\r\n      serviceRequestForm.get('serviceCategory.discountAmountType').value === 'Other'))) {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryDiscountAmountLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"discountAmount\" matInput [numbersOnly]=\"true\"\r\n          placeholder=\"{{ (languagePath + 'serviceCategoryDiscountAmountPlaceholder') | translate | localTranslate }}\"\r\n          value=\"\" formControlName=\"discountAmount\">\r\n        @if (serviceRequestForm.get('serviceCategory.discountAmount').hasError('rangeError')) {\r\n        <mat-error>\r\n          {{(languagePath + 'serviceCategoryDiscountAmountError') | translate | localTranslate: { min:\r\n          serviceRequestForm.get('serviceCategory.discountAmount').errors['rangeError']['min'], max:\r\n          serviceRequestForm.get('serviceCategory.discountAmount').errors['rangeError']['max'] } }}\r\n        </mat-error>\r\n        }\r\n      </mat-form-field>\r\n      }\r\n      <!-- Discount Start Date -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Discount Start Date' &&\r\n      serviceRequestForm.get('serviceCategory.discountApprovedOrDenied').value === 'Approved') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryDiscountStartDateLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"discountStartDate\" matInput [matDatepicker]=\"discountStartDatepicker\"\r\n          formControlName=\"discountStartDate\">\r\n        <mat-datepicker-toggle matSuffix [for]=\"discountStartDatepicker\"></mat-datepicker-toggle>\r\n        <mat-datepicker #discountStartDatepicker></mat-datepicker>\r\n      </mat-form-field>\r\n      }\r\n      <!-- Discount End Date -->\r\n      @if (serviceRequestForm.get('serviceCategory.discountStartDate').value && formField.issueType === selectedIssue &&\r\n      formField.category === selectedCategory && formField.required && formField.fieldName === 'Discount Start Date'\r\n      && serviceRequestForm.get('serviceCategory.discountApprovedOrDenied').value === 'Approved') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryDiscountEndDateLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"discountEndDate\" matInput [matDatepicker]=\"discountEndDatepicker\" formControlName=\"discountEndDate\"\r\n          [min]=\"serviceRequestForm.get('serviceCategory.discountStartDate').value\">\r\n        <mat-datepicker-toggle matSuffix [for]=\"discountEndDatepicker\"></mat-datepicker-toggle>\r\n        <mat-datepicker #discountEndDatepicker\r\n          [startAt]=\"serviceRequestForm.get('serviceCategory.discountStartDate').value\">\r\n        </mat-datepicker>\r\n      </mat-form-field>\r\n      }\r\n      <!-- Update Handicap -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Update Handicap') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryUpdateHandicapLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <mat-select id=\"updateHandicap\" formControlName=\"updateHandicap\">\r\n          @if (displayedUpdateHandicap) {\r\n          <mat-option value=\"\" selected>\r\n            {{ (languagePath + 'serviceCategoryUpdateHandicapPlaceholder') | translate | localTranslate }}\r\n          </mat-option>\r\n          }\r\n          @for (item of formField.inputDisplayOptions; track item; let i = $index) {\r\n          <mat-option value=\"{{ formField.inputOptions[i]}}\">\r\n            {{ item }}</mat-option>\r\n          }\r\n        </mat-select>\r\n      </mat-form-field>\r\n      }\r\n      <!-- Exchange Member Id -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Exchange Member Id') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryExchangeMemberIdLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"exchangeMemberId\" matInput\r\n          placeholder=\"{{ (languagePath + 'serviceCategoryExchangeMemberIdPlaceholder') | translate | localTranslate }}\"\r\n          value=\"\" formControlName=\"exchangeMemberId\">\r\n      </mat-form-field>\r\n      }\r\n      <!-- Handicap Start Date -->\r\n      @if (formField.issueType === selectedIssue && formField.category === selectedCategory && formField.required &&\r\n      formField.fieldName === 'Start Date') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryStartDateLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"handicapStartDate\" matInput [matDatepicker]=\"handicapStartDatepicker\"\r\n          formControlName=\"handicapStartDate\">\r\n        <mat-datepicker-toggle matSuffix [for]=\"handicapStartDatepicker\"></mat-datepicker-toggle>\r\n        <mat-datepicker #handicapStartDatepicker></mat-datepicker>\r\n      </mat-form-field>\r\n      }\r\n      <!-- Handicap End Date -->\r\n      @if (serviceRequestForm.get('serviceCategory.handicapStartDate').value && formField.issueType === selectedIssue &&\r\n      formField.category === selectedCategory && formField.required && formField.fieldName === 'End Date') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryEndDateLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"handicapEndDate\" matInput [matDatepicker]=\"handicapEndDatepicker\" formControlName=\"handicapEndDate\"\r\n          [min]=\"serviceRequestForm.get('serviceCategory.handicapStartDate').value\">\r\n        <mat-datepicker-toggle matSuffix [for]=\"handicapEndDatepicker\"></mat-datepicker-toggle>\r\n        <mat-datepicker #handicapEndDatepicker\r\n          [startAt]=\"serviceRequestForm.get('serviceCategory.handicapStartDate').value\">\r\n        </mat-datepicker>\r\n      </mat-form-field>\r\n      }\r\n      <!-- Notice Type === Duplicated Subsidies Ending -->\r\n      <!-- Contact Due Date -->\r\n      @if (selectedIssue === 'Communications' && selectedCategory === 'Generate Notice' && selectedNoticeType ===\r\n      'Duplicate Coverage Subsidies Ending') {\r\n      <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n        <mat-label>{{ (languagePath + 'serviceCategoryContactDueDateLabel') | translate | localTranslate }}\r\n        </mat-label>\r\n        <input id=\"contactDueDate\" matInput [matDatepicker]=\"datepicker\" formControlName=\"contactDueDate\">\r\n        <mat-datepicker-toggle matSuffix [for]=\"datepicker\"></mat-datepicker-toggle>\r\n        <mat-datepicker #datepicker></mat-datepicker>\r\n      </mat-form-field>\r\n      }\r\n      <!-- Placeholder -->\r\n      @if (selectedIssue === 'Communications' && selectedCategory === 'Generate Notice' && selectedNoticeType ===\r\n      'Duplicate Coverage Subsidies Ending') {\r\n      <div fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n      </div>\r\n      }\r\n      <!-- DeDup Members -->\r\n      @if (selectedIssue === 'Communications' && selectedCategory === 'Generate Notice' && selectedNoticeType ===\r\n      'Duplicate Coverage Subsidies Ending') {\r\n      <ng-container formArrayName=\"dedupMembers\">\r\n        @for (dedupMember of dedupMembers.controls; track dedupMember; let i = $index) {\r\n        <div class=\"dedup-member\" fxLayout=\"row wrap\" fxLayout.lt-sm=\"column\" fxLayoutGap=\"2em\"\r\n          fxLayoutAlign=\"flex-start\">\r\n          <ng-container [formGroupName]=\"i\">\r\n            <!-- Member Name -->\r\n            <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n              <mat-label>\r\n                {{ (languagePath + 'serviceCategoryMemberNameLabel') | translate | localTranslate }} {{i\r\n                + 1}}\r\n              </mat-label>\r\n              <input id=\"memberName\" matInput\r\n                placeholder=\"{{ (languagePath + 'serviceCategoryMemberNamePlaceholder') | translate | localTranslate }} {{i + 1}}\"\r\n                value=\"\" formControlName=\"memberName\">\r\n            </mat-form-field>\r\n            <!-- Member Id -->\r\n            <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n              <mat-label>\r\n                {{ (languagePath + 'serviceCategoryMemberIdLabel') | translate | localTranslate }} {{i +\r\n                1}}\r\n              </mat-label>\r\n              <input id=\"memberId\" matInput\r\n                placeholder=\"{{ (languagePath + 'serviceCategoryMemberIdPlaceholder') | translate | localTranslate }} {{i + 1}}\"\r\n                value=\"\" formControlName=\"memberId\">\r\n            </mat-form-field>\r\n            <!-- Plan Name -->\r\n            <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n              <mat-label>\r\n                {{ (languagePath + 'serviceCategoryPlanNameLabel') | translate | localTranslate }} {{i +\r\n                1}}\r\n              </mat-label>\r\n              <input id=\"planName\" matInput\r\n                placeholder=\"{{ (languagePath + 'serviceCategoryPlanNamePlaceholder') | translate | localTranslate }} {{i + 1}}\"\r\n                value=\"\" formControlName=\"planName\">\r\n            </mat-form-field>\r\n            <!-- Monthly Premium -->\r\n            <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n              <mat-label>\r\n                {{ (languagePath + 'serviceCategoryMonthlyPremiumLabel') | translate | localTranslate }}\r\n                {{i + 1}}\r\n              </mat-label>\r\n              <input id=\"monthlyPremium\" matInput\r\n                placeholder=\"{{ (languagePath + 'serviceCategoryMonthlyPremiumPlaceholder') | translate | localTranslate }} {{i + 1}}\"\r\n                value=\"\" formControlName=\"monthlyPremium\">\r\n            </mat-form-field>\r\n            <!-- Coverage Start Date -->\r\n            <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n              <mat-label>\r\n                {{ (languagePath + 'serviceCategoryCoverageStartDateLabel') | translate | localTranslate\r\n                }} {{i + 1}}\r\n              </mat-label>\r\n              <input id=\"coverageStartDate\" matInput [matDatepicker]=\"datepicker\" formControlName=\"coverageStartDate\">\r\n              <mat-datepicker-toggle matSuffix [for]=\"datepicker\"></mat-datepicker-toggle>\r\n              <mat-datepicker #datepicker></mat-datepicker>\r\n            </mat-form-field>\r\n            <button mat-stroked-button id=\"delete-dedup-member-{{i + 1}}-btn\" (click)=\"removeDedupMember(i)\"\r\n              fxFlex=\"0 1 calc(18% - 2em)\" fxFlex.lt-md=\"0 1 calc(30% - 2em)\" fxFlex.lt-sm=\"100%\" fxFlexAlign=\"center\">\r\n              {{ (languagePath + 'serviceCategoryDedupMemberDelete') | translate | localTranslate }}\r\n            </button>\r\n          </ng-container>\r\n        </div>\r\n        }\r\n        <div fxLayout=\"row\" fxLayoutAlign=\"flex-start\">\r\n          @if (dedupMembers.controls.length < 5) { <button mat-stroked-button (click)=\"addDedupMember()\"\r\n            id=\"add-dedup-member-btn\">{{ (languagePath + 'serviceCategoryDedupMemberAdd') | translate |\r\n            localTranslate }}</button>\r\n            }\r\n        </div>\r\n      </ng-container>\r\n      }\r\n    </div>\r\n    }\r\n\r\n    <!-- Additional fields configured -->\r\n    @if (additionalFieldsDisplay) {\r\n    <span>\r\n      @for (formField of formFieldsBasedOnCategorySelected; track formField) {\r\n      <div>\r\n        <!-- Input type: input -->\r\n        @if ((formField.inputType | lowercase) === 'input' && (formField.issueType === selectedIssue &&\r\n        formField.category === selectedCategory)) {\r\n        <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n          <mat-label>\r\n            {{ formField.label }}\r\n          </mat-label>\r\n          <input id=\"{{formField.formControlName}}\" matInput value=\"\" formControlName=\"{{formField.formControlName}}\">\r\n        </mat-form-field>\r\n        }\r\n        <!-- Input type: Date -->\r\n        @if ((formField.inputType | lowercase) === 'date' && (formField.issueType === selectedIssue &&\r\n        formField.category === selectedCategory)) {\r\n        <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n          <mat-label>{{ formField.label}}\r\n          </mat-label>\r\n          <input id=\"{{formField.formControlName}}\" matInput [matDatepicker]=\"datepicker\"\r\n            formControlName=\"{{formField.formControlName}}\">\r\n          <mat-datepicker-toggle matSuffix [for]=\"datepicker\"></mat-datepicker-toggle>\r\n          <mat-datepicker #datepicker></mat-datepicker>\r\n        </mat-form-field>\r\n        }\r\n        <!-- Input type: Dropdown -->\r\n        @if ((formField.inputType | lowercase) === 'dropdown' && (formField.issueType === selectedIssue &&\r\n        formField.category === selectedCategory)) {\r\n        <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n          <mat-label>\r\n            {{ formField.label}}\r\n          </mat-label>\r\n          <mat-select id=\"{{ formField.formControlName }}\" formControlName=\"{{ formField.formControlName }}\">\r\n            @for (item of optionsByAdditionalField?.get(formField.formControlName); track item; let i = $index) {\r\n            <mat-option value=\"{{optionsByAdditionalField.get(formField.formControlName)[i]}}\">\r\n              {{ item }}\r\n            </mat-option>\r\n            }\r\n          </mat-select>\r\n        </mat-form-field>\r\n        }\r\n        <!-- Input type: textarea -->\r\n        @if ((formField.inputType | lowercase) === 'textarea' && (formField.issueType === selectedIssue &&\r\n        formField.category === selectedCategory)) {\r\n        <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n          <mat-label>{{ formField.label }}\r\n          </mat-label>\r\n          <textarea matInput formControlName=\"{{formField.formControlName}}\" value=\"\"></textarea>\r\n        </mat-form-field>\r\n        }\r\n        <!-- Input type: currency -->\r\n        @if ((formField.inputType | lowercase) === 'currency' && (formField.issueType === selectedIssue &&\r\n        formField.category === selectedCategory)) {\r\n        <mat-form-field fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\">\r\n          <mat-label>{{ formField.label}}\r\n          </mat-label>\r\n          <span matPrefix>$&nbsp;</span>\r\n          <input matInput type=\"text\" mask=\"separator.2\" thousandSeparator=\",\"\r\n            formControlName=\"{{formField.formControlName}}\" value=\"\" />\r\n        </mat-form-field>\r\n        }\r\n        <!-- Input type: checkbox -->\r\n        @if ((formField.inputType | lowercase) === 'checkbox' && (formField.issueType === selectedIssue &&\r\n        formField.category === selectedCategory)) {\r\n        <span fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\" fxLayout=\"column\"\r\n          fxLayoutGap=\"1.5em\">\r\n          <mat-label id=\"correction-reason-label\">\r\n            {{ formField.label }} *\r\n          </mat-label>\r\n          @for (item of optionsByAdditionalField?.get(formField.formControlName); track item; let i = $index) {\r\n          <mat-checkbox (change)=\"onCheckBoxSelectionForAdditionalFields($event, i, formField.formControlName)\">\r\n            {{ item }}\r\n          </mat-checkbox>\r\n          }\r\n          <br />\r\n        </span>\r\n        }\r\n        <!-- Input type: radiobutton -->\r\n        @if ((formField.inputType | lowercase) === 'radiobutton' && (formField.issueType === selectedIssue &&\r\n        formField.category === selectedCategory)) {\r\n        <span fxFlex=\"0 1 calc(33.3% - 2em)\" fxFlex.lt-md=\"0 1 calc(50% - 2em)\" fxFlex.lt-sm=\"100%\" fxLayout=\"column\"\r\n          fxLayoutGap=\"1.5em\">\r\n          <mat-label>\r\n            {{formField.label}}\r\n          </mat-label>\r\n          <mat-radio-group formControlName=\"{{formField.formControlName}}\" aria-labelledby=\"correction-type-label\"\r\n            class=\"correction-type-group\">\r\n            @for (item of optionsByAdditionalField?.get(formField.formControlName); track item; let i = $index) {\r\n            <mat-radio-button class=\"correction-type-button\"\r\n              value=\"{{optionsByAdditionalField.get(formField.formControlName)[i]}}\">\r\n              {{ item }}\r\n            </mat-radio-button>\r\n            }\r\n          </mat-radio-group>\r\n          <br />\r\n        </span>\r\n        }\r\n      </div>\r\n      }\r\n    </span>\r\n    }\r\n  </div>\r\n</form>","import {\r\n  Component,\r\n  OnInit,\r\n  OnDestroy,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n  ViewChild,\r\n} from \"@angular/core\";\r\nimport { MatSnackBar } from \"@angular/material/snack-bar\";\r\nimport { MatTable } from \"@angular/material/table\";\r\n\r\nimport { FileUploader, FileItem, FileLikeObject } from \"ng2-file-upload\";\r\nimport {\r\n  faCloudUploadAlt,\r\n  IconDefinition,\r\n  faTrash,\r\n} from \"@fortawesome/free-solid-svg-icons\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\n\r\nimport { Attachment } from \"../../models/attachment\";\r\nimport { LocalTranslatePipe } from \"../../pipes/local-translate.pipe\";\r\n\r\n/**\r\n * The file uploader component\r\n */\r\n@Component({\r\n  selector: \"lighthouse-file-uploader\",\r\n  templateUrl: \"./file-uploader.component.html\",\r\n  styleUrls: [\"./file-uploader.component.css\"],\r\n  standalone: false,\r\n})\r\nexport class FileUploaderComponent implements OnInit, OnDestroy {\r\n  /** The maximum file size config. 10MB by default */\r\n  @Input()\r\n  public maxFileSize: number = 10;\r\n\r\n  /** The language path */\r\n  @Input()\r\n  public languagePath: string;\r\n\r\n  /** The event emitter for attachments */\r\n  @Output()\r\n  public attachmentsEmitter: EventEmitter<Attachment[]> = new EventEmitter<\r\n    Attachment[]\r\n  >();\r\n\r\n  /** The attachmente material table */\r\n  @ViewChild(MatTable)\r\n  public attachmentTable: MatTable<any>;\r\n\r\n  /** The font awesome icon for cloud upload alt */\r\n  public faCloudUploadAlt: IconDefinition = faCloudUploadAlt;\r\n\r\n  /** The font awesome icon for trash */\r\n  public faTrash: IconDefinition = faTrash;\r\n\r\n  /** The file uploader object */\r\n  public fileUploader: FileUploader;\r\n\r\n  /** The boolean flag to check file drop zone over status */\r\n  public hasBaseDropZoneOver: boolean;\r\n\r\n  /** The boolean flag to check the file is over the limit file size config */\r\n  public isMaxSizeOver: boolean;\r\n\r\n  /** The displayed columns for attachment table */\r\n  public displayedColumns = [\"name\", \"size\", \"action\"];\r\n\r\n  /**\r\n   * The constructor\r\n   * @param snackBar The snack bar material component\r\n   * @param translateService The translate service for language\r\n   * @param localTranslatePipe The local translate pipe\r\n   */\r\n  constructor(\r\n    private snackBar: MatSnackBar,\r\n    private translateService: TranslateService,\r\n    private localTranslatePipe: LocalTranslatePipe\r\n  ) {}\r\n\r\n  /**\r\n   * Initialize the component life cycle\r\n   */\r\n  public ngOnInit(): void {\r\n    this.initializeFileUploader();\r\n  }\r\n\r\n  /**\r\n   * Destroy the component life cycle\r\n   */\r\n  public ngOnDestroy(): void {\r\n    if (this.fileUploader) this.fileUploader.clearQueue();\r\n  }\r\n\r\n  /**\r\n   * The function when mouse is over the file drop area\r\n   */\r\n  public fileOverBase(event: any): void {\r\n    this.hasBaseDropZoneOver = event;\r\n  }\r\n\r\n  /**\r\n   * The function for removing item from queue\r\n   */\r\n  public removeItem(item: FileItem): void {\r\n    this.isMaxSizeOver = false;\r\n    item.remove();\r\n    this.attachmentTable.renderRows();\r\n    this.emitAttachments();\r\n  }\r\n\r\n  /**\r\n   * Emit the attachments with the file items in the queue\r\n   */\r\n  public emitAttachments(): void {\r\n    const attachments = this.createAttachments();\r\n    this.attachmentsEmitter.emit(attachments);\r\n  }\r\n\r\n  /**\r\n   * The function to create attachments based on file items from the queue\r\n   */\r\n  private createAttachments(): Attachment[] {\r\n    const attachments = [];\r\n    for (const item of this.fileUploader.queue) {\r\n      attachments.push({ name: item.file.name, file: item._file });\r\n    }\r\n\r\n    return attachments.length > 0 ? attachments : [];\r\n  }\r\n\r\n  /**\r\n   * Initialize the file uploader instance\r\n   */\r\n  private initializeFileUploader() {\r\n    this.fileUploader = new FileUploader({\r\n      isHTML5: true,\r\n      url: \"\",\r\n      allowedMimeType: [\r\n        \"image/png\",\r\n        \"image/jpeg\",\r\n        \"image/gif\",\r\n        \"image/svg+xml\",\r\n        \"text/plain\",\r\n        \"text/csv\",\r\n        \"text/xml\",\r\n        \"application/pdf\",\r\n        \"application/zip\",\r\n        \"application/x-compressed\",\r\n        \"application/x-zip-compressed\",\r\n        \"multipart/x-zip\",\r\n        \"application/msword\",\r\n        \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\r\n        \"application/vnd.ms-excel\",\r\n        \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n        \"application/vnd.ms-outlook\",\r\n      ],\r\n      removeAfterUpload: true,\r\n      autoUpload: false,\r\n      queueLimit: 10,\r\n      maxFileSize: this.maxFileSize * 1024 * 1024, // Default 10MB\r\n    });\r\n\r\n    this.fileUploader.onAfterAddingAll = (() => {\r\n      this.attachmentTable.renderRows();\r\n      this.emitAttachments();\r\n    }).bind(this);\r\n\r\n    this.fileUploader.onAfterAddingFile = ((fileItem: FileItem) => {\r\n      fileItem.withCredentials = true;\r\n      this.isMaxSizeOver = false;\r\n    }).bind(this);\r\n\r\n    this.fileUploader.onWhenAddingFileFailed = ((file: FileLikeObject) => {\r\n      // Case 1: File size is over.\r\n      if (file.size > this.fileUploader.options.maxFileSize) {\r\n        this.isMaxSizeOver = true;\r\n        this.showSnackBarErrorMsg(\r\n          this.languagePath + \"fileUploaderSnackbarFileSizeOver\",\r\n          this.languagePath + \"commonSnackBarClose\",\r\n          { maxFileSize: this.fileUploader.options.maxFileSize / 1024 / 1024 }\r\n        );\r\n      }\r\n\r\n      // Case 2: Queue limit is over.\r\n      if (\r\n        this.fileUploader.queue.length === this.fileUploader.options.queueLimit\r\n      ) {\r\n        this.showSnackBarErrorMsg(\r\n          this.languagePath + \"fileUploaderSnackbarQueueLimitOver\",\r\n          this.languagePath + \"commonSnackBarClose\",\r\n          { queueLimit: this.fileUploader.options.queueLimit }\r\n        );\r\n      }\r\n\r\n      // Case 3: Unsupported file format.\r\n      if (!this.fileUploader.options.allowedMimeType.includes(file.type)) {\r\n        this.showSnackBarErrorMsg(\r\n          this.languagePath + \"fileUploaderSnackbarInvalidType\",\r\n          this.languagePath + \"commonSnackBarClose\",\r\n          { fileName: file.name }\r\n        );\r\n      }\r\n    }).bind(this);\r\n  }\r\n\r\n  /**\r\n   * Display snack bar for error message\r\n   * @param errorMsgKey en.json translation key for error message\r\n   * @param buttonMsgKey en.json translation key for error button message\r\n   * @param interpolateParams Additional params for error message\r\n   */\r\n  private showSnackBarErrorMsg(\r\n    errorMsgKey: string,\r\n    buttonMsgKey: string,\r\n    interpolateParams?: any\r\n  ): void {\r\n    const snackBarErrorMsg = this.localTranslatePipe.transform(\r\n      this.translateService.instant(errorMsgKey, interpolateParams)\r\n    );\r\n    const snackBarErrorActionMsg = this.localTranslatePipe.transform(\r\n      this.translateService.instant(buttonMsgKey)\r\n    );\r\n    this.snackBar.open(snackBarErrorMsg, snackBarErrorActionMsg, {\r\n      duration: 5000,\r\n    });\r\n  }\r\n}\r\n","<div fxLayout=\"column\" fxLayoutAlign=\"center\">\r\n  <!-- File drop zone -->\r\n  <div ng2FileDrop [class.file-drop-zone-file-over]=\"hasBaseDropZoneOver\" (fileOver)=\"fileOverBase($event)\"\r\n    [uploader]=\"fileUploader\" class=\"file-drop-zone\">\r\n    <div class=\"file-drop-zone-background\">\r\n      <fa-icon [icon]=\"faCloudUploadAlt\" size=\"5x\"></fa-icon>\r\n      <h2 class=\"margin-top-2em font-weight-600\">\r\n        {{ (languagePath + 'fileUploaderDragFileHere') | translate | localTranslate }}\r\n      </h2>\r\n      <h4 class=\"margin-top-2em font-weight-500\">\r\n        (.zip, .csv, .xml, .txt, .pdf, .xls, .xlsx, .doc, .docx, .png, .jpg, .jpeg, .gif, .svg, .msg)\r\n      </h4>\r\n    </div>\r\n  </div>\r\n  <!-- Display dropped files -->\r\n  <div class=\"file-upload-table mat-elevation-z8\">\r\n    <table mat-table [dataSource]=\"fileUploader.queue\">\r\n      <!-- Name Column -->\r\n      <ng-container matColumnDef=\"name\">\r\n        <th mat-header-cell *matHeaderCellDef>\r\n        {{ (languagePath + 'fileUploaderTableColumnName') | translate | localTranslate }} </th>\r\n        <td mat-cell *matCellDef=\"let item\"> {{item.file.name}} </td>\r\n      </ng-container>\r\n      <!-- Size Column -->\r\n      <ng-container matColumnDef=\"size\">\r\n        <th mat-header-cell *matHeaderCellDef>\r\n        {{ (languagePath + 'fileUploaderTableColumnSize') | translate | localTranslate }} </th>\r\n        <td mat-cell *matCellDef=\"let item\"> {{item.file.size / 1024 / 1024 | number: '.2'}} MB </td>\r\n      </ng-container>\r\n      <!-- Action Column -->\r\n      <ng-container matColumnDef=\"action\">\r\n        <th mat-header-cell *matHeaderCellDef>\r\n        {{ (languagePath + 'fileUploaderTableColumnAction') | translate | localTranslate }} </th>\r\n        <td mat-cell *matCellDef=\"let item\">\r\n          <fa-icon mat-stroked-button [icon]=\"faTrash\" size=\"2x\" (click)=\"removeItem(item)\">\r\n          </fa-icon>\r\n        </td>\r\n      </ng-container>\r\n      <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n      <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\r\n    </table>\r\n  </div>\r\n  <!-- Invalid warnings -->\r\n  <div class=\"margin-top-1em\">\r\n    @if (isMaxSizeOver) {\r\n      <div class=\"invalid-warning\">\r\n        {{ (languagePath + 'fileUploaderWarningFileSizeOver') | translate | localTranslate }}\r\n      </div>\r\n    }\r\n    @if (fileUploader?.queue?.length == fileUploader.options.queueLimit) {\r\n      <div class=\"invalid-warning\">\r\n        {{ (languagePath + 'fileUploaderWarningQueueLimitOver') | translate | localTranslate }}\r\n      </div>\r\n    }\r\n  </div>\r\n  <!-- Choose file button -->\r\n  <div class=\"text-center margin-top-2em\">\r\n    <button mat-stroked-button (click)=\"fileSelect.click()\" id=\"chooseFileButton\">\r\n      {{ (languagePath + 'commonButtonChooseFile') | translate | localTranslate }}\r\n    </button>\r\n    <span class=\"hideFileSelect\">\r\n      <input type=\"file\" #fileSelect ng2FileSelect [uploader]=\"fileUploader\" multiple />\r\n    </span>\r\n  </div>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\nimport { FormGroup } from \"@angular/forms\";\r\n\r\nimport { Attachment } from \"../../../../shared/models/attachment\";\r\nimport { FormService } from \"../../../services/form/form.service\";\r\n\r\n/**\r\n * The additional information component\r\n */\r\n@Component({\r\n  selector: \"lighthouse-additional-information\",\r\n  templateUrl: \"./additional-information.component.html\",\r\n  styleUrls: [\"./additional-information.component.css\"],\r\n  standalone: false,\r\n})\r\nexport class AdditionalInformationComponent implements OnInit {\r\n  /** The flag to specify the comments field is required */\r\n  @Input()\r\n  public isCommentsRequired: boolean;\r\n\r\n  /** The language path */\r\n  @Input()\r\n  public languagePath: string;\r\n\r\n  /** The attachments emitter */\r\n  @Output()\r\n  public attachmentsEmitter: EventEmitter<Attachment[]> = new EventEmitter<\r\n    Attachment[]\r\n  >();\r\n\r\n  /** The service request form group */\r\n  public serviceRequestForm: FormGroup;\r\n\r\n  /**\r\n   * The constructor\r\n   * @param formService The form service\r\n   */\r\n  constructor(private formService: FormService) {}\r\n\r\n  /**\r\n   * Initialize the component\r\n   */\r\n  public ngOnInit(): void {\r\n    this.serviceRequestForm = this.formService.serviceRequestForm;\r\n  }\r\n\r\n  /**\r\n   * The function to update current attachment list from file uploader component\r\n   * @param attachments The attachments\r\n   */\r\n  public updateAttachments(attachments: Attachment[]): void {\r\n    this.attachmentsEmitter.emit(attachments);\r\n  }\r\n}\r\n","<form [formGroup]=\"serviceRequestForm\">\r\n    <div fxLayout=\"column\" fxLayoutGap=\"2em\">\r\n        <!-- Comments -->\r\n        <div fxLayout=\"row\" fxLayoutAlign=\"space-around\" formGroupName=\"additionalInformation\">\r\n            <mat-form-field class=\"additional-information-item\">\r\n                <mat-label>\r\n                    {{ (languagePath + 'additionalInfoCommentsLabel') | translate | localTranslate }}\r\n                </mat-label>\r\n                <textarea matInput class=\"additional-information-text-area\" formControlName=\"comments\"></textarea>\r\n            </mat-form-field>\r\n        </div>\r\n        <mat-divider class=\"additional-information-mat-divider\"></mat-divider>\r\n        <!-- Uploaded Attachments -->\r\n        <div fxLayout=\"row\" fxLayoutAlign=\"space-around\">\r\n            <lighthouse-file-uploader class=\"additional-information-item\" [languagePath]=\"languagePath\" (attachmentsEmitter)=\"updateAttachments($event)\"></lighthouse-file-uploader>\r\n        </div>\r\n    </div>\r\n</form>","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit,\r\n  Output,\r\n} from \"@angular/core\";\r\nimport { FormGroup } from \"@angular/forms\";\r\nimport { Subscription } from \"rxjs\";\r\nimport { AlertService } from \"../../../core/services/alert.service\";\r\nimport { MessageService } from \"../../../core/services/message.service\";\r\nimport { Messages } from \"../../../shared/constants/messages\";\r\nimport { StorageKeys } from \"../../../shared/constants/storage-keys\";\r\nimport { Attachment } from \"../../../shared/models/attachment\";\r\nimport { ServiceRequestConfig } from \"../../configs/config-api\";\r\nimport { ServiceRequestModel } from \"../../models/models-api\";\r\nimport { FormService } from \"../../services/form/form.service\";\r\nimport {\r\n  AbstractEntityService,\r\n  AttachmentService,\r\n  ServiceRequestService,\r\n} from \"../../services/services-api\";\r\n\r\n/**\r\n * The service request component\r\n */\r\n@Component({\r\n  selector: \"lighthouse-service-request\",\r\n  templateUrl: \"./service-request.component.html\",\r\n  styleUrls: [\"./service-request.component.css\"],\r\n  standalone: false,\r\n})\r\nexport class ServiceRequestComponent implements OnInit, OnDestroy {\r\n  /** The service request config model */\r\n  @Input()\r\n  public config: ServiceRequestConfig;\r\n\r\n  /** The number of api call count emitter */\r\n  @Output()\r\n  public apiCallCountEmitter: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n  /** The service request model emitter */\r\n  @Output()\r\n  public serviceRequestEmitter: EventEmitter<ServiceRequestModel> =\r\n    new EventEmitter<ServiceRequestModel>();\r\n\r\n  /** The service request submit result emitter */\r\n  @Output()\r\n  public isSubmitSuccessEmitter: EventEmitter<boolean> =\r\n    new EventEmitter<boolean>();\r\n\r\n  /** The service request form group */\r\n  public serviceRequestFormGroup: FormGroup;\r\n\r\n  /** The boolean flag to specify whether the submit is requested */\r\n  public isSubmitRequested: boolean = false;\r\n\r\n  /** The subscription to count the current api calls */\r\n  private apiCallCountSubscription: Subscription;\r\n\r\n  /** The current api calls counter */\r\n  private apiCallCounter: number;\r\n\r\n  /** The attachments */\r\n  private attachments: Attachment[] = [];\r\n\r\n  /** The formControlsForAdditionalFields */\r\n  public additionalFieldsFormControls: Array<string> = [];\r\n\r\n  /**\r\n   * The constructor\r\n   * @param entityService The entity service for api call\r\n   * @param attachmentService The attachment service for api call\r\n   * @param messageService The message service for subscription\r\n   * @param formService The form service\r\n   * @param alertService The alert service\r\n   * @param serviceRequestService The service request service\r\n   */\r\n  constructor(\r\n    private entityService: AbstractEntityService<ServiceRequestModel>,\r\n    private attachmentService: AttachmentService,\r\n    private messageService: MessageService,\r\n    private formService: FormService,\r\n    private alertService: AlertService,\r\n    private serviceRequestService: ServiceRequestService\r\n  ) {\r\n    this.apiCallCounter = 0;\r\n    // Subscribe to api call count message\r\n    this.apiCallCountSubscription = this.messageService\r\n      .getMessage()\r\n      .subscribe((message) => {\r\n        if (message) {\r\n          if (message.content === Messages.API_CALL_START) {\r\n            this.apiCallCounter++;\r\n            this.apiCallCountEmitter.emit(this.apiCallCounter);\r\n          } else if (message.content === Messages.API_CALL_FINISH) {\r\n            this.apiCallCounter--;\r\n            this.apiCallCountEmitter.emit(this.apiCallCounter);\r\n          }\r\n        }\r\n      });\r\n  }\r\n\r\n  /** Initialize the component */\r\n  public ngOnInit(): void {\r\n    // If there is no initial language, then set english by default.\r\n    if (!localStorage.getItem(StorageKeys.LANGUAGE)) {\r\n      localStorage.setItem(StorageKeys.LANGUAGE, \"en\");\r\n    }\r\n    this.setNonRequiredFieldsFromConfig();\r\n    this.serviceRequestFormGroup = this.formService.serviceRequestForm;\r\n    this.formService.config = this.config;\r\n\r\n    if (!this.config) {\r\n      this.config = new ServiceRequestConfig();\r\n    } else if (!this.config.languagePath) {\r\n      this.config.languagePath = \"\";\r\n    }\r\n\r\n    if (!!this.config.serviceRequest) {\r\n      this.serviceRequestService.serviceRequest = this.config.serviceRequest;\r\n      this.formService.updateServiceRequestForm(this.config.serviceRequest);\r\n    }\r\n\r\n    this.serviceRequestService.serviceRequest.information.encounterType =\r\n      this.serviceRequestService.serviceRequest.information.encounterType === \"\"\r\n        ? this.config.encounterType\r\n        : this.serviceRequestService.serviceRequest.information.encounterType;\r\n    this.serviceRequestService.serviceRequest.id = this.config.entityId\r\n      ? this.config.entityId\r\n      : this.serviceRequestService.serviceRequest.id;\r\n    this.serviceRequestService.serviceRequest.drawerId = this.config.drawerId\r\n      ? this.config.drawerId\r\n      : this.serviceRequestService.serviceRequest.drawerId;\r\n\r\n    if (this.config.additionalFieldsConfig.length != 0) {\r\n      this.config.additionalFieldsConfig.forEach((element) => {\r\n        this.additionalFieldsFormControls.push(element.formControlName);\r\n      });\r\n    }\r\n  }\r\n\r\n  /** Destroy the component */\r\n  public ngOnDestroy(): void {\r\n    this.apiCallCountSubscription.unsubscribe();\r\n  }\r\n\r\n  /**\r\n   * Set the non required fields for adding validators to form\r\n   */\r\n  private setNonRequiredFieldsFromConfig(): void {\r\n    const nonRequiredFieldsMap = new Map<string, string>();\r\n    this.config.modifiedExistingFieldsConfig\r\n      .filter((modifiedConfig) => modifiedConfig.required === false)\r\n      .forEach((modifiedConfig) =>\r\n        nonRequiredFieldsMap.set(\r\n          modifiedConfig.fieldName,\r\n          modifiedConfig.category\r\n        )\r\n      );\r\n    this.formService.nonRequiredFields = nonRequiredFieldsMap;\r\n  }\r\n\r\n  /**\r\n   * The function to update attachments\r\n   * @param attachments The attachments from child components\r\n   */\r\n  public updateAttachments(attachments: Attachment[]): void {\r\n    this.attachments = attachments;\r\n  }\r\n\r\n  /**\r\n   * The function to check the comments field has required validation.\r\n   */\r\n  public isCommentsRequired(): boolean {\r\n    return this.formService.isRequiredField(\"additionalInformation.comments\");\r\n  }\r\n\r\n  /**\r\n   * The function to trigger if user click either next or submit button from mat stepper\r\n   * @param groupKey The key for form group\r\n   */\r\n  public onClickNextStepper(\r\n    groupKey: \"serviceCategory\" | \"additionalInformation\"\r\n  ): void {\r\n    const form = this.serviceRequestFormGroup.get(groupKey) as FormGroup;\r\n    if (form.invalid) {\r\n      // If the given form has error, then display error message.\r\n      this.alertService.openCustomSnackBarAlert(\r\n        this.config.languagePath + \"commonSnackBarCheckRequiredField\",\r\n        this.config.languagePath + \"commonSnackBarClose\"\r\n      );\r\n\r\n      return;\r\n    }\r\n\r\n    // If the next button comes from last step, then submit this ticket.\r\n    if (groupKey === \"additionalInformation\") {\r\n      this.submitServiceRequest();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Submit the completed service request\r\n   */\r\n  public async submitServiceRequest(): Promise<ServiceRequestModel> {\r\n    // Update service request model based on the current form group values.\r\n    this.serviceRequestService.updateServiceRequest(\r\n      this.formService.serviceRequestForm,\r\n      this.additionalFieldsFormControls\r\n    );\r\n\r\n    // Disable submit button\r\n    this.isSubmitRequested = true;\r\n\r\n    return this.entityService\r\n      .createEntity(\r\n        !!this.config.isFullUri\r\n          ? this.config.serviceRequestFullUri\r\n          : this.config.baseUri,\r\n        this.config.accessToken,\r\n        this.serviceRequestService.serviceRequest,\r\n        this.config.isFullUri,\r\n        this.config.drawerId\r\n      )\r\n      .then(async (res: ServiceRequestModel) => {\r\n        // Case 1. No attachments\r\n        if (this.attachments.length < 1) {\r\n          return Promise.resolve(res);\r\n        }\r\n\r\n        // Case 2.w/ attachments\r\n        return this.attachmentService\r\n          .createAttachments(\r\n            !!this.config.isFullUri\r\n              ? this.config.attachmentFullUri\r\n              : this.config.baseUri,\r\n            this.config.accessToken,\r\n            this.attachments,\r\n            this.config.isFullUri,\r\n            res.drawerId,\r\n            res.id,\r\n            this.config.apiVersion\r\n          )\r\n          .then(() => {\r\n            return Promise.resolve(res);\r\n          })\r\n          .catch((error) => {\r\n            // Create attachment error.\r\n            this.alertService.openCustomSnackBarAlert(\r\n              this.config.languagePath +\r\n                \"serviceRequestSnackbarCreateAttachmentFailure\",\r\n              this.config.languagePath + \"commonSnackBarClose\"\r\n            );\r\n            return Promise.reject(error);\r\n          });\r\n      })\r\n      .then((res: ServiceRequestModel) => {\r\n        this.serviceRequestEmitter.emit(res);\r\n        this.isSubmitSuccessEmitter.emit(true);\r\n\r\n        return Promise.resolve(res);\r\n      })\r\n      .catch((error) => {\r\n        // Create entity error.\r\n        this.alertService.openCustomSnackBarAlert(\r\n          this.config.languagePath +\r\n            \"serviceRequestSnackbarCreateEntityFailure\",\r\n          this.config.languagePath + \"commonSnackBarClose\"\r\n        );\r\n        this.serviceRequestEmitter.emit(null);\r\n        this.isSubmitSuccessEmitter.emit(false);\r\n        this.isSubmitRequested = false;\r\n\r\n        return Promise.reject(error);\r\n      });\r\n  }\r\n}\r\n","<link href=\"https://fonts.googleapis.com/icon?family=Material+Icons\" rel=\"stylesheet\">\r\n<mat-horizontal-stepper fxLayout=\"column\" class=\"mat-horizontal-stepper-background-color\" linear #stepper>\r\n    <!-- Service category step -->\r\n    <mat-step [stepControl]=\"serviceRequestFormGroup.get('serviceCategory')\">\r\n        <div fxLayout=\"column\" fxLayoutAlign=\"flex-start\" fxLayoutGap=\"2em\">\r\n            <lighthouse-service-category [languagePath]=\"config.languagePath\" [issueCategoryConfiguration]=\"config.issueCategoryConfiguration\" [additionalFieldsConfig]=\"config.additionalFieldsConfig\" [modifiedExistingFieldsConfig]=\"config.modifiedExistingFieldsConfig\">\r\n            </lighthouse-service-category>\r\n            <div fxLayout=\"row\" fxLayoutAlign=\"flex-end\">\r\n                <button mat-stroked-button matStepperNext (click)=\"onClickNextStepper('serviceCategory')\" id=\"nextButton1To2\">{{ (config.languagePath + 'commonButtonNext') | translate | localTranslate }}</button>\r\n            </div>\r\n        </div>\r\n    </mat-step>\r\n    <!-- Additional information step -->\r\n    <mat-step [stepControl]=\"serviceRequestFormGroup.get('additionalInformation')\">\r\n        <div fxLayout=\"column\" fxLayoutAlign=\"flex-start\" fxLayoutGap=\"2em\">\r\n            <lighthouse-additional-information [isCommentsRequired]=\"isCommentsRequired()\" [languagePath]=\"config.languagePath\" (attachmentsEmitter)=\"updateAttachments($event)\">\r\n            </lighthouse-additional-information>\r\n            <div fxLayout=\"row\" fxLayoutAlign=\"flex-end\" fxLayoutGap=\"1em\">\r\n                <button mat-stroked-button matStepperPrevious id=\"prevButton2To1\">{{ (config.languagePath + 'commonButtonPrev') | translate | localTranslate }}</button>\r\n                <button mat-stroked-button (click)=\"onClickNextStepper('additionalInformation')\" [disabled]=\"isSubmitRequested\" id=\"submitButton\">{{ (config.languagePath + 'commonButtonSubmitRequest') | translate | localTranslate }}</button>\r\n            </div>\r\n        </div>\r\n    </mat-step>\r\n</mat-horizontal-stepper>","/** Components public api */\r\nexport * from './service-request/service-request.component';\r\n","/** Public API Surface of service-request */\r\nexport * from './components/components-api';\r\nexport * from './models/models-api';\r\nexport * from './services/services-api';\r\nexport * from './configs/config-api';\r\n","import { Directive, ElementRef, HostListener, Input } from \"@angular/core\";\r\n\r\n/**\r\n * The letters only directive\r\n */\r\n@Directive({\r\n  selector: \"[lettersOnly]\",\r\n  standalone: false,\r\n})\r\nexport class LettersOnlyDirective {\r\n  /** True if only letters allowed */\r\n  @Input() public lettersOnly: boolean;\r\n\r\n  /** The array of allowed keys */\r\n  private allowedKeys: Array<string> = [\r\n    \"backspace\",\r\n    \"delete\",\r\n    \"tab\",\r\n    \"escape\",\r\n    \"enter\",\r\n    \"period\",\r\n    \"numpaddecimal\",\r\n  ];\r\n\r\n  /**\r\n   * Constructs the directive\r\n   * @param el The element\r\n   */\r\n  constructor(private el: ElementRef) {}\r\n\r\n  /**\r\n   * Only allows letter inputs\r\n   * @param event Key Event\r\n   */\r\n  @HostListener(\"keydown\", [\"$event\"]) onKeyDown(event): void {\r\n    const e = event as KeyboardEvent;\r\n    if (this.lettersOnly) {\r\n      if (\r\n        this.allowedKeys.indexOf(e.code.toLowerCase()) !== -1 ||\r\n        // Allow: Ctrl+A\r\n        (e.code.toLowerCase() === \"keya\" && e.ctrlKey) ||\r\n        // Allow: Ctrl+C\r\n        (e.code.toLowerCase() === \"keyc\" && e.ctrlKey) ||\r\n        // Allow: Ctrl+X\r\n        (e.code.toLowerCase() === \"keyx\" && e.ctrlKey) ||\r\n        // Allow: spaces\r\n        e.code.toLowerCase() === \"space\" ||\r\n        // Allow: - (minus sign) on numpad or alphabet keyboard key\r\n        e.code.toLowerCase() === \"minus\" ||\r\n        e.code.toLowerCase() === \"numpadsubtract\"\r\n      ) {\r\n        // let it happen, don't do anything\r\n        return;\r\n      }\r\n      // Ensure that it is a letter and stop the keypress if its not a letter\r\n      if (\r\n        e.code.toLowerCase().includes(\"digit\") ||\r\n        e.code.toLowerCase().includes(\"numpad\")\r\n      ) {\r\n        e.preventDefault();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Prevent copy pasted inputs\r\n   * @param event the event\r\n   */\r\n  @HostListener(\"paste\", [\"$event\"]) blockPaste(event: KeyboardEvent): void {\r\n    event.preventDefault();\r\n  }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n/**\r\n * A pipe that takes a simple string phone number and formats it\r\n */\r\n@Pipe({ name: \"phone\", standalone: false })\r\nexport class PhoneFormatPipe implements PipeTransform {\r\n  transform(phoneNumber: string): string {\r\n    // If input is undefined, then return empty string\r\n    if (!phoneNumber) {\r\n      return \"\";\r\n    }\r\n\r\n    // Check for more than 10 digits\r\n    let formattedPhoneNumber = (\"\" + phoneNumber).replace(/\\D/g, \"\");\r\n    if (formattedPhoneNumber.length > 10) {\r\n      return \"\";\r\n    }\r\n\r\n    // Check for correct pattern\r\n    let formattedPhoneArray = formattedPhoneNumber.match(\r\n      /^(1|)?(\\d{3})(\\d{3})(\\d{4})$/\r\n    );\r\n    if (!!formattedPhoneArray) {\r\n      return [\r\n        \"(\",\r\n        formattedPhoneArray[2],\r\n        \") \",\r\n        formattedPhoneArray[3],\r\n        \"-\",\r\n        formattedPhoneArray[4],\r\n      ].join(\"\");\r\n    } else {\r\n      return \"\";\r\n    }\r\n  }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatMomentDateModule } from '@angular/material-moment-adapter';\r\n\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { FileUploadModule } from 'ng2-file-upload';\r\n\r\nimport { FileUploaderComponent } from './components/file-uploader/file-uploader.component';\r\nimport { MonthYearPickerComponent } from './components/month-year-picker/month-year-picker.component';\r\nimport { YearPickerComponent } from './components/year-picker/year-picker.component';\r\nimport { LettersOnlyDirective } from './directives/letters-only.directive';\r\nimport { NumbersOnlyDirective } from './directives/numbers-only.directive';\r\nimport { LocalTranslatePipe } from './pipes/local-translate.pipe';\r\nimport { PhoneFormatPipe } from './pipes/phone-number.pipe';\r\n\r\n/** The material modules */\r\nconst materialModules = [\r\n  MatStepperModule,\r\n  MatButtonModule,\r\n  MatFormFieldModule,\r\n  MatInputModule,\r\n  MatSelectModule,\r\n  MatDividerModule,\r\n  MatDatepickerModule,\r\n  MatMomentDateModule,\r\n  MatNativeDateModule,\r\n  MatSnackBarModule,\r\n  MatTableModule,\r\n  MatIconModule,\r\n  MatRadioModule,\r\n  MatCheckboxModule\r\n];\r\n\r\n/** The shared components */\r\nconst components = [\r\n  MonthYearPickerComponent,\r\n  YearPickerComponent,\r\n  FileUploaderComponent\r\n];\r\n\r\n/** The shared pipes */\r\nconst pipes = [\r\n  LocalTranslatePipe,\r\n  PhoneFormatPipe\r\n];\r\n\r\n/** The shared directives */\r\nconst directives = [\r\n  LettersOnlyDirective,\r\n  NumbersOnlyDirective\r\n];\r\n\r\n/** The shared module */\r\n@NgModule({\r\n  declarations: [\r\n    ...components,\r\n    ...directives,\r\n    ...pipes\r\n  ],\r\n  imports: [\r\n    ...materialModules,\r\n    CommonModule,\r\n    FlexLayoutModule,\r\n    FormsModule,\r\n    ReactiveFormsModule,\r\n    FileUploadModule,\r\n    FontAwesomeModule,\r\n    TranslateModule\r\n  ],\r\n  exports: [\r\n    ...components,\r\n    ...directives,\r\n    ...materialModules,\r\n    ...pipes,\r\n    FlexLayoutModule,\r\n    FormsModule,\r\n    ReactiveFormsModule,\r\n    FontAwesomeModule\r\n  ],\r\n  schemas: [CUSTOM_ELEMENTS_SCHEMA]\r\n})\r\nexport class SharedModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule, DatePipe } from '@angular/common';\r\n\r\nimport { TranslateModule } from '@ngx-translate/core';\r\n\r\nimport { ServiceRequestEntityService, AbstractEntityService, AttachmentService } from './services/services-api';\r\nimport { ServiceRequestComponent } from './service-request-api';\r\nimport { ServiceCategoryComponent } from './components/service-request/service-category/service-category.component';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { AdditionalInformationComponent } from './components/service-request/additional-information/additional-information.component';\r\nimport { LocalTranslatePipe } from '../shared/pipes/local-translate.pipe';\r\nimport { FormService } from './services/form/form.service';\r\nimport { ServiceRequestService } from './services/service-request/service-request.service';\r\n\r\nexport { ServiceRequestComponent };\r\n\r\n/** The service request components */\r\nconst components = [\r\n  ServiceRequestComponent,\r\n  ServiceCategoryComponent,\r\n  AdditionalInformationComponent\r\n];\r\n\r\n/** The implementations for the entity services */\r\nconst abstractServices = [\r\n  { provide: AbstractEntityService, useClass: ServiceRequestEntityService }\r\n];\r\n\r\n/** The lighthouse service request module */\r\n@NgModule(\r\n  {\r\n    declarations: [\r\n      ...components,\r\n    ],\r\n    imports: [\r\n      CommonModule,\r\n      SharedModule,\r\n      TranslateModule\r\n    ],\r\n    providers: [\r\n      ...abstractServices,\r\n      AttachmentService,\r\n      FormService,\r\n      ServiceRequestService,\r\n      LocalTranslatePipe,\r\n      DatePipe\r\n    ],\r\n    exports: [\r\n      ...components\r\n    ]\r\n  }\r\n)\r\nexport class ServiceRequestModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpClientModule } from '@angular/common/http';\r\n\r\nimport { ApiService } from './https/api.service';\r\nimport { MessageService } from './services/message.service';\r\nimport { AlertService } from './services/alert.service';\r\n\r\n/** The lighthouse core module */\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [\r\n    CommonModule,\r\n    HttpClientModule,\r\n  ],\r\n  providers: [\r\n    ApiService,\r\n    MessageService,\r\n    AlertService\r\n  ]\r\n})\r\nexport class CoreModule { }\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { ServiceRequestModule } from './service-request/service-request.module';\r\nimport { CoreModule } from './core/core.module';\r\n\r\n/** The package modules */\r\nconst packageModules = [\r\n  ServiceRequestModule\r\n];\r\n\r\n/** The lighthouse root module */\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [\r\n    CoreModule,\r\n    ...packageModules\r\n  ],\r\n  exports: [\r\n    ...packageModules\r\n  ]\r\n})\r\nexport class LighthouseModule { }\r\n","/** Public API Surface of lighthouse */\r\nexport * from './lib/service-request/service-request-api';\r\nexport * from './lib/service-request/components/components-api';\r\nexport * from './lib/service-request/components/service-request/additional-information/additional-information.component'\r\nexport * from './lib/service-request/components/service-request/service-category/service-category.component'\r\nexport * from './lib/service-request/service-request.module'\r\nexport * from './lib/lighthouse.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.MessageService","i1.ApiService","i1","i2.LocalTranslatePipe","MY_FORMATS","i3","i4","i3.FormService","i4.MonthYearPickerComponent","i5.YearPickerComponent","i6.NumbersOnlyDirective","i9","i12","i17","i2","i3.LocalTranslatePipe","i6","i7","i8","i1.FormService","i2.FileUploaderComponent","i5","i8.LocalTranslatePipe","i1.AbstractEntityService","i1.AttachmentService","i4.AlertService","i1.ServiceRequestService","i8.ServiceCategoryComponent","i9.AdditionalInformationComponent","i10.LocalTranslatePipe","i11","components"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEG;AACH,IAAY,QAMX;AAND,CAAA,UAAY,QAAQ,EAAA;;AAEhB,IAAA,QAAA,CAAA,QAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAc;;AAGd,IAAA,QAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAe;AACnB,CAAC,EANW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;;ACHpB;;AAEG;AACI,MAAM,WAAW,GAAG;AACvB,IAAA,QAAQ,EAAE,UAAU;CACvB;;MCAY,oBAAoB,CAAA;;AAgD7B,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,+CAA+C;AAC9D,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,QAAA,IAAI,CAAC,0BAA0B,GAAG,EAAE;AACpC,QAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;AAChC,QAAA,IAAI,CAAC,4BAA4B,GAAG,EAAE;IAC1C;AACH;;AChED;MACsB,qBAAqB,CAAA;AA0C1C;;ACvCD;MAIa,cAAc,CAAA;AAH3B,IAAA,WAAA,GAAA;;AAKU,QAAA,IAAA,CAAA,OAAO,GAAiB,IAAI,OAAO,EAAO;AAuBnD,IAAA;AArBC;;;AAGG;AACI,IAAA,WAAW,CAAC,OAAY,EAAA;QAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACzC;AAEA;;AAEG;IACI,aAAa,GAAA;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;IACzB;AAEA;;AAEG;IACI,UAAU,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;IACpC;8GAxBW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA;;2FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACDD;;AAEG;MAIU,UAAU,CAAA;AACrB;;;;AAIG;IACH,WAAA,CACU,IAAgB,EAChB,cAA8B,EAAA;QAD9B,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,cAAc,GAAd,cAAc;AAsFxB;;AAEG;AACK,QAAA,IAAA,CAAA,SAAS,GAAG,MAAmB,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;IAxF1F;AAEJ;;;;AAIG;IACI,GAAG,CAAI,OAAe,EAAE,MAAoB,EAAA;AACjD,QAAA,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;QACxD,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC;AAExD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,OAAO,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;AACxD,aAAA,SAAS;aACT,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,KAAU,CAAC;aACzC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AACpC,aAAA,OAAO,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC7E;AAEA;;;;;AAKG;AACI,IAAA,IAAI,CAAI,OAAe,EAAE,OAAY,EAAE,MAAoB,EAAA;AAChE,QAAA,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;QACxD,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC;AAExD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAI,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;AAClE,aAAA,SAAS;aACT,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,KAAU,CAAC;aACzC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AACpC,aAAA,OAAO,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC7E;AAEA;;;;;AAKG;AACI,IAAA,GAAG,CAAI,OAAe,EAAE,OAAY,EAAE,MAAoB,EAAA;AAC/D,QAAA,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;QACxD,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC;AAExD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;AACjE,aAAA,SAAS;aACT,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,KAAU,CAAC;aACzC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AACpC,aAAA,OAAO,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC7E;AAEA;;;;;AAKG;AACI,IAAA,KAAK,CAAI,OAAe,EAAE,OAAY,EAAE,MAAoB,EAAA;AACjE,QAAA,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;QACxD,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC;AAExD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAI,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;AACnE,aAAA,SAAS;aACT,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,KAAU,CAAC;aACzC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AACpC,aAAA,OAAO,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC7E;AAEA;;;;AAIG;IACI,MAAM,CAAI,OAAe,EAAE,MAAoB,EAAA;AACpD,QAAA,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;QACxD,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC;AAExD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAI,OAAO,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;AAC3D,aAAA,SAAS;aACT,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,KAAU,CAAC;aACzC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AACpC,aAAA,OAAO,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC7E;8GA5FW,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA,CAAA;;2FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACJD;AAIM,MAAO,2BAA4B,SAAQ,qBAA0C,CAAA;AACzF;;;AAGG;AACH,IAAA,WAAA,CAA6B,UAAsB,EAAA;AACjD,QAAA,KAAK,EAAE;QADoB,IAAA,CAAA,UAAU,GAAV,UAAU;IAEvC;AAEA;;;;;;;AAOG;IACI,YAAY,CAAC,GAAW,EAAE,WAAmB,EAAE,KAA0B,EAAE,SAAmB,EAAE,QAAiB,EAAA;AACtH,QAAA,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,CAAA,EAAG,GAAG,CAAA,mBAAA,EAAsB,QAAQ,EAAE;QAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AAE3C,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC;IACxD;AAEA;;;;;;;AAOG;IACI,cAAc,CAAC,GAAW,EAAE,WAAmB,EAAE,SAAmB,EAAE,QAAiB,EAAE,QAAiB,EAAA;AAC/G,QAAA,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA,mBAAA,EAAsB,QAAQ,CAAA,CAAA,EAAI,QAAQ,EAAE;QACxF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;QAE3C,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;IAChD;AAEA;;;;;;;;AAQG;IACI,YAAY,CAAC,GAAW,EAAE,WAAmB,EAAE,KAA0B,EAAE,SAAmB,EAAE,QAAiB,EAAE,QAAiB,EAAA;AACzI,QAAA,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA,mBAAA,EAAsB,QAAQ,CAAA,CAAA,EAAI,QAAQ,EAAE;QACxF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AAE3C,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC;IACzD;AAEA;;;;;;;AAOG;IACI,YAAY,CAAC,GAAW,EAAE,WAAmB,EAAE,SAAmB,EAAE,QAAiB,EAAE,QAAiB,EAAA;AAC7G,QAAA,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA,mBAAA,EAAsB,QAAQ,CAAA,CAAA,EAAI,QAAQ,EAAE;QACxF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;QAE3C,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC;IACnD;AAEA;;;AAGG;AACK,IAAA,SAAS,CAAC,WAAmB,EAAA;QACnC,OAAO,IAAI,WAAW,CACpB;YACE,eAAe,EAAE,CAAA,OAAA,EAAU,WAAW,CAAA,CAAE;AACxC,YAAA,cAAc,EAAE;AACjB,SAAA,CACF;IACH;8GAjFW,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cAF1B,MAAM,EAAA,CAAA,CAAA;;2FAEP,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAHvC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACJD;;AAEG;MAIU,iBAAiB,CAAA;AAC5B;;;AAGG;AACH,IAAA,WAAA,CAA6B,UAAsB,EAAA;QAAtB,IAAA,CAAA,UAAU,GAAV,UAAU;IAAgB;AAEvD;;;;;;;;;AASG;AACI,IAAA,iBAAiB,CAAC,GAAW,EAAE,WAAmB,EAAE,WAAyB,EAAE,SAAmB,EAAE,QAAiB,EAAE,QAAiB,EAAE,UAAmB,EAAA;AAClK,QAAA,IAAI,SAAS,GAAG,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA,eAAA,EAAkB,QAAQ,CAAA,CAAA,EAAI,QAAQ,EAAE;QAClF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AAC3C,QAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,QAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;AACpC,YAAA,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC;QAC5D;;AAGA,QAAA,IAAI,UAAU,IAAI,UAAU,IAAI,CAAC,EAAE;AACjC,YAAA,SAAS,GAAG,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,CAAA,EAAG,GAAG,sBAAsB;YAC5D,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA,EAAG,QAAQ,CAAA,CAAE,CAAC;YAC1C,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA,EAAG,QAAQ,CAAA,CAAE,CAAC;QAC5C;AAEA,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC;IAC3D;AAEA;;;AAGG;AACK,IAAA,SAAS,CAAC,WAAmB,EAAA;QACnC,OAAO,IAAI,WAAW,CACpB;YACE,eAAe,EAAE,CAAA,OAAA,EAAU,WAAW,CAAA,CAAE;AACzC,SAAA,CACF;IACH;8GA7CW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA;;2FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACTD;;AAEG;AACI,MAAM,mBAAmB,GAAQ;AACpC,IAAA,KAAK,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AAChC,IAAA,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACnC,IAAA,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;IACnC,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,UAAU,EAAE,CAAC,EAAE,CAAC;IAChB,aAAa,EAAE,CAAC,EAAE,CAAC;IACnB,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,cAAc,EAAE,CAAC,EAAE,CAAC;IACpB,gBAAgB,EAAE,CAAC,EAAE,CAAC;IACtB,UAAU,EAAE,CAAC,EAAE,CAAC;IAChB,uBAAuB,EAAE,CAAC,EAAE,CAAC;IAC7B,SAAS,EAAE,CAAC,EAAE,CAAC;IACf,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvB,YAAY,EAAE,CAAC,EAAE,CAAC;IAClB,cAAc,EAAE,CAAC,EAAE,CAAC;IACpB,YAAY,EAAE,CAAC,EAAE,CAAC;IAClB,YAAY,EAAE,CAAC,EAAE,CAAC;IAClB,WAAW,EAAE,CAAC,EAAE,CAAC;IACjB,eAAe,EAAE,CAAC,EAAE,CAAC;IACrB,0BAA0B,EAAE,CAAC,EAAE,CAAC;IAChC,sBAAsB,EAAE,CAAC,EAAE,CAAC;IAC5B,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvB,eAAe,EAAE,CAAC,EAAE,CAAC;IACrB,YAAY,EAAE,CAAC,EAAE,CAAC;IAClB,cAAc,EAAE,CAAC,EAAE,CAAC;IACpB,kBAAkB,EAAE,CAAC,EAAE,CAAC;IACxB,wBAAwB,EAAE,CAAC,EAAE,CAAC;IAC9B,cAAc,EAAE,CAAC,EAAE,CAAC;AACpB,IAAA,YAAY,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC;IAC/B,cAAc,EAAE,CAAC,EAAE,CAAC;IACpB,gBAAgB,EAAE,CAAC,EAAE,CAAC;IACtB,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvB,eAAe,EAAE,CAAC,EAAE,CAAC;IACrB,0BAA0B,EAAE,CAAC,EAAE,CAAC;IAChC,kBAAkB,EAAE,CAAC,EAAE,CAAC;IACxB,YAAY,EAAE,CAAC,EAAE,CAAC;IAClB,aAAa,EAAE,CAAC,EAAE;;AAGtB;;AAEG;AACI,MAAM,eAAe,GAAQ;AAChC,IAAA,UAAU,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACrC,IAAA,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACnC,IAAA,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACnC,IAAA,cAAc,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACzC,IAAA,iBAAiB,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ;;;ACvD/C;;AAEG;AACI,MAAM,yBAAyB,GAAQ;IAC1C,QAAQ,EAAE,CAAC,EAAE;;;ACFjB;;;;AAIG;AACI,MAAM,gBAAgB,GAAG,CAAC,eAAgC,KAAa;AAC1E,IAAA,IAAI,eAAe,CAAC,SAAS,EAAE;QAC3B,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC,EAAqB,CAAC;AAClE,QAAA,IAAI,SAAS,IAAI,SAAS,CAAC,QAAQ,EAAE;AACjC,YAAA,OAAO,IAAI;QACf;IACJ;AACA,IAAA,IAAI,eAAe,CAAC,UAAU,CAAC,EAAE;QAC7B,KAAK,MAAM,WAAW,IAAI,eAAe,CAAC,UAAU,CAAC,EAAE;YACnD,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,EAAE;gBAC1C,IAAI,gBAAgB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE;AAC5D,oBAAA,OAAO,IAAI;gBACf;YACJ;QACJ;IACJ;AACA,IAAA,OAAO,KAAK;AAChB,CAAC;;ACxBD;;AAEG;AACI,MAAM,uBAAuB,GAAgC,IAAI,GAAG,CAAiB;IACxF,CAAC,4BAA4B,EAAE,aAAa,CAAC;IAC7C,CAAC,+BAA+B,EAAE,gBAAgB,CAAC;IACnD,CAAC,yBAAyB,EAAE,UAAU,CAAC;IACvC,CAAC,gCAAgC,EAAE,iBAAiB,CAAC;IACrD,CAAC,kCAAkC,EAAE,oBAAoB,CAAC;IAC1D,CAAC,+BAA+B,EAAE,oBAAoB,CAAC;IACvD,CAAC,4BAA4B,EAAE,kBAAkB,CAAC;IAClD,CAAC,yCAAyC,EAAE,4BAA4B,CAAC;IACzE,CAAC,4CAA4C,EAAE,wCAAwC,CAAC;IACxF,CAAC,oCAAoC,EAAE,yCAAyC,CAAC;IACjF,CAAC,8BAA8B,EAAE,eAAe,CAAC;IACjD,CAAC,mCAAmC,EAAE,qBAAqB,CAAC;IAC5D,CAAC,8BAA8B,EAAE,gBAAgB,CAAC;IAClD,CAAC,gCAAgC,EAAE,iBAAiB,CAAC;IACrD,CAAC,8BAA8B,EAAE,eAAe,CAAC;IACjD,CAAC,8BAA8B,EAAE,eAAe,CAAC;IACjD,CAAC,6BAA6B,EAAE,cAAc,CAAC;IAC/C,CAAC,iCAAiC,EAAE,kBAAkB,CAAC;IACvD,CAAC,4CAA4C,EAAE,+BAA+B,CAAC;IAC/E,CAAC,wCAAwC,EAAE,2BAA2B,CAAC;IACvE,CAAC,wBAAwB,EAAE,QAAQ,CAAC;IACpC,CAAC,2BAA2B,EAAE,YAAY,CAAC;IAC3C,CAAC,yBAAyB,EAAE,UAAU,CAAC;IACvC,CAAC,0CAA0C,EAAE,0BAA0B,CAAC;IACxE,CAAC,mCAAmC,EAAE,qBAAqB,CAAC;IAC5D,CAAC,iCAAiC,EAAE,mBAAmB,CAAC;IACxD,CAAC,8BAA8B,EAAE,eAAe,CAAC;IACjD,CAAC,oCAAoC,EAAE,sBAAsB,CAAC;IAC9D,CAAC,gCAAgC,EAAE,iBAAiB,CAAC;IACrD,CAAC,gCAAgC,EAAE,iBAAiB,CAAC;IACrD,CAAC,kCAAkC,EAAE,oBAAoB,CAAC;IAC1D,CAAC,mCAAmC,EAAE,YAAY,CAAC;IACnD,CAAC,iCAAiC,EAAE,UAAU,CAAC;AAClD,CAAA,CAAC;;AC1BF;MAIa,WAAW,CAAA;AAUtB;;;AAGG;AACH,IAAA,WAAA,CAAoB,WAAwB,EAAA;QAAxB,IAAA,CAAA,WAAW,GAAX,WAAW;AAC7B,QAAA,MAAM,2BAA2B,GAAG;YAClC,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,mBAAmB,CAAC;YAC5D,qBAAqB,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,yBAAyB;SAClD;QAEvB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,2BAA2B,CAAC;;AAG7E,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;YAC1F,IAAI,CAAC,oBAAoB,EAAE;AAC7B,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;YAC5F,IAAI,CAAC,oBAAoB,EAAE;AAC7B,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;YAC1G,IAAI,CAAC,oBAAoB,EAAE;AAC7B,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;YAC9F,IAAI,CAAC,oBAAoB,EAAE;AAC7B,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;YACpG,IAAI,CAAC,oBAAoB,EAAE;AAC7B,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEE;IACK,oBAAoB,GAAA;;AAEzB,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,QAAgB,KAAI;YACzE,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAc;AAEpE,YAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;AACtD,gBAAA,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,UAAU,EAAE;oBAC/D,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;oBAClC,OAAO,CAAC,eAAe,EAAE;gBAC3B;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;QAGF,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAc;QAChG,OAAO,eAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,YAAA,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7B;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK;AACxE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK;;AAG9E,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;QAEhG,QAAQ,KAAK;YACX,KAAK,gBAAgB,EAAE;gBACrB,QAAQ,QAAQ;oBACd,KAAK,iBAAiB,EAAE;AACtB,wBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,KAAK;AAElF,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,IAAI,iBAAiB,CAAC,EAAC;AACzM,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAC9F;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,IAAI,iBAAiB,CAAC,EAAC;AACzM,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAClG;wBAEA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,eAAe,EAAE;wBAE/E,QAAQ,UAAU;4BAChB,KAAK,qCAAqC,EAAE;AACzC,gCAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACvH,gCAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gCACxH;4BACF;;wBAEF;oBACF;oBACA,KAAK,mBAAmB,EAAE;AACxB,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,IAAI,mBAAmB,CAAC,EAAC;AAC3M,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAC9F;wBACA;oBACF;oBACA,KAAK,oBAAoB,EAAE;AACzB,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,EAAC;AAC3F,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBACjG;wBACA;oBACF;oBACA,KAAK,kBAAkB,EAAE;AACvB,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,EAAC;AACrF,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAC3F;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,EAAC;AAC5F,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAClG;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,EAAC;AAC9F,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBACpG;wBACA;oBACF;oBACA,KAAK,sBAAsB,EAAE;AAC3B,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,EAAC;AAC3F,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBACjG;wBACA;oBACF;;gBAEF;YACF;YACA,KAAK,UAAU,EAAE;gBACf,QAAQ,QAAQ;oBACd,KAAK,uBAAuB,EAAE;AAC5B,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,EAAC;AACxF,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAC9F;wBACA;oBACF;oBACA,KAAK,6BAA6B,EAAE;AAClC,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,EAAC;AACrG,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAC3G;wBACA;oBACF;oBACA,KAAK,sBAAsB,EAAE;AAC3B,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,EAAC;AACxG,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAC9G;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,EAAC;AAChG,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBACtG;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,EAAC;AAC1F,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAChG;wBACA;oBACF;;gBAEF;YACF;YACA,KAAK,YAAY,EAAE;gBACjB,QAAQ,QAAQ;oBACd,KAAK,wBAAwB,EAAE;AAC7B,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,IAAI,wBAAwB,CAAC,EAAC;AAC9N,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBACrG;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,IAAI,wBAAwB,CAAC,EAAC;AACpN,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAChG;wBACA;oBACF;oBACA,KAAK,kBAAkB,EAAE;AACvB,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,IAAI,kBAAkB,CAAC,EAAC;AACxN,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBACrG;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,EAAC;AAC5F,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAClG;wBACA;oBACF;oBACA,KAAK,gBAAgB,EAAE;AACrB,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,IAAI,gBAAgB,CAAC,EAAC;AACtN,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBACrG;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,EAAC;AAC1F,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAChG;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,EAAC;AAC1F,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAChG;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,EAAC;AACzF,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAC/F;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,EAAC;AAC7F,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBACnG;wBACA;oBACF;oBACA,KAAK,kBAAkB,EAAE;AACvB,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,EAAC;AACxG,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAC9G;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,EAAC;AACpG,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAC1G;wBACA;oBACF;oBACA,KAAK,iBAAiB,EAAE;AACtB,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,EAAC;AACpF,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAC1F;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,IAAI,iBAAiB,CAAC,EAAC;AACvN,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBACrG;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,IAAI,iBAAiB,CAAC,EAAC;AAC7M,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAChG;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,IAAI,iBAAiB,CAAC,EAAC;AACvM,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAC7F;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,iBAAiB,CAAC,EAAC;AACnM,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAC3F;wBACA;oBACF;oBACA,KAAK,gBAAgB,EAAE;AACrB,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,IAAI,gBAAgB,CAAC,EAAC;AACtN,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBACrG;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,IAAI,gBAAgB,CAAC,EAAC;AACtM,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAC7F;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,gBAAgB,CAAC,EAAC;AAClM,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAC3F;wBACA;oBACF;oBACA,KAAK,iBAAiB,EAAE;AACtB,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,EAAC;AACtG,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAC5G;AACA,wBAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,KAAK,KAAK,UAAU,EAAE;AAChG,4BAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,EAAC;AAC/F,gCAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;4BACrG;AACA,4BAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,EAAC;AAC7F,gCAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;4BACnG;AACA,4BAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,EAAC;AAC1F,gCAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;4BAChG;AACA,4BAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,EAAC;AAChG,gCAAA,IAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,KAAK,KAAK,MAAM,EAAC;AAC9E,oCAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;gCACtG;4BACF;AACA,4BAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,EAAC;AAC5F,gCAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC1E,gCAAA,IAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,KAAK,KAAK,YAAY,EAAC;oCACpF,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gCACxI;AAAM,qCAAA,IAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,KAAK,KAAK,OAAO,EAAC;AAC3F,oCAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;gCAC7K;AAAM,qCAAA,IAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,KAAK,KAAK,iCAAiC,EAAC;AACrH,oCAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC;gCAClH;4BACF;4BACA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,eAAe,EAAE;wBACjF;wBACA;oBACF;oBACA,KAAK,2BAA2B,EAAE;wBAChC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,eAAe,EAAE;wBAC/E;oBACF;oBACA,KAAK,iBAAiB,EAAE;AACtB,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,EAAC;AAC5F,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAClG;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,EAAC;AAC9F,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBACpG;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,EAAC;AAC/F,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBACrG;AACA,wBAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,EAAC;AAC7F,4BAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;wBACnG;wBACA;oBACF;;gBAEF;YACF;;;AAIF,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,QAAgB,KAAI;YACzE,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAc;AAEpE,YAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;AACtD,gBAAA,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,UAAU,EAAE;oBAC/D,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;oBAClC,OAAO,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;gBACtD;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;AACI,IAAA,wBAAwB,CAAC,KAA0B,EAAA;;AAExD,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB;QAC9C,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAiB,KAAI;YACpD,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;AACtC,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE;YAChC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACnH;AAEA,QAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAC3B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACjH;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE;YAC7B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACnH;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;YACxB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC5G;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;YACnC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC3H;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YAClC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC1H;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;YACtC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACjI;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC5B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACjH;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YAClC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9H;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC9B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC5H;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;YACnC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC3H;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAC/B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACpI;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YAClC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;AAC5C,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAChG;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YAChC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACrH;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE;YAC3C,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,qBAAqB,CAAC;AACrD,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACxG;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,KAAK,wBAAwB;AACxF,aAAC,YAAY,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,KAAK,iBAAiB,CAAC,EAAE;AACpG,YAAA,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,KAAK,wBAAwB,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,2BAA2B,CAAC;AACjL,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACnG;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YAClC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9H;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YAChC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC1H;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YAChC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC1H;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAC/B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACxH;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;YACnC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAChI;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE;YAC5C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACpJ;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE;YACxC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC5I;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC9B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAClH;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE;YAC5C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC3I;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE;YAC1C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACvI;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE;YAC9C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACxI;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE;YAC9C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC1I;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YACvC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC7I;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;YACtC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAClI;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;YACtC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAClI;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE;YACxC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACtI;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;YACjC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAChI;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAC/B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC5H;AAEA,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;YACtC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACjI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE;YACzB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACrH;;QAGA,IAAI,CAAC,oBAAoB,EAAE;IAC7B;AAEA;;;AAGG;AACI,IAAA,eAAe,CAAC,GAAW,EAAA;QAChC,OAAO,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3D;AAEA;;;AAGG;AACI,IAAA,eAAe,CAAC,GAAW,EAAA;QAChC,QAAQ,GAAG;YACT,KAAK,8BAA8B,EAAE;gBACnC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAc;AAC3D,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gBACnD;YACF;;IAEJ;AAEA;;;;;AAKG;IACI,oBAAoB,CAAC,GAAW,EAAE,GAAW,EAAA;QAClD,OAAO,CAAC,OAAwB,KAAmC;AACjE,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAClB,gBAAA,OAAO,IAAI;YACb;YACA,MAAM,KAAK,GAAW,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YAC3C,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE;gBAC/B,OAAO,EAAE,YAAY,EAAE,EAAC,GAAG,EAAE,GAAG,EAAC,EAAE;YACrC;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC;IACH;8GAxiBW,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,GAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA;;2FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACdD;;;;;;;;;;AAUG;;ACVH;;;;;;;;;;AAUG;;ACVH;;;;;;;;;;AAUG;;ACVH;;;;;;;;;;AAUG;;ACVH;;;;;;;;;;AAUG;;ACqCG,IAAW;AAAjB,CAAA,UAAiB,mBAAmB,EAAA;AAEnB,IAAA,mBAAA,CAAA,SAAS,GAAG;AACrB,QAAA,SAAS,EAAE,WAAwB;AACnC,QAAA,SAAS,EAAE,WAAwB;AACnC,QAAA,MAAM,EAAE,QAAqB;AAC7B,QAAA,SAAS,EAAE,WAAwB;AACnC,QAAA,QAAQ,EAAE,UAAuB;AACjC,QAAA,OAAO,EAAE,SAAsB;AAC/B,QAAA,QAAQ,EAAE,UAAuB;AACjC,QAAA,QAAQ,EAAE,UAAuB;AACjC,QAAA,QAAQ,EAAE,UAAuB;AACjC,QAAA,iBAAiB,EAAE,mBAAgC;AACnD,QAAA,gBAAgB,EAAE,kBAA+B;AACjD,QAAA,QAAQ,EAAE,UAAuB;AACjC,QAAA,eAAe,EAAE,iBAA8B;AAC/C,QAAA,uBAAuB,EAAE;KAC5B;AACL,CAAC,EAlBgB,mBAAmB,KAAnB,mBAAmB,GAAA,EAAA,CAAA,CAAA;;ACvCnC;;ACRD;;AAEG;AACI,MAAM,uBAAuB,GAAQ;AACxC,IAAA,WAAW,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,aAAa,EAAE,EAAE;AACjB,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,SAAS,EAAE,EAAE;AACb,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,aAAa,EAAE,EAAE;AACjB,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,SAAS,EAAE,EAAE;AACb,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,UAAU,EAAE,EAAE;AACd,QAAA,cAAc,EAAE,EAAE;AAClB,QAAA,wBAAwB,EAAE,EAAE;AAC5B,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,cAAc,EAAE,CAAC;AACjB,QAAA,GAAG,EAAE,EAAE;AACP,QAAA,GAAG,EAAE,EAAE;AACP,QAAA,GAAG,EAAE,EAAE;AACP,QAAA,SAAS,EAAE,EAAE;AACb,QAAA,GAAG,EAAE,EAAE;AACP,QAAA,GAAG,EAAE,EAAE;AACP,QAAA,sBAAsB,EAAE;AAC3B,KAAA;AACD,IAAA,OAAO,EAAE;AACL,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,SAAS,EAAE,CAAC;AACZ,QAAA,MAAM,EAAE,EAAE;QACV,gBAAgB,EAAE,IAAI,IAAI,EAAE;AAC5B,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,cAAc,EAAE,EAAE;AAClB,QAAA,cAAc,EAAE,CAAC;AACjB,QAAA,SAAS,EAAE,EAAE;AACb,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,SAAS,EAAE;AACd,KAAA;AACD,IAAA,QAAQ,EAAE;AACN,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,QAAQ,EAAE,CAAC;AACX,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,cAAc,EAAE,EAAE;AAClB,QAAA,YAAY,EAAE,CAAC;AACf,QAAA,cAAc,EAAE;AACnB,KAAA;AACD,IAAA,QAAQ,EAAE;AACN,QAAA,gBAAgB,EAAE,EAAE;AACpB,QAAA,WAAW,EAAE;AAChB,KAAA;AACD,IAAA,QAAQ,EAAE;AACN,QAAA,QAAQ,EAAE;AACb,KAAA;AACD,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,KAAK,EAAE;;;AClEX;;ACMA;MAIa,qBAAqB,CAAA;AAIhC;;;AAGG;AACH,IAAA,WAAA,CACU,QAAkB,EAAA;QAAlB,IAAA,CAAA,QAAQ,GAAR,QAAQ;AAEhB,QAAA,IAAI,CAAC,cAAc,GAAG,uBAAuB;IAC/C;AAEA;;;AAGG;IACI,oBAAoB,CAAC,kBAA6B,EAAE,4BAA2C,EAAA;QACpG,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK;QACnE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK;QACzE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK;QACzE,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,KAAK;QAErE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,cAAc,GAAG,KAAK;QAClD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,GAAG,QAAQ;QAChD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,GAAG,QAAQ;QAClD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM;;QAG3C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE;;QAG1C,QAAQ,KAAK;YACX,KAAK,gBAAgB,EAAE;gBACrB,QAAQ,QAAQ;oBACd,KAAK,iBAAiB,EAAE;wBACtB,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,KAAK;AAC7E,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAkB,CAAC;AACjH,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;6BACzB,IAAI,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,KAAK,CAAC,EAAkB,CAAC;wBAEhJ,QAAQ,UAAU;4BAChB,KAAK,qCAAqC,EAAE;gCAC1C,MAAM,YAAY,GAAI,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAe,CAAC,QAAQ;AACnG,gCAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,oCAAA,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAc;AAEhD,oCAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;yCACzB,IAAI,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA,CAAE,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,EAAkB,CAAC;AAClG,oCAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;yCACzB,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,EAAkB,CAAC;AAC9F,oCAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;yCACzB,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,EAAkB,CAAC;AAC9F,oCAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;yCACzB,IAAI,CAAC,EAAE,GAAG,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAA,CAAE,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAkB,CAAC;AAC1G,oCAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;yCACzB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA,iBAAA,EAAoB,CAAC,GAAG,CAAC,CAAA,CAAE,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,EAAkB,CAAC;gCACzI;gCACA;4BACF;;wBAEF;oBACF;oBACA,KAAK,mBAAmB,EAAE;AACxB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAkB,CAAC;wBAClH;oBACF;oBACA,KAAK,oBAAoB,EAAE;AACzB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAkB,CAAC;wBACxH;oBACF;oBACA,KAAK,kBAAkB,EAAE;AACvB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAkB,CAAC;AACxG,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAkB,CAAC;AACrH,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,KAAK,EAAkB,CAAC;wBACnH;oBACF;oBACA,KAAK,sBAAsB,EAAE;AAC3B,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAkB,CAAC;wBACxH;oBACF;;gBAEF;YACF;YACA,KAAK,UAAU,EAAE;gBACf,QAAQ,QAAQ;oBACd,KAAK,uBAAuB,EAAE;AAC5B,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAkB,CAAC;wBAClH;oBACF;oBACA,KAAK,6BAA6B,EAAE;AAClC,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,KAAK,EAAkB,CAAC;wBAC3H;oBACF;oBACA,KAAK,sBAAsB,EAAE;AAC3B,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,wCAAwC,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,KAAK,EAAkB,CAAC;AAC7J,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;6BACzB,IAAI,CAAC,EAAE,GAAG,EAAE,yCAAyC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,KAAK,CAAC,EAAkB,CAAC;wBAC/K,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,KAAK;wBACjF,IAAI,oBAAoB,GAAG,UAAU;AACrC,wBAAA,IAAI,YAAY,KAAK,eAAe,EAAE;4BACpC,oBAAoB,GAAG,MAAM;wBAC/B;AAAO,6BAAA,IAAI,YAAY,KAAK,kBAAkB,EAAE;4BAC9C,oBAAoB,GAAG,aAAa;wBACtC;AAAO,6BAAA,IAAI,YAAY,KAAK,cAAc,EAAE;4BAC1C,oBAAoB,GAAG,QAAQ;wBACjC;AACA,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;6BACzB,IAAI,CAAC,EAAE,GAAG,EAAE,+BAA+B,EAAE,KAAK,EAAE,oBAAoB,EAAkB,CAAC;wBAC9F;oBACF;;gBAEF;YACF;YACA,KAAK,YAAY,EAAE;gBACjB,QAAQ,QAAQ;oBACd,KAAK,wBAAwB,EAAE;AAC7B,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC;AACJ,4BAAA,GAAG,EAAE,qBAAqB,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;AAChF,yBAAA,CAAC;AACpB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,KAAK,EAAkB,CAAC;wBAChH;oBACF;oBACA,KAAK,kBAAkB,EAAE;AACvB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC;AACJ,4BAAA,GAAG,EAAE,qBAAqB,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;AAChF,yBAAA,CAAC;AACpB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAkB,CAAC;wBACrH;oBACF;oBACA,KAAK,gBAAgB,EAAE;AACrB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC;AACJ,4BAAA,GAAG,EAAE,qBAAqB,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;AAChF,yBAAA,CAAC;AACpB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,KAAK,EAAkB,CAAC;AACjH,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,KAAK,EAAkB,CAAC;AACjH,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,KAAK,EAAkB,CAAC;AAC/G,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,KAAK,EAAkB,CAAC;wBACvH;oBACF;oBACA,KAAK,kBAAkB,EAAE;AACvB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC;AACJ,4BAAA,GAAG,EAAE,sBAAsB,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;AAC1F,yBAAA,CAAC;AACpB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC;AACJ,4BAAA,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;AAClF,yBAAA,CAAC;wBACpB;oBACF;oBACA,KAAK,iBAAiB,EAAE;AACtB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAkB,CAAC;AACzG,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC;AACJ,4BAAA,GAAG,EAAE,qBAAqB,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;AAChF,yBAAA,CAAC;AACpB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC;AACJ,4BAAA,GAAG,EAAE,2BAA2B,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AACjF,yBAAA,CAAC;AACpB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,KAAK,EAAkB,CAAC;AAChH,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAkB,CAAC;wBAC5G;oBACF;oBACA,KAAK,gBAAgB,EAAE;AACrB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC;AACJ,4BAAA,GAAG,EAAE,qBAAqB,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;AAChF,yBAAA,CAAC;AACpB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,KAAK,EAAkB,CAAC;AAChH,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAkB,CAAC;wBAC5G;oBACF;oBACA,KAAK,iBAAiB,EAAE;wBACtB,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,KAAK;AACjG,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,gBAAgB,EAAkB,CAAC;AAC/G,wBAAA,IAAI,gBAAgB,KAAK,UAAU,EAAE;AACnC,4BAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,iCAAA,IAAI,CAAC;gCACJ,GAAG,EAAE,sBAAsB,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,KAAK,CAAC;AACtH,6BAAA,CAAC;AACpB,4BAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,iCAAA,IAAI,CAAC;gCACJ,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,KAAK,CAAC;AAClH,6BAAA,CAAC;AACpB,4BAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,iCAAA,IAAI,CAAC;AACJ,gCAAA,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AAC9E,6BAAA,CAAC;AACpB,4BAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,iCAAA,IAAI,CAAC;AACJ,gCAAA,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;AAChF,6BAAA,CAAC;AACpB,4BAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,iCAAA,IAAI,CAAC;AACJ,gCAAA,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE;AACvB,6BAAA,CAAC;wBACtB;wBACA;oBACF;oBACA,KAAK,2BAA2B,EAAE;wBAChC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;AACzC,4BAAA,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE;AACV,yBAAA,CAAC;wBAClB;oBACF;oBACA,KAAK,iBAAiB,EAAE;AACtB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC;AACJ,4BAAA,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;AACxE,yBAAA,CAAC;AACpB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC;AACJ,4BAAA,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;AAC5E,yBAAA,CAAC;AACpB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC;4BACJ,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,KAAK,CAAC;AAC3G,yBAAA,CAAC;AACpB,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzB,6BAAA,IAAI,CAAC;4BACJ,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,KAAK,CAAC;AACvG,yBAAA,CAAC;wBACpB;oBACF;;gBAEF;YACF;;;AAIF,QAAA,4BAA4B,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;YACnD,IAAI,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,GAAG,WAAW,CAAC,CAAC,KAAK,EAAE;AAClE,gBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;qBACzB,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,GAAG,WAAW,CAAC,CAAC,KAAK,EAAkB,CAAC;YACtH;AACF,QAAA,CAAC,CAAC;;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,KAAK;IACtG;AAEA;;;AAGG;AACK,IAAA,gBAAgB,CAAC,IAAU,EAAA;AACjC,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;QAC7B,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC7D,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QAEpD,OAAO,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI;IACvC;8GArRW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACTD;;ACAA;;AAEG;AACI,MAAM,SAAS,GAAG;AACrB,IAAA,gBAAgB,EAAE;AACd,QAAA,UAAU,EAAE,UAAU;AACtB,QAAA,WAAW,EAAE,WAAW;AACxB,QAAA,WAAW,EAAE,WAAW;AACxB,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,WAAW,EAAE,YAAY;AACzB,QAAA,OAAO,EAAE;AACZ;CACJ;;ACZD;AACO,MAAM,sBAAsB,GAAG;AAClC,IAAA,2BAA2B,EAAE,UAAU;AACvC,IAAA,sBAAsB,EAAE,aAAa;AACrC,IAAA,gBAAgB,EAAE,MAAM;AACxB,IAAA,gBAAgB,EAAE,MAAM;AACxB,IAAA,yBAAyB,EAAE,gBAAgB;AAC3C,IAAA,gCAAgC,EAAE,yDAAyD;AAC3F,IAAA,mBAAmB,EAAE,OAAO;AAC5B,IAAA,wBAAwB,EAAE,iBAAiB;AAC3C,IAAA,gCAAgC,EAAE,4CAA4C;AAC9E,IAAA,+BAA+B,EAAE,kDAAkD;AACnF,IAAA,kCAAkC,EAAE,gCAAgC;AACpE,IAAA,6BAA6B,EAAE,QAAQ;AACvC,IAAA,2BAA2B,EAAE,MAAM;AACnC,IAAA,2BAA2B,EAAE,MAAM;AACnC,IAAA,+BAA+B,EAAE,yBAAyB;AAC1D,IAAA,iCAAiC,EAAE,qBAAqB;AACxD,IAAA,6BAA6B,EAAE,YAAY;AAC3C,IAAA,+BAA+B,EAAE,cAAc;AAC/C,IAAA,qCAAqC,EAAE,oBAAoB;AAC3D,IAAA,4BAA4B,EAAE,UAAU;AACxC,IAAA,kCAAkC,EAAE,iBAAiB;AACrD,IAAA,kCAAkC,EAAE,kBAAkB;AACtD,IAAA,oCAAoC,EAAE,uBAAuB;AAC7D,IAAA,kCAAkC,EAAE,kBAAkB;AACtD,IAAA,mCAAmC,EAAE,mBAAmB;AACxD,IAAA,qCAAqC,EAAE,qBAAqB;AAC5D,IAAA,8CAA8C,EAAE,wEAAwE;AACxH,IAAA,wBAAwB,EAAE,MAAM;AAChC,IAAA,6BAA6B,EAAE,YAAY;AAC3C,IAAA,gCAAgC,EAAE,eAAe;AACjD,IAAA,kCAAkC,EAAE,8DAA8D;AAClG,IAAA,kCAAkC,EAAE,iBAAiB;AACrD,IAAA,wCAAwC,EAAE,uBAAuB;AACjE,IAAA,4CAA4C,EAAE,6BAA6B;AAC3E,IAAA,kDAAkD,EAAE,iCAAiC;AACrF,IAAA,mCAAmC,EAAE,mBAAmB;AACxD,IAAA,qCAAqC,EAAE,qBAAqB;AAC5D,IAAA,gCAAgC,EAAE,eAAe;AACjD,IAAA,sCAAsC,EAAE,sBAAsB;AAC9D,IAAA,sCAAsC,EAAE,sBAAsB;AAC9D,IAAA,4CAA4C,EAAE,6BAA6B;AAC3E,IAAA,4CAA4C,EAAE,OAAO;AACrD,IAAA,gDAAgD,EAAE,4FAA4F;AAC9I,IAAA,4CAA4C,EAAE,wNAAwN;AACtQ,IAAA,0CAA0C,EAAE,yGAAyG;AACrJ,IAAA,wCAAwC,EAAE,8FAA8F;AACxI,IAAA,sCAAsC,EAAE,gBAAgB;AACxD,IAAA,gDAAgD,EAAE,iBAAiB;AACnE,IAAA,oCAAoC,EAAE,iBAAiB;AACvD,IAAA,0CAA0C,EAAE,uCAAuC;AACnF,IAAA,2CAA2C,EAAE,qCAAqC;AAClF,IAAA,8BAA8B,EAAE,+CAA+C;AAC/E,IAAA,8BAA8B,EAAE,oGAAoG;AACpI,IAAA,6CAA6C,EAAE,oEAAoE;AACnH,IAAA,kCAAkC,EAAE,+CAA+C;AACnF,IAAA,sCAAsC,EAAE,kDAAkD;AAC1F,IAAA,2BAA2B,EAAE,UAAU;AACvC,IAAA,oCAAoC,EAAE,oBAAoB;AAC1D,IAAA,0CAA0C,EAAE,0BAA0B;AACtE,IAAA,gCAAgC,EAAE,eAAe;AACjD,IAAA,sCAAsC,EAAE,qBAAqB;AAC7D,IAAA,mCAAmC,EAAE,kBAAkB;AACvD,IAAA,+BAA+B,EAAE,cAAc;AAC/C,IAAA,qCAAqC,EAAE,oBAAoB;AAC3D,IAAA,0CAA0C,EAAE,2BAA2B;AACvE,IAAA,gDAAgD,EAAE,iCAAiC;AACnF,IAAA,8CAA8C,EAAE,+BAA+B;AAC/E,IAAA,oDAAoD,EAAE,qCAAqC;AAC3F,IAAA,2CAA2C,EAAE,4BAA4B;AACzE,IAAA,mCAAmC,EAAE,kBAAkB;AACvD,IAAA,yCAAyC,EAAE,wBAAwB;AACnE,IAAA,gCAAgC,EAAE,eAAe;AACjD,IAAA,sCAAsC,EAAE,qBAAqB;AAC7D,IAAA,kCAAkC,EAAE,iBAAiB;AACrD,IAAA,wCAAwC,EAAE,uBAAuB;AACjE,IAAA,+BAA+B,EAAE,qBAAqB;AACtD,IAAA,2CAA2C,EAAE,8BAA8B;AAC3E,IAAA,6CAA6C,EAAE,wBAAwB;AACvE,IAAA,iCAAiC,EAAE,iBAAiB;AACpD,IAAA,uCAAuC,EAAE,gBAAgB;AACzD,IAAA,yBAAyB,EAAE,OAAO;AAClC,IAAA,+BAA+B,EAAE,cAAc;AAC/C,IAAA,4BAA4B,EAAE,WAAW;AACzC,IAAA,kCAAkC,EAAE,iBAAiB;AACrD,IAAA,8BAA8B,EAAE,aAAa;AAC7C,IAAA,oCAAoC,EAAE,mBAAmB;AACzD,IAAA,kCAAkC,EAAE,iBAAiB;AACrD,IAAA,wCAAwC,EAAE,uBAAuB;AACjE,IAAA,8BAA8B,EAAE,aAAa;AAC7C,IAAA,oCAAoC,EAAE,oBAAoB;AAC1D,IAAA,sDAAsD,EAAE,wCAAwC;AAChG,IAAA,4BAA4B,EAAE,WAAW;AACzC,IAAA,kCAAkC,EAAE,iBAAiB;AACrD,IAAA,gCAAgC,EAAE,gBAAgB;AAClD,IAAA,0BAA0B,EAAE,QAAQ;AACpC,IAAA,gCAAgC,EAAE,eAAe;AACjD,IAAA,mCAAmC,EAAE,iBAAiB;AACtD,IAAA,qCAAqC,EAAE,oBAAoB;AAC3D,IAAA,iCAAiC,EAAE,eAAe;AAClD,IAAA,kCAAkC,EAAE,gBAAgB;AACpD,IAAA,wCAAwC,EAAE,yCAAyC;AACnF,IAAA,0DAA0D,EAAE,yCAAyC;AACrG,IAAA,yCAAyC,EAAE,+BAA+B;AAC1E,IAAA,gCAAgC,EAAE,eAAe;AACjD,IAAA,sCAAsC,EAAE,sCAAsC;AAC9E,IAAA,4BAA4B,EAAE,UAAU;AACxC,IAAA,kCAAkC,EAAE,0BAA0B;AAC9D,IAAA,gCAAgC,EAAE,gBAAgB;AAClD,IAAA,sCAAsC,EAAE,sBAAsB;AAC9D,IAAA,6BAA6B,EAAE,YAAY;AAC3C,IAAA,iCAAiC,EAAE,UAAU;AAC7C,IAAA,kCAAkC,EAAE,iBAAiB;AACrD,IAAA,wCAAwC,EAAE,wBAAwB;AAClE,IAAA,6CAA6C,EAAE,8GAA8G;AAC7J,IAAA,yCAAyC,EAAE;CAC9C;;ACrHD;AACO,MAAM,sBAAsB,GAAG;AAClC,IAAA,2BAA2B,EAAE,aAAa;AAC1C,IAAA,sBAAsB,EAAE,kBAAkB;AAC1C,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,gBAAgB,EAAE,OAAO;AACzB,IAAA,yBAAyB,EAAE,iBAAiB;AAC5C,IAAA,gCAAgC,EAAE,+DAA+D;AACjG,IAAA,mBAAmB,EAAE,OAAO;AAC5B,IAAA,wBAAwB,EAAE,4BAA4B;AACtD,IAAA,gCAAgC,EAAE,8DAA8D;AAChG,IAAA,+BAA+B,EAAE,qDAAqD;AACtF,IAAA,kCAAkC,EAAE,yCAAyC;AAC7E,IAAA,6BAA6B,EAAE,QAAQ;AACvC,IAAA,2BAA2B,EAAE,QAAQ;AACrC,IAAA,2BAA2B,EAAE,QAAQ;AACrC,IAAA,+BAA+B,EAAE,6CAA6C;AAC9E,IAAA,iCAAiC,EAAE,mCAAmC;AACtE,IAAA,6BAA6B,EAAE,iBAAiB;AAChD,IAAA,+BAA+B,EAAE,uBAAuB;AACxD,IAAA,qCAAqC,EAAE,gCAAgC;AACvE,IAAA,4BAA4B,EAAE,WAAW;AACzC,IAAA,kCAAkC,EAAE,0BAA0B;AAC9D,IAAA,kCAAkC,EAAE,mCAAmC;AACvE,IAAA,oCAAoC,EAAE,0BAA0B;AAChE,IAAA,kCAAkC,EAAE,oBAAoB;AACxD,IAAA,mCAAmC,EAAE,uCAAuC;AAC5E,IAAA,qCAAqC,EAAE,8BAA8B;AACrE,IAAA,8CAA8C,EAAE,gFAAgF;AAChI,IAAA,wBAAwB,EAAE,OAAO;AACjC,IAAA,6BAA6B,EAAE,gBAAgB;AAC/C,IAAA,gCAAgC,EAAE,kBAAkB;AACpD,IAAA,kCAAkC,EAAE,uDAAuD;AAC3F,IAAA,kCAAkC,EAAE,sBAAsB;AAC1D,IAAA,wCAAwC,EAAE,gCAAgC;AAC1E,IAAA,4CAA4C,EAAE,+BAA+B;AAC7E,IAAA,kDAAkD,EAAE,+CAA+C;AACnG,IAAA,mCAAmC,EAAE,qCAAqC;AAC1E,IAAA,qCAAqC,EAAE,8BAA8B;AACrE,IAAA,gCAAgC,EAAE,mBAAmB;AACrD,IAAA,sCAAsC,EAAE,+BAA+B;AACvE,IAAA,sCAAsC,EAAE,2BAA2B;AACnE,IAAA,4CAA4C,EAAE,uCAAuC;AACrF,IAAA,4CAA4C,EAAE,MAAM;AACpD,IAAA,gDAAgD,EAAE,mGAAmG;AACrJ,IAAA,4CAA4C,EAAE,mQAAmQ;AACjT,IAAA,0CAA0C,EAAE,kHAAkH;AAC9J,IAAA,wCAAwC,EAAE,6GAA6G;AACvJ,IAAA,sCAAsC,EAAE,iBAAiB;AACzD,IAAA,gDAAgD,EAAE,mBAAmB;AACrE,IAAA,oCAAoC,EAAE,kBAAkB;AACxD,IAAA,0CAA0C,EAAE,kCAAkC;AAC9E,IAAA,2CAA2C,EAAE,kFAAkF;AAC/H,IAAA,8BAA8B,EAAE,6CAA6C;AAC7E,IAAA,8BAA8B,EAAE,kHAAkH;AAClJ,IAAA,6CAA6C,EAAE,+EAA+E;AAC9H,IAAA,kCAAkC,EAAE,+CAA+C;AACnF,IAAA,sCAAsC,EAAE,wEAAwE;AAChH,IAAA,2BAA2B,EAAE,aAAa;AAC1C,IAAA,oCAAoC,EAAE,8BAA8B;AACpE,IAAA,0CAA0C,EAAE,sCAAsC;AAClF,IAAA,gCAAgC,EAAE,eAAe;AACjD,IAAA,sCAAsC,EAAE,0BAA0B;AAClE,IAAA,mCAAmC,EAAE,kBAAkB;AACvD,IAAA,+BAA+B,EAAE,cAAc;AAC/C,IAAA,qCAAqC,EAAE,yBAAyB;AAChE,IAAA,0CAA0C,EAAE,mCAAmC;AAC/E,IAAA,gDAAgD,EAAE,8CAA8C;AAChG,IAAA,8CAA8C,EAAE,uCAAuC;AACvF,IAAA,oDAAoD,EAAE,kDAAkD;AACxG,IAAA,2CAA2C,EAAE,wBAAwB;AACrE,IAAA,mCAAmC,EAAE,gBAAgB;AACrD,IAAA,yCAAyC,EAAE,2BAA2B;AACtE,IAAA,gCAAgC,EAAE,eAAe;AACjD,IAAA,sCAAsC,EAAE,0BAA0B;AAClE,IAAA,kCAAkC,EAAE,iBAAiB;AACrD,IAAA,wCAAwC,EAAE,4BAA4B;AACtE,IAAA,+BAA+B,EAAE,0BAA0B;AAC3D,IAAA,2CAA2C,EAAE,uCAAuC;AACpF,IAAA,6CAA6C,EAAE,2BAA2B;AAC1E,IAAA,iCAAiC,EAAE,qBAAqB;AACxD,IAAA,uCAAuC,EAAE,oBAAoB;AAC7D,IAAA,yBAAyB,EAAE,UAAU;AACrC,IAAA,+BAA+B,EAAE,sBAAsB;AACvD,IAAA,4BAA4B,EAAE,2BAA2B;AACzD,IAAA,kCAAkC,EAAE,uBAAuB;AAC3D,IAAA,8BAA8B,EAAE,mBAAmB;AACnD,IAAA,oCAAoC,EAAE,+BAA+B;AACrE,IAAA,kCAAkC,EAAE,eAAe;AACnD,IAAA,wCAAwC,EAAE,wBAAwB;AAClE,IAAA,8BAA8B,EAAE,eAAe;AAC/C,IAAA,oCAAoC,EAAE,2BAA2B;AACjE,IAAA,sDAAsD,EAAE,2CAA2C;AACnG,IAAA,4BAA4B,EAAE,iBAAiB;AAC/C,IAAA,kCAAkC,EAAE,4BAA4B;AAChE,IAAA,gCAAgC,EAAE,gCAAgC;AAClE,IAAA,0BAA0B,EAAE,OAAO;AACnC,IAAA,gCAAgC,EAAE,oBAAoB;AACtD,IAAA,mCAAmC,EAAE,qBAAqB;AAC1D,IAAA,qCAAqC,EAAE,sBAAsB;AAC7D,IAAA,iCAAiC,EAAE,mBAAmB;AACtD,IAAA,kCAAkC,EAAE,qBAAqB;AACzD,IAAA,wCAAwC,EAAE,gDAAgD;AAC1F,IAAA,0DAA0D,EAAE,gDAAgD;AAC5G,IAAA,yCAAyC,EAAE,mCAAmC;AAC9E,IAAA,gCAAgC,EAAE,sBAAsB;AACxD,IAAA,sCAAsC,EAAE,iDAAiD;AACzF,IAAA,4BAA4B,EAAE,UAAU;AACxC,IAAA,kCAAkC,EAAE,+BAA+B;AACnE,IAAA,gCAAgC,EAAE,uBAAuB;AACzD,IAAA,sCAAsC,EAAE,kCAAkC;AAC1E,IAAA,6BAA6B,EAAE,iBAAiB;AAChD,IAAA,iCAAiC,EAAE,YAAY;AAC/C,IAAA,kCAAkC,EAAE,yBAAyB;AAC7D,IAAA,wCAAwC,EAAE,gCAAgC;AAC1E,IAAA,6CAA6C,EAAE,kIAAkI;AACjL,IAAA,yCAAyC,EAAE;CAC9C;;MC3GY,kBAAkB,CAAA;AAC7B;;;;AAIG;IACI,SAAS,CAAC,KAAU,EAAE,IAAU,EAAA;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAEjC,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;AAClE,QAAA,MAAM,cAAc,GAClB,eAAe,KAAK;AAClB,cAAE;cACA,sBAAsB;QAC5B,IAAI,WAAW,GAAW,cAAc,CAAC,GAAG,CAAC,IAAI,KAAK;QACtD,IAAI,IAAI,EAAE;YACR,MAAM,MAAM,GAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1C,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,IAAG;gBACjB,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9E,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,WAAW;IACpB;8GAvBW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAlB,kBAAkB,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,UAAU,EAAE,KAAK;AAClB,iBAAA;;;ACAD;;AAEG;MAIU,YAAY,CAAA;AAIvB;;;;;AAKG;AACH,IAAA,WAAA,CACU,gBAAkC,EAClC,kBAAsC,EACtC,QAAqB,EAAA;QAFrB,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QAClB,IAAA,CAAA,QAAQ,GAAR,QAAQ;;QAXD,IAAA,CAAA,YAAY,GAAW,qBAAqB;IAYzD;AAEJ;;;;AAIG;AACI,IAAA,uBAAuB,CAAC,cAAsB,EAAE,SAAc,EAAE,EAAE,iBAAyB,IAAI,EAAA;AAEpG,QAAA,MAAM,cAAc,GAAG,IAAI,iBAAiB,EAAE;AAC9C,QAAA,cAAc,CAAC,QAAQ,GAAG,cAAc;AACxC,QAAA,cAAc,CAAC,UAAU,GAAG,CAAC,cAAc,CAAC;QAE5C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC;IACrI;AAEA;;;;;AAKG;AACI,IAAA,4BAA4B,CAAC,IAAe,EAAE,EAAc,EAAE,iBAAyB,IAAI,EAAA;QAChG,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,EAAE,cAAc,CAAC;IACtD;AAEA;;;;;AAKG;AACI,IAAA,qBAAqB,CAAC,IAAe,EAAE,EAAc,EAAE,cAAsB,EAAA;AAClF,QAAA,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/B,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;gBACpB;YACF;AACA,YAAA,IAAI,OAAO,YAAY,SAAS,EAAE;AAChC,gBAAA,KAAK,IAAI,cAAc,IAAI,OAAO,CAAC,QAAQ,EAAE;oBAC3C,IAAI,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAClD,oBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;wBAC7B;oBACF;AACA,oBAAA,IAAI,gBAAgB,YAAY,SAAS,EAAE;wBACzC,OAAO,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,EAAE,EAAE,cAAc,CAAC;oBACzE;yBACK;AACH,wBAAA,OAAO,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,CAAC;oBACnF;gBACF;YACF;AACK,iBAAA,IAAI,OAAO,YAAY,SAAS,EAAE;AACrC,gBAAA,KAAK,IAAI,cAAc,IAAI,OAAO,CAAC,QAAQ,EAAE;oBAC3C,IAAI,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAClD,oBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;wBAC7B;oBACF;AACA,oBAAA,IAAI,gBAAgB,YAAY,SAAS,EAAE;wBACzC,OAAO,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,EAAE,EAAE,cAAc,CAAC;oBACzE;yBACK;AACH,wBAAA,OAAO,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,CAAC;oBACnF;gBACF;YACF;iBACK;AACH,gBAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,cAAc,CAAC;YACjE;QACF;IACF;AAEA;;;;;;AAMG;AACI,IAAA,eAAe,CAAC,OAAwB,EAAE,KAAa,EAAE,EAAc,EAAE,cAAsB,EAAA;QACpG,IAAI,SAAS,GAAG,EAAE;AAClB,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM;AAC5B,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhD,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;QAC5D,QAAQ,QAAQ;AACd,YAAA,KAAK,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE;AACtC,gBAAA,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;gBACjG;YACF;AACA,YAAA,KAAK,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE;gBACvC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBACpD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBACjD,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC;gBAChK;YACF;AACA,YAAA,KAAK,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE;gBACvC,IAAI,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzC,IAAI,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAClD,IAAI,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC/C,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC;gBAChK;YACF;AACA,YAAA,KAAK,SAAS,CAAC,cAAc,CAAC,OAAO;AACrC,YAAA,KAAK,SAAS,CAAC,cAAc,CAAC,SAAS;AACvC,YAAA,KAAK,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE;AACnC,gBAAA,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;gBAC/F;YACF;YACA,SAAS;AACP,gBAAA,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,CAAC;gBAChE;YACF;;AAEF,QAAA,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,cAAc,CAAC;QACvD;IACF;AAEA;;;AAGG;AACI,IAAA,qBAAqB,CAAC,KAAa,EAAA;QACxC,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,kBAAkB,GAAG,EAAE;AAC3B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACnE,YAAA,kBAAkB,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG;QACtC;AAEA,QAAA,OAAO,kBAAkB;IAC3B;AAEA;;;AAGG;AACI,IAAA,qBAAqB,CAAC,EAAc,EAAA;;QAEzC,MAAM,eAAe,GAAG,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,qCAAqC,CAAC;AAChG,QAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7B;IAEF;AAEA;;;;AAIG;IACI,oBAAoB,CAAC,UAAkB,EAAE,iBAAuB,EAAA;AACrE,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACxG;8GAzKW,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA;;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACZD;;AAEG;AACI,MAAM,oBAAoB,GAA4C;AACzE,IAAA;AACE,QAAA,SAAS,EAAG,gBAAgB;AAC5B,QAAA,QAAQ,EAAG,iBAAiB;AAC5B,QAAA,SAAS,EAAE,aAAa;QACxB,YAAY,EAAE,CAAC,qCAAqC,CAAC;QACrD,mBAAmB,EAAC,CAAC,qCAAqC,CAAC;AAC3D,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,gBAAgB;AAC5B,QAAA,QAAQ,EAAG,mBAAmB;AAC9B,QAAA,SAAS,EAAE,aAAa;QACxB,YAAY,EAAE,CAAC,SAAS,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC;QAC7F,mBAAmB,EAAE,CAAC,SAAS,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC;AACpG,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,gBAAgB;AAC5B,QAAA,QAAQ,EAAG,oBAAoB;AAC/B,QAAA,SAAS,EAAE,gBAAgB;AAC3B,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,gBAAgB;AAC5B,QAAA,QAAQ,EAAG,kBAAkB;AAC7B,QAAA,SAAS,EAAE,UAAU;AACrB,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,gBAAgB;AAC5B,QAAA,QAAQ,EAAG,kBAAkB;AAC7B,QAAA,SAAS,EAAE,iBAAiB;AAC5B,QAAA,YAAY,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;AACnC,QAAA,mBAAmB,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;AAC1C,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,gBAAgB;AAC5B,QAAA,QAAQ,EAAG,kBAAkB;AAC7B,QAAA,SAAS,EAAE,oBAAoB;AAC/B,QAAA,YAAY,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC;AAC/C,QAAA,mBAAmB,EAAE,CAAC,gCAAgC,EAAC,+BAA+B,EAAC,iCAAiC,CAAC;AACzH,QAAA,QAAQ,EAAE;AAC8B,KAAA;AACxC,IAAA;AACE,QAAA,SAAS,EAAG,gBAAgB;AAC5B,QAAA,QAAQ,EAAG,sBAAsB;AACjC,QAAA,SAAS,EAAE,oBAAoB;AAC/B,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,UAAU;AACtB,QAAA,QAAQ,EAAG,uBAAuB;AAClC,QAAA,SAAS,EAAE,kBAAkB;AAC7B,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,UAAU;AACtB,QAAA,QAAQ,EAAG,6BAA6B;AACxC,QAAA,SAAS,EAAE,4BAA4B;AACvC,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,UAAU;AACtB,QAAA,QAAQ,EAAG,sBAAsB;AACjC,QAAA,SAAS,EAAE,wCAAwC;AACnD,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,UAAU;AACtB,QAAA,QAAQ,EAAG,sBAAsB;AACjC,QAAA,SAAS,EAAE,yCAAyC;AACpD,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,UAAU;AACtB,QAAA,QAAQ,EAAG,sBAAsB;AACjC,QAAA,SAAS,EAAE,eAAe;QAC1B,YAAY,EAAE,CAAC,eAAe,EAAE,kBAAkB,EAAE,cAAc,EAAE,gBAAgB,CAAC;QACrF,mBAAmB,EAAE,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,eAAe,EAAE,iBAAiB,CAAC;AACjG,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,wBAAwB;AACnC,QAAA,SAAS,EAAE,qBAAqB;AAChC,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,wBAAwB;AACnC,QAAA,SAAS,EAAE,gBAAgB;AAC3B,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,kBAAkB;AAC7B,QAAA,SAAS,EAAE,qBAAqB;AAChC,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,kBAAkB;AAC7B,QAAA,SAAS,EAAE,iBAAiB;AAC5B,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,gBAAgB;AAC3B,QAAA,SAAS,EAAE,qBAAqB;AAChC,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,gBAAgB;AAC3B,QAAA,SAAS,EAAE,eAAe;AAC1B,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,gBAAgB;AAC3B,QAAA,SAAS,EAAE,eAAe;AAC1B,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,gBAAgB;AAC3B,QAAA,SAAS,EAAE,cAAc;AACzB,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,gBAAgB;AAC3B,QAAA,SAAS,EAAE,kBAAkB;AAC7B,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,kBAAkB;AAC7B,QAAA,SAAS,EAAE,+BAA+B;AAC1C,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,kBAAkB;AAC7B,QAAA,SAAS,EAAE,2BAA2B;AACtC,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,iBAAiB;AAC5B,QAAA,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,CAAC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,yBAAyB;YACpG,sBAAsB,EAAE,OAAO,CAAC;AAChC,QAAA,mBAAmB,EAAE,CAAC,OAAO,EAAC,mBAAmB,EAAC,aAAa,EAAC,aAAa,EAAC,yBAAyB,EAAC,sBAAsB,EAAC,OAAO,CAAC;AACvI,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,iBAAiB;AAC5B,QAAA,SAAS,EAAE,qBAAqB;AAChC,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,iBAAiB;AAC5B,QAAA,SAAS,EAAE,gBAAgB;AAC3B,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,iBAAiB;AAC5B,QAAA,SAAS,EAAE,YAAY;AACvB,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,iBAAiB;AAC5B,QAAA,SAAS,EAAE,UAAU;AACrB,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,gBAAgB;AAC3B,QAAA,SAAS,EAAE,qBAAqB;AAChC,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,gBAAgB;AAC3B,QAAA,SAAS,EAAE,YAAY;AACvB,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,gBAAgB;AAC3B,QAAA,SAAS,EAAE,UAAU;AACrB,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,iBAAiB;AAC5B,QAAA,SAAS,EAAE,0BAA0B;AACrC,QAAA,YAAY,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;AACpC,QAAA,mBAAmB,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC3C,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,iBAAiB;AAC5B,QAAA,SAAS,EAAE,eAAe;AAC1B,QAAA,YAAY,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC;AACpC,QAAA,mBAAmB,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC;AAC3C,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,iBAAiB;AAC5B,QAAA,SAAS,EAAE,sBAAsB;AACjC,QAAA,YAAY,EAAE,CAAC,iCAAiC,EAAE,OAAO,CAAC;AAC1D,QAAA,mBAAmB,EAAE,CAAC,iCAAiC,EAAE,OAAO,CAAC;AACjE,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,iBAAiB;AAC5B,QAAA,SAAS,EAAE,iBAAiB;AAC5B,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,iBAAiB;AAC5B,QAAA,SAAS,EAAE,qBAAqB;AAChC,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,iBAAiB;AAC5B,QAAA,SAAS,EAAE,mBAAmB;AAC9B,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,iBAAiB;AAC5B,QAAA,SAAS,EAAE,iBAAiB;AAC5B,QAAA,YAAY,EAAE,CAAC,wBAAwB,EAAE,2BAA2B,CAAC;AACrE,QAAA,mBAAmB,EAAE,CAAC,wBAAwB,EAAE,2BAA2B,CAAC;AAC5E,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,iBAAiB;AAC5B,QAAA,SAAS,EAAE,oBAAoB;AAC/B,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,iBAAiB;AAC5B,QAAA,SAAS,EAAE,YAAY;AACvB,QAAA,QAAQ,EAAE;AAC8B,KAAA;AAC1C,IAAA;AACE,QAAA,SAAS,EAAG,YAAY;AACxB,QAAA,QAAQ,EAAG,iBAAiB;AAC5B,QAAA,SAAS,EAAE,UAAU;AACrB,QAAA,QAAQ,EAAE;AAC8B;CAC7C;;AC/QH;;AAEG;AACI,MAAM,mBAAmB,GAAiC;AAC7D,IAAA;AACE,QAAA,SAAS,EAAE,YAAY;QACvB,iBAAiB,EAAE,IAAI,GAAG,CAAC;YACzB,CAAC,OAAO,EAAE,mBAAmB;SAC9B;AAC4B,KAAA;AAC/B,IAAA;AACE,QAAA,SAAS,EAAE,gBAAgB;QAC3B,iBAAiB,EAAE,IAAI,GAAG,CAAC;YACzB,CAAC,iBAAiB,EAAE,uCAAuC,CAAC;YAC5D,CAAC,mBAAmB,EAAE,+BAA+B,CAAC;YACtD,CAAC,oBAAoB,EAAE,gCAAgC,CAAC;YACxD,CAAC,kBAAkB,EAAE,8BAA8B,CAAC;YACpD,CAAC,sBAAsB,EAAE,gDAAgD;SAC1E;AAC4B,KAAA;AAC/B,IAAA;AACE,QAAA,SAAS,EAAE,UAAU;QACrB,iBAAiB,EAAE,IAAI,GAAG,CAAC;YACzB,CAAC,uBAAuB,EAAE,mCAAmC,CAAC;YAC9D,CAAC,6BAA6B,EAAE,2BAA2B,CAAC;YAC5D,CAAC,kBAAkB,EAAE,yBAAyB,CAAC;YAC/C,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;YAC7C,CAAC,sBAAsB,EAAE,6BAA6B;SACvD;AAC4B,KAAA;AAC/B,IAAA;AACE,QAAA,SAAS,EAAE,YAAY;QACvB,iBAAiB,EAAE,IAAI,GAAG,CAAC;YACzB,CAAC,wBAAwB,EAAE,oCAAoC,CAAC;YAChE,CAAC,kBAAkB,EAAE,8BAA8B,CAAC;YACpD,CAAC,gBAAgB,EAAE,qCAAqC,CAAC;YACzD,CAAC,kBAAkB,EAAE,8BAA8B,CAAC;YACpD,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;YACnD,CAAC,gBAAgB,EAAE,gCAAgC,CAAC;YACpD,CAAC,kBAAkB,EAAE,2CAA2C,CAAC;YACjE,CAAC,mBAAmB,EAAE,4CAA4C,CAAC;YACnE,CAAC,oBAAoB,EAAE,6CAA6C,CAAC;YACrE,CAAC,iBAAiB,EAAE,8CAA8C,CAAC;YACnE,CAAC,2BAA2B,EAAE,0DAA0D,CAAC;YACzF,CAAC,iBAAiB,EAAE,mDAAmD;SACxE;AAC4B;CAChC;;ACjCH;;AAEG;AACI,MAAMC,YAAU,GAAG;AACxB,IAAA,KAAK,EAAE;AACL,QAAA,SAAS,EAAE,SAAS;AACrB,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,cAAc,EAAE,UAAU;AAC1B,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,kBAAkB,EAAE,WAAW;AAChC,KAAA;CACF;AAED;;AAEG;MAeU,wBAAwB,CAAA;AAdrC,IAAA,WAAA,GAAA;;AAiBS,QAAA,IAAA,CAAA,oBAAoB,GAAgB,IAAI,WAAW,EAAE;AA6B7D,IAAA;AAvBC;;;AAGG;AACI,IAAA,iBAAiB,CAAC,cAAsB,EAAA;AAC7C,QAAA,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC/C;AAEA;;;;AAIG;IACI,kBAAkB,CACvB,eAAuB,EACvB,UAAiC,EAAA;AAEjC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK;QACjD,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;AACxC,QAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC7C,UAAU,CAAC,KAAK,EAAE;IACpB;8GA/BW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EATxB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,QAAQ,EAAE,iBAAiB;AAC3B,gBAAA,IAAI,EAAE,CAAC,eAAe,EAAE,+BAA+B,CAAC;AACzD,aAAA;AACD,YAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAEA,YAAU,EAAE;AACpD,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9CH,wfAOiB,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,KAAA,EAAA,KAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDyCJ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAdpC,SAAS;+BACE,8BAA8B,EAAA,UAAA,EAG5B,KAAK,EAAA,SAAA,EACN;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,WAAW;AACpB,4BAAA,QAAQ,EAAE,iBAAiB;AAC3B,4BAAA,IAAI,EAAE,CAAC,eAAe,EAAE,+BAA+B,CAAC;AACzD,yBAAA;AACD,wBAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAEF,YAAU,EAAE;AACpD,qBAAA,EAAA,QAAA,EAAA,wfAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA;;sBAIA;;sBAIA;;;AEtCH;;AAEG;AACI,MAAM,UAAU,GAAG;AACxB,IAAA,KAAK,EAAE;AACL,QAAA,SAAS,EAAE,MAAM;AAClB,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,aAAa,EAAE,WAAW;AAC3B,KAAA;CACF;AAED;;AAEG;MAgBU,mBAAmB,CAAA;AAfhC,IAAA,WAAA,GAAA;;AAkBS,QAAA,IAAA,CAAA,eAAe,GAAgB,IAAI,WAAW,EAAE;AAmBxD,IAAA;AAbC;;;;AAIG;IACI,iBAAiB,CACtB,cAAsB,EACtB,UAAiC,EAAA;AAEjC,QAAA,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxC,UAAU,CAAC,KAAK,EAAE;IACpB;8GArBW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAVnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,QAAQ,EAAE,iBAAiB;AAC3B,gBAAA,IAAI,EAAE,CAAC,eAAe,EAAE,+BAA+B,CAAC;AACzD,aAAA;AAED,YAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE;AACpD,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/CH,gaAMiB,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,KAAA,EAAA,KAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FD2CJ,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAf/B,SAAS;+BACE,wBAAwB,EAAA,UAAA,EAGtB,KAAK,EAAA,SAAA,EACN;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,WAAW;AACpB,4BAAA,QAAQ,EAAE,iBAAiB;AAC3B,4BAAA,IAAI,EAAE,CAAC,eAAe,EAAE,+BAA+B,CAAC;AACzD,yBAAA;AAED,wBAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE;AACpD,qBAAA,EAAA,QAAA,EAAA,gaAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA;;sBAIA;;sBAIA;;;AErDH;;AAEG;MAKU,oBAAoB,CAAA;AAe/B;;;AAGG;AACH,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;;AAdd,QAAA,IAAA,CAAA,WAAW,GAAkB;YACnC,WAAW;YACX,QAAQ;YACR,KAAK;YACL,QAAQ;YACR,OAAO;YACP,QAAQ;YACR,eAAe;SAChB;IAMoC;AAErC;;;AAGG;AACkC,IAAA,SAAS,CAAC,KAAK,EAAA;QAClD,MAAM,CAAC,GAAkB,KAAK;AAE9B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IACE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;;AAErD,iBAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC;;AAE9C,iBAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC;;AAE9C,iBAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC;;AAE9C,gBAAA,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO;;AAEhC,gBAAA,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO;gBAChC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,gBAAgB,EACzC;;gBAEA;YACF;;AAGA,YAAA,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;gBAC5D,CAAC,CAAC,cAAc,EAAE;YACpB;QACF;IACF;8GApDW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,KAAK;AAClB,iBAAA;;sBAGE;;sBAuBA,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;ACrBrC;;AAEG;MAOU,wBAAwB,CAAA;;AAiKnC,IAAA,IAAW,YAAY,GAAA;QACrB,OAAO,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAC5C,8BAA8B,CAClB;IAChB;AASA;;;;;AAKG;AACH,IAAA,WAAA,CACU,gBAAkC,EAClC,kBAAsC,EACtC,WAAwB,EAAA;QAFxB,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QAClB,IAAA,CAAA,WAAW,GAAX,WAAW;;QAhLd,IAAA,CAAA,0BAA0B,GAAsC,EAAE;;QAIlE,IAAA,CAAA,sBAAsB,GAAyC,EAAE;;QAIjE,IAAA,CAAA,4BAA4B,GACjC,EAAE;;AAeG,QAAA,IAAA,CAAA,2BAA2B,GAAgB,IAAI,GAAG,EAAU;;QAG5D,IAAA,CAAA,MAAM,GAAkB,EAAE;;AAG1B,QAAA,IAAA,CAAA,UAAU,GAAkB;YACjC,KAAK;YACL,QAAQ;YACR,MAAM;YACN,gBAAgB;YAChB,gBAAgB;SACjB;;AAGM,QAAA,IAAA,CAAA,iBAAiB,GAA+B,IAAI,GAAG,EAG3D;;AAGI,QAAA,IAAA,CAAA,mBAAmB,GAAkB;YAC1C,qCAAqC;SACtC;;AAGM,QAAA,IAAA,CAAA,qBAAqB,GAAkB;YAC5C,SAAS;YACT,qBAAqB;YACrB,oBAAoB;YACpB,qBAAqB;SACtB;;AAGM,QAAA,IAAA,CAAA,MAAM,GAAkB;YAC7B,OAAO;YACP,mBAAmB;YACnB,aAAa;YACb,aAAa;YACb,yBAAyB;YACzB,sBAAsB;YACtB,OAAO;SACR;;AAGM,QAAA,IAAA,CAAA,YAAY,GAAkB,CAAC,MAAM,EAAE,YAAY,CAAC;;AAGpD,QAAA,IAAA,CAAA,wBAAwB,GAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC;;AAGhE,QAAA,IAAA,CAAA,cAAc,GAAkB,CAAC,MAAM,EAAE,WAAW,CAAC;;QAGrD,IAAA,CAAA,gBAAgB,GAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC;;AAGnE,QAAA,IAAA,CAAA,cAAc,GAAkB;YACrC,wBAAwB;YACxB,2BAA2B;SAC5B;;AAGM,QAAA,IAAA,CAAA,OAAO,GAAS,IAAI,IAAI,EAAE;;AAG1B,QAAA,IAAA,CAAA,oBAAoB,GACzB,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;YACpE,GAAG;AACH,YAAA,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;AASnB,QAAA,IAAA,CAAA,0BAA0B,GAA+B,IAAI,GAAG,EAGpE;;QA8BI,IAAA,CAAA,iCAAiC,GACtC,EAAE;;AAGG,QAAA,IAAA,CAAA,+BAA+B,GAA+B,IAAI,GAAG,EAGzE;;AAMI,QAAA,IAAA,CAAA,wBAAwB,GAA+B,IAAI,GAAG,EAGlE;;QAUI,IAAA,CAAA,oBAAoB,GAA4C,EAAE;;QAGlE,IAAA,CAAA,4BAA4B,GACjC,EAAE;IAYD;AAEH;;AAEG;IACI,QAAQ,GAAA;QACb,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB;QAC7D,IAAI,CAAC,uBAAuB,EAAE;QAC9B,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,yBAAyB,EAAE;;QAGhC,IAAI,IAAI,CAAC,0BAA0B,CAAC,MAAM,IAAI,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,0BAA0B,GAAG,mBAAmB;QACvD;QAEA,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,aAAa,KAAI;YACxD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;YACzC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CACxB,aAAa,CAAC,SAAS,EACvB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CACnD;AACH,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,oBAAoB,GAAG,oBAAoB;QAChD,IAAI,CAAC,0BAA0B,EAAE;IACnC;AAEA;;AAEG;IACK,0BAA0B,GAAA;QAChC,IAAI,IAAI,CAAC,4BAA4B,CAAC,MAAM,IAAI,CAAC,EAAE;YACjD,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,cAAc,KAAI;AACtE,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAC3D,CAAC,cAAc,KACb,cAAc,CAAC,SAAS,KAAK,cAAc,CAAC,SAAS;AACrD,oBAAA,cAAc,CAAC,QAAQ,KAAK,cAAc,CAAC,QAAQ;AACnD,oBAAA,cAAc,CAAC,SAAS,KAAK,cAAc,CAAC,SAAS,CACxD;AACD,gBAAA,OAAO,cAAc,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,cAAc;AAChE,YAAA,CAAC,CAAC;QACJ;IACF;AAEA;;;;AAIG;IACI,+BAA+B,CACpC,KAAwB,EACxB,KAAa,EAAA;AAEb,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7C;aAAO;AACL,YAAA,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,KAAK,CAAC;QAChD;QAEA,IAAI,eAAe,GAAG,EAAE;AACxB,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAC3D,CAAC,WAAW,KACV,WAAW,CAAC,QAAQ,KAAK,kBAAkB;YAC3C,WAAW,CAAC,SAAS,KAAK,gBAAgB;AAC1C,YAAA,WAAW,CAAC,SAAS,KAAK,oBAAoB,CACjD;AACD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,sBAAsB,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnE,IAAI,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBAC3C,eAAe,GAAG,eAAe,GAAG,CAAA,EAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG;YACpE;QACF;AAEA,QAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD;AACA,QAAA,IAAI,CAAC;aACF,GAAG,CAAC,kCAAkC;aACtC,QAAQ,CAAC,eAAe,CAAC;IAC9B;AAEA;;;;;AAKG;AACI,IAAA,sCAAsC,CAC3C,KAAwB,EACxB,KAAa,EACb,eAAuB,EAAA;QAEvB,IAAI,YAAY,GAAG,EAAE;QACrB,IAAI,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,eAAe,CAAC;AAChE,QAAA,IACE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,GAAG,eAAe,CAAC,CAAC,KAAK,EACvE;AACA,YAAA,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CACxC,kBAAkB,GAAG,eAAe,CACrC,CAAC,KAAK;QACT;AACA,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE;YACjB,YAAY;AACV,gBAAA,YAAY,KAAK;AACf,sBAAE,OAAO,CAAC,KAAK;sBACb,YAAY,GAAG,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3C;aAAO;YACL,IAAI,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5C,YAAA,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;AACvE,YAAA,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;QACzC;AACA,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAC,kBAAkB,GAAG,eAAe;aACxC,QAAQ,CAAC,YAAY,CAAC;IAC3B;;AAGQ,IAAA,yBAAyB,CAAC,KAAa,EAAA;AAC7C,QAAA,IAAI,KAAK,IAAI,sBAAsB,EAAE;AACnC,YAAA,IAAI,CAAC;iBACF,GAAG,CAAC,+BAA+B;AACnC,iBAAA,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC;QAC1C;IACF;AAEA;;AAEG;IACK,wCAAwC,GAAA;AAC9C,QAAA,IAAI,CAAC,iCAAiC,GAAG,EAAE;QAC3C,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAC9C,YAAA,IACE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa;AACvC,gBAAA,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EACzC;AACA,gBAAA,IAAI,CAAC;qBACF,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;AACtD,qBAAA,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;AACrC,gBAAA,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,OAAO,CAAC;YACtD;AACF,QAAA,CAAC,CAAC;;QAGF,IAAI,IAAI,CAAC,iCAAiC,CAAC,MAAM,IAAI,CAAC,EAAE;AACtD,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI;QACrC;IACF;AAEA;;AAEG;IACK,6CAA6C,GAAA;AACnD,QAAA,IAAI,CAAC,4BAA4B,GAAG,EAAE;QACtC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAC5C,YAAA,IACE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa;AACvC,gBAAA,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EACzC;AACA,gBAAA,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC;YACjD;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;AACI,IAAA,YAAY,CAAC,KAAsB,EAAA;QACxC,IAAI,MAAM,GAAG,EAAE;QACf,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YAClD,IAAI,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE;gBAC3C,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;YACrD;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC;aACF,GAAG,CAAC,wBAAwB;aAC5B,QAAQ,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC;QAC3C,IAAI,CAAC,6CAA6C,EAAE;QACpD,IAAI,CAAC,wCAAwC,EAAE;IACjD;AAEA;;AAEG;IACI,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,8BAA8B,CAAC;IAClE;AAEA;;;AAGG;AACI,IAAA,iBAAiB,CAAC,KAAa,EAAA;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,GAAG,CACnD,8BAA8B,CAClB;AACd,QAAA,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;IACvB;AAEA;;AAEG;IACK,uBAAuB,GAAA;QAC7B,IAAI,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAClE,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,KAAK;QACpC;QAEA,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,0BAA0B,CAAC;QACjE,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,KAAK;QACvC;QAEA,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,4BAA4B,CAAC;QACnE,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,KAAK;QACzC;QAEA,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,kCAAkC,CAAC;QACzE,IAAI,OAAO,EAAE;YACX,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAkB;AACxD,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,IAAY,KAAI;gBAC9B,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAC7C,YAAA,CAAC,CAAC;QACJ;IACF;AAEA;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,gCAAgC;AACxD,aAAA,SAAS,CAAC,CAAC,IAAY,KAAI;AAC1B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;iBACzB,SAAS,CAAC,IAAI;iBACd,KAAK,CAAC,GAAG,CAAC;AACf,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,oCAAoC;AAC5D,aAAA,SAAS,CAAC,CAAC,IAAY,KAAI;AAC1B,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;iBAC7B,SAAS,CAAC,IAAI;iBACd,KAAK,CAAC,GAAG,CAAC;AACf,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,8CAA8C;AACtE,aAAA,SAAS,CAAC,CAAC,IAAY,KAAI;YAC1B,IAAI,CAAC,0BAA0B,CAAC,GAAG,CACjC,YAAY,EACZ,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CACnD;AACH,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CACF,IAAI,CAAC,YAAY,GAAG,kDAAkD;AAEvE,aAAA,SAAS,CAAC,CAAC,IAAY,KAAI;YAC1B,IAAI,CAAC,0BAA0B,CAAC,GAAG,CACjC,gBAAgB,EAChB,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CACnD;AACH,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,4CAA4C;AACpE,aAAA,SAAS,CAAC,CAAC,IAAY,KAAI;YAC1B,IAAI,CAAC,0BAA0B,CAAC,GAAG,CACjC,UAAU,EACV,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CACnD;AACH,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,8CAA8C;AACtE,aAAA,SAAS,CAAC,CAAC,IAAY,KAAI;YAC1B,IAAI,CAAC,0BAA0B,CAAC,GAAG,CACjC,YAAY,EACZ,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CACnD;AACH,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,+CAA+C;AACvE,aAAA,SAAS,CAAC,CAAC,IAAY,KAAI;AAC1B,YAAA,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC;iBACxC,SAAS,CAAC,IAAI;iBACd,KAAK,CAAC,GAAG,CAAC;AACf,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,6CAA6C;AACrE,aAAA,SAAS,CAAC,CAAC,IAAY,KAAI;AAC1B,YAAA,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;iBACtC,SAAS,CAAC,IAAI;iBACd,KAAK,CAAC,GAAG,CAAC;AACf,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,gCAAgC;AACxD,aAAA,SAAS,CAAC,CAAC,IAAY,KAAI;AAC1B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;iBACzB,SAAS,CAAC,IAAI;iBACd,KAAK,CAAC,GAAG,CAAC;AACf,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,sCAAsC;AAC9D,aAAA,SAAS,CAAC,CAAC,IAAY,KAAI;AAC1B,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;iBAC/B,SAAS,CAAC,IAAI;iBACd,KAAK,CAAC,GAAG,CAAC;AACf,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,4CAA4C;AACpE,aAAA,SAAS,CAAC,CAAC,IAAY,KAAI;AAC1B,YAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC;iBACrC,SAAS,CAAC,IAAI;iBACd,KAAK,CAAC,GAAG,CAAC;AACf,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CACF,IAAI,CAAC,YAAY,GAAG,kDAAkD;AAEvE,aAAA,SAAS,CAAC,CAAC,IAAY,KAAI;AAC1B,YAAA,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC;iBAC3C,SAAS,CAAC,IAAI;iBACd,KAAK,CAAC,GAAG,CAAC;AACf,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,wCAAwC;AAChE,aAAA,SAAS,CAAC,CAAC,IAAY,KAAI;AAC1B,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;iBACjC,SAAS,CAAC,IAAI;iBACd,KAAK,CAAC,GAAG,CAAC;AACf,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,0CAA0C;AAClE,aAAA,SAAS,CAAC,CAAC,IAAY,KAAI;AAC1B,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;iBACnC,SAAS,CAAC,IAAI;iBACd,KAAK,CAAC,GAAG,CAAC;AACf,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,wCAAwC;AAChE,aAAA,SAAS,CAAC,CAAC,IAAY,KAAI;AAC1B,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;iBACjC,SAAS,CAAC,IAAI;iBACd,KAAK,CAAC,GAAG,CAAC;AACf,QAAA,CAAC,CAAC;IACN;AAEA;;AAEG;IACK,yBAAyB,GAAA;QAC/B,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;;YAE7C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAe,CAAC,UAAU,CACtE,OAAO,CAAC,eAAe,EACvB,IAAI,WAAW,CAAC,EAAE,CAAC,CACpB;;AAGD,YAAA,IAAI,OAAO,CAAC,gBAAgB,EAAE;AAC5B,gBAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAC/B,OAAO,CAAC,eAAe,EACvB,OAAO,CAAC,gBAAgB,CACzB;YACH;AACF,QAAA,CAAC,CAAC;IACJ;8GAriBW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,4SCtBrC,ms5CAwuBO,EAAA,MAAA,EAAA,CAAA,0bAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,KAAA,EAAA,KAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,4OAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,sRAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,kTAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,sRAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,gNAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAV,kBAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDltBM,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,cAG3B,KAAK,EAAA,QAAA,EAAA,ms5CAAA,EAAA,MAAA,EAAA,CAAA,0bAAA,CAAA,EAAA;;sBAIhB;;sBAIA;;sBAIA;;sBAIA;;;AEbH;;AAEG;MAOU,qBAAqB,CAAA;AAqChC;;;;;AAKG;AACH,IAAA,WAAA,CACU,QAAqB,EACrB,gBAAkC,EAClC,kBAAsC,EAAA;QAFtC,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;;QA3CrB,IAAA,CAAA,WAAW,GAAW,EAAE;;AAQxB,QAAA,IAAA,CAAA,kBAAkB,GAA+B,IAAI,YAAY,EAErE;;QAOI,IAAA,CAAA,gBAAgB,GAAmB,gBAAgB;;QAGnD,IAAA,CAAA,OAAO,GAAmB,OAAO;;QAYjC,IAAA,CAAA,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;IAYjD;AAEH;;AAEG;IACI,QAAQ,GAAA;QACb,IAAI,CAAC,sBAAsB,EAAE;IAC/B;AAEA;;AAEG;IACI,WAAW,GAAA;QAChB,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;IACvD;AAEA;;AAEG;AACI,IAAA,YAAY,CAAC,KAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;IAClC;AAEA;;AAEG;AACI,IAAA,UAAU,CAAC,IAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC1B,IAAI,CAAC,MAAM,EAAE;AACb,QAAA,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;QACjC,IAAI,CAAC,eAAe,EAAE;IACxB;AAEA;;AAEG;IACI,eAAe,GAAA;AACpB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC5C,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;IAC3C;AAEA;;AAEG;IACK,iBAAiB,GAAA;QACvB,MAAM,WAAW,GAAG,EAAE;QACtB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC1C,YAAA,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9D;AAEA,QAAA,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,WAAW,GAAG,EAAE;IAClD;AAEA;;AAEG;IACK,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC;AACnC,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,eAAe,EAAE;gBACf,WAAW;gBACX,YAAY;gBACZ,WAAW;gBACX,eAAe;gBACf,YAAY;gBACZ,UAAU;gBACV,UAAU;gBACV,iBAAiB;gBACjB,iBAAiB;gBACjB,0BAA0B;gBAC1B,8BAA8B;gBAC9B,iBAAiB;gBACjB,oBAAoB;gBACpB,yEAAyE;gBACzE,0BAA0B;gBAC1B,mEAAmE;gBACnE,4BAA4B;AAC7B,aAAA;AACD,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,UAAU,EAAE,EAAE;YACd,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI;AAC5C,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,GAAG,CAAC,MAAK;AACzC,YAAA,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;YACjC,IAAI,CAAC,eAAe,EAAE;AACxB,QAAA,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;QAEb,IAAI,CAAC,YAAY,CAAC,iBAAiB,GAAG,CAAC,CAAC,QAAkB,KAAI;AAC5D,YAAA,QAAQ,CAAC,eAAe,GAAG,IAAI;AAC/B,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC5B,QAAA,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;QAEb,IAAI,CAAC,YAAY,CAAC,sBAAsB,GAAG,CAAC,CAAC,IAAoB,KAAI;;AAEnE,YAAA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE;AACrD,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,gBAAA,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,YAAY,GAAG,kCAAkC,EACtD,IAAI,CAAC,YAAY,GAAG,qBAAqB,EACzC,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI,EAAE,CACrE;YACH;;AAGA,YAAA,IACE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EACvE;gBACA,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,YAAY,GAAG,oCAAoC,EACxD,IAAI,CAAC,YAAY,GAAG,qBAAqB,EACzC,EAAE,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,CACrD;YACH;;AAGA,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAClE,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,YAAY,GAAG,iCAAiC,EACrD,IAAI,CAAC,YAAY,GAAG,qBAAqB,EACzC,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CACxB;YACH;AACF,QAAA,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;IACf;AAEA;;;;;AAKG;AACK,IAAA,oBAAoB,CAC1B,WAAmB,EACnB,YAAoB,EACpB,iBAAuB,EAAA;AAEvB,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CACxD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAC9D;AACD,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAC9D,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,CAAC,CAC5C;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,sBAAsB,EAAE;AAC3D,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;IACJ;8GAnMW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAY,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAgBrB,QAAQ,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChDrB,omGAgEM,EAAA,MAAA,EAAA,CAAA,2pBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,GAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,4OAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,kTAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,cAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDhCO,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,cAGxB,KAAK,EAAA,QAAA,EAAA,omGAAA,EAAA,MAAA,EAAA,CAAA,2pBAAA,CAAA,EAAA;;sBAIhB;;sBAIA;;sBAIA;;sBAMA,SAAS;uBAAC,QAAQ;;;AE1CrB;;AAEG;MAOU,8BAA8B,CAAA;AAkBzC;;;AAGG;AACH,IAAA,WAAA,CAAoB,WAAwB,EAAA;QAAxB,IAAA,CAAA,WAAW,GAAX,WAAW;;AAXxB,QAAA,IAAA,CAAA,kBAAkB,GAA+B,IAAI,YAAY,EAErE;IAS4C;AAE/C;;AAEG;IACI,QAAQ,GAAA;QACb,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB;IAC/D;AAEA;;;AAGG;AACI,IAAA,iBAAiB,CAAC,WAAyB,EAAA;AAChD,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;IAC3C;8GArCW,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAI,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,yOCf3C,wiCAiBO,EAAA,MAAA,EAAA,CAAA,2IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAf,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAe,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,GAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,4OAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,sRAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,kTAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAK,kBAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAX,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDFM,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAN1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mCAAmC,cAGjC,KAAK,EAAA,QAAA,EAAA,wiCAAA,EAAA,MAAA,EAAA,CAAA,2IAAA,CAAA,EAAA;;sBAIhB;;sBAIA;;sBAIA;;;AEDH;;AAEG;MAOU,uBAAuB,CAAA;AAqClC;;;;;;;;AAQG;IACH,WAAA,CACU,aAAyD,EACzD,iBAAoC,EACpC,cAA8B,EAC9B,WAAwB,EACxB,YAA0B,EAC1B,qBAA4C,EAAA;QAL5C,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;;AA7CxB,QAAA,IAAA,CAAA,mBAAmB,GAAyB,IAAI,YAAY,EAAU;;AAItE,QAAA,IAAA,CAAA,qBAAqB,GAC1B,IAAI,YAAY,EAAuB;;AAIlC,QAAA,IAAA,CAAA,sBAAsB,GAC3B,IAAI,YAAY,EAAW;;QAMtB,IAAA,CAAA,iBAAiB,GAAY,KAAK;;QASjC,IAAA,CAAA,WAAW,GAAiB,EAAE;;QAG/B,IAAA,CAAA,4BAA4B,GAAkB,EAAE;AAmBrD,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC;;AAEvB,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;AAClC,aAAA,UAAU;AACV,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;YACrB,IAAI,OAAO,EAAE;gBACX,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,cAAc,EAAE;oBAC/C,IAAI,CAAC,cAAc,EAAE;oBACrB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;gBACpD;qBAAO,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,eAAe,EAAE;oBACvD,IAAI,CAAC,cAAc,EAAE;oBACrB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;gBACpD;YACF;AACF,QAAA,CAAC,CAAC;IACN;;IAGO,QAAQ,GAAA;;QAEb,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;YAC/C,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC;QAClD;QACA,IAAI,CAAC,8BAA8B,EAAE;QACrC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB;QAClE,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAErC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,oBAAoB,EAAE;QAC1C;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AACpC,YAAA,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,EAAE;QAC/B;QAEA,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;YAChC,IAAI,CAAC,qBAAqB,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc;YACtE,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;QACvE;AAEA,QAAA,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,WAAW,CAAC,aAAa;YACjE,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,WAAW,CAAC,aAAa,KAAK;AACtE,kBAAE,IAAI,CAAC,MAAM,CAAC;kBACZ,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,WAAW,CAAC,aAAa;QACzE,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;AACzD,cAAE,IAAI,CAAC,MAAM,CAAC;cACZ,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,EAAE;QAChD,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;AAC/D,cAAE,IAAI,CAAC,MAAM,CAAC;cACZ,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,QAAQ;QAEtD,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,IAAI,CAAC,EAAE;YAClD,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;gBACrD,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;AACjE,YAAA,CAAC,CAAC;QACJ;IACF;;IAGO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;IAC7C;AAEA;;AAEG;IACK,8BAA8B,GAAA;AACpC,QAAA,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAkB;QACtD,IAAI,CAAC,MAAM,CAAC;aACT,MAAM,CAAC,CAAC,cAAc,KAAK,cAAc,CAAC,QAAQ,KAAK,KAAK;AAC5D,aAAA,OAAO,CAAC,CAAC,cAAc,KACtB,oBAAoB,CAAC,GAAG,CACtB,cAAc,CAAC,SAAS,EACxB,cAAc,CAAC,QAAQ,CACxB,CACF;AACH,QAAA,IAAI,CAAC,WAAW,CAAC,iBAAiB,GAAG,oBAAoB;IAC3D;AAEA;;;AAGG;AACI,IAAA,iBAAiB,CAAC,WAAyB,EAAA;AAChD,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAChC;AAEA;;AAEG;IACI,kBAAkB,GAAA;QACvB,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,gCAAgC,CAAC;IAC3E;AAEA;;;AAGG;AACI,IAAA,kBAAkB,CACvB,QAAqD,EAAA;QAErD,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAc;AACpE,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;;YAEhB,IAAI,CAAC,YAAY,CAAC,uBAAuB,CACvC,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,kCAAkC,EAC7D,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,qBAAqB,CACjD;YAED;QACF;;AAGA,QAAA,IAAI,QAAQ,KAAK,uBAAuB,EAAE;YACxC,IAAI,CAAC,oBAAoB,EAAE;QAC7B;IACF;AAEA;;AAEG;AACI,IAAA,MAAM,oBAAoB,GAAA;;AAE/B,QAAA,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAC7C,IAAI,CAAC,WAAW,CAAC,kBAAkB,EACnC,IAAI,CAAC,4BAA4B,CAClC;;AAGD,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAE7B,OAAO,IAAI,CAAC;AACT,aAAA,YAAY,CACX,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AACZ,cAAE,IAAI,CAAC,MAAM,CAAC;AACd,cAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EACvB,IAAI,CAAC,MAAM,CAAC,WAAW,EACvB,IAAI,CAAC,qBAAqB,CAAC,cAAc,EACzC,IAAI,CAAC,MAAM,CAAC,SAAS,EACrB,IAAI,CAAC,MAAM,CAAC,QAAQ;AAErB,aAAA,IAAI,CAAC,OAAO,GAAwB,KAAI;;YAEvC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,gBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;YAC7B;;YAGA,OAAO,IAAI,CAAC;AACT,iBAAA,iBAAiB,CAChB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AACZ,kBAAE,IAAI,CAAC,MAAM,CAAC;AACd,kBAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EACvB,IAAI,CAAC,MAAM,CAAC,WAAW,EACvB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,MAAM,CAAC,SAAS,EACrB,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,EAAE,EACN,IAAI,CAAC,MAAM,CAAC,UAAU;iBAEvB,IAAI,CAAC,MAAK;AACT,gBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;AAC7B,YAAA,CAAC;AACA,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAI;;gBAEf,IAAI,CAAC,YAAY,CAAC,uBAAuB,CACvC,IAAI,CAAC,MAAM,CAAC,YAAY;oBACtB,+CAA+C,EACjD,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,qBAAqB,CACjD;AACD,gBAAA,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AAC9B,YAAA,CAAC,CAAC;AACN,QAAA,CAAC;AACA,aAAA,IAAI,CAAC,CAAC,GAAwB,KAAI;AACjC,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC;AACpC,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;AAEtC,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;AAC7B,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,KAAK,KAAI;;YAEf,IAAI,CAAC,YAAY,CAAC,uBAAuB,CACvC,IAAI,CAAC,MAAM,CAAC,YAAY;gBACtB,2CAA2C,EAC7C,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,qBAAqB,CACjD;AACD,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;AACrC,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;AACvC,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAE9B,YAAA,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AAC9B,QAAA,CAAC,CAAC;IACN;8GApPW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAY,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAxB,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAO,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAkB,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,gRCjCpC,4lEAuByB,EAAA,MAAA,EAAA,CAAA,qQAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,yEAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,EAAA,oBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,4OAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,sRAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,kTAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,wBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,4BAAA,EAAA,wBAAA,EAAA,8BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,8BAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDUZ,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,cAG1B,KAAK,EAAA,QAAA,EAAA,4lEAAA,EAAA,MAAA,EAAA,CAAA,qQAAA,CAAA,EAAA;;sBAIhB;;sBAIA;;sBAIA;;sBAKA;;;AEhDH;;ACAA;;ACEA;;AAEG;MAKU,oBAAoB,CAAA;AAe/B;;;AAGG;AACH,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;;AAdd,QAAA,IAAA,CAAA,WAAW,GAAkB;YACnC,WAAW;YACX,QAAQ;YACR,KAAK;YACL,QAAQ;YACR,OAAO;YACP,QAAQ;YACR,eAAe;SAChB;IAMoC;AAErC;;;AAGG;AACkC,IAAA,SAAS,CAAC,KAAK,EAAA;QAClD,MAAM,CAAC,GAAG,KAAsB;AAChC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IACE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;;AAErD,iBAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC;;AAE9C,iBAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC;;AAE9C,iBAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC;;AAE9C,gBAAA,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO;;AAEhC,gBAAA,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO;gBAChC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,gBAAgB,EACzC;;gBAEA;YACF;;YAEA,IACE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACtC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACvC;gBACA,CAAC,CAAC,cAAc,EAAE;YACpB;QACF;IACF;AAEA;;;AAGG;AACgC,IAAA,UAAU,CAAC,KAAoB,EAAA;QAChE,KAAK,CAAC,cAAc,EAAE;IACxB;8GA7DW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,KAAK;AAClB,iBAAA;;sBAGE;;sBAuBA,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;sBAkClC,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;AClEnC;;AAEG;MAEU,eAAe,CAAA;AAC1B,IAAA,SAAS,CAAC,WAAmB,EAAA;;QAE3B,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,EAAE;QACX;;AAGA,QAAA,IAAI,oBAAoB,GAAG,CAAC,EAAE,GAAG,WAAW,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAChE,QAAA,IAAI,oBAAoB,CAAC,MAAM,GAAG,EAAE,EAAE;AACpC,YAAA,OAAO,EAAE;QACX;;QAGA,IAAI,mBAAmB,GAAG,oBAAoB,CAAC,KAAK,CAClD,8BAA8B,CAC/B;AACD,QAAA,IAAI,CAAC,CAAC,mBAAmB,EAAE;YACzB,OAAO;gBACL,GAAG;gBACH,mBAAmB,CAAC,CAAC,CAAC;gBACtB,IAAI;gBACJ,mBAAmB,CAAC,CAAC,CAAC;gBACtB,GAAG;gBACH,mBAAmB,CAAC,CAAC,CAAC;AACvB,aAAA,CAAC,IAAI,CAAC,EAAE,CAAC;QACZ;aAAO;AACL,YAAA,OAAO,EAAE;QACX;IACF;8GA7BW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAf,eAAe,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE;;;AC0B1C;AACA,MAAM,eAAe,GAAG;IACtB,gBAAgB;IAChB,eAAe;IACf,kBAAkB;IAClB,cAAc;IACd,eAAe;IACf,gBAAgB;IAChB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,iBAAiB;IACjB,cAAc;IACd,aAAa;IACb,cAAc;IACd;CACD;AAED;AACA,MAAMC,YAAU,GAAG;IACjB,wBAAwB;IACxB,mBAAmB;IACnB;CACD;AAED;AACA,MAAM,KAAK,GAAG;IACZ,kBAAkB;IAClB;CACD;AAED;AACA,MAAM,UAAU,GAAG;IACjB,oBAAoB;IACpB;CACD;AAED;MA6Ba,YAAY,CAAA;8GAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,iBA9CvB,wBAAwB;YACxB,mBAAmB;AACnB,YAAA,qBAAqB,EAWrB,oBAAoB;AACpB,YAAA,oBAAoB,EAPpB,kBAAkB;AAClB,YAAA,eAAe,aA1Bf,gBAAgB;YAChB,eAAe;YACf,kBAAkB;YAClB,cAAc;YACd,eAAe;YACf,gBAAgB;YAChB,mBAAmB;YACnB,mBAAmB;YACnB,mBAAmB;YACnB,iBAAiB;YACjB,cAAc;YACd,aAAa;YACb,cAAc;AACd,YAAA,iBAAiB,EA+Bf,YAAY;YACZ,gBAAgB;YAChB,WAAW;YACX,mBAAmB;YACnB,gBAAgB;YAChB,iBAAiB;AACjB,YAAA,eAAe,aAhCjB,wBAAwB;YACxB,mBAAmB;AACnB,YAAA,qBAAqB,EAWrB,oBAAoB;AACpB,YAAA,oBAAoB,EAhCpB,gBAAgB;YAChB,eAAe;YACf,kBAAkB;YAClB,cAAc;YACd,eAAe;YACf,gBAAgB;YAChB,mBAAmB;YACnB,mBAAmB;YACnB,mBAAmB;YACnB,iBAAiB;YACjB,cAAc;YACd,aAAa;YACb,cAAc;AACd,YAAA,iBAAiB,EAYjB,kBAAkB;AAClB,YAAA,eAAe,EA+Bb,gBAAgB;YAChB,WAAW;YACX,mBAAmB;YACnB,iBAAiB,CAAA,EAAA,CAAA,CAAA;+GAIR,YAAY,EAAA,OAAA,EAAA,CArBlB,eAAe,EAClB,YAAY;YACZ,gBAAgB;YAChB,WAAW;YACX,mBAAmB;YACnB,gBAAgB;YAChB,iBAAiB;AACjB,YAAA,eAAe,EAlDjB,gBAAgB;YAChB,eAAe;YACf,kBAAkB;YAClB,cAAc;YACd,eAAe;YACf,gBAAgB;YAChB,mBAAmB;YACnB,mBAAmB;YACnB,mBAAmB;YACnB,iBAAiB;YACjB,cAAc;YACd,aAAa;YACb,cAAc;AACd,YAAA,iBAAiB,EA4Cf,gBAAgB;YAChB,WAAW;YACX,mBAAmB;YACnB,iBAAiB,CAAA,EAAA,CAAA,CAAA;;2FAIR,YAAY,EAAA,UAAA,EAAA,CAAA;kBA5BxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;AACZ,wBAAA,GAAGA,YAAU;AACb,wBAAA,GAAG,UAAU;AACb,wBAAA,GAAG;AACJ,qBAAA;AACD,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAG,eAAe;wBAClB,YAAY;wBACZ,gBAAgB;wBAChB,WAAW;wBACX,mBAAmB;wBACnB,gBAAgB;wBAChB,iBAAiB;wBACjB;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,YAAU;AACb,wBAAA,GAAG,UAAU;AACb,wBAAA,GAAG,eAAe;AAClB,wBAAA,GAAG,KAAK;wBACR,gBAAgB;wBAChB,WAAW;wBACX,mBAAmB;wBACnB;AACD,qBAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB;AACjC,iBAAA;;;AChFD;AACA,MAAM,UAAU,GAAG;IACjB,uBAAuB;IACvB,wBAAwB;IACxB;CACD;AAED;AACA,MAAM,gBAAgB,GAAG;AACvB,IAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,2BAA2B;CACxE;AAED;MAwBa,oBAAoB,CAAA;8GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,iBAlC/B,uBAAuB;YACvB,wBAAwB;AACxB,YAAA,8BAA8B,aAe1B,YAAY;YACZ,YAAY;AACZ,YAAA,eAAe,aAnBnB,uBAAuB;YACvB,wBAAwB;YACxB,8BAA8B,CAAA,EAAA,CAAA,CAAA;AAgCnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,SAAA,EAblB;AACT,YAAA,GAAG,gBAAgB;YACnB,iBAAiB;YACjB,WAAW;YACX,qBAAqB;YACrB,kBAAkB;YAClB;AACD,SAAA,EAAA,OAAA,EAAA,CAXC,YAAY;YACZ,YAAY;YACZ,eAAe,CAAA,EAAA,CAAA,CAAA;;2FAeR,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAvBhC,QAAQ;AACP,YAAA,IAAA,EAAA,CAAA;AACE,oBAAA,YAAY,EAAE;AACZ,wBAAA,GAAG,UAAU;AACd,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,YAAY;wBACZ;AACD,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA,GAAG,gBAAgB;wBACnB,iBAAiB;wBACjB,WAAW;wBACX,qBAAqB;wBACrB,kBAAkB;wBAClB;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAG;AACJ;AACF,iBAAA;;;AC1CH;MAaa,UAAU,CAAA;8GAAV,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAV,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,YATnB,YAAY;YACZ,gBAAgB,CAAA,EAAA,CAAA,CAAA;AAQP,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,EAAA,SAAA,EANV;YACT,UAAU;YACV,cAAc;YACd;AACD,SAAA,EAAA,OAAA,EAAA,CAPC,YAAY;YACZ,gBAAgB,CAAA,EAAA,CAAA,CAAA;;2FAQP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAZtB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,gBAAgB;AACjB,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,UAAU;wBACV,cAAc;wBACd;AACD;AACF,iBAAA;;;ACfD;AACA,MAAM,cAAc,GAAG;IACrB;CACD;AAED;MAWa,gBAAgB,CAAA;8GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,OAAA,EAAA,CAPzB,UAAU,EAPZ,oBAAoB,aAApB,oBAAoB,CAAA,EAAA,CAAA,CAAA;AAcT,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,OAAA,EAAA,CAPzB,UAAU,EACP,cAAc,EARnB,oBAAoB,CAAA,EAAA,CAAA,CAAA;;2FAcT,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE;wBACP,UAAU;AACV,wBAAA,GAAG;AACJ,qBAAA;AACD,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAG;AACJ;AACF,iBAAA;;;ACpBD;;ACAA;;AAEG;;;;"}