{"version":3,"file":"tuki-io-tuki-widgets-user-device-manage.mjs","sources":["../../../../projects/tuki/widgets/user-device-manage/src/services/api.service.ts","../../../../projects/tuki/widgets/user-device-manage/src/app.constants.ts","../../../../projects/tuki/widgets/user-device-manage/src/classes/site-defaults.ts","../../../../projects/tuki/widgets/user-device-manage/src/services/site-settings.service.ts","../../../../projects/tuki/widgets/user-device-manage/src/common-functions.ts","../../../../projects/tuki/widgets/user-device-manage/src/classes/deviceProfile.ts","../../../../projects/tuki/widgets/user-device-manage/src/classes/line-directory.ts","../../../../projects/tuki/widgets/user-device-manage/src/classes/line-call-info-display.ts","../../../../projects/tuki/widgets/user-device-manage/src/classes/translation-pattern.ts","../../../../projects/tuki/widgets/user-device-manage/src/classes/line-association.ts","../../../../projects/tuki/widgets/user-device-manage/src/classes/device.ts","../../../../projects/tuki/widgets/user-device-manage/src/classes/simplified-user.ts","../../../../projects/tuki/widgets/user-device-manage/src/services/sorting-utils.service.ts","../../../../projects/tuki/widgets/user-device-manage/src/services/utils.service.ts","../../../../projects/tuki/widgets/user-device-manage/src/services/line.service.ts","../../../../projects/tuki/widgets/user-device-manage/src/services/user.service.ts","../../../../projects/tuki/widgets/user-device-manage/src/services/device.service.ts","../../../../projects/tuki/widgets/user-device-manage/src/utils/app-loader/app-loader.ts","../../../../projects/tuki/widgets/user-device-manage/src/utils/app-loader/app-loader.component.html","../../../../projects/tuki/widgets/user-device-manage/src/interseptors/auth.interceptor.ts","../../../../projects/tuki/widgets/user-device-manage/src/material.module.ts","../../../../projects/tuki/widgets/user-device-manage/src/environments/environment.ts","../../../../projects/tuki/widgets/user-device-manage/src/classes/notification.ts","../../../../projects/tuki/widgets/user-device-manage/src/services/notification.service.ts","../../../../projects/tuki/widgets/user-device-manage/src/notifications/notification.component.ts","../../../../projects/tuki/widgets/user-device-manage/src/notifications/notification.component.html","../../../../projects/tuki/widgets/user-device-manage/src/services/removeKynFromIBM.service.ts","../../../../projects/tuki/widgets/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.ts","../../../../projects/tuki/widgets/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.html","../../../../projects/tuki/widgets/user-device-manage/src/classes/line.ts","../../../../projects/tuki/widgets/user-device-manage/src/services/dns.service.ts","../../../../projects/tuki/widgets/user-device-manage/src/device-list/device-list.component.ts","../../../../projects/tuki/widgets/user-device-manage/src/device-list/device-list.component.html","../../../../projects/tuki/widgets/user-device-manage/src/classes/types.ts","../../../../projects/tuki/widgets/user-device-manage/src/services/validation.service.ts","../../../../projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.ts","../../../../projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.html","../../../../projects/tuki/widgets/user-device-manage/src/device-info/device-info.component.ts","../../../../projects/tuki/widgets/user-device-manage/src/device-info/device-info.component.html","../../../../projects/tuki/widgets/user-device-manage/src/pipes/mac-address.pipe.ts","../../../../projects/tuki/widgets/user-device-manage/src/device-manage-widget.component.ts","../../../../projects/tuki/widgets/user-device-manage/src/device-manage-widget.component.html","../../../../projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.ts","../../../../projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.html","../../../../projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line.component.ts","../../../../projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line.component.html","../../../../projects/tuki/widgets/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.ts","../../../../projects/tuki/widgets/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.html","../../../../projects/tuki/widgets/user-device-manage/src/confirm-dialog/info-dialog.component.ts","../../../../projects/tuki/widgets/user-device-manage/src/confirm-dialog/info-dialog.component.html","../../../../projects/tuki/widgets/user-device-manage/src/user-device-manage.module.ts","../../../../projects/tuki/widgets/user-device-manage/tuki-io-tuki-widgets-user-device-manage.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\n\r\n@Injectable()\r\nexport class APIService {\r\n  public token: any;\r\n  apiUrl = window.location.protocol + '//' + window.location.hostname + '/dcp';\r\n  constructor(\r\n    private httpClient: HttpClient\r\n  ) {\r\n  }\r\n\r\n  fetch(url: string, params?: any, cache?: boolean): Observable<any> {\r\n    const headers = this.getHeaders(cache);\r\n    params = params || {};\r\n    return this.httpClient.get(this.apiUrl + url, {params: this.prepareEncodedParams(params), headers});\r\n  }\r\n\r\n  post(url: string, body: any, params = {}): any {\r\n    body = body || null;\r\n    const headers = this.getHeaders();\r\n    return this.httpClient.post(this.apiUrl + url, body, {params: this.prepareEncodedParams(params), headers});\r\n  }\r\n\r\n  // use when response extended data is necessary:\r\n  postExtended(url: string, body = null, params = {}, headers = {}) {\r\n    headers = headers || this.getHeaders();\r\n    return this.httpClient.post(this.apiUrl + url, body, {\r\n      headers,\r\n      observe: 'response',\r\n      params: this.prepareEncodedParams(params)\r\n    });\r\n  }\r\n\r\n  put(url: string, body: any = null, params = {}) {\r\n    const headers = this.getHeaders();\r\n    return this.httpClient.put(this.apiUrl + url, body, {headers, params: this.prepareEncodedParams(params)});\r\n  }\r\n\r\n  delete(url: string, params = {}) {\r\n    const headers = this.getHeaders();\r\n    return this.httpClient.delete(this.apiUrl + url, {headers, params: this.prepareEncodedParams(params)});\r\n  }\r\n\r\n  fetchPagination(url: string, pageSize: number, pageNumber: number, additionalParams = {}, cache?: boolean): Observable<any> {\r\n    const copyAdditionalParams = JSON.parse(JSON.stringify(additionalParams));\r\n    const params = Object.assign(copyAdditionalParams, {size: pageSize.toString(), page: pageNumber.toString()});\r\n    return this.fetch(url, params, cache) as Observable<any>;\r\n  }\r\n\r\n  private prepareEncodedParams(params: any) {\r\n    const result: any = {};\r\n\r\n    if (!params) {\r\n      return {};\r\n    }\r\n    for (const key of Object.keys(params)) {\r\n      if (params[key]) {\r\n        const stringParam = params[key].toString();\r\n        result[key] = stringParam.includes('+') ? encodeURIComponent(stringParam) : stringParam;\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  private getHeaders(cache?: boolean): HttpHeaders {\r\n    let headers = new HttpHeaders();\r\n    if (cache) {\r\n      headers = headers.append('_Cache', 'true ');\r\n    }\r\n    const token = this.token || this.getParameterByName('token');\r\n    headers = headers.append('Authorization', 'Bearer '+ token);\r\n    return headers;\r\n  }\r\n\r\n  private getParameterByName(name: any, url = window.location.href) {\r\n    name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n    var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n      results = regex.exec(url);\r\n    if (!results) return null;\r\n    if (!results[2]) return '';\r\n    return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n  }\r\n\r\n}\r\n","export const API = {\r\n  USER_TOKEN: '/api/provision/:siteId/users/:userId/token',\r\n  UPDATE_USER_FIELDS: '/api/provision/:siteId/userFields/:token',\r\n  PERSIST_USER_CACHE: '/api/provision/:siteId/saveUser/:token',\r\n  USER_BY_ID: '/api/provision/:siteId/users/:userId',\r\n  QUICK_USERS_SEARCH: \"/api/search/quickusers\",\r\n  LOCATION: \"/api/provision/options/:siteId/locations\",\r\n  USER_LOCALES: \"/api/provision/options/:siteId/userlocales\",\r\n  USER_PROFILES: \"/api/provision/options/:siteId/userprofiles\",\r\n  RECORDING_PROFILE: \"/api/provision/options/:siteId/recordingprofiles\",\r\n  AVAILABLE_DN_IN_RANGES: \"/api/sites/:siteId/available-dn-in-ranges\",\r\n  DELETE_LINE: \"/api/provision/:siteId/deleteLine/:pkid/:token\",\r\n  DISASSOCIATE_LINE: \"/api/provision/:siteId/:deviceName/deleteLineAssociation/:linePkid/:token\",\r\n  CHECK_DELETE_LINE: \"/api/provision/:siteId/checklinedeletion\",\r\n  ASSOCIATE_LINE: \"/api/provision/:siteId/:deviceName/createLineAssociation/:token\",\r\n  CHECK_DESTINATION_NUMBER: \"/api/provision/:siteId/check-dn\",\r\n  UPDATE_LINE_FIELDS: \"/api/provision/:siteId/lineFields/:pkid/:token\",\r\n  UPDATE_DEVICE_FIELDS: \"/api/provision/:siteId/deviceFields/:deviceName/:token\",\r\n  SOFTKEY_TEMPLATES: \"/api/provision/options/:siteId/softkeytemplates\",\r\n  SITE_SETTINGS: \"/api/sites/:siteId/settings\",\r\n  LINE_SLOTS: \"/api/provision/:siteId/buttontemplate\",\r\n  LEAN_USER_CONVERSATION_START: \"/api/provision/:siteId/leanUsers/:userId/leanUserDetailsToken\",\r\n  LEAN_USER_DEVICES_CONVERSATION_START: \"/api/provision/:siteId/leanUsers/:userId/leanUserDevicesToken\",\r\n  LEAN_USER_LINES_CONVERSATION_START: \"/api/provision/:siteId/leanUsers/:userId/:leanUserDevicesToken/leanUserLinesToken\",\r\n  LEAN_USER_SNR_CONVERSATION_START: \"/api/provision/:siteId/leanUsers/:userId/leanUserSNRToken\",\r\n  DEVICE_LINE_MONITOR_CSS: \"/api/provision/options/:siteId/callingSearchSpace\",\r\n  WEBEX_USER_TOKEN: '/api/webex/provisioning/customers/:customerId/persons/:userId',\r\n  WEBEX_USER_DEVICES: \"/api/webex/provisioning/customers/:customerId/persons/:userId/devices\",\r\n  TRANSLATION_PATTERN_CUCM: \"/dcp/api/sites/:cucmId/translation-pattern\",\r\n};\r\nexport const REGEX_PATTERN = {\r\n  EMAIL: '^(([^<>()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\"]+(\\\\.[^<>()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\"]+)*)|(\".+\"))' +\r\n    '@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,62}[a-zA-Z0-9])' +\r\n    '?(?:\\\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?)*$'\r\n};\r\n\r\nexport const PAGINATION_DEFAULTS = {\r\n  SIZE: 10,\r\n  INDEX: 0\r\n}\r\nexport const PAGINATION_SIZE_OPTIONS = [\r\n  10,\r\n  50,\r\n  100,\r\n  500\r\n];\r\nexport const CUCS_TO_IGNORE = [\r\n  189,\r\n  194,\r\n  191,\r\n  190\r\n];\r\nexport const CUCMS_TO_IGNORE = [\r\n  249,\r\n  255,\r\n  251,\r\n  250\r\n];\r\nexport const RECORDING_MEDIA_SOURCE = [\r\n  \"Gateway Preferred\",\r\n  \"Phone Preferred\"\r\n];\r\nexport const STATIC_OPTIONS = {\r\n  CALL_PICKUP_GROUP_AUDIO_SETTING_PHONE_ACTIVE: ['Use System Default', 'Disable', 'Beep Only'],\r\n  CALL_PICKUP_GROUP_AUDIO_SETTING_PHONE_IDLE: ['Use System Default', 'Disable', 'Ring Once'],\r\n  CONF_ACCESS_MODE: ['Fixed', 'Variable'],\r\n  DEFAULT_ON_OFF: ['Default', 'On', 'Off'],\r\n  DEFAULT_EN_DIS: ['Default', 'Enabled', 'Disabled'],\r\n  DND: ['Use Common Phone Profile Setting', 'Call Reject', 'Ringer Off'],\r\n  DND_INCOMING_CALL_ALLERT: ['Disable', 'Flash Only', 'Beep Only'],\r\n  LATENT_CAPABILITY: ['Gateway Controlled', 'Modem Relay', 'Modem Passthrough', 'Modem Relay and Passthrough', 'None'],\r\n  LINE_MODE: ['Session Line mode', 'Enhanced Line mode'],\r\n  ACTIONABLE_ALERT: ['Disabled', 'Show for all Incoming Call', 'Show for Invisible Incoming Call'],\r\n  MLPP_PREEMPTION: ['Default', 'Forceful', 'Disabled'],\r\n  PACKET_CAPTURE_MODE: ['None', 'Batch Processing Mode'],\r\n  RING_VOLUME: ['0-Silent', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15'],\r\n  PORT_DIRECTION: ['Bothways', 'Inbound', 'Outbound'],\r\n  RING_SETTING_IDLE: ['Use System Default', 'Disable' , 'Flash Only' , 'Ring Once' , 'Ring'],\r\n  RING_SETTING_ACTIVE: ['Use System Default', 'Disable' , 'Flash Only' , 'Ring Once' , 'Ring', 'Beep Only'],\r\n  SERVICE_PROVISIONING: ['Default', 'Internal', 'External URL', 'Both'],\r\n  SETTINGS_ACCES: ['Enabled', 'Disabled', 'Restricted'],\r\n  VISUAL_MWI: ['Use System Policy', 'Light and Prompt' , 'Prompt Only' , 'Light Only' , 'None'],\r\n  WEEKDAYS: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n  BUILD_BRIDGE: ['None', 'On', 'Off', 'Default'],\r\n  TRANSFER_TYPES: ['Release to Switch', 'Supervise Transfer'],\r\n  EXTENSION_IS_BUSY_TYPES: ['Send Callers to Voicemail', 'Put Callers on Hold Without Asking', 'Ask Callers to Hold'],\r\n  CALL_ACTIONS: ['Hang Up', 'Restart Greeting', 'Route From Next Call Routing Rule', 'Take Message'],\r\n  AUTHENTICATION_802: ['User controlled', 'Disabled', 'Enabled'],\r\n  CERTIFICATE_OPERATION: ['No Pending Operation', 'Install/Upgrade', 'Delete', 'Troubleshoot' ],\r\n  AUTHENTICATION_MODE: ['By Authentication String', 'By Null String', 'By Existing Certificate (precedence to LSC)', 'By Existing Certificate (precedence to MIC)'],\r\n  KEY_ORDER: ['RSA Only', 'EC Only', 'EC Preferred, RSA Backup'],\r\n  RSA_KEY_SIZE: ['512', '1024', '2048'],\r\n  RSA_KEY_SIZE_SPECIFIC_DEVICE: ['512', '1024', '2048', '3072', '4096']\r\n};\r\n\r\nexport const TOGGLE_TYPES = {\r\n  TABS: 'TABS',\r\n  ASSOCIATED_LINE_ONLY: 'ASSOCIATED_LINE_ONLY'\r\n}\r\n","\r\nexport class SiteDefaults implements SiteTemplateInterface {\r\n  id!: number;\r\n  routePartitionFilter!: string[];\r\n  devicePoolFilter: string[];\r\n  cssFilter!: string[];\r\n  voicemailProfileFilter: string[];\r\n  lineCss!: string;\r\n  deviceCss!: string;\r\n  callForwardAllCss!: string;\r\n  location!: string;\r\n  voicemailUserTemplate!: string;\r\n  routePartition!: string;\r\n  devicePool!: string;\r\n  voicemailProfile!: string;\r\n  externalCallerId!: string;\r\n  huntPilotPartition!: string;\r\n  callPickupGroupPartition!: string;\r\n  meetMeConferencePartition!: string;\r\n  callParkPartition!: string;\r\n  userLocale!: string;\r\n  networkLocale!: string;\r\n  cucmGroup!: string;\r\n  softkeyTemplates!: string;\r\n  phoneButtonTemplate!: string;\r\n  phoneSecurityProfile!: string;\r\n  sipProfile!: string;\r\n  rdpCss!: string;\r\n  rdpRerouteCss!: string;\r\n  commonPhoneProfile!: string;\r\n  subscribeCss!: string;\r\n  enableEm!: boolean;\r\n  forwardHuntBusyCSS!: string;\r\n  forwardHuntNoAnswerCSS!: string;\r\n  forwardBusyInternalCss!: string;\r\n  forwardBusyExternalCss!: string;\r\n  forwardNoAnswerInternalCss!: string;\r\n  forwardNoAnswerExternalCss!: string;\r\n  forwardNoCoverageInternalCss!: string;\r\n  forwardNoCoverageExternalCss!: string;\r\n  forwardOnCtiFailureCss!: string;\r\n  forwardUnregisteredInternalCss!: string;\r\n  forwardUnregisteredExternalCss!: string;\r\n  rdpExternalCallerId!: string;\r\n  noAnswerRingDuration!: string;\r\n  ucServiceProfile!: string;\r\n  phoneSystem!: string;\r\n  maxNumberOfCalls!: string;\r\n  busyTrigger!: string;\r\n  didPartition!: string;\r\n  didCss!: string;\r\n  vossCompatibilitySiteCode!: string;\r\n  vossCompatibilityRidCode!: string;\r\n  dialPlanType!: string;\r\n  emService!: string;\r\n  cucPartition!: string;\r\n  alertingName?: string;\r\n  displayCallerId?: string;\r\n  textLabel?: string;\r\n  internalTranslationPartition?: string;\r\n  internalTranslationCss?: string;\r\n  plarCss?: string;\r\n  lineDescription?: string;\r\n  deviceDescription?: string;\r\n  sharedSitesCssFilter!: string[];\r\n  sharedSitesRPFilter!: string[];\r\n  udpDeviceType!: string;\r\n  udpDeviceProtocol!: string;\r\n  udpButtonTemplate!: string;\r\n  userUserLocale!: string;\r\n  userAccessControlGroups?: string;\r\n\r\n  constructor(siteDefaults?: SiteTemplateInterface, isSharedLineSite?: boolean) {\r\n    this.routePartitionFilter = [];\r\n    this.devicePoolFilter = [];\r\n    this.cssFilter = [];\r\n    this.voicemailProfileFilter = [];\r\n\r\n    if (siteDefaults) {\r\n      Object.assign(this, siteDefaults);\r\n      this.enableEm = siteDefaults.enableEm === 'true';\r\n      this.routePartitionFilter?.sort();\r\n      this.devicePoolFilter?.sort();\r\n      this.cssFilter?.sort();\r\n      this.voicemailProfileFilter?.sort();\r\n    }\r\n    /*if (isSharedLineSite && siteDefaults) {\r\n      this.cssFilter = siteDefaults?.sharedSitesCssFilter;\r\n      this.routePartitionFilter = siteDefaults?.sharedSitesRPFilter;\r\n    }*/\r\n  }\r\n}\r\n\r\nexport interface SiteTemplateInterface {\r\n  id: number;\r\n  routePartitionFilter: string | string[];\r\n  devicePoolFilter: string | string[];\r\n  cssFilter: string | string[];\r\n  voicemailProfileFilter: string | string[];\r\n  lineCss: string;\r\n  deviceCss: string;\r\n  callForwardAllCss: string;\r\n  location: string;\r\n  voicemailUserTemplate: string;\r\n  routePartition: string;\r\n  devicePool: string;\r\n  voicemailProfile: string;\r\n  externalCallerId: string;\r\n  huntPilotPartition: string;\r\n  callPickupGroupPartition: string;\r\n  meetMeConferencePartition: string;\r\n  callParkPartition: string;\r\n  userLocale: string;\r\n  networkLocale: string;\r\n  cucmGroup: string;\r\n  softkeyTemplates: string;\r\n  phoneButtonTemplate: string;\r\n  phoneSecurityProfile: string;\r\n  sipProfile: string;\r\n  rdpCss: string;\r\n  rdpRerouteCss: string;\r\n  commonPhoneProfile: string;\r\n  subscribeCss: string;\r\n  enableEm: boolean | string;\r\n  forwardHuntBusyCSS: string;\r\n  forwardHuntNoAnswerCSS: string;\r\n  forwardBusyInternalCss: string;\r\n  forwardBusyExternalCss: string;\r\n  forwardNoAnswerInternalCss: string;\r\n  forwardNoAnswerExternalCss: string;\r\n  forwardNoCoverageInternalCss: string;\r\n  forwardNoCoverageExternalCss: string;\r\n  forwardOnCtiFailureCss: string;\r\n  forwardUnregisteredInternalCss: string;\r\n  forwardUnregisteredExternalCss: string;\r\n  rdpExternalCallerId: string;\r\n  noAnswerRingDuration: string;\r\n  ucServiceProfile: string;\r\n  phoneSystem: string;\r\n  maxNumberOfCalls: string;\r\n  busyTrigger: string;\r\n  didPartition: string;\r\n  didCss: string;\r\n  vossCompatibilitySiteCode: string;\r\n  vossCompatibilityRidCode: string;\r\n  dialPlanType: string;\r\n  emService: string;\r\n  emergencyPartition?: string;\r\n  cucPartition: string;\r\n  alertingName?: string;\r\n  displayCallerId?: string;\r\n  lineTextLabel?: string;\r\n  textLabel?: string;\r\n  internalTranslationPartition?: string;\r\n  internalTranslationCss?: string;\r\n  plarCss?: string;\r\n  lineDescription?: string;\r\n  deviceDescription?: string;\r\n  sharedSitesCssFilter?: string[];\r\n  sharedSitesRPFilter?: string[];\r\n  reroutingCss?: string;\r\n  udpDeviceType: string;\r\n  udpDeviceProtocol: string;\r\n  udpButtonTemplate: string;\r\n  userUserLocale: string;\r\n  userAccessControlGroups?: string;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { APIService } from './api.service';\r\nimport { API } from '../app.constants';\r\nimport { map } from 'rxjs/operators';\r\nimport { SiteDefaults, SiteTemplateInterface } from './../classes/site-defaults';\r\nconst urlMap = {\r\n  locations: API.LOCATION,\r\n  userLocales: API.USER_LOCALES,\r\n  userProfiles: API.USER_PROFILES,\r\n  recordingProfile: API.RECORDING_PROFILE,\r\n}\r\n\r\n@Injectable()\r\nexport class SiteSettingsService {\r\n  deviceSoftkeyTemplates!: string[];\r\n  siteDefaults!: SiteDefaults;\r\n  originalSiteDefaults!: SiteDefaults;\r\n  deviceTypes!: any;\r\n  routePartitionNames!: any;\r\n  filteredRoutePartitionNames!: any;\r\n  allRoutePartitionNames!: any;\r\n  directoryNumbers!: any;\r\n  options!: any;\r\n\r\n  get callingSearchSpaceTypes() {\r\n    return this.siteDefaults?.cssFilter || [];\r\n  }\r\n\r\n  get devicePools() {\r\n    return this.siteDefaults?.devicePoolFilter || [];\r\n  }\r\n\r\n  constructor(\r\n    private apiService: APIService\r\n  ) {\r\n    this.options = {};\r\n  }\r\n  public getSelectionOptions(siteId: number, token: string): any {\r\n    if(!siteId) {\r\n      return;\r\n    }\r\n    // @ts-ignore\r\n    const URL = urlMap[token];\r\n    return this.apiService.fetch(URL.replace(':siteId', String(siteId)))\r\n      .pipe(map((res: string[]) => {\r\n        this.options[token] = res;\r\n        return this.options;\r\n      }));\r\n  }\r\n\r\n  public getDeviceSoftkeyTemplates(siteId: number): any {\r\n    // @ts-ignore\r\n    return this.apiService.fetch(API.SOFTKEY_TEMPLATES.replace(':siteId', String(siteId)), null, false)\r\n      .pipe(map((templates: string[]) => this.deviceSoftkeyTemplates = templates));\r\n    // .pipe(this.handleError(false, true));\r\n  }\r\n\r\n  public getSiteDefaults(siteId: number, directAccess?: boolean, sharedLineSiteIds?: string): any {\r\n    /*const params = {directAccess: directAccess};\r\n    if (sharedLineSiteIds) {\r\n      // @ts-ignore\r\n      params['sharedLineSiteIds'] = sharedLineSiteIds;\r\n    }*/\r\n    return this.apiService.fetch(API.SITE_SETTINGS.replace(':siteId', String(siteId)), {})\r\n      .pipe(map((siteDefaults: SiteTemplateInterface) => {\r\n        this.siteDefaults = new SiteDefaults(siteDefaults, !!sharedLineSiteIds);\r\n        const copiedSiteDefaults = JSON.parse(JSON.stringify(siteDefaults));\r\n        this.originalSiteDefaults = new SiteDefaults(copiedSiteDefaults, !!sharedLineSiteIds);\r\n      }))\r\n    // .pipe(this.handleError(true, true));\r\n  }\r\n\r\n  public getMonitorCss(siteId: number): any {\r\n    return this.apiService.fetch(API.DEVICE_LINE_MONITOR_CSS.replace(':siteId', String(siteId)), null)\r\n      // .pipe(this.handleError(false, true));\r\n  }\r\n\r\n  public getRecordingProfile(siteId: number): any {\r\n    return this.apiService.fetch(API.RECORDING_PROFILE.replace(':siteId', String(siteId)), null)\r\n      // .pipe(this.handleError(false, true));\r\n  }\r\n}\r\n","export const getSavableData = (model: any, exclude?: Array<string>) => {\r\n  let result = Object.keys(model);\r\n  if (exclude && exclude.length) {\r\n    result = result.filter(key => !exclude.some(item => item === key));\r\n  }\r\n  return result.reduce((result, key) => {\r\n    if (model[key] instanceof Array && model[key].length && model[key][0].getSavableData) {\r\n      (result as any)[key] = model[key].map((item: any) => item.getSavableData());\r\n    } else if (model[key] instanceof Object && model[key].getSavableData) {\r\n      (result as any)[key] = model[key].getSavableData();\r\n    } else {\r\n      (result as any)[key] = model[key];\r\n    }\r\n    return result;\r\n  }, {});\r\n};\r\n","import { FormArray, FormBuilder, FormControl, FormGroup } from \"@angular/forms\";\r\nimport { getSavableData } from \"../common-functions\";\r\nimport { LineAssociationInterface } from \"./line-association-interface\";\r\n\r\nexport class DeviceProfile {\r\n    macAddress?: string;\r\n    hoteling?: {\r\n        enabled?: boolean, \r\n        limitGuestUse?: boolean, \r\n        guestHoursLimit?: number,\r\n    };\r\n    maxLineCount?: number;\r\n    lines?: Array<{\r\n        name?: string;\r\n        extension?: string;\r\n        number?: string;\r\n        description?: string,\r\n        routePartitionName: string,\r\n        pkid?: string;\r\n        index?: number;\r\n        position?: number;\r\n        textLabel?: string;\r\n        alertingName?: string;\r\n        callerNumber?: string\r\n    }>;\r\n    activationState?: boolean;\r\n    model?: string;\r\n    name?: string;\r\n    ipAddress?: string;\r\n    remoteIpAddress?: string;\r\n    softwareVersion?: string;\r\n    softwareChannel?: string;\r\n    lineAssociations?: LineAssociationInterface[];\r\n    tags?: string[];\r\n\r\n    form!: FormGroup;\r\n\r\n    constructor(config: DeviceProfile) {\r\n        Object.assign(this, config);\r\n        this.initForm(config);\r\n    }\r\n\r\n    initForm(config: DeviceProfile) {\r\n        const formBuilder = new FormBuilder();\r\n        const formSettings = {\r\n            macAddress: new FormControl({value: config.macAddress || undefined, disabled: true}),\r\n            hoteling: new FormGroup({\r\n                enabled: new FormControl(config?.hoteling?.enabled || false),\r\n                limitGuestUse: new FormControl({value: config?.hoteling?.limitGuestUse || false, disabled: true}),\r\n                guestHoursLimit: new FormControl(config?.hoteling?.guestHoursLimit || undefined),\r\n            }),\r\n            maxLineCount: new FormControl({value: config.maxLineCount || undefined, disabled: true}),\r\n            lines: new FormArray(\r\n                (config.lines?.map((line) => {\r\n                    return new FormGroup({\r\n                        name: new FormControl({value: line?.name || undefined, disabled: true}),\r\n                        extension: new FormControl({value: line?.extension || undefined, disabled: true}),\r\n                        number: new FormControl({value: line?.extension || undefined, disabled: true}),\r\n                    });\r\n                }) ?? [])\r\n            ),\r\n            activationState: new FormControl({value: config.activationState || false, disabled: true}),\r\n            model: new FormControl({value: config.model || undefined, disabled: true}),\r\n            ipAddress: new FormControl({value: config.ipAddress || undefined, disabled: true}),\r\n            remoteIpAddress: new FormControl({value: config.remoteIpAddress || undefined, disabled: true}),\r\n            softwareVersion: new FormControl({value: config.softwareVersion || undefined, disabled: true}),\r\n            softwareChannel: new FormControl({value: config.softwareChannel || undefined, disabled: true}),\r\n            tags: new FormArray(\r\n                (config?.tags?.map((tag) => new FormControl(tag)) ?? [])\r\n            )\r\n        };\r\n        this.form = formBuilder.group(formSettings);\r\n      }\r\n\r\n    getSavableData() {\r\n        const excludedFields: string[] = ['form'];\r\n        return getSavableData(this, excludedFields);\r\n    }\r\n}\r\n","import { FormGroup, FormBuilder, Validators } from '@angular/forms';\r\nimport { getSavableData } from '../common-functions';\r\nimport { LineDirectoryInterface } from './line';\r\n\r\nexport class LineDirectory implements LineDirectoryInterface {\r\n  directoryNumber!: string;\r\n  templateDirectoryNumber?: string;\r\n  routePartitionName!: string;\r\n  pkid!: string;\r\n  dnType!: string;\r\n  displayValue?: string;\r\n\r\n  // non-savable data fields\r\n  form!: FormGroup;\r\n\r\n  constructor(lineDirectory: LineDirectoryInterface) {\r\n    Object.assign(this, lineDirectory || {});\r\n    // @ts-ignore\r\n    if (this.directoryNumber && this.routePartitionName) {\r\n      this.displayValue = `${this.directoryNumber}/${this.routePartitionName}`;\r\n    }\r\n    this.initForm();\r\n  }\r\n\r\n  getSavableData() {\r\n    return getSavableData(this, ['form', 'displayValue', 'templateDirectoryNumber']);\r\n  }\r\n\r\n  equal(itemToCompare: any): boolean {\r\n    return JSON.stringify(this.getSavableData()) === JSON.stringify(itemToCompare.getSavableData());\r\n  }\r\n\r\n  initForm() {\r\n    const formBuilder = new FormBuilder();\r\n    const formSettings = {\r\n      directoryNumber: [{value: this.directoryNumber || '', disabled: true}, [Validators.required]],\r\n      routePartitionName: [{value: this.routePartitionName || '', disabled: true}]\r\n    };\r\n    this.form = formBuilder.group(formSettings);\r\n  }\r\n}\r\n","import { LineCallInfoDisplayInterface } from './device';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { getSavableData } from '../common-functions';\r\n\r\nexport class LineCallInfoDisplay implements LineCallInfoDisplayInterface {\r\n  callerName!: string;\r\n  callerNumber!: string;\r\n  redirectedNumber!: string;\r\n  dialedNumber!: string;\r\n\r\n  // non-savable data fields\r\n  form!: FormGroup;\r\n\r\n  constructor(lineCallInfoDisplay: LineCallInfoDisplayInterface) {\r\n    Object.assign(this, lineCallInfoDisplay || {});\r\n  }\r\n\r\n  getSavableData() {\r\n    return getSavableData(this, ['form']);\r\n  }\r\n}\r\n","import { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { TranslationPatternInterface } from './line';\r\nimport { SiteShortDataInterface } from './device';\r\nimport { getSavableData } from '../common-functions';\r\n\r\nexport class TranslationPattern implements TranslationPatternInterface {\r\n  pattern!: string;\r\n  calledPartyTransformationMask!: string;\r\n  description!: string;\r\n  site?: SiteShortDataInterface;\r\n  hasMultipleSites!: boolean;\r\n  multipleSitesId!: string;\r\n  cucmId?: number;\r\n\r\n  // non-savable data fields\r\n  form!: FormGroup;\r\n  isNewForExistingLine!: boolean;\r\n\r\n  constructor(translationPattern?: TranslationPatternInterface) {\r\n    Object.assign(this, translationPattern || {});\r\n    this.initForm();\r\n  }\r\n\r\n  public getSavableData() {\r\n    return getSavableData(this, ['form', 'isNewForExistingLine']);\r\n  }\r\n\r\n  initForm() {\r\n    const formBuilder = new FormBuilder();\r\n    const formSettings = {\r\n      pattern: [{value: this.pattern || ''}],\r\n      calledPartyTransformationMask: [{value: this.calledPartyTransformationMask || ''}]\r\n    };\r\n    this.form = formBuilder.group(formSettings);\r\n  }\r\n\r\n  public getSiteId() {\r\n    if (this.site && this.site.id != null) {\r\n      return this.site.id;\r\n    }\r\n    if (this.hasMultipleSiteIds()) {\r\n      return this.multipleSitesId.split(',')[0];\r\n    }\r\n    return null;\r\n  }\r\n\r\n  private hasMultipleSiteIds(): boolean {\r\n    return this.hasMultipleSites && !!this.multipleSitesId && this.multipleSitesId.length > 0;\r\n  }\r\n}\r\n","import { LineDirectory } from './line-directory';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { LineCallInfoDisplay } from './line-call-info-display';\r\nimport { TranslationPattern } from './translation-pattern';\r\nimport { RecordingOptions } from './device';\r\nimport { LineAssociationInterface } from './line-association-interface';\r\nimport { getSavableData } from '../common-functions';\r\nimport { ValidationService } from './../services/validation.service';\r\nimport { RECORDING_MEDIA_SOURCE } from '../app.constants';\r\n\r\nexport class LineAssociation implements LineAssociationInterface {\r\n  index!: number;\r\n  position?: any;\r\n  e164Mask!: string;\r\n  textLabel!: string;\r\n  displayLabel!: string;\r\n  displayLabelAscii!: string;\r\n  directoryNumber!: LineDirectory;\r\n  didPattern!: TranslationPattern;\r\n  mappedDids!: Array<string>;\r\n  linePkid!: string;\r\n  maxNumberOfCalls!: number;\r\n  busyTrigger!: number;\r\n  recordingOption!: RecordingOptions;\r\n  recordingProfile!: string;\r\n  recordingMediaSource!: string;\r\n  visualMWI!: string;\r\n  audibleMWI!: string;\r\n  ringSetting_idle!: string;\r\n  ringSetting_active!: string;\r\n  pickupAAS_idle!: string;\r\n  pickupAAS_active!: string;\r\n  monitorCSS!: string;\r\n  logMissedCall!: string;\r\n  callInfoDisplay!: LineCallInfoDisplay;\r\n  lineLocalId!: string;\r\n  callerName?: string;\r\n  callerNumber?: string;\r\n  redirectedNumber?: string;\r\n  dialedNumber?: string;\r\n  // non-savable data fields\r\n  viewMode?: boolean;\r\n  form!: FormGroup;\r\n  sharedUsers = [];\r\n  sharedDevices = [];\r\n  callingSearchSpace?: string;\r\n  ownerUserId!: Array<string>;\r\n  associated!: boolean;\r\n  patternUsage?: boolean;\r\n  plarDestinationNumber?: string;\r\n  prefixDigits?: string;\r\n  plarDescription?: string;\r\n  plarEnabled?: boolean;\r\n  alertingName?: string;\r\n  description?: string;\r\n  populateWithDid!: boolean;\r\n  active = false;\r\n  hasChanges = false;\r\n\r\n  constructor(lineAssociation: any, appValidators: ValidationService) {\r\n    Object.assign(this, lineAssociation || {});\r\n    if (lineAssociation) {\r\n      this.index = lineAssociation.index || null;\r\n      this.position = lineAssociation.position || null;\r\n      this.e164Mask = lineAssociation.e164Mask || '';\r\n      this.textLabel = lineAssociation.textLabel || '';\r\n      this.displayLabel = lineAssociation.displayLabel || '';\r\n      this.displayLabelAscii = lineAssociation.displayLabelAscii || '';\r\n      this.linePkid = lineAssociation.linePkid || lineAssociation.pkid || '';\r\n      this.maxNumberOfCalls = lineAssociation.maxNumberOfCalls || null;\r\n      this.busyTrigger = lineAssociation.busyTrigger || null;\r\n      this.directoryNumber = new LineDirectory(lineAssociation.directoryNumber);\r\n      this.didPattern = new TranslationPattern(lineAssociation.didPattern);\r\n      this.recordingOption = lineAssociation.recordingOption || RecordingOptions.disabled;\r\n      this.recordingProfile = lineAssociation.recordingProfile || '';\r\n      this.recordingMediaSource = lineAssociation.recordingMediaSource || RECORDING_MEDIA_SOURCE[0];\r\n      this.visualMWI = lineAssociation.visualMWI || '';\r\n      this.audibleMWI = lineAssociation.audibleMWI || '';\r\n      this.ringSetting_idle = lineAssociation.ringSetting_idle || '';\r\n      this.ringSetting_active = lineAssociation.ringSetting_active || '';\r\n      this.pickupAAS_idle = lineAssociation.pickupAAS_idle || '';\r\n      this.pickupAAS_active = lineAssociation.pickupAAS_active || '';\r\n      this.monitorCSS = lineAssociation.monitorCSS || '';\r\n      this.logMissedCall = lineAssociation.logMissedCall || true;\r\n      this.callInfoDisplay = new LineCallInfoDisplay(lineAssociation.callInfoDisplay);\r\n      this.lineLocalId = lineAssociation.lineLocalId || lineAssociation.localId || '';\r\n      this.callingSearchSpace = lineAssociation.callingSearchSpace || '';\r\n      this.ownerUserId = lineAssociation.ownerUserId;\r\n      this.associated = lineAssociation.associated;\r\n      this.alertingName = lineAssociation.alertingName;\r\n      this.description = lineAssociation.description;\r\n      this.patternUsage = lineAssociation.patternUsage;\r\n      this.plarDestinationNumber = lineAssociation.plarDestinationNumber;\r\n      this.prefixDigits = lineAssociation.prefixDigits;\r\n      this.plarDescription = lineAssociation.plarDescription;\r\n      this.plarEnabled = lineAssociation.plarEnabled;\r\n      this.populateWithDid = lineAssociation.populateWithDid;\r\n    }\r\n    this.initForm(appValidators);\r\n  }\r\n\r\n  getSavableData(): any {\r\n    const excludedFields = ['viewMode', 'form', 'callingSearchSpace', 'plarDestinationNumber', 'prefixDigits', 'plarDescription', 'plarEnabled', 'hasChanges', 'active'];\r\n    return getSavableData(this, excludedFields);\r\n  }\r\n\r\n  getFullData(): any {\r\n    return getSavableData(this, ['form', 'hasChanges', 'active']);\r\n  }\r\n\r\n  getDnSavableData() {\r\n\r\n  }\r\n\r\n  /*initForm() {\r\n    // TEMP simplified line form\r\n    const formBuilder = new FormBuilder();\r\n    const formSettings = {\r\n      directoryNumber: [this.directoryNumber.directoryNumber || ''],\r\n      textLabel: [this.textLabel || ''],\r\n    };\r\n    this.form = formBuilder.group(formSettings);\r\n  }*/\r\n\r\n  initForm(appValidators: ValidationService) {\r\n    const formBuilder = new FormBuilder();\r\n    const formSettings = {\r\n      displayLabel: [this.displayLabel || '', [Validators.maxLength(30), Validators.pattern('[^%&\\\\[{}|\"<>\\\\]]*')]],\r\n      e164Mask: [this.e164Mask || '', [appValidators.e164MaskLabel]],\r\n      textLabel: [this.textLabel || '', [Validators.maxLength(30), Validators.pattern('[^\"]*')]],\r\n      maxNumberOfCalls: [this.maxNumberOfCalls || '', [ Validators.min(0)]],\r\n      busyTrigger: [this.busyTrigger || '', [Validators.min(0), Validators.max(this.maxNumberOfCalls || 200)]],\r\n      recordingOption: [this.recordingOption || ''],\r\n      recordingProfile: [this.recordingProfile || '', [appValidators.conditionalRequired('recordingOption',\r\n        [RecordingOptions.auto_enabled, RecordingOptions.selective_enabled])]],\r\n      recordingMediaSource: [this.recordingMediaSource || ''],\r\n      visualMWI: [this.visualMWI || ''],\r\n      audibleMWI: [this.audibleMWI || ''],\r\n      ringSetting_idle: [this.ringSetting_idle || ''],\r\n      ringSetting_active: [this.ringSetting_active || ''],\r\n      pickupAAS_idle: [this.pickupAAS_idle || ''],\r\n      pickupAAS_active: [this.pickupAAS_active || ''],\r\n      monitorCSS: [this.monitorCSS || ''],\r\n      logMissedCall: [this.logMissedCall === 'true'],\r\n      callerName:  [this.callInfoDisplay && this.callInfoDisplay.callerName === 'true'],\r\n      callerNumber: [this.callInfoDisplay && this.callInfoDisplay.callerNumber === 'true'],\r\n      redirectedNumber: [this.callInfoDisplay && this.callInfoDisplay.redirectedNumber === 'true'],\r\n      dialedNumber: [this.callInfoDisplay && this.callInfoDisplay.dialedNumber === 'true' ],\r\n\r\n      // alertingName: [this.alertingName || ''],\r\n      // description: [this.description || ''],\r\n      // displayLabelAscii: [this.displayLabelAscii || '', [appValidators.displayLabelAscii]]\r\n    };\r\n    this.form = formBuilder.group(formSettings);\r\n    if (this.directoryNumber) {\r\n      this.form.addControl('directoryNumber', this.directoryNumber.form);\r\n    }\r\n    if (this.didPattern) {\r\n      this.form.addControl('didPattern', this.didPattern.form);\r\n    }\r\n  }\r\n\r\n  equals(line: LineAssociation | any): boolean {\r\n    if (!line) {\r\n      return false;\r\n    }\r\n    return this.directoryNumber.directoryNumber === line.directoryNumber.directoryNumber &&\r\n      this.directoryNumber.routePartitionName === line.directoryNumber.routePartitionName;\r\n  }\r\n\r\n  fullEqual(line: LineAssociation | LineAssociationInterface): boolean {\r\n    if (!line) {\r\n      return false;\r\n    }\r\n    return JSON.stringify(this.getFullData()) === JSON.stringify(line.getFullData());\r\n  }\r\n}\r\n","import { getSavableData } from '../common-functions';\r\nimport { EntityChangeType, LineDirectoryInterface } from './line';\r\nimport { LineAssociation } from './line-association';\r\nimport { LineAssociationInterface } from './line-association-interface';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ValidationService } from '../services/validation.service';\r\n\r\nexport class Device {\r\n  // simplified TEMP\r\n  name!: string;\r\n  pkiid!: string\r\n  deviceType!: string;\r\n  lineAssociations!: LineAssociation[] | LineAssociationInterface[];\r\n  lineAssociationsHasChanges = false;\r\n  protocol!: string;\r\n  description!: string;\r\n  buttonTemplate!: string;\r\n  softkeyTemplate!: string;\r\n  devicePoolName!: string;\r\n  location!: string;\r\n  callingSearchSpaceName!: string;\r\n  firmwareVersion!: string;\r\n  registrationStatus!: string\r\n  ipAddress!: string;\r\n  deviceKind!: string;\r\n  isCtiRoutePoint!: boolean;\r\n  alreadyUsedName!: string;\r\n  deviceDefaults: any;\r\n  availableSlots!: number[];\r\n  plarService = false;\r\n  form!: FormGroup;\r\n\r\n  constructor(device: any, validationService: ValidationService) {\r\n    if (device) {\r\n      this.name = device.name;\r\n      this.pkiid = device.pkiid;\r\n      this.deviceType = device.deviceType;\r\n      this.protocol = device.protocol;\r\n      this.description = device.description;\r\n      this.buttonTemplate = device.buttonTemplate;\r\n      this.softkeyTemplate = device.softkeyTemplate;\r\n      this.devicePoolName = device.devicePoolName;\r\n      this.location = device.location;\r\n      this.firmwareVersion = device.firmwareVersion;\r\n      this.plarService = device.plarService;\r\n      this.callingSearchSpaceName = device.callingSearchSpaceName;\r\n      this.registrationStatus = 'Unknown'; // TEMP for demo\r\n      this.ipAddress = 'None'; // TEMP for demo\r\n\r\n      this.lineAssociations = device.lineAssociations?.length ?\r\n        device.lineAssociations.map((line: any) => new LineAssociation(line, validationService)) : [];\r\n    }\r\n    this.initForm();\r\n  }\r\n\r\n  initForm() {\r\n    const formBuilder = new FormBuilder();\r\n    const formSettings = {\r\n      ipAddress: [{value: this.ipAddress || '', disabled: true}],\r\n      registrationStatus: [{value: this.registrationStatus || '', disabled: true}],\r\n      description: [{value: this.description || '', disabled: false}],\r\n      protocol: [{value: this.protocol || '', disabled: true}],\r\n      softkeyTemplate: [{value: this.softkeyTemplate || '', disabled: false}],\r\n      buttonTemplate: [{value: this.buttonTemplate || '', disabled: true}],\r\n      location: [{value: this.location || '', disabled: true}],\r\n      devicePoolName: [{value: this.devicePoolName || '', disabled: false}],\r\n      callingSearchSpaceName: [{value: this.callingSearchSpaceName || '', disabled: false}],\r\n      firmwareVersion: [{value: this.firmwareVersion || '', disabled: true}],\r\n      plarService: [{value: this.plarService || '', disabled: true}],\r\n    };\r\n    this.form = formBuilder.group(formSettings);\r\n  }\r\n\r\n  getSavableData() {\r\n    const excludedFields: string[] = ['form', 'ipAddress', 'registrationStatus', 'isCtiRoutePoint', 'deviceKind', 'alreadyUsedName', 'lineAssociationsHasChanges'];\r\n    return getSavableData(this, excludedFields);\r\n  }\r\n\r\n  getNoLinesFullData() {\r\n    const excludedFields: string[] = ['form', 'lineAssociations', 'lineAssociationsHasChanges'];\r\n    return getSavableData(this, excludedFields);\r\n  }\r\n\r\n  getDeviceInfoSavableData() {\r\n    const excludedFields: string[] = ['form', 'ipAddress', 'registrationStatus', 'lineAssociations', 'lineAssociationsHasChanges'];\r\n    return getSavableData(this, excludedFields);\r\n  }\r\n}\r\n\r\nexport interface DeviceInterface {\r\n  name: string;\r\n  newName?: string;\r\n  pkid: string;\r\n  entityChangeType?: EntityChangeType;\r\n  deviceType: string;\r\n  protocol?: string;\r\n  description?: string;\r\n  buttonTemplate?: string;\r\n  softkeyTemplate?: string;\r\n  devicePoolName?: string;\r\n  location?: string;\r\n  userLocale?: string;\r\n  enabledExtensionMobility?: boolean;\r\n  callingSearchSpaceName?: string;\r\n  services?: string[];\r\n  networkLocale?: string;\r\n  securityProfile?: string;\r\n  lineAssociations: LineAssociationInterface[];\r\n  speedDials?: SpeedDialInterface[];\r\n  sipProfile?: string;\r\n  subscribeCallingSearchSpaceName?: string;\r\n  commonPhoneConfigName?: string;\r\n  ctiRemoteDevice?: boolean;\r\n  firstExpansionModule?: string;\r\n  secondExpansionModule?: string;\r\n  thirdExpansionModule?: string;\r\n  builtInBridge?: string;\r\n  extraOptions?: DeviceExtraOptionsInterface;\r\n  formDisabledControls?: string[];\r\n  sharedUsers?: string[];\r\n  busyLampFields?: BusyLampFieldsInterface[];\r\n  meetMeEnabled?: boolean;\r\n  deviceKind?: any;\r\n  isCtiRoutePoint?: boolean;\r\n  cucmId?: string;\r\n  plarDevice?: boolean;\r\n  firmwareVersion?: any;\r\n  certificateOperation?: string;\r\n  authenticationMode?: string;\r\n  authenticationString?: string;\r\n  rsaKeySize?: string;\r\n  operationCompletesBy?: string;\r\n  certificateStatus: string;\r\n  day?: string;\r\n  month?: string;\r\n  year?: string;\r\n  hour?: string;\r\n  securityProfileUuid?: string;\r\n  excludeDeviceExtraOptions?: boolean;\r\n  webexUUID?: string;\r\n  viewType?: any;\r\n  alreadyUsedName?: string;\r\n}\r\nexport interface SpeedDialInterface {\r\n  index: number;\r\n  position: number;\r\n  destination: string;\r\n  label: string;\r\n  editMode?: boolean;\r\n}\r\nexport enum RecordingOptions {\r\n  disabled = 'Call Recording Disabled',\r\n  auto_enabled = 'Automatic Call Recording Enabled',\r\n  selective_enabled = 'Selective Call Recording Enabled'\r\n}\r\nexport interface LineCallInfoDisplayInterface {\r\n  callerName: string;\r\n  callerNumber: string;\r\n  redirectedNumber: string;\r\n  dialedNumber: string;\r\n}\r\nexport interface SiteShortDataInterface {\r\n  id: number;\r\n  name: string;\r\n}\r\nexport interface DeviceExtraOptionsInterface {\r\n  mediaResourceGroupList: string;\r\n  userHoldMOHAudioSourceId: number;\r\n  userHoldMOHAudioSourceName: string;\r\n  networkMOHAudioSourceId: number;\r\n  networkMOHAudioSourceName: string;\r\n  aarCss: string;\r\n  aarGroup: string;\r\n  privacy: string;\r\n  deviceMobilityMode: string;\r\n  mobilityUserId: string;\r\n  phonePersonalization: string;\r\n  servicesProvisioning: string;\r\n  phoneLoadName: string;\r\n  phoneIdleBLFAlertSetting: string;\r\n  phoneBusyBLFAlertSetting: string;\r\n  useTrustedRelayPoint: string;\r\n  alwaysUsePrimeLine: string;\r\n  alwaysUsePrimeLineForVoiceMessage: string;\r\n  geolocation: string;\r\n  emergencyLocation: string;\r\n  ignorePresentationIndicators: boolean;\r\n  loggedIntoHuntGroup: boolean;\r\n  enabledExtensionMobility: boolean;\r\n  remoteDevice: boolean;\r\n  protectedDevice: boolean;\r\n  hotlineDevice: boolean;\r\n  useDevicePoolCgpnIngressDN: boolean;\r\n  cgpnIngressDN: string;\r\n  useDevicePoolCgpnTransformCss: boolean;\r\n  cgpnTransformationCss: string;\r\n  packetCaptureMode: string;\r\n  packetCaptureDuration: number;\r\n  blfPresenceGroup: string;\r\n  sipDialRules: string;\r\n  mtpPreferredOriginatingCodec: string;\r\n  rerouteCss: string;\r\n  subscribeCss: string;\r\n  mtpRequired: boolean;\r\n  unattendedPort: boolean;\r\n  requireDtmfReception: boolean;\r\n  informationUrl: string;\r\n  directoryUrl: string;\r\n  messagesUrl: string;\r\n  servicesUrl: string;\r\n  authenticationUrl: string;\r\n  proxyServerUrl: string;\r\n  idleUrl: string;\r\n  idleTimeout: string;\r\n  secureAuthenticationUrl: string;\r\n  secureDirectoryUrl: string;\r\n  secureIdleUrl: string;\r\n  secureInformationUrl: string;\r\n  secureMessageUrl: string;\r\n  secureServicesUrl: string;\r\n  mlppDomain: string;\r\n  mlppIndication: string;\r\n  mlppPreemption: string;\r\n  confidentialAccessMode: string;\r\n  confidentialAccessLevel: string;\r\n  confidentialAccessLevelName: string;\r\n  doNotDisturb: boolean;\r\n  dndOption: string;\r\n  dndIncomingCallAlert: string;\r\n  disableSpeakerphone: boolean;\r\n  disableSpeakerphoneAndHeadset: boolean;\r\n  forwardingDelay: boolean;\r\n  pcPort: boolean;\r\n  settingsAccess: string;\r\n  gratuitousARP: boolean;\r\n  pcVoiceVlanAccess: boolean;\r\n  videoCapabilities: boolean;\r\n  webAccess: boolean;\r\n  daysDisplayNotActive: string[];\r\n  displayOnTime: string;\r\n  displayOnDuration: string;\r\n  displayIdleTimeout: string;\r\n  wirelessHeadsetHookswitchControl: boolean;\r\n  minRingVolume: string;\r\n  showAllCallsOnPL: boolean;\r\n  lineMode: string;\r\n  latentCapabilityRegistration: string;\r\n  analogGatewayPortInformation: AnalogGatewayPortInformationInterFace;\r\n}\r\nexport interface AnalogGatewayPortInformationInterFace {\r\n  portDirection: string;\r\n  prefixDn: string;\r\n  numDigits: number;\r\n  expectedDigits: number;\r\n  smdiPortNumber: number;\r\n  trunk: string;\r\n  unattendedPort: string;\r\n}\r\nexport interface BusyLampFieldsInterface {\r\n  index: number;\r\n  position: number;\r\n  destination: string;\r\n  dnWithRoutePartition: string;\r\n  label: string;\r\n  callPickup: boolean;\r\n}\r\n\r\nexport class Buttontemplate {\r\n  name!: string;\r\n  lineSlots!: number[];\r\n  speedDialSlots!: number[];\r\n  blfSlots!: number[];\r\n\r\n  constructor() {}\r\n}\r\n\r\nexport enum DeviceViewType {\r\n  INFO = 0,\r\n  LINES = 1,\r\n  DIALS = 2,\r\n  BLF = 3\r\n}\r\nexport enum DeviceKind {\r\n  device = 'devices',\r\n  deviceProfile = 'deviceProfiles'\r\n}\r\n\r\nexport enum DeviceTypes {\r\n  CTI_ROUTE_POINT = 'CTI Route Point',\r\n  CTI_PORT = 'CTI Port',\r\n  CTI_REMOTE = 'CTI Remote Device'\r\n}\r\n","import { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { getSavableData } from '../common-functions';\r\nimport { REGEX_PATTERN } from '../app.constants';\r\nimport { Device } from './device';\r\nimport { LineAssociation } from './line-association';\r\nimport { LineAssociationInterface } from './line-association-interface';\r\nimport { ValidationService } from '../services/validation.service';\r\n\r\nexport class SimplifiedUser {\r\n  userid!: string;\r\n  email!: string;\r\n  firstName!: string;\r\n  lastName!: string;\r\n  siteId!: number;\r\n  siteName!: number;\r\n  token!: string;\r\n  // general user info\r\n  department!: string;\r\n  manager!: string;\r\n  associatedPc!: string;\r\n  digestCredentials!: string;\r\n  userProfile!: string;\r\n  enableMobileVoiceAccess!: boolean;\r\n  userLocale!: string;\r\n  confirmDigestCredentials?: any;\r\n\r\n  // contact information\r\n  middleName!: string;\r\n  telephoneNumber!: string;\r\n  mobileNumber!: string;\r\n  directoryUri!: string;\r\n  title!: string;\r\n  homeNumber!: string;\r\n  pagerNumber!: string;\r\n  displayName!: string;\r\n\r\n  viewMode!: string;\r\n  hasModifiedCache!: boolean;\r\n  newUserid?: string;\r\n  editMode!: boolean;\r\n  form!: FormGroup;\r\n  viewType?: any;\r\n\r\n  devices!: Device[];\r\n\r\n  constructor(user: any, validationService: ValidationService) {\r\n    if (user) {\r\n      this.userid = user.userid;\r\n      this.email = user.email;\r\n      this.firstName = user.firstName;\r\n      this.lastName = user.lastName;\r\n      this.token = user.token;\r\n      this.siteId = user.siteId;\r\n      this.siteName = user.siteName;\r\n\r\n      this.department = user.department;\r\n      this.manager = user.manager;\r\n      this.associatedPc = user.associatedPc;\r\n      this.digestCredentials = user.digestCredentials;\r\n      this.userProfile = user.userProfile;\r\n      this.enableMobileVoiceAccess = user.enableMobileVoiceAccess;\r\n      this.userLocale = user.userLocale;\r\n      this.confirmDigestCredentials = user.confirmDigestCredentials;\r\n\r\n      this.middleName = user.middleName;\r\n      this.telephoneNumber = user.telephoneNumber;\r\n      this.mobileNumber = user.mobileNumber;\r\n      this.directoryUri = user.directoryUri;\r\n      this.title = user.title;\r\n      this.homeNumber = user.homeNumber;\r\n      this.pagerNumber = user.pagerNumber;\r\n      this.displayName = user.displayName;\r\n\r\n      if (user.devices?.length) {\r\n        this.devices = user.devices.map((device: any) => new Device(device, validationService));\r\n        if (user.lines?.length) {\r\n          this.devices.forEach(device => {\r\n            if (device?.lineAssociations?.length) {\r\n              device.lineAssociations.forEach(lineAssociation => {\r\n                lineAssociation.callingSearchSpace = this.getLineVal(lineAssociation, user.lines, 'callingSearchSpace');\r\n                lineAssociation.textLabel = lineAssociation.textLabel || this.getLineVal(lineAssociation, user.lines, 'textLabel') || '';\r\n                lineAssociation.alertingName = lineAssociation.alertingName || this.getLineVal(lineAssociation, user.lines, 'alertingName') || '';\r\n              })\r\n            }\r\n          })\r\n        }\r\n      }\r\n\r\n    }\r\n    this.initForm()\r\n  }\r\n\r\n  getLineVal(lineAssociation: LineAssociation | LineAssociationInterface, lines: any, token: string): any {\r\n    const lineForVal = lines.find((line: any) => line.directoryNumber.directoryNumber === lineAssociation.directoryNumber.directoryNumber);\r\n    return lineForVal && lineForVal[token] || '';\r\n  }\r\n\r\n  initForm() {\r\n    const formBuilder = new FormBuilder();\r\n    const formSettings = {\r\n      userid: [{value: this.userid || '', disabled: false}, [Validators.required, Validators.maxLength(128)]],\r\n      email: [{value: this.email || '', disabled: false}, [\r\n        Validators.pattern(REGEX_PATTERN.EMAIL),\r\n        Validators.required\r\n      ]],\r\n      firstName: [{value: this.firstName || '', disabled: false}],\r\n      lastName: [{value: this.lastName || '', disabled: false}, Validators.required],\r\n      department: [{value: this.department || '', disabled: false}],\r\n      middleName: [{value: this.middleName || '', disabled: false}],\r\n      title: [{value: this.title || '', disabled: false}],\r\n      telephoneNumber: [{value: this.telephoneNumber || '', disabled: false}],\r\n      homeNumber: [{value: this.homeNumber || '', disabled: false}],\r\n      mobileNumber: [{value: this.mobileNumber || '', disabled: false}],\r\n      pagerNumber: [{value: this.pagerNumber || '', disabled: false}],\r\n      displayName: [{value: this.displayName || '', disabled: false}],\r\n      manager: [{value: this.manager || '', disabled: false}],\r\n      associatedPc: [this.associatedPc || ''],\r\n      directoryUri: [this.directoryUri || ''],\r\n      userProfile: [this.userProfile],\r\n      enableMobileVoiceAccess: [this.enableMobileVoiceAccess],\r\n      userLocale: [this.userLocale || ''],\r\n      digestCredentials: [''],\r\n      confirmDigestCredentials: ['']\r\n    };\r\n    this.form = formBuilder.group(formSettings);\r\n  }\r\n\r\n  toggleEditMode() {\r\n    this.editMode = !this.editMode;\r\n    ['userid', 'email', 'firstName', 'lastName'].forEach(token => {\r\n      if (this.editMode) {\r\n        this.form.get(token)?.enable();\r\n      } else {\r\n        this.form.get(token)?.disable();\r\n      }\r\n    })\r\n  }\r\n\r\n  getSavableData() {\r\n    const excludedFields: string[] = ['form', 'editMode', 'viewMode', 'token', 'hasModifiedCache', 'confirmDigestCredentials'];\r\n    return getSavableData(this, excludedFields);\r\n  }\r\n\r\n  getFullData() {\r\n    const excludedFields: string[] = ['form'];\r\n    return getSavableData(this, excludedFields);\r\n  }\r\n  getUserDetailsSavableData() {\r\n    const excludedFields: string[] = ['devices', 'deviceProfiles', 'lines', 'singleNumberReach', 'vmPassword', 'vmUnifiedMessagingAccount', 'alternateExtensions', 'callerInput', 'lineAppearances', 'meetMes', 'webAppPasswordSettings', 'form'];\r\n    return getSavableData(this, excludedFields);\r\n  }\r\n\r\n  equal(userToCompare?: SimplifiedUser): boolean {\r\n    if (!userToCompare) {\r\n      return false;\r\n    }\r\n    return JSON.stringify(this.getSavableData()) === JSON.stringify(userToCompare.getSavableData());\r\n  }\r\n\r\n}\r\n\r\nexport interface SimplifiedUserInterface {\r\n  userid: string;\r\n  email: string;\r\n  firstName: string;\r\n  lastName: string;\r\n  form?: FormGroup;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { LineAssociationInterface } from './../classes/line-association-interface';\r\nimport { DeviceInterface } from './../classes/device';\r\nimport { LineInterface } from './../classes/line';\r\nimport { LineAssociation } from './../classes/line-association';\r\n\r\nconst string_array = function (original: string[], updated: string[], fullKey: string) {\r\n  if (!updated || !SortingUtilsService.differs(original, updated)) {\r\n    return null;\r\n  }\r\n  return `${fullKey}=${updated.join(',')}`;\r\n};\r\n\r\nconst line_reference = function (original: string[], updated: string[], fullKey: string) {\r\n  if (!updated || !SortingUtilsService.differs(original, updated)) {\r\n    return null;\r\n  }\r\n  // @ts-ignore\r\n  return Object.keys(updated).map(key => `${fullKey}.${key}=${updated[key]}`);\r\n};\r\n\r\nconst nullable = function (original: string[], updated: string[], fullKey: string) {\r\n  if (!original && updated) {\r\n    // @ts-ignore\r\n    return Object.keys(updated).map(key => `${fullKey}.${key}=${updated[key]}`);\r\n  } else if (original && !updated) {\r\n    return `${fullKey}=null`;\r\n  } else {\r\n    return SortingUtilsService.diff(original, updated, fullKey, []);\r\n  }\r\n};\r\n\r\n@Injectable()\r\nexport class SortingUtilsService {\r\n\r\n  static dictionary = {\r\n    features: string_array,\r\n    services: string_array,\r\n    directoryNumber: line_reference,\r\n    primaryLineReference: line_reference,\r\n    speedDials: function (original: any, updated: any, fullKey: string) {\r\n      if (!updated || !SortingUtilsService.differs(original, updated)) {\r\n        return null;\r\n      }\r\n      // todo only changes, identification\r\n      let map: any = [];\r\n      updated.map((speedDial: any) => {\r\n        const currentFullKey = `${fullKey}.${speedDial.index}`; // ${speedDial.type} CHECk ?\r\n        map = [...map, Object.keys(speedDial).map(key => `${currentFullKey}.${key}=${speedDial[key]}`)];\r\n      });\r\n      return map;\r\n    },\r\n    lineAssociations: function (original: LineAssociationInterface[], updated: LineAssociationInterface[], fullKey: string) {\r\n      if (!updated || !SortingUtilsService.differs(original, updated)) {\r\n        return null;\r\n      }\r\n      let map: any = [];\r\n      updated.map((lineAssociation: LineAssociationInterface) => {\r\n        const currentFullKey = `${fullKey}.${lineAssociation.linePkid ? lineAssociation.linePkid : lineAssociation.lineLocalId}`;\r\n        const originalLineAssociation = original.find(line => line.index === lineAssociation.index);\r\n        if (SortingUtilsService.differs(originalLineAssociation, lineAssociation)) {\r\n          const diff = SortingUtilsService.diff(originalLineAssociation, lineAssociation, currentFullKey, []);\r\n          map = [...map, ...diff];\r\n        }\r\n      });\r\n      return map;\r\n    },\r\n    enterpriseAltNum: nullable,\r\n    e164AltNum: nullable\r\n  };\r\n\r\n  public static sortDevicesByTypeAndName(array: Array<DeviceInterface>): any {\r\n    if (!array) {\r\n      return null;\r\n    }\r\n    return array.sort((a, b) => {\r\n      if (a.deviceType === b.deviceType) {\r\n        return (a.name < b.name) ? -1 : (a.name > b.name) ? 1 : 0;\r\n      } else {\r\n        return (a.deviceType < b.deviceType) ? -1 : 1;\r\n      }\r\n    });\r\n  }\r\n\r\n  static sortLinesByDirectoryName(array: LineInterface[]): any {\r\n    if (!array) {\r\n      return null;\r\n    }\r\n    return array.sort((a, b) => {\r\n      if (!a.directoryNumber && !b.directoryNumber) {\r\n        return 0;\r\n      }\r\n      if (a.directoryNumber && !b.directoryNumber) {\r\n        return 1;\r\n      }\r\n      if (!a.directoryNumber && b.directoryNumber) {\r\n        return -1;\r\n      }\r\n      const directoryNumberA = a.directoryNumber.directoryNumber;\r\n      const directoryNumberB = b.directoryNumber.directoryNumber;\r\n      return (directoryNumberA < directoryNumberB) ? -1 : (directoryNumberA > directoryNumberB) ? 1 : 0;\r\n    });\r\n  }\r\n\r\n  static sortLineAssociationsByPosition(array: LineAssociation[]): any {\r\n    if (!array) {\r\n      return null;\r\n    }\r\n    return array.sort((a, b) => {\r\n      if (!a.position && !b.position) {\r\n        return 0;\r\n      }\r\n      if (a.position && !b.position) {\r\n        return 1;\r\n      }\r\n      if (!a.position && b.position) {\r\n        return -1;\r\n      }\r\n      const positionA = a.position;\r\n      const positionB = b.position;\r\n      return (positionA < positionB) ? -1 : (positionA > positionB) ? 1 : 0;\r\n    });\r\n  }\r\n\r\n  static sortSortArrayByProperty(array: any, sortBy: string): any {\r\n    if (!array) {\r\n      return null;\r\n    }\r\n    return array.sort((a: any, b: any) => {\r\n      if (!a[sortBy] && !b[sortBy]) {\r\n        return 0;\r\n      }\r\n      if (a[sortBy] && !b[sortBy]) {\r\n        return 1;\r\n      }\r\n      if (!a[sortBy] && b[sortBy]) {\r\n        return -1;\r\n      }\r\n      const positionA = a[sortBy];\r\n      const positionB = b[sortBy];\r\n      return (positionA < positionB) ? -1 : (positionA > positionB) ? 1 : 0;\r\n    });\r\n  }\r\n\r\n\r\n  static diff(origObject: any, updatedObj: any, path: string, keysToIgnore: any) {\r\n    let result: any = [];\r\n    if (Object.is(origObject, updatedObj)) {\r\n      return undefined;\r\n    }\r\n    if (!updatedObj || typeof updatedObj !== 'object') {\r\n      return updatedObj;\r\n    }\r\n    const concat = Array.from(new Set([...Object.keys(origObject || {}), ...Object.keys(updatedObj || {})]));\r\n    const filter = keysToIgnore ? concat.filter(key => !keysToIgnore.includes(key)) : concat;\r\n    filter\r\n      .forEach(key => {\r\n        // @ts-ignore\r\n        if (this.dictionary[key]) {\r\n          // @ts-ignore\r\n          const complexResult = this.dictionary[key](origObject[key], updatedObj[key], `${path}${path ? '.' : ''}${key}`);\r\n          if (complexResult) {\r\n            if (Array.isArray(complexResult)) {\r\n              result = [...result, ...complexResult];\r\n            } else {\r\n              result.push(complexResult);\r\n            }\r\n          }\r\n        } else if (typeof updatedObj[key] === 'object' && typeof origObject[key] === 'object') {\r\n          if (SortingUtilsService.differs(updatedObj[key], origObject[key])) {\r\n            const newPath = `${path}${path ? '.' : ''}${key}`;\r\n            const values = SortingUtilsService.diff(origObject[key], updatedObj[key], newPath, keysToIgnore);\r\n            if (values !== undefined) {\r\n              result = [...result, ...values];\r\n            }\r\n          }\r\n        } else if (updatedObj && !origObject || updatedObj[key] !== origObject[key] && !Object.is(origObject[key], updatedObj[key])) {\r\n          const value = updatedObj ? SortingUtilsService.formatIfEmpty(updatedObj[key]) : null;\r\n          result.push(`${path}${path ? '.' : ''}${key}=${value}`);\r\n        }\r\n      });\r\n    return result;\r\n  }\r\n\r\n  static formatIfEmpty(value: any): any {\r\n    if (value) {\r\n      return value;\r\n    }\r\n    switch (typeof value) {\r\n      case 'boolean':\r\n        return value;\r\n      case 'string':\r\n        return '';\r\n      default:\r\n        return null;\r\n    }\r\n  }\r\n\r\n  static differs(obj1: any, obj2: any): boolean {\r\n    return JSON.stringify(obj1) !== JSON.stringify(obj2);\r\n  }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class UtilsService {\r\n\r\n  static filterOptions(options: any[], query: string, shownValue?: any, field?: string)  {\r\n    if (!options) {\r\n      return [];\r\n    }\r\n    if (!query) {\r\n      return options;\r\n    }\r\n    return options.filter(option => {\r\n      return (\r\n        field ? String(option[field]).toLowerCase().includes(String(query).toLowerCase()) :\r\n          String(option).toLowerCase().includes(String(query).toLowerCase()) ||\r\n          (shownValue && shownValue === option)\r\n      );\r\n    });\r\n  };\r\n\r\n  static sortSortArrayByProperty(array: [], sortBy: string) {\r\n    if (!array) {\r\n      return null;\r\n    }\r\n    return array.sort((a, b) => {\r\n      if (!a[sortBy] && !b[sortBy]) {\r\n        return 0;\r\n      }\r\n      if (a[sortBy] && !b[sortBy]) {\r\n        return 1;\r\n      }\r\n      if (!a[sortBy] && b[sortBy]) {\r\n        return -1;\r\n      }\r\n      const positionA = a[sortBy];\r\n      const positionB = b[sortBy];\r\n      return (positionA < positionB) ? -1 : (positionA > positionB) ? 1 : 0;\r\n    });\r\n  }\r\n\r\n  static diff(origObject: any, updatedObj: any, path: string, keysToIgnore?: string[]) {\r\n    let result: any = [];\r\n    if (Object.is(origObject, updatedObj)) {\r\n      return undefined;\r\n    }\r\n    if (!updatedObj || typeof updatedObj !== 'object') {\r\n      return updatedObj;\r\n    }\r\n    const concat = Array.from(new Set([...Object.keys(origObject || {}), ...Object.keys(updatedObj || {})]));\r\n    const filter = keysToIgnore ? concat.filter(key => !keysToIgnore.includes(key)) : concat;\r\n    filter\r\n      .forEach(key => {\r\n        if (typeof updatedObj[key] === 'object' && typeof origObject[key] === 'object') {\r\n          if (UtilsService.differs(updatedObj[key], origObject[key])) {\r\n            const newPath = `${path}${path ? '.' : ''}${key}`;\r\n            const values = UtilsService.diff(origObject[key], updatedObj[key], newPath, keysToIgnore);\r\n            if (values !== undefined) {\r\n              result = [...result, ...values];\r\n            }\r\n          }\r\n        } else if (updatedObj && !origObject || updatedObj[key] !== origObject[key] && !Object.is(origObject[key], updatedObj[key])) {\r\n          const value = updatedObj ? UtilsService.formatIfEmpty(updatedObj[key]) : null;\r\n          result.push(`${path}${path ? '.' : ''}${key}=${value}`);\r\n        }\r\n      });\r\n    return result;\r\n  }\r\n\r\n  static formatIfEmpty(value: any) {\r\n    if (value) {\r\n      return value;\r\n    }\r\n    switch (typeof value) {\r\n      case 'boolean':\r\n        return value;\r\n      case 'string':\r\n        return '';\r\n      default:\r\n        return null;\r\n    }\r\n  }\r\n\r\n  static differs(obj1: any, obj2: any): boolean {\r\n    return JSON.stringify(obj1) !== JSON.stringify(obj2);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { APIService } from './api.service';\r\nimport { LineAssociation } from './../classes/line-association';\r\nimport { API } from '../app.constants';\r\nimport { SortingUtilsService } from './sorting-utils.service';\r\nimport { Subject } from 'rxjs';\r\nimport { LineAssociationInterface } from './../classes/line-association-interface';\r\n\r\n@Injectable()\r\nexport class LineService {\r\n  line!: LineAssociation;\r\n  originLine!: LineAssociation;\r\n  currentActiveLinePkid!: string | null;\r\n  onSaveLineAssociationEvent = new Subject();\r\n\r\n  constructor(\r\n    private apiService: APIService\r\n  ) {\r\n\r\n  }\r\n  public generateLineAssociationFromLine(lineAssociation?: any) {\r\n   return {\r\n     directoryNumber: lineAssociation ? this.generateLineDirectory(lineAssociation) : null,\r\n     didPattern: lineAssociation ? this.generateDidPatternForLineAssociation(lineAssociation) : null,\r\n     mappedDids: lineAssociation ? lineAssociation.number : 'null',\r\n     index: lineAssociation ? lineAssociation.index : null,\r\n     position: lineAssociation ? lineAssociation.position : null,\r\n     textLabel: lineAssociation ? lineAssociation.textLabel : null,\r\n     // displayLabel: lineAssociation ? lineAssociation.displayLabel  : 'null',\r\n     alertingName: lineAssociation ? lineAssociation.alertingName : null,\r\n     callerNumber: lineAssociation ? '' : 'null'\r\n   }\r\n  }\r\n\r\n  hasUnsavedChanges(): boolean {\r\n    if (this.line && this.originLine) {\r\n      return JSON.stringify(this.line.getSavableData()) !== JSON.stringify(this.originLine.getSavableData())\r\n    }\r\n    return false;\r\n  }\r\n\r\n  generateLineDirectory(lineAssociation?: any): any {\r\n    return {\r\n      directoryNumber: lineAssociation.extension,\r\n      routePartitionName: lineAssociation.routePartitionName,\r\n    }\r\n  }\r\n\r\n  generateDidPatternForLineAssociation(lineAssociation?: any): any {\r\n    return {\r\n      calledPartyTransformationMask: lineAssociation.directoryNumber\r\n    }\r\n  }\r\n\r\n  public checkLineDeletion(line: LineAssociation, siteId: number): any {\r\n    const params = {\r\n      extension: line.directoryNumber.directoryNumber,\r\n      routePartition: line.directoryNumber.routePartitionName,\r\n    };\r\n    return this.apiService.fetch(API.CHECK_DELETE_LINE.replace(':siteId', String(siteId)), params)\r\n      // .pipe(this.handleError(true, true));\r\n  }\r\n\r\n  public deleteLine(siteId: number, pkid: string, token: string) {\r\n    return this.apiService.delete(API.DELETE_LINE.replace(':siteId', String(siteId)).replace(':pkid', pkid).replace(':token', encodeURIComponent(token)), {})\r\n    // .pipe(this.handleError(true, false));\r\n  }\r\n\r\n  public disassociateLine(siteId: number, linePkid: string, token: string, deviceName: string) {\r\n    return this.apiService.delete(\r\n      API.DISASSOCIATE_LINE.replace(':siteId', String(siteId))\r\n        .replace(':linePkid', linePkid)\r\n        .replace(':deviceName', deviceName)\r\n        .replace(':token', encodeURIComponent(token)), {})\r\n    // .pipe(this.handleError(true, false));\r\n  }\r\n\r\n  public updateLineFields(siteId: number, pkid: string, token: string, alertingName: any) {\r\n    const body = ['line.description=', `line.alertingName=${alertingName}`];\r\n    return this.apiService.post(API.UPDATE_LINE_FIELDS.replace(':siteId', String(siteId)).replace(':pkid', encodeURIComponent(pkid)).replace(':token', encodeURIComponent(token)), body)\r\n    // .pipe(this.handleError(true, false));\r\n  }\r\n\r\n  getLineAssociationBody(originLineAssociation: LineAssociation | LineAssociationInterface, lineAssociation: LineAssociation | LineAssociationInterface) {\r\n    const body = SortingUtilsService.diff(originLineAssociation.getSavableData(), lineAssociation.getSavableData(),\r\n      `device.lineAssociations.${lineAssociation.linePkid}`, null);\r\n    return body;\r\n  }\r\n}\r\n","import { Injectable, OnInit } from '@angular/core';\r\nimport { forkJoin, of, Subject } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\nimport { API } from '../app.constants';\r\nimport { DeviceProfile } from '../classes/deviceProfile';\r\nimport { Device } from './../classes/device';\r\nimport { LineAssociation } from './../classes/line-association';\r\nimport { LineAssociationInterface } from './../classes/line-association-interface';\r\nimport { SimplifiedUser } from './../classes/simplified-user';\r\nimport { APIService } from './api.service';\r\nimport { LineService } from './line.service';\r\nimport { SortingUtilsService } from './sorting-utils.service';\r\nimport { UtilsService } from './utils.service';\r\nimport { ValidationService } from './validation.service';\r\n\r\n@Injectable()\r\nexport class UserService implements OnInit{\r\n  siteId: number = -1;\r\n  userId: string = '';\r\n  userIdExistPending = false;\r\n  hasExistedUserId = false;\r\n  user!: SimplifiedUser;\r\n  originUser!: SimplifiedUser;\r\n  originDevice!: any;\r\n  onUserLineSaved$ = new Subject<any>();\r\n  onFetchUserToken$ = new Subject<any>();\r\n\r\n  private _userToken: string = '';\r\n\r\n  get userToken() {\r\n    return this._userToken;\r\n  }\r\n\r\n  private _userName: string = '';\r\n\r\n  get userName(): string {\r\n    return this._userName;\r\n  }\r\n\r\n  private _userLastName: string = '';\r\n\r\n  get userLastName(): string {\r\n    return this._userLastName;\r\n  }\r\n\r\n  private _cucmId: string = '';\r\n\r\n  get cucmId(): string {\r\n    return this._cucmId;\r\n  }\r\n\r\n  private _userDevice: DeviceProfile | undefined;\r\n\r\n  get userDevice() {\r\n    return this._userDevice;\r\n  }\r\n\r\n  get lineAssociation(): LineAssociationInterface | undefined {\r\n    return this.userDevice && this.userDevice.lineAssociations && this.userDevice.lineAssociations[0];\r\n  }\r\n\r\n  get originLineAssociation(): LineAssociation | LineAssociationInterface {\r\n    return this.originDevice && JSON.parse(this.originDevice).lineAssociations[0];\r\n  }\r\n\r\n  constructor(\r\n    private apiService: APIService,\r\n    private lineService: LineService\r\n  ) {\r\n\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    console.log(this.siteId)\r\n  }\r\n\r\n  resetLineAssociation(deviceIndex: number, lineIndex: number, validationService: ValidationService): void {\r\n    const originLine = this.originUser?.devices[deviceIndex]?.lineAssociations[lineIndex];\r\n    if (this.user?.devices[deviceIndex]?.lineAssociations[lineIndex] && originLine) {\r\n      this.user.devices[deviceIndex].lineAssociations[lineIndex] = new LineAssociation(JSON.parse(JSON.stringify(originLine.getFullData())), validationService)\r\n    }\r\n  }\r\n\r\n  resetDevice(currentDevice: Device, validationService: ValidationService): void {\r\n    const originDevice = this.originUser.devices.find(device => device.name === currentDevice.name);\r\n    const deviceInd = this.user.devices.findIndex(device => device.name === currentDevice.name);\r\n    if (originDevice && deviceInd > -1) {\r\n      const lineAssociations = this.user.devices[deviceInd].lineAssociations;\r\n      this.user.devices[deviceInd] = new Device(JSON.parse(JSON.stringify(originDevice.getNoLinesFullData())), validationService);\r\n      this.user.devices[deviceInd].lineAssociations = lineAssociations;\r\n      console.log('device after reset = ', this.user.devices[deviceInd]);\r\n    }\r\n  }\r\n\r\n  public fetchUserToken(siteId: number, userId: string, validationService: ValidationService, isSetNewTokenOnly?: boolean): any {\r\n    /*if (this.siteId === siteId && this.userId === userId && this.user) {\r\n      return of(this.user);\r\n    }*/\r\n    this.siteId = siteId;\r\n    this.userId = userId;\r\n    return this.apiService.fetch(API.USER_TOKEN.replace(':siteId', String(this.siteId)).replace(':userId', encodeURIComponent(encodeURIComponent(userId))))\r\n      .pipe(map((result: any) => {\r\n        const user = result && Object.values(result)[0];\r\n        const userToken = result && Object.keys(result)[0];\r\n        if (user) {\r\n          if (!isSetNewTokenOnly) {\r\n            this.setSimplifiedUser(user, validationService, userToken);\r\n          } else {\r\n            this._userToken = userToken;\r\n            // this.originUser.token = user.token;\r\n          }\r\n          this.onFetchUserToken$.next(true);\r\n        }\r\n        return result;\r\n      }))\r\n    // .pipe(this.handleError(false, true));\r\n  }\r\n\r\n  public fetchDIUserDevice(siteId: number, userId: string, deviceType: string) {\r\n    this.siteId = siteId;\r\n    this.userId = userId;\r\n    return this.apiService.fetch(API.USER_TOKEN.replace(':siteId', String(this.siteId)).replace(':userId', encodeURIComponent(encodeURIComponent(userId))))\r\n      .pipe(map((result: any) => {\r\n        const user = result && Object.values(result)[0];\r\n        const userToken = result && Object.keys(result)[0];\r\n\r\n        if (user) {\r\n          this._userToken = userToken;\r\n          this._userName = user.firstName;\r\n          this._userLastName = user.lastName;\r\n          this._cucmId = user.cucmId;\r\n          const foundDevice = user.devices.find((device: any) => device.deviceType === deviceType);\r\n          if(foundDevice) {\r\n            this._userDevice = new DeviceProfile({\r\n              ...foundDevice,\r\n              model: foundDevice?.deviceType,\r\n              macAddress: this.getMacAddress(foundDevice.name),\r\n              lines: foundDevice?.lineAssociations?.map((line: any) => {\r\n                const foundLine = user?.lines?.find((l: any) => l.pkid === line.linePkid);\r\n                return {\r\n                  name: `${this._userName} ${this._userLastName}`,\r\n                  extension: line && line.directoryNumber && line.directoryNumber.routePartitionName && line.directoryNumber.directoryNumber || '',\r\n                  number: foundLine !== -1 ? foundLine.mappedDids[0] : '',\r\n                  description: foundLine && foundLine.didPatterns && foundLine.didPatterns[0] ? foundLine.didPatterns[0].description : '',\r\n                  routePartitionName: line && line.directoryNumber.routePartitionName || '',\r\n                  pkid: line && line.linePkid || '',\r\n                  index: line && line.index || undefined,\r\n                  position: line && line.position || undefined,\r\n                  textLabel: line && line.textLabel || '',\r\n                  alertingName: line && line.alertingName || '',\r\n                  callerNumber: line && line.callerNumber || ''\r\n                } \r\n              }),\r\n              softwareVersion: foundDevice?.firmwareVersion\r\n            })\r\n          }\r\n        }\r\n        this.originDevice = this._userDevice ? JSON.stringify(this._userDevice.getSavableData()) : '';\r\n        return this._userDevice;\r\n      }))\r\n  }\r\n\r\n  private getMacAddress(name: string): string | undefined {\r\n    const macRegex = /^[A-Fa-f0-9]{12}$/;\r\n    let macAddress;\r\n\r\n    if (name.length === 12 && macRegex.test(name)) {\r\n      macAddress = name;\r\n    } else {\r\n      const trimmed = name.slice(3);\r\n      macAddress = macRegex.test(trimmed) ? trimmed : undefined;\r\n    }\r\n\r\n    return macAddress;\r\n  }\r\n\r\n  public fetchWebexUserDevice(customerId: string, userId: string, deviceType: string) {\r\n    return forkJoin([\r\n      this.apiService.fetch(API.WEBEX_USER_TOKEN.replace(':customerId', customerId).replace(':userId', encodeURIComponent(encodeURIComponent(userId)))),\r\n      this.apiService.fetch(API.WEBEX_USER_DEVICES.replace(':customerId', customerId).replace(':userId', encodeURIComponent(encodeURIComponent(userId))))\r\n    ])\r\n      .pipe(map((results: any) => {\r\n        this._userName = results[0].firstName;\r\n        this._userLastName = results[0].lastName;\r\n        if(results[1]) {\r\n          const foundDevice = results[1].devices.find((device: any) => device.model === deviceType);\r\n          this._userDevice = new DeviceProfile({\r\n            ...foundDevice,\r\n            macAddress: foundDevice.mac,\r\n            maxLineCount: foundDevice?.deviceMembers?.maxLineCount,\r\n            lines: foundDevice?.deviceMembers?.members?.map((member: any) => {\r\n              return {\r\n                name: `${member.firstName} ${member.lastName}`,\r\n                extension: member.extension\r\n              } \r\n            })\r\n          })\r\n        }\r\n        return this._userDevice;\r\n      }))\r\n  }\r\n\r\n  public updateUserFields(body: any): any {\r\n    if (!this.userId || !this.siteId || !this.user?.token) {\r\n      return;\r\n    }\r\n    return this.apiService.post(API.UPDATE_USER_FIELDS.replace(':siteId', String(this.siteId)).replace(':token', this.userToken), body)\r\n      // .pipe(this.handleError(false, true));\r\n  }\r\n\r\n  public fetchUserById(id: string) {\r\n    this.userIdExistPending = true;\r\n    return this.apiService.fetch(API.USER_BY_ID.replace(':siteId', String(this.siteId)).replace(':userId', encodeURIComponent(encodeURIComponent(id))))\r\n      .pipe(map(result => {\r\n        this.userIdExistPending = false;\r\n        return result;\r\n      }));\r\n  }\r\n\r\n  public fetchLeanUserConversationById(id: string) {\r\n    return this.apiService.fetch(API.LEAN_USER_CONVERSATION_START.replace(':siteId', String(this.siteId)).replace(':userId', encodeURIComponent(encodeURIComponent(id))));\r\n  }\r\n\r\n  public fetchLeanUserDevicesConversationById(id: string) {\r\n    return this.apiService.fetch(API.LEAN_USER_DEVICES_CONVERSATION_START.replace(':siteId', String(this.siteId)).replace(':userId', encodeURIComponent(encodeURIComponent(id))));\r\n  }\r\n  public fetchLeanUserLinesConversationById(id: string, leanUserDevicesToken: string) {\r\n    return this.apiService.fetch(API.LEAN_USER_LINES_CONVERSATION_START.replace(':siteId', String(this.siteId))\r\n      .replace(':userId', encodeURIComponent(encodeURIComponent(id))).replace(':leanUserDevicesToken', leanUserDevicesToken));\r\n  }\r\n  public fetchLeanUserSNRConversationById(id: string) {\r\n    return this.apiService.fetch(API.LEAN_USER_SNR_CONVERSATION_START.replace(':siteId', String(this.siteId)).replace(':userId', encodeURIComponent(encodeURIComponent(id))));\r\n  }\r\n\r\n  public persistCacheChanges() {\r\n    /*const params = {\r\n      excludeDeviceExtraOptions: true\r\n    };*/\r\n    return this.processUserChangesToCache()\r\n      .pipe(map((result: any) => {\r\n        return this.apiService.post(API.PERSIST_USER_CACHE.replace(':siteId', String(this.siteId)).replace(':token', this.userToken), {}, {})\r\n          .subscribe(() => {\r\n\r\n          })\r\n          // .pipe(map((user) => {\r\n          //   // this.setUser(user, false, this.user.token);\r\n          //   this.user.hasModifiedCache = false;\r\n          // }))\r\n          // .pipe(this.handleError(true, true));\r\n      }));\r\n  }\r\n\r\n  public processUserChangesToCache(): any {\r\n    const calls = [];\r\n    const body = UtilsService.diff(this.originUser.getUserDetailsSavableData(), this.user.getUserDetailsSavableData(), 'user');\r\n    if (body?.length) {\r\n      calls.push(this.updateUserFields(body));\r\n    }\r\n    if (!calls?.length) {\r\n      return of(this.user);\r\n    }\r\n\r\n    return forkJoin(calls)\r\n      .pipe(map((responses: any) => {\r\n        // ApiUserResponse\r\n        this.handleSaveUserResponse(responses);\r\n      }))\r\n    // .pipe(this.handleError(false, true));\r\n\r\n  }\r\n\r\n  public saveNewLine(line: any): any {\r\n    this.deleteLine(this.siteId, line.pkid, encodeURIComponent(this.userToken))\r\n      .subscribe(() => {\r\n        const URL = API.PERSIST_USER_CACHE.replace(':siteId', String(this.siteId)).replace(':token', this.userToken);\r\n        this.apiService.post(URL, {}, )\r\n          .subscribe(() => {\r\n            this.runNewLineCreation(line);\r\n          });\r\n      });\r\n  }\r\n\r\n  public persistUserCache(): any {\r\n    const URL = API.PERSIST_USER_CACHE.replace(':siteId', String(this.siteId)).replace(':token', this.userToken);\r\n    return this.apiService.post(URL, {}, );\r\n  }\r\n\r\n  public runNewLineCreation(line: any): void {\r\n    // CREATE NEW LINE\r\n    const newLineBody = SortingUtilsService.diff(\r\n      this.lineService.generateLineAssociationFromLine(null),\r\n      this.lineService.generateLineAssociationFromLine(line),\r\n      'device.lineAssociations', null\r\n    );\r\n    this.associateLineToUserDevice(\r\n      this.siteId,\r\n      this.userDevice && this.userDevice.name || '',\r\n      newLineBody,\r\n      null,\r\n      this.lineAssociation?.callingSearchSpace\r\n    )\r\n    .pipe(switchMap(() => {\r\n      const URL = API.PERSIST_USER_CACHE.replace(':siteId', String(this.siteId)).replace(':token', this.userToken);\r\n      return this.apiService.post(URL, {}, );\r\n    }))\r\n    .subscribe((response: any) => {\r\n      if (response?.currentUpdatedUser) {\r\n        const linePkId = response.currentUpdatedUser.devices[0]?.lineAssociations[0]?.linePkid || response.currentUpdatedUser.devices[0]?.lineAssociations[0]?.lineLocalId;\r\n        forkJoin([\r\n          this.updateLineFields(this.siteId, linePkId, this.userToken, this.lineAssociation?.alertingName),\r\n          this.updateDeviceFields(this.siteId, this.userDevice && this.userDevice.name || '', this.userToken)\r\n        ]).subscribe((response: any) => {\r\n          const originalDeviceData = JSON.parse(this.originDevice);\r\n          const originalDeviceLine = originalDeviceData.lines.find((origLine: any) => origLine.pkid === line.pkid);\r\n          if(originalDeviceLine) {\r\n            originalDeviceData.extension = line.extension;\r\n            this.originDevice = JSON.stringify(originalDeviceData);\r\n          }\r\n          this.onUserLineSaved$.next(true);\r\n        });\r\n      }\r\n    })\r\n    // -----\r\n  }\r\n\r\n  public deleteLine(siteId: number, pkid: string, token: string) {\r\n    return this.apiService.delete(API.DELETE_LINE.replace(':siteId', String(siteId)).replace(':pkid', pkid).replace(':token', encodeURIComponent(token)), {})\r\n      // .pipe(this.handleError(true, false));\r\n  }\r\n\r\n  public disassociateLine(siteId: number, linePkid: string, token: string, deviceName: string) {\r\n    return this.apiService.delete(\r\n      API.DISASSOCIATE_LINE.replace(':siteId', String(siteId))\r\n        .replace(':linePkid', linePkid)\r\n        .replace(':deviceName', deviceName)\r\n        .replace(':token', encodeURIComponent(token)), {})\r\n      // .pipe(this.handleError(true, false));\r\n  }\r\n\r\n  public updateLineFields(siteId: number, pkid: string, token: string, alertingName: any) {\r\n    const body = ['line.description=', `line.alertingName=${alertingName}`];\r\n    return this.apiService.post(API.UPDATE_LINE_FIELDS.replace(':siteId', String(siteId)).replace(':pkid', encodeURIComponent(pkid)).replace(':token', encodeURIComponent(token)), body)\r\n      // .pipe(this.handleError(true, false));\r\n  }\r\n\r\n  public updateDeviceFields(siteId: number, deviceName: string, token: string) {\r\n    const body = ['device.associatedDNs.0=null'];\r\n    return this.apiService.post(API.UPDATE_DEVICE_FIELDS.replace(':siteId', String(siteId)).replace(':deviceName', deviceName).replace(':token', encodeURIComponent(token)), body)\r\n    // .pipe(this.handleError(true, false));\r\n  }\r\n\r\n  public checkDestinationNumber(siteId: string, directoryNumber: string, routePartitionName: string) {\r\n    const params = {\r\n      dntype: 'EXTENSION'\r\n    };\r\n    const body = {\r\n      directoryNumber: directoryNumber,\r\n      routePartitionName: routePartitionName\r\n    };\r\n    return this.apiService.post(API.CHECK_DESTINATION_NUMBER.replace(':siteId', siteId), body, params);\r\n  }\r\n\r\n  public associateLineToUserDevice(siteId: number, deviceName: string, body: any, pkid: any, css: any) {\r\n    let params = {};\r\n    if (pkid) {\r\n      params = {linePkid: pkid};\r\n    }\r\n    if (css) {\r\n      // @ts-ignore\r\n      params['css'] = css;\r\n    }\r\n    return this.apiService.post(API.ASSOCIATE_LINE.replace(':siteId', String(siteId)).replace(':deviceName', deviceName)\r\n      .replace(':token', encodeURIComponent(this.userToken)), body, params)\r\n      // .pipe(this.handleError(true, true));\r\n  }\r\n\r\n  public hasUnsavedChanges() {\r\n    if (this._userDevice && this.originDevice) {\r\n      return JSON.stringify(this._userDevice.getSavableData()) && this.originDevice;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  public setSimplifiedUser(user: any, validationService: ValidationService, userToken?: string): void {\r\n    this.user = new SimplifiedUser(user, validationService);\r\n    const copiedUser = JSON.parse(JSON.stringify(user));\r\n    this.originUser = new SimplifiedUser(copiedUser, validationService);\r\n    if (!this.userToken && userToken) {\r\n      this._userToken = userToken;\r\n      // this.originUser.token = userToken;\r\n    }\r\n  }\r\n\r\n  public editTranslationPattern(\r\n      cucmId: string,\r\n      oldpattern: string,\r\n      newPattern: string,\r\n      extension: string,\r\n      routePartitionName: string,\r\n      description: string,\r\n    ) {\r\n    const params = {\r\n      originalpattern: oldpattern,\r\n    };\r\n    const URL = API.TRANSLATION_PATTERN_CUCM.replace(':cucmId', cucmId);\r\n    return this.apiService\r\n      .put(URL, { calledPartyTransformationMask: extension, pattern: newPattern, routePartitionName: routePartitionName, description }, params);\r\n  }\r\n\r\n  public lineUpdated(line: any, index: number) {\r\n    const originalLine = JSON.parse(this.originDevice).lines[index];\r\n    return originalLine.number !== line.number || originalLine.extension !== line.extension;\r\n  }\r\n\r\n  public getOriginalNumber(line: any): string {\r\n    const foundLine = JSON.parse(this.originDevice).lines.find((origLine: any) => origLine.extension === line.extension || origLine.number === line.number);\r\n    return foundLine.number || '';\r\n  }\r\n\r\n  private handleSaveUserResponse(responses: any) {\r\n    if (!responses?.length) {\r\n      return;\r\n    }\r\n    for (let len = responses.length, i = len - 1; i >= 0; i--) {\r\n      if (responses[i] && responses[i].currentUpdatedUser) {\r\n        // this.setUser(responses[i].currentUpdatedUser, false, this.user.token);\r\n        this.user.hasModifiedCache = true;\r\n        return;\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { Injectable, OnInit } from '@angular/core';\r\nimport { APIService } from './api.service';\r\nimport { Observable, of, throwError } from 'rxjs';\r\nimport { API } from '../app.constants';\r\nimport { map } from 'rxjs/operators';\r\nimport { SortingUtilsService } from './sorting-utils.service';\r\nimport { Buttontemplate, Device } from '../classes/device';\r\nimport { LineAssociationInterface } from '../classes/line-association-interface';\r\n\r\n@Injectable()\r\nexport class DeviceService {\r\n  availableSlots!: number[];\r\n  lineSlotsList!: any;\r\n  availableLineSlotsList!: any;\r\n  dataPending = false;\r\n\r\n  constructor(\r\n    private apiService: APIService,\r\n  ) {\r\n  }\r\n\r\n  public hasUnsavedChanges(device: Device, originDevice: Device): boolean {\r\n    if (device?.lineAssociationsHasChanges) {\r\n      return true;\r\n    }\r\n    if (device && originDevice) {\r\n      return JSON.stringify(device.getSavableData()) !== JSON.stringify(originDevice.getSavableData());\r\n    }\r\n    return false;\r\n  }\r\n\r\n  public hasDeviceInfoUnsavedChanges(device: Device, originDevice: Device): boolean {\r\n    if (device && originDevice) {\r\n      return JSON.stringify(device.getDeviceInfoSavableData()) !== JSON.stringify(originDevice.getDeviceInfoSavableData());\r\n    }\r\n    return false;\r\n  }\r\n\r\n  public getDataToUpdateDevice(device: Device, originalDevice: Device) {\r\n    // --- to exclude newLines from update\r\n    // const devToUpdate = new Device(device, this.validationService);\r\n    // const originalDevToUpdate = new Device(originalDevice, this.validationService);\r\n    // // @ts-ignore\r\n    // devToUpdate.lineAssociations = devToUpdate.lineAssociations?.filter(line => line.linePkid);\r\n    // // @ts-ignore\r\n    // originalDevToUpdate.lineAssociations = originalDevToUpdate.lineAssociations?.filter(line => line.linePkid);\r\n\r\n    const body = SortingUtilsService.diff(originalDevice.getDeviceInfoSavableData(), device.getDeviceInfoSavableData(), 'device',\r\n      ['speedDials', 'busyLampFields']);\r\n    return body;\r\n  }\r\n\r\n  public fetchLeanUserDevicesConversationById(userId: string, siteId: number) {\r\n    return this.apiService.fetch(API.LEAN_USER_DEVICES_CONVERSATION_START.replace(':siteId', String(siteId)).replace(':userId', encodeURIComponent(encodeURIComponent(userId))));\r\n  }\r\n\r\n  public getSlotsByButtonTemplate(siteId: number, buttonTemplateName: string): Observable<Buttontemplate> {\r\n    return this.apiService.fetch(API.LINE_SLOTS.replace(':siteId', String(siteId)), {name: buttonTemplateName}, true)\r\n      // .pipe(this.handleError(true, true));\r\n  }\r\n\r\n  public putDeviceFields(siteId: number, deviceName: string, token: string, body: any) {\r\n    console.log('userToken = ', token);\r\n    const URL = API.UPDATE_DEVICE_FIELDS\r\n      .replace(':siteId', String(siteId))\r\n      .replace(':deviceName', deviceName)\r\n      .replace(':token', token);\r\n    console.log('url = ', URL);\r\n    return this.apiService.post(URL, body)\r\n      // .pipe(this.handleError(true, true));\r\n  }\r\n\r\n  public updateAvailableSlots(siteId: number, device: Device): any {\r\n    if (!device) {\r\n      throw throwError(() => new Error('test'));\r\n    }\r\n    if (!device.buttonTemplate) {\r\n      throw throwError(() => new Error('test'));\r\n    }\r\n    if (device.buttonTemplate === '') {\r\n      device.availableSlots = [];\r\n      return of(device);\r\n    }\r\n    const existingPositions = device.lineAssociations.map((lineAssociation: LineAssociationInterface) => lineAssociation.position);\r\n    return this.getSlotsByButtonTemplate(siteId, device.buttonTemplate)\r\n      .pipe(map((buttonTemplate: Buttontemplate) => {\r\n        this.lineSlotsList = buttonTemplate.lineSlots;\r\n        device.availableSlots = this.lineSlotsList.filter((position: number) => !existingPositions.includes(position));\r\n        this.availableLineSlotsList = device.availableSlots.slice();\r\n        return device;\r\n      }))\r\n      // .pipe(this.handleError(true, true));\r\n  }\r\n\r\n}\r\n","import { Component, ViewEncapsulation } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'app-loader',\r\n  templateUrl: './app-loader.component.html',\r\n  styleUrls: ['./app-loader.component.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class AppLoaderComponent {\r\n  constructor() {\r\n  }\r\n\r\n}\r\n","<div class=\"overlay\">\r\n  <mat-progress-spinner\r\n    class=\"page-spinner\"\r\n    mode=\"indeterminate\"\r\n    [diameter]=\"70\"\r\n    strokeWidth=\"3\"></mat-progress-spinner>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport {HttpEvent, HttpRequest, HttpInterceptor, HttpHandler, HttpErrorResponse} from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport {catchError } from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class AuthInterceptor implements HttpInterceptor {\r\n  constructor() {\r\n  }\r\n\r\n  intercept(\r\n    request: HttpRequest<any>,\r\n    next: HttpHandler\r\n  ): Observable<HttpEvent<any>> {\r\n    request = request.clone({\r\n      setHeaders: {\r\n        // Authorization: basicAuthHeaderString\r\n      }\r\n      , withCredentials: true\r\n    })\r\n\r\n    return next.handle(request).pipe(catchError(err => {\r\n      if (err instanceof HttpErrorResponse) {\r\n        if (err.status === 401) {\r\n          if (window.history.length < 3) {\r\n            err.error.message = '';\r\n          } else {\r\n            err.error.message = 'SESSION_INACTIVE';\r\n          }\r\n        }\r\n      }\r\n      return throwError(err);\r\n    }));\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatTreeModule } from '@angular/material/tree';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\n\r\n\r\n@NgModule({\r\n  imports: [\r\n    DragDropModule,\r\n    MatButtonModule,\r\n    MatListModule,\r\n    MatProgressSpinnerModule,\r\n    MatExpansionModule,\r\n    MatInputModule,\r\n    MatInputModule,\r\n    MatListModule,\r\n    MatTreeModule,\r\n    MatTreeModule,\r\n    MatNativeDateModule,\r\n    MatDatepickerModule,\r\n    MatTooltipModule,\r\n    MatAutocompleteModule,\r\n    MatChipsModule,\r\n    MatSidenavModule,\r\n    MatFormFieldModule,\r\n    MatStepperModule,\r\n    MatTabsModule,\r\n    MatCardModule,\r\n    MatSelectModule,\r\n    MatCheckboxModule,\r\n    MatSlideToggleModule,\r\n    MatTableModule,\r\n    MatPaginatorModule,\r\n    MatDialogModule\r\n  ],\r\n  exports: [\r\n    DragDropModule,\r\n    MatButtonModule,\r\n    MatListModule,\r\n    MatProgressSpinnerModule,\r\n    MatExpansionModule,\r\n    MatInputModule,\r\n    MatInputModule,\r\n    MatListModule,\r\n    MatTreeModule,\r\n    MatTreeModule,\r\n    MatNativeDateModule,\r\n    MatDatepickerModule,\r\n    MatTooltipModule,\r\n    MatAutocompleteModule,\r\n    MatChipsModule,\r\n    MatSidenavModule,\r\n    MatFormFieldModule,\r\n    MatStepperModule,\r\n    MatTabsModule,\r\n    MatCardModule,\r\n    MatCheckboxModule,\r\n    MatSelectModule,\r\n    MatSlideToggleModule,\r\n    MatProgressSpinnerModule,\r\n    MatTableModule,\r\n    MatPaginatorModule\r\n  ],\r\n})\r\nexport class MaterialModule {\r\n}\r\n","export const environment = {\r\n  production: false,\r\n  // apiUrl: 'http://localhost:4200',\r\n  apiUrl: 'http://192.168.0.191:8080',\r\n  notificationsLifetime: 30000,\r\n  longNotificationsLifetime: 45000,\r\n  cashCleanTimer: 900000,\r\n  cashArrayLength: 10000,\r\n  matomoUrl: 'http://192.168.0.136/matomo/',\r\n};\r\n","import { environment } from '../environments/environment';\r\n\r\nconst TTL_DEFAULT = environment.notificationsLifetime;\r\nconst TTL_LONG_DEFAULT = environment.longNotificationsLifetime;\r\n\r\nexport enum NotificationType {\r\n    info = 'info',\r\n    error = 'error',\r\n    success = 'success',\r\n    warning = 'warning'\r\n}\r\n\r\nexport class Notification {\r\n  id?: number;\r\n  type?: NotificationType;\r\n  message?: string;\r\n  ttl: number = TTL_DEFAULT;\r\n  timerId?: any;\r\n\r\n  constructor(data: any) {\r\n    Object.assign(this, data || {});\r\n\r\n    if(this.ttl === undefined) {\r\n      this.ttl = this.message && this.message.length && this.message.length < 80 ? TTL_DEFAULT : TTL_LONG_DEFAULT;\r\n    }\r\n  }\r\n\r\n  isInfo(): boolean {\r\n    return this.type === NotificationType.info;\r\n  }\r\n  isError(): boolean {\r\n    return this.type === NotificationType.error;\r\n  }\r\n  isSuccess(): boolean {\r\n    return this.type === NotificationType.success;\r\n  }\r\n  isWarning(): boolean {\r\n    return this.type === NotificationType.warning;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Notification } from './../classes/notification';\r\nimport { Subject } from 'rxjs';\r\nconst SUCCESS_TIME = 5000;\r\nconst INACTIVE_SESSION_MESSAGE = 'Your session was lost due to inactivity. Please login again';\r\nconst INACTIVE_SESSION = 'SESSION_INACTIVE';\r\n\r\n@Injectable()\r\nexport class NotificationService {\r\n\r\n  public listChange = new Subject();\r\n\r\n  private max = 0;\r\n  private list: Notification[] = [];\r\n\r\n  constructor(\r\n  ) {\r\n  }\r\n\r\n  error(message: string, ttl?: number): void {\r\n    this.notify('error', message, ttl);\r\n  }\r\n\r\n  success(message: string, ttl?: number): void {\r\n    this.notify('success', message, (!ttl) ? SUCCESS_TIME : ttl);\r\n  }\r\n\r\n  warning(message: string, ttl?: number): void {\r\n    this.notify('warning', message, ttl);\r\n  }\r\n\r\n  info(message: string, ttl?: number): void {\r\n    this.notify('info', message, ttl);\r\n  }\r\n  private notify(type: string, message: string, ttl?: number): void {\r\n    const found = this.list.find((n: Notification) => n.message === message);\r\n    if (found) {\r\n      this.remove(found);\r\n    }\r\n    const notification = new Notification({\r\n      id: ++this.max,\r\n      type, message, ttl\r\n    });\r\n    if (notification.ttl > 0) {\r\n      notification.timerId = setTimeout(() => this.remove(notification, true), notification.ttl);\r\n    }\r\n    this.list.push(notification);\r\n    this.listChange.next(this.list);\r\n  }\r\n\r\n  remove(notification: Notification, auto?: boolean): void {\r\n    if (!auto && notification.timerId) {\r\n      // clear timeout in case of manual remove\r\n      clearInterval(notification.timerId);\r\n    }\r\n    this.list = this.list.filter(n => n.id !== notification.id);\r\n    this.listChange.next(this.list);\r\n  }\r\n\r\n  private removeInactiveSessionError(): void {\r\n    if (!this.list || !this.list.length) {\r\n      return;\r\n    }\r\n    this.list = this.list.filter(n => n.message !== INACTIVE_SESSION_MESSAGE && n.message !== INACTIVE_SESSION);\r\n    this.listChange.next(this.list);\r\n  }\r\n\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { Notification } from '../classes/notification';\r\n\r\n@Component({\r\n  selector: 'app-notification',\r\n  templateUrl: './notification.component.html',\r\n  styleUrls: ['./notification.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class NotificationsComponent implements OnInit, OnDestroy {\r\n  public list!: Notification[];\r\n  public isReadMore!: boolean;\r\n  private listSubscription!: Subscription;\r\n\r\n  constructor(\r\n    public notificationService: NotificationService,\r\n    private ref: ChangeDetectorRef\r\n  ) {\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.listChangeSubscribe();\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.listSubscription.unsubscribe();\r\n  }\r\n\r\n  public readMore(): void {\r\n    this.isReadMore = !this.isReadMore;\r\n  }\r\n\r\n  public removeNotification(notification: Notification): void {\r\n    this.notificationService.remove(notification);\r\n  }\r\n\r\n  private listChangeSubscribe(): void {\r\n    this.listSubscription = this.notificationService.listChange\r\n      .subscribe((list: any) => {\r\n        this.list = list;\r\n        this.ref.detectChanges();\r\n      });\r\n  }\r\n}\r\n","<!--\r\n\r\n<div class=\"notification-block\" role=\"alert\" aria-live=\"assertive\">\r\n  <div class=\"notification\"\r\n       *ngFor=\"let notification of list\"\r\n       [ngClass]=\"{'error': notification.isError(), 'success': notification.isSuccess()}\">\r\n\r\n    <div class=\"flex-box\">\r\n      <div class=\"notification-icons-block\">\r\n        <i *ngIf=\"notification.isError()\" class=\"fa fa-exclamation-triangle\"></i>\r\n        <i *ngIf=\"notification.isWarning()\" class=\"fa fa-hand-paper-o\"></i>\r\n        <i *ngIf=\"notification.isSuccess()\" class=\"fa fa-check\"></i>\r\n        <i *ngIf=\"notification.isInfo()\" class=\"fa fa-info-circle\"></i>\r\n      </div>\r\n      <div *ngIf=\"!isReadMore\" class=\"message-block\">\r\n        {{notification.message | truncate:[93]}}\r\n      </div>\r\n      <div *ngIf=\"isReadMore\" class=\"message-block\">\r\n        {{notification.message}}\r\n      </div>\r\n    </div>\r\n    <div class=\"read-more-error link clickable\" *ngIf=\"notification.message && notification.message.length > 93\"\r\n         (click)=\"readMore()\">{{(isReadMore ? 'BUTTON.COLLAPSE' : 'BUTTON.READ_MORE') | translate}}</div>\r\n    <button\r\n      class=\"close\"\r\n      mat-icon-button\r\n      matTooltip=\"{{'BUTTON.CLOSE' | translate}} {{'NOTIFICATION_MSG.' + notification.type | translate}} {{'NOTIFICATION_MSG.NOTI' | translate}}\"\r\n      (click)=\"removeNotification(notification)\">\r\n      <img class=\"notification-icon-close\" src=\"assets/icons/close_icon_modal.svg\" alt=\"\">\r\n    </button>\r\n  </div>\r\n</div>\r\n-->\r\n","import { Injectable } from '@angular/core';\r\nimport { CUCMS_TO_IGNORE, CUCS_TO_IGNORE } from '../app.constants';\r\n\r\n@Injectable()\r\nexport class RemoveKynFromIBMService {\r\n  constructor() {\r\n  }\r\n\r\n\r\n  removeCUCMS(date: any, customerId: number) {\r\n    if (customerId === 8) {\r\n      return date.filter((val: any) => !CUCMS_TO_IGNORE.includes(Math.round(val.cucmId)));\r\n    }\r\n    return date;\r\n  }\r\n\r\n  removeCUCS(date: any, customerId: number) {\r\n    if (customerId === 8) {\r\n      return date.filter((val: any) => !CUCS_TO_IGNORE.includes(Math.round(val.cucId)));\r\n    }\r\n    return date;\r\n  }\r\n\r\n\r\n}\r\n","import { AfterContentInit, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { SiteSettingsService } from '../services/site-settings.service';\r\n\r\nexport interface OptionValue {\r\n  key: string;\r\n  value: string;\r\n  disabled: boolean;\r\n}\r\n\r\n@Component({\r\n  selector: 'app-lazy-loading-select',\r\n  templateUrl: './lazy-loading-select.component.html',\r\n  styleUrls: ['./lazy-loading-select.component.scss']\r\n})\r\nexport class LazyLoadingSelectComponent implements AfterContentInit {\r\n  optionsPending!: boolean;\r\n  options!: any;\r\n\r\n  @Input()\r\n  public siteId!: number\r\n  @Input()\r\n  public form!: FormGroup;\r\n  @Input()\r\n  public standalone = true;\r\n  @Input()\r\n  public placeholder!: string;\r\n  @Input()\r\n  public controlName!: string;\r\n  @Input()\r\n  public optionsToken!: string;\r\n  @Input()\r\n  public appearance = 'standard';\r\n  @Input()\r\n  public errorCode!: string;\r\n  @Input()\r\n  public errorText!: string;\r\n  @Input()\r\n  public default!: OptionValue;\r\n  @Input()\r\n  public id!: string;\r\n  @Output()\r\n  public changeField = new EventEmitter<string>();\r\n\r\n  get formControl(): FormControl {\r\n    return this.form?.get(this.controlName) as FormControl;\r\n  }\r\n\r\n\r\n  constructor(\r\n    private notificationService: NotificationService,\r\n    private siteSettingsService: SiteSettingsService,\r\n  ) {\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    this.options = [this.form?.get(this.controlName)?.value];\r\n  }\r\n\r\n  getOptions() {\r\n    if (!this.siteId && this.options.length > 1) {\r\n      return;\r\n    }\r\n    this.optionsPending = true;\r\n    this.siteSettingsService.getSelectionOptions(this.siteId, this.optionsToken)\r\n      .subscribe(() => {\r\n        this.optionsPending = false;\r\n        // @ts-ignore\r\n        this.options = this.siteSettingsService[this.optionsToken];\r\n      }, () => {\r\n        this.optionsPending = false;\r\n        // this.notificationService.error(this.translate.instant('COMMON.LOAD_SELECT_OPTIONS_FAILED'));\r\n      });\r\n  }\r\n\r\n  public onFieldChange(token: string) {\r\n    this.changeField.emit(token);\r\n  }\r\n\r\n}\r\n","<ng-container *ngIf=\"standalone\">\r\n  <mat-form-field appearance=\"outline\">\r\n    <mat-select [formControl]=\"formControl\"\r\n                (openedChange)=\"getOptions()\"\r\n                [placeholder]=\"placeholder\"\r\n                (selectionChange)=\"onFieldChange(controlName)\"\r\n                [id]=\"id\">\r\n      <mat-option>\r\n        <div class=\"select-search-wrapper\">\r\n          <input\r\n            type=\"text\"\r\n            placeholder=\"Search\"\r\n            class=\"select-search-input\"\r\n            (click)=\"$event.stopPropagation()\"\r\n            (keydown)=\"$event.stopPropagation()\"\r\n          >\r\n          <span class=\"search-icon-inside\">\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 32 32\">\r\n              <path d=\"M13 2.25C7.063 2.25 2.25 7.063 2.25 13S7.063 23.75 13 23.75c2.699 0 5.165-.994 7.053-2.637l8.417 8.417a.75.75 0 1 0 1.06-1.06l-8.417-8.417A10.7 10.7 0 0 0 23.75 13c0-5.937-4.813-10.75-10.75-10.75M3.75 13a9.25 9.25 0 1 1 18.5 0 9.25 9.25 0 0 1-18.5 0\" fill=\"#000\"/>\r\n            </svg>\r\n          </span>\r\n        </div>\r\n      </mat-option>\r\n      <mat-option *ngIf=\"default\" [disabled]=\"default.disabled\" [value]=\"default.key\">{{default.value}}</mat-option>\r\n      <mat-option *ngFor=\"let type of options\" [value]=\"type\">\r\n        {{type}}\r\n      </mat-option>\r\n      <mat-progress-spinner class=\"field-spinner\"\r\n                            [diameter]=\"70\"\r\n                            strokeWidth=\"3\"\r\n                            mode=\"indeterminate\"\r\n                            *ngIf=\"optionsPending\"></mat-progress-spinner>\r\n    </mat-select>\r\n    <mat-error *ngIf=\"form.get(controlName)?.hasError(errorCode)\">\r\n      <i class=\"fa fa-exclamation-triangle\"></i>\r\n      {{errorText}}\r\n    </mat-error>\r\n  </mat-form-field>\r\n</ng-container>\r\n\r\n<!--\r\nThis duplication is caused by the following bug: https://github.com/angular/components/issues/9411\r\nWhich doesn't allow projection in mat-form-field\r\n-->\r\n\r\n<ng-container *ngIf=\"!standalone\">\r\n  <mat-select *ngIf=\"form.get(controlName)\"\r\n              [formControl]=\"formControl\"\r\n              (openedChange)=\"getOptions()\"\r\n              [placeholder]=\"placeholder\"\r\n              (selectionChange)=\"onFieldChange(controlName)\"\r\n              [id]=\"id\"\r\n  >\r\n    <mat-option *ngIf=\"default\" [disabled]=\"default.disabled\" [value]=\"default.key\">{{default.value}}</mat-option>\r\n    <mat-option *ngFor=\"let type of options\" [value]=\"type\">\r\n      {{type}}\r\n    </mat-option>\r\n    <mat-progress-spinner class=\"field-spinner\"\r\n                          [diameter]=\"20\"\r\n                          mode=\"indeterminate\"\r\n                          *ngIf=\"optionsPending\"></mat-progress-spinner>\r\n  </mat-select>\r\n  <mat-error *ngIf=\"form.get(controlName)?.hasError(errorCode)\">\r\n    <i class=\"fa fa-exclamation-triangle\"></i>\r\n    {{errorText}}\r\n  </mat-error>\r\n</ng-container>\r\n","import { SiteShortDataInterface } from './device';\r\n\r\nexport interface LineInterface {\r\n  description: string;\r\n  pkid: string;\r\n  entityChangeType: EntityChangeType;\r\n  alertingName: string;\r\n  asciiAlertingName: string;\r\n  callingSearchSpace: string;\r\n  voiceMailProfile: string;\r\n  noAnswerRingDuration: number;\r\n  autoAnswer: string;\r\n  directoryNumber: LineDirectoryInterface;\r\n  didPatterns: Array<TranslationPatternInterface>;\r\n  mappedDids: Array<string>;\r\n  aarSettings: LineAarInterface;\r\n  callForwardAll: CallInterface;\r\n  callForwardAllSecondaryCSS: CallInterface;\r\n  callForwardBusyInternal: CallInterface;\r\n  callForwardBusyExternal: CallInterface;\r\n  callForwardNoAnswerInternal: CallInterface;\r\n  callForwardNoAnswerExternal: CallInterface;\r\n  callForwardNoCoverageInternal: CallInterface;\r\n  callForwardNoCoverageExternal: CallInterface;\r\n  callForwardOnCTIFailure: CallInterface;\r\n  callForwardUnregisteredInternal: CallInterface;\r\n  callForwardUnregisteredExternal: CallInterface;\r\n  parkMonitoringExternal: LineParkMonitoringInterface;\r\n  parkMonitoringInternal: LineParkMonitoringInterface;\r\n  callPickupGroup: string;\r\n  localId: string;\r\n  urgentPriority: boolean;\r\n  blfPresenceGroup: string;\r\n  userHoldMOHAudioSourceId: string;\r\n  userHoldMOHAudioSourceName: string;\r\n  networkMOHAudioSourceId: string;\r\n  networkMOHAudioSourceName: string;\r\n  rejectAnonymousCall: boolean;\r\n  enterpriseAltNum: AlternateNumberInterface;\r\n  e164AltNum: AlternateNumberInterface;\r\n  directoryUris: Array<DirectoryUriInterface>;\r\n  callForwardAlternateParty: ParkMonitoringInterface;\r\n  mlppNoAnswerRingDuration: number;\r\n  confidentialAccessMode: string;\r\n  confidentialAccessLevel: string;\r\n  confidentialAccessLevelName: string;\r\n  callControlAgentProfile: string;\r\n  holdReversionRingDuration: number;\r\n  holdReversionNotificationInterval: number;\r\n  partyEntranceTone: string;\r\n  pstnFailover: string;\r\n  isExistingLine?: boolean;\r\n  plarDestinationNumber: string;\r\n  prefixDigits: string;\r\n  plarDescription: string;\r\n  plarEnabled: boolean;\r\n}\r\n\r\nexport enum EntityChangeType {\r\n  added = 'added',\r\n  updated = 'updated',\r\n  existing = 'existing',\r\n  removed = 'removed',\r\n  unassociated = 'unassociated'\r\n}\r\nexport interface LineDirectoryInterface {\r\n  directoryNumber: string;\r\n  routePartitionName: string;\r\n  pkid: string;\r\n  dnType: string;\r\n  subType?: string;\r\n  templateDirectoryNumber?: string;\r\n}\r\nexport interface TranslationPatternInterface {\r\n  pattern: string;\r\n  calledPartyTransformationMask: string;\r\n  description?: string;\r\n  site?: SiteShortDataInterface;\r\n  hasMultipleSites?: boolean;\r\n  multipleSitesId?: string;\r\n}\r\nexport interface LineAarInterface {\r\n  aarDestinationMask: string;\r\n  aarGroup: string;\r\n  aarVoiceMailEnabled: boolean;\r\n  aarKeepCallHistory: boolean;\r\n}\r\nexport interface CallInterface {\r\n  forwardToVoiceMail: boolean;\r\n  destination: string;\r\n  callingSearchSpace: string;\r\n}\r\nexport interface LineParkMonitoringInterface {\r\n  voiceMail: boolean;\r\n  destination: string;\r\n  callingSearchSpace: string;\r\n}\r\nexport interface AlternateNumberInterface {\r\n  numberMask: string;\r\n  addLocalRoutePartition: boolean;\r\n  routePartition: string;\r\n  isUrgent: boolean;\r\n  advertiseGloballyIls: boolean;\r\n}\r\nexport interface DirectoryUriInterface {\r\n  primary: boolean;\r\n  uri: string;\r\n  routePartition: string;\r\n  advertiseGloballyIls: boolean;\r\n}\r\nexport interface ParkMonitoringInterface {\r\n  destination: string;\r\n  callingSearchSpace: string;\r\n  voiceMail: boolean;\r\n}\r\nexport interface AvailablePhoneNumberRangeInterface {\r\n  phoneNumberRange: DnRangeInterface;\r\n  usedNumbers: string[];\r\n  requestedNumber: string;\r\n  unUsedNumbersWithDids: any;\r\n}\r\nexport interface DnRangeInterface {\r\n  from: string;\r\n  to: string;\r\n  prefix: string;\r\n  routePartition: string;\r\n  dnType: DnRangeType;\r\n  tempIdx: number;\r\n\r\n  getEditableData(): any;\r\n\r\n  getUsedRangeEditableData(): any;\r\n}\r\nexport enum DnRangeType {\r\n  extension = 'EXTENSION',\r\n  cpg = 'CPG',\r\n  callpark = 'CALLPARK',\r\n  huntgroup = 'HUNTGROUP',\r\n  meetme = 'MEETME',\r\n  did = 'DID'\r\n}\r\nexport interface AvailableRangeInterface {\r\n  availableNumberList: AvailablePhoneNumberRangeInterface[];\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { API } from '../app.constants';\r\nimport { APIService } from './api.service';\r\nimport { map } from 'rxjs/operators';\r\nimport { AvailablePhoneNumberRangeInterface, DnRangeType } from './../classes/line';\r\nimport Big from 'big.js';\r\nimport { Observable } from 'rxjs';\r\n\r\nexport const DELIMITER = ', ';\r\n\r\n@Injectable()\r\nexport class DnsService {\r\n  availableNumbers = {};\r\n  availableDidPatternsMappedToDn!: any;\r\n\r\n  constructor(\r\n    private apiService: APIService\r\n  ) {\r\n\r\n  }\r\n  public getNumberRange(siteId: string, routePartition: string, withdids?: boolean, from?: string, pageSize?: number): any {\r\n    // @ts-ignore\r\n    if (this.availableNumbers[routePartition]?.length) {\r\n      return new Observable<any>(observer => {\r\n        // @ts-ignore\r\n        observer.next(this.availableNumbers[routePartition]);\r\n      });\r\n    }\r\n\r\n    this.availableDidPatternsMappedToDn = {};\r\n    pageSize = pageSize ? pageSize : 20;\r\n    const params = {dntype: DnRangeType.extension, routepartition: routePartition, size: pageSize, page: 0};\r\n    if (withdids) {\r\n      // @ts-ignore\r\n      params['withdids'] = 'true';\r\n    }\r\n    if (from) {\r\n      // @ts-ignore\r\n      params['from'] = from;\r\n    }\r\n    // @ts-ignore\r\n    this.availableNumbers[routePartition] = this.availableNumbers[routePartition] || [];\r\n\r\n    return this.apiService.fetch(API.AVAILABLE_DN_IN_RANGES.replace(':siteId', siteId), params)\r\n      .pipe(map((res: any) => {\r\n          res.availableNumberList.forEach((availableNumber: AvailablePhoneNumberRangeInterface) => {\r\n            this.setAvailableDidMappedToDn(availableNumber);\r\n            // @ts-ignore\r\n            this.availableNumbers[routePartition] = [...this.availableNumbers[routePartition], ...this.getUnwrapNumberRange(availableNumber)];\r\n          });\r\n        })\r\n      )\r\n      // .pipe(this.handleError(true, false));\r\n  }\r\n\r\n  public setAvailableDidMappedToDn(availableNumber: any): void {\r\n    if (availableNumber.unUsedNumbersWithDids && availableNumber.unUsedNumbersWithDids.length) {\r\n\r\n      availableNumber.unUsedNumbersWithDids.forEach((numberWithDids: any) => {\r\n        const dn = numberWithDids['unUsedNumber'];\r\n        this.availableDidPatternsMappedToDn[dn] = [{}];\r\n        if (numberWithDids['translationPatternList'] && numberWithDids['translationPatternList'].length > 0) {\r\n          this.availableDidPatternsMappedToDn[dn] = numberWithDids['translationPatternList'];\r\n          this.availableDidPatternsMappedToDn[dn][0]['mappedDids'] = [{}];\r\n          if (numberWithDids['mappedDids'] && numberWithDids['mappedDids'].length > 0) {\r\n            this.availableDidPatternsMappedToDn[dn][0]['mappedDids'] = numberWithDids['mappedDids'];\r\n          }\r\n        }\r\n        this.availableDidPatternsMappedToDn[dn][0]['vm'] = numberWithDids['vm'];\r\n      });\r\n    }\r\n  }\r\n\r\n  public getUnwrapNumberRange(availableNumber: any): string[] {\r\n    let unwrapNumberRange = this.unwrapNumberRange(availableNumber.phoneNumberRange.from, availableNumber.phoneNumberRange.to)\r\n      .map((unwrappedNumber: string) => {\r\n        const dn = availableNumber.phoneNumberRange.prefix + unwrappedNumber;\r\n        let str = dn;\r\n        if (this.availableDidPatternsMappedToDn[dn] && this.availableDidPatternsMappedToDn[dn].length > 0) {\r\n          if (this.availableDidPatternsMappedToDn[dn][0]['mappedDids'] && this.availableDidPatternsMappedToDn[dn][0]['mappedDids'].length > 0) {\r\n            console.log('Hello');\r\n            str += '        DID:  ' + (this.availableDidPatternsMappedToDn[dn][0]['mappedDids'].length > 1 ? 'multiple' :\r\n              this.availableDidPatternsMappedToDn[dn][0]['mappedDids'][0]);\r\n          }\r\n          if (this.availableDidPatternsMappedToDn[dn][0]['vm']) {\r\n            str += '        In Use - VM';\r\n          }\r\n        }\r\n        return str;\r\n      });\r\n    unwrapNumberRange = unwrapNumberRange.filter((unwrappedNumber: string) => !availableNumber.usedNumbers.includes(unwrappedNumber));\r\n    return unwrapNumberRange;\r\n  }\r\n\r\n  public unwrapNumberRange(start: string, end: string): string[] {\r\n    const regExp = /(^0+)/;\r\n    let leadingZeros = '';\r\n    const matches = start.match(regExp);\r\n    if (matches) {\r\n      leadingZeros = matches[1];\r\n    }\r\n    const startNumeric = new Big(start);\r\n    const endNumeric = new Big(end);\r\n    // @ts-ignore\r\n    return Array.from({length: (endNumeric.minus(startNumeric).plus(new Big(1)).toFixed(0))}, (v, k) => {\r\n      const number = String(startNumeric.plus(new Big(k)).toFixed(0));\r\n      if ((leadingZeros + number).length > start.length) {\r\n        leadingZeros = leadingZeros.substr(1);\r\n      }\r\n      return leadingZeros + number;\r\n    });\r\n  }\r\n\r\n  public getDnValue(dnWithDid: string): string {\r\n    const ind = dnWithDid.indexOf('DID');\r\n    let dn = dnWithDid;\r\n    if (ind > -1) {\r\n      dn = dnWithDid.slice(0, ind);\r\n      dn = dn.trim();\r\n    }\r\n    if (dn.charAt(0) === '\\\\') {\r\n      dn = dn.slice(1);\r\n    }\r\n    return this.getDnValueTrimInUseVM(dn);\r\n  }\r\n\r\n  public getDnValueTrimInUseVM(dnWithDid: string): string {\r\n    const ind = dnWithDid.indexOf('In Use');\r\n    let dn = dnWithDid;\r\n    if (ind > -1) {\r\n      dn = dnWithDid.slice(0, ind);\r\n      dn = dn.trim();\r\n    }\r\n    return dn;\r\n  }\r\n\r\n  public getMappedDids (dnWithDid: string, index: string): string {\r\n    const dn = this.getDnValue(dnWithDid);\r\n    if (this.availableDidPatternsMappedToDn && this.availableDidPatternsMappedToDn && this.availableDidPatternsMappedToDn[dn] &&\r\n      this.availableDidPatternsMappedToDn[dn][0] && this.availableDidPatternsMappedToDn[dn][0]['mappedDids'] &&\r\n      this.availableDidPatternsMappedToDn[dn][0]['mappedDids'].length) {\r\n      return this.availableDidPatternsMappedToDn[dn][0]['mappedDids'].join(DELIMITER);\r\n    }\r\n    return '';\r\n  }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Device } from '../classes/device';\r\n\r\n@Component({\r\n  selector: 'app-device-list',\r\n  templateUrl: './device-list.component.html',\r\n  styleUrls: ['./device-list.component.scss']\r\n})\r\nexport class DeviceListComponent {\r\n  @Input() devices!: any;\r\n  @Output()\r\n  onDeviceSelect = new EventEmitter<Device>();\r\n\r\n  constructor() {\r\n    console.log('devices list');\r\n\r\n  }\r\n\r\n\r\n  selectDevice(device: Device): void {\r\n    this.onDeviceSelect.emit(device);\r\n  }\r\n\r\n\r\n}\r\n","<div class=\"webex-list device-list-container\">\r\n  <div class=\"webex-list-header\">\r\n    <div class=\"webex-list-header__hr\">Name</div>\r\n    <div class=\"webex-list-header__hr\">Type</div>\r\n    <div class=\"webex-list-header__hr\">Line</div>\r\n    <div class=\"webex-list-header__hr\">Device description</div>\r\n    <div class=\"webex-list-header__hr\">Plar service</div>\r\n  </div>\r\n  <ng-container *ngFor=\"let device of devices\">\r\n    <div class=\"device-item\" (click)=\"selectDevice(device)\">\r\n      <div class=\"device-item__td\">{{ device.name }}</div>\r\n      <div class=\"device-item__td\">{{ device.deviceType }}</div>\r\n      <div class=\"device-item__td\" *ngIf=\"device.lineAssociations?.length\">\r\n        <span class=\"device-associated-line\" *ngFor=\"let line of device.lineAssociations\">{{line.directoryNumber?.directoryNumber}} | </span>\r\n      </div>\r\n      <div class=\"device-item__td\">{{ device.description }}</div>\r\n      <div class=\"device-item__td\">\r\n        <mat-slide-toggle class=\"custom-toggle device-slide-toggle\" [disabled]=\"true\" [checked]=\"device.plarService\"></mat-slide-toggle>\r\n      </div>\r\n      <div class=\"device-item__actions-menu\" style=\"text-align: right;\">\r\n        <div class=\"device-item__more\">\r\n<!--          <mat-icon>more_vert</mat-icon>-->\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </ng-container>\r\n</div>\r\n","export enum SpeedDialType {\r\n  slotBasic = 'slotBasic',\r\n  abbreviated = 'abbreviated',\r\n}\r\nexport enum MailboxQuotasType {\r\n  system = 'system',\r\n  custom = 'custom'\r\n}\r\nexport enum VMNotificationsTypes {\r\n  'Pager Device' = 'Pager Device',\r\n  'Phone Device' = 'Phone Device',\r\n  'SMTP Device' = 'SMTP Device',\r\n  'HTML Device' = 'HTML Device',\r\n}\r\nexport enum DeviceTypes {\r\n  CTI_ROUTE_POINT = 'CTI Route Point',\r\n  CTI_PORT = 'CTI Port',\r\n  CTI_REMOTE = 'CTI Remote Device'\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SiteSettingsService } from './site-settings.service';\r\nimport { DeviceTypes, MailboxQuotasType, SpeedDialType, VMNotificationsTypes } from './../classes/types';\r\nimport { Device, DeviceKind } from './../classes/device';\r\n\r\nconst speedDialRegex = new RegExp('^[^\"]*$');\r\nconst BLFRegex = new RegExp('^[^\"><&%]*$');\r\nconst timeRegex = new RegExp('^([0-1][0-9]|[2][0-3]):([0-5][0-9])$');\r\n\r\n@Injectable()\r\nexport class ValidationService {\r\n\r\n  constructor(\r\n    private siteSettingsService: SiteSettingsService,\r\n  ) {\r\n  }\r\n\r\n  e164MaskLabel(control: any) {\r\n    const ruleText = `^[0-9*#+X]{0,24}$`;\r\n    const rule = new RegExp(ruleText, 'g');\r\n    if (control.value && rule && !rule.test(control.value)) {\r\n      return {e164MaskRule: {rule: ruleText}};\r\n    }\r\n    return null;\r\n  }\r\n\r\n  index(control: any) {\r\n    const value = parseInt(control.value);\r\n    if (!value) {\r\n      return null;\r\n    }\r\n    const pattern = '^[+0-9]*$';\r\n    if (value && !Number.isInteger(value) || value < 1 || value > 199) {\r\n      return {indexRule: true};\r\n    }\r\n    return null;\r\n  }\r\n\r\n  displayLabel(control: any) {\r\n    const ruleText = `^[^\"\"\"\"%&<>]{0,30}$`;\r\n    const rule = new RegExp(ruleText, 'g');\r\n    if (rule && !rule.test(control.value)) {\r\n      return {labelRule: {rule: ruleText, count: 30}};\r\n    }\r\n    return null;\r\n  }\r\n\r\n\r\n\r\n  displayLabelAscii(control: any) {\r\n    const ruleText = '^[a-zA-Z0-9 !#$\\'()*+,./:;=?@\\\\^_`}~-]{0,30}$';\r\n    const rule = new RegExp(ruleText, 'g');\r\n    if (rule && !rule.test(control.value)) {\r\n      return {labelRule: {rule: ruleText, count: 30}};\r\n    }\r\n    return null;\r\n  }\r\n\r\n  requiredForSpeedDialPosition(type: string) {\r\n\r\n    return (control: any) => {\r\n      const parent = control.parent;\r\n      if (type === SpeedDialType.slotBasic || !parent) {\r\n        return null;\r\n      }\r\n      if (!control.value) {\r\n        return {required: true};\r\n      }\r\n      return null;\r\n    };\r\n  }\r\n\r\n  speedDialDestination() {\r\n    return (control: any) => {\r\n      if (!control || !control.value) {\r\n        return null;\r\n      }\r\n      const numberOrHostNameIP = '' +\r\n        '^([0-9\\\\*#+PpCcFf,]+)$' +\r\n        '|' +\r\n        '^(' +\r\n        '([a-zA-Z0-9]){1,47}@' +\r\n        '(' +\r\n        '((?:[0-9]{1,3}\\\\.){3}[0-9]{1,3})' +\r\n        '|' +\r\n        '([a-zA-Z0-9][a-zA-Z0-9\\\\-]{1,61}[a-zA-Z0-9]\\\\.[a-zA-Z]{2,})' +\r\n        ')' +\r\n        ')$';\r\n      const rule = new RegExp(numberOrHostNameIP, 'g');\r\n      if (rule && !rule.test(control.value)) {\r\n        return {pattern: true};\r\n      }\r\n      return null;\r\n    };\r\n\r\n  }\r\n\r\n  requiredForSpeedDialDestination(type: string) {\r\n\r\n    return (control: any) => {\r\n      const parent = control.parent;\r\n      if ((!parent || !parent.get('label')) || (type === SpeedDialType.slotBasic && !control.value && !parent.get('label').value)) {\r\n        return null;\r\n      }\r\n      return null;\r\n    };\r\n  }\r\n\r\n\r\n  labelPatternDependingOnType(control: any) {\r\n    const parent = control?.parent;\r\n    if (!parent || !parent.get('type') || !control.value) {\r\n      return null;\r\n    }\r\n    const type = parent.get('type').value;\r\n    if (!type && !speedDialRegex.test(control.value)) {\r\n      return {labelRule: {wrong: '\"'}};\r\n    }\r\n    if (type && !BLFRegex.test(control.value)) {\r\n      return {labelRule: {wrong: '\"><&%'}};\r\n    }\r\n    return null;\r\n  }\r\n\r\n  labelPatternBLF(control: any) {\r\n    if (control.value && !BLFRegex.test(control.value)) {\r\n      return {labelRule: {wrong: '\"><&%'}};\r\n    }\r\n    return null;\r\n  }\r\n\r\n  labelPatternSpeedDial(control: any) {\r\n    if (control?.value && !speedDialRegex.test(control.value)) {\r\n      return {labelRule: {wrong: '\"'}};\r\n    }\r\n    return null;\r\n  }\r\n\r\n  matchControl = (fieldName: string) => {\r\n    return (control: any) => {\r\n      if (!control?.parent) {\r\n        return null;\r\n      }\r\n      const matchingControl = control.parent.get(fieldName);\r\n      if (matchingControl.value && matchingControl.value !== control.value) {\r\n        return {\r\n          matchControl: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  matchLength = (fieldName: string) => {\r\n    return (control: any) => {\r\n      if (!control.parent || !control.value) {\r\n        return null;\r\n      }\r\n      const matchingControl = control.parent.get(fieldName);\r\n      if (((!control.value.startsWith('+') && !matchingControl.value.startsWith('+')) ||\r\n        (control.value.startsWith('+') && matchingControl.value.startsWith('+'))) &&\r\n        ((!control.value.startsWith('\\\\+') && !matchingControl.value.startsWith('\\\\+')) ||\r\n          (control.value.startsWith('\\\\+') && matchingControl.value.startsWith('\\\\+'))) &&\r\n        matchingControl.value.length !== control.value.length) {\r\n        return {\r\n          matchLength: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  dynamicMaxLength = (length1: number, length2: number) => {\r\n    return (control: any) => {\r\n      if (!control.parent || !control.value) {\r\n        return null;\r\n      }\r\n      const maxLength = String(control.value).includes('[') ? length1 : length2;\r\n      if (control.value.length > maxLength) {\r\n        return {\r\n          maxLength: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  biggerThan = (fieldName: string) => {\r\n    return (control: any) => {\r\n      if (!control.parent || !control.value) {\r\n        return null;\r\n      }\r\n      const matchingControl = control.parent.get(fieldName);\r\n      if (matchingControl.value.length === control.value.length && matchingControl.value && matchingControl.value > control.value) {\r\n        return {\r\n          biggerThan: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  requiredByType = (fieldName: string, type: string) => {\r\n    return (control: any) => {\r\n      if (\r\n        fieldName === 'phoneSystem' && (type === VMNotificationsTypes['Phone Device'] || type === VMNotificationsTypes['Pager Device']) ||\r\n        fieldName === 'htmlTemplate' && type === VMNotificationsTypes['HTML Device']\r\n      ) {\r\n        return {\r\n          required: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  smallerThanQuota = (fieldName: string, quotaType: string, secondQuotaType: string) => {\r\n    return (control: any) => {\r\n      if (!control.parent) {\r\n        return null;\r\n      }\r\n      const matchingControl = control.parent.get(fieldName);\r\n      const quotaTypeControl = control.parent.get(quotaType);\r\n      const secondQuotaTypeControl = control.parent.get(secondQuotaType);\r\n\r\n      if (quotaTypeControl && secondQuotaTypeControl && secondQuotaTypeControl.value === MailboxQuotasType.system) {\r\n        return null;\r\n      }\r\n\r\n      if (quotaTypeControl && quotaTypeControl.value === MailboxQuotasType.system || matchingControl && matchingControl.value && parseInt(matchingControl.value) < parseInt(control.value)) {\r\n        return {\r\n          smallerThan: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  biggerThanQuota = (fieldName: string, quotaType: string) => {\r\n    return (control: any) => {\r\n      if (!control?.parent) {\r\n        return null;\r\n      }\r\n      const matchingControl = control.parent.get(fieldName);\r\n      const quotaTypeControl = control.parent.get(quotaType);\r\n\r\n      if (quotaTypeControl && quotaTypeControl.value === MailboxQuotasType.custom && matchingControl.value && parseInt(matchingControl.value) > parseInt(control.value)) {\r\n        return {\r\n          biggerThan: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  rangeLimit = (fieldName: string) => {\r\n    return (control: any) => {\r\n      if (!control?.parent || !control.value) {\r\n        return null;\r\n      }\r\n      const matchingControl = control.parent.get(fieldName);\r\n      if ((control.value - matchingControl.value) > 50000) {\r\n        return {\r\n          rangeLimit: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  comparepatternParts = (fieldName: string) => {\r\n    return (control: any) => {\r\n      if (!control?.value) {\r\n        return null;\r\n      }\r\n      const matches = control.value.match(/\\[(.*?)\\]/);\r\n      if (matches) {\r\n        const submatch = matches[1];\r\n        const submatchsplit: number[] = submatch.split('-');\r\n        for (let i = 0; i < submatchsplit.length; i++) {\r\n          if (submatchsplit[i] >= submatchsplit[i + 1]) {\r\n            return {\r\n              comparepatternParts: true\r\n            };\r\n          }\r\n        }\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  matchPrefix = (fieldName: string) => {\r\n    return (control: any) => {\r\n      if (!control?.parent || !control.value) {\r\n        return null;\r\n      }\r\n      const matchingControl = control.parent.get(fieldName);\r\n      if ((matchingControl.value.startsWith('+') || control.value.startsWith('+') || matchingControl.value.startsWith('\\\\+') || control.value.startsWith('\\\\+')) && (control.value.charAt(0) !== matchingControl.value.charAt(0))) {\r\n        return {\r\n          matchPrefix: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  deviceNameValidator = (device: Device) => {\r\n    return (control: any) => {\r\n      if (!control.value || device.deviceKind === DeviceKind.deviceProfile) {\r\n        return;\r\n      }\r\n      if (device.isCtiRoutePoint) {\r\n        let err = '';\r\n        if (!control.value.match(/^[a-zA-Z0-9-_.]+$/)) {\r\n          err = 'pattern';\r\n        }\r\n        if (control.value.trim().length > 15) {\r\n          err = 'maxLength';\r\n        }\r\n        return err ? {nameRule: err} : null;\r\n      }\r\n      if (device.deviceDefaults && !device.isCtiRoutePoint) {\r\n        const ruleText = device.deviceDefaults.deviceNameRegex;\r\n        const rule = new RegExp(ruleText, 'g');\r\n        const caption = device.deviceDefaults?.deviceNameExplained;\r\n        const match = (control.value || '').match(rule) || [];\r\n        const exactMatch = match && control.value === match[0];\r\n        if (rule && !exactMatch) {\r\n          return {nameRule: {caption}};\r\n        }\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  deviceNameValueValidator = (device: Device, deviceName: string) => {\r\n    return (control: any) => {\r\n      if (!control.value || device.deviceKind === DeviceKind.deviceProfile) {\r\n        return;\r\n      }\r\n      if (device.name && device.alreadyUsedName && device.name === device.alreadyUsedName) {\r\n        return {nameRule: 'alreadyUsedName'};\r\n      }\r\n      if (device.isCtiRoutePoint) {\r\n        let err = '';\r\n        if (!deviceName.match(/^[a-zA-Z0-9-_.]+$/)) {\r\n          err = 'pattern';\r\n        }\r\n        if (deviceName.trim().length > 15) {\r\n          err = 'maxLength';\r\n        }\r\n        return err ? {nameRule: err} : null;\r\n      }\r\n     if (device.deviceDefaults && !device.isCtiRoutePoint) {\r\n       const ruleText = device.deviceDefaults.deviceNameRegex;\r\n        // console.log('Dev name rule - ', ruleText);\r\n        const rule = new RegExp(ruleText, 'g');\r\n        let caption = device.deviceDefaults.deviceNameExplained;\r\n        if (!caption) {\r\n          caption = ruleText;\r\n        }\r\n        const match = (deviceName || '').match(rule) || [];\r\n        const exactMatch = match && deviceName === match[0];\r\n        if (rule && !exactMatch) {\r\n          return {nameRule: {caption}};\r\n        }\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  deviceDuplicatingNameValidator = (user: any, pkid ?: string, prefix?: string) => {\r\n    return (control: any) => {\r\n      if (!control.value || !user || !user.devices || user.devices.length === 0) {\r\n        return;\r\n      }\r\n      const deviceName = prefix ? `${prefix}${control.value}` : control.value;\r\n      const devicesWithTheSameName = user.devices.filter((device: Device) => device.name === deviceName);\r\n      if (devicesWithTheSameName.length > 0) {\r\n        if (!pkid) {  // For new device\r\n          return {duplicateNameRule: true};\r\n        } else if (pkid !== devicesWithTheSameName[0].pkid) { // For updating device, avoid validating with itself\r\n          return {duplicateNameRule: true};\r\n        }\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  conditionalRequired = (fieldName: string, requiredConditionValues: any[]) => {\r\n    return (control: any) => {\r\n      const parent1 = control.parent;\r\n      if (!parent1 || !parent1.get(fieldName) || !parent1.get(fieldName).value) {\r\n        return;\r\n      }\r\n      if (requiredConditionValues.includes(parent1.get(fieldName).value) && !control.value) {\r\n        return {\r\n          required: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  conditionalRequiredForGroupAdmin = (fieldName: string, requiredConditionValues: any[]) => {\r\n    return (control: any) => {\r\n      const parent1 = control.parent;\r\n      if (!parent1 || !parent1.get(fieldName) || !parent1.get(fieldName).value || !parent1.get(fieldName).value.type) {\r\n        return;\r\n      }\r\n      if (requiredConditionValues.includes(parent1.get(fieldName).value.type) && !control.value) {\r\n        return {\r\n          required: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  conditionalSiteGroupCheckForGroupAdmin = (fieldName: string, requiredConditionValues: any[]) => {\r\n    return (control: any) => {\r\n      const parent1 = control.parent;\r\n      if (!parent1 || !parent1.get(fieldName) || !parent1.get(fieldName).value || !parent1.get(fieldName).value.type) {\r\n        return;\r\n      }\r\n      if (parent1.get(fieldName).value && requiredConditionValues.includes(parent1.get(fieldName).value.type) &&\r\n        parent1.get('siteGroup') && parent1.get('siteGroup').value &&\r\n        parent1.get('siteGroup').value.siteGroupMembers && parent1.get('siteGroup').value.siteGroupMembers.length < 1) {\r\n        return {\r\n          hasSiteGroupError: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  requiredIfFieldIsEmptyForBLF = (fieldName: any) => {\r\n    const DATE_PATTERN = '^(0[1-9]|1[012])[- \\/.](0[1-9]|[12][0-9]|3[01])[- \\/.](19|20)\\d\\d$';\r\n    return (control: any) => {\r\n      const parent = control.parent;\r\n      if (!parent || !parent.get(fieldName)) {\r\n        return null;\r\n      }\r\n      if (!parent.get(fieldName).value && !control.value) {\r\n        return {\r\n          requiredEither: true,\r\n          requiredBLFDN: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n\r\n  validDate = (fieldName: string) => {\r\n\r\n    return (control: any) => {\r\n      const parent = control.parent;\r\n      const ruleText = '^(0[1-9]|1[012])[- \\/.](0[1-9]|[12][0-9]|3[01])[- \\/.](19|20)\\d\\d$';\r\n      const rule = new RegExp(ruleText, 'g');\r\n      const val = control.value && control.value.getDate();\r\n      if (rule && !rule.test(val)) {\r\n        return {pattern: true};\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n\r\n  matchOption = (optionType: string, list?: any, isFullList?: boolean) => {\r\n    return (control: any) => {\r\n      if (!control.value || control.value === DeviceTypes.CTI_ROUTE_POINT) {\r\n        return null;\r\n      }\r\n      let optionList = list || this.getOptionsList(optionType);\r\n      if (optionList && optionList.length) {\r\n        if (!isFullList && optionType === 'directoryNumbers') {\r\n          optionList = optionList.map((str: string) => str.indexOf(' ') > -1 ? str.substring(0, str.indexOf(' ')) : str);\r\n        }\r\n        if (!optionList.includes(control.value)) {\r\n          return {\r\n            matchOptions: true\r\n          };\r\n        }\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  confidentialAccessLevel = (confidentialAccessMode: string) => {\r\n    return (control: any) => {\r\n      if (!control.value && !confidentialAccessMode) {\r\n        return null;\r\n      }\r\n      if (!control.value) {\r\n        return {\r\n          required: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  noResultDN = (optionType: string, list?: any) => {\r\n    return (control: any) => {\r\n      if (!control.value || list === null) {\r\n        return null;\r\n      }\r\n      if (list && list.length === 0) {\r\n        return {\r\n          noResultDNs: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  matchExtensionOption = (optionType: string, optionList?: any) => {\r\n    return (control: any) => {\r\n      if (!control.value) {\r\n        return control.value;\r\n      }\r\n      // @ts-ignore\r\n      const newList = [];\r\n      if (optionList && optionList.length) {\r\n        optionList.forEach((list: any) => {\r\n          const newOptionList = this.getMatchExistingVmLineValue(list);\r\n          newList.push(newOptionList);\r\n        });\r\n        // @ts-ignore\r\n        if (newList && !newList.includes(control.value)) {\r\n          return {\r\n            matchOptions: true\r\n          };\r\n        }\r\n      } else if (!optionList || !optionList.length) {\r\n        return {\r\n          matchOptions: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  public getMatchExistingVmLineValue(dnWithType: string): string {\r\n    const ind = dnWithType.indexOf('Type:');\r\n    let dn = dnWithType;\r\n    if (ind > -1) {\r\n      dn = dnWithType.slice(0, ind);\r\n      dn = dn.trim();\r\n    }\r\n    return dn;\r\n  }\r\n\r\n  requiredEitherForVmExtension = (fieldName1: string, fieldName2: string) => {\r\n    return (control: any) => {\r\n      if (!control.parent) {\r\n        return null;\r\n      }\r\n      const matchControl1 = control.parent.get(fieldName1).value;\r\n      const matchControl2 = control.parent.get(fieldName2).value;\r\n      if (!matchControl1 && !matchControl2) {\r\n        return {\r\n          requiredEitherForVmExtension: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  requiredEitherOne = (fieldName1: string, fieldName2: string) => {\r\n    return (control: any) => {\r\n      if (!control.parent) {\r\n        return null;\r\n      }\r\n      const matchControl1 = control.parent.get(fieldName1) && control.parent.get(fieldName1).value;\r\n      const matchControl2 = control.parent.get(fieldName2) && control.parent.get(fieldName2).value;\r\n      if (!matchControl1 && !matchControl2) {\r\n        return {\r\n          requiredEitherOne: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  requiredByValue = (fieldName: string, requestedFieldVal: any) => {\r\n    return (control: any) => {\r\n      if (!control || !control.parent) {\r\n        return null;\r\n      }\r\n      const fieldVal = control.parent.get(fieldName) && control.parent.get(fieldName).value;\r\n      if (fieldVal && fieldVal === requestedFieldVal && !control.value) {\r\n        return {\r\n          required: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  OneExtensionEmpty = (fieldName1: string, fieldName2: string) => {\r\n    return (control: any) => {\r\n      if (!control.parent) {\r\n        return null;\r\n      }\r\n      const matchControl1 = control.parent.get(fieldName1).value;\r\n      const matchControl2 = control.parent.get(fieldName2).value;\r\n      if (matchControl1 && matchControl2) {\r\n        return {\r\n          OneExtensionIsEmpty: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  requiredByCondition = (requiredBy: string, fieldName: any) => {\r\n    return (control: any) => {\r\n      if (!control.parent) {\r\n        return null;\r\n      }\r\n      const requiredByControl = control.parent.get(requiredBy).value;\r\n      const requiredControl = control.parent.get(fieldName).value;\r\n      if (requiredByControl && !requiredControl) {\r\n        return {\r\n          required: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  private getOptionsList(token: string): string[] {\r\n    switch (token) {\r\n      case 'css':\r\n      case 'rerouteCss':\r\n      case 'callingSearchSpace':\r\n        return this.siteSettingsService.callingSearchSpaceTypes;\r\n      case 'reroutingCss':\r\n        return this.siteSettingsService.siteDefaults && this.siteSettingsService.siteDefaults.cssFilter;\r\n      case 'deviceType':\r\n        return this.siteSettingsService.deviceTypes;\r\n      case 'routePartition':\r\n        return this.siteSettingsService.routePartitionNames;\r\n      case 'routePartitionFiltered':\r\n        return this.siteSettingsService.filteredRoutePartitionNames;\r\n      case 'devicePools':\r\n        return this.siteSettingsService.devicePools;\r\n      case 'allRoutePartitions':\r\n        return this.siteSettingsService.allRoutePartitionNames;\r\n      case 'directoryNumbers':\r\n        return this.siteSettingsService.directoryNumbers;\r\n      default:\r\n        return [];\r\n    }\r\n  }\r\n\r\n  autocompleteType(control: any) {\r\n    if (!control.value) {\r\n      return null;\r\n    }\r\n    if (typeof control.value !== 'object' && control.value !== '') {\r\n      return {\r\n        stringEntered: true\r\n      };\r\n    }\r\n    return null;\r\n  }\r\n\r\n\r\n  password(control: any) {\r\n    const ruleNumeric = new RegExp(/\\d+/, 'g');\r\n    const ruleCapitals = new RegExp(/[A-Z]+/, 'g');\r\n    const ruleSmall = new RegExp(/[a-z]+/, 'g');\r\n    const ruleSpecial = new RegExp(/[!@#$%&\\/=\\?_\\.,:;\\-\\\\+]+/, 'g');\r\n\r\n    const hasNumeric = +ruleNumeric.test(control.value);\r\n    const hasCapitals = +ruleCapitals.test(control.value);\r\n    const hasSmall = +ruleSmall.test(control.value);\r\n    const hasSpecial = +ruleSpecial.test(control.value);\r\n\r\n    if (hasNumeric + hasCapitals + hasSmall + hasSpecial < 3) {\r\n      return {\r\n        weakPassword: true\r\n      };\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  verifyAutoAnswer(control: any) {\r\n    if (!control?.value || control.value.length === 0) {\r\n      return null;\r\n    }\r\n    let autoAnswerErrorLine = null;\r\n    if (control.parent && control.parent.parent && control.parent.parent.parent && control.parent.parent.parent.parent) {\r\n      const controlSNR = control.parent;\r\n      const controlUser = control.parent.parent.parent.parent;\r\n      const lineAssociations = controlSNR.get('lineAssociations');\r\n      const lines = controlUser.get('lines');\r\n      if (lines) {\r\n        lineAssociations.value.forEach((lineAssociation: any) => {\r\n          const autoAnswerLine = lines.controls.find((line: any) => line.get('directoryNumber').value.directoryNumber === lineAssociation.directoryNumber && line.get('directoryNumber').value.routePartitionName === lineAssociation.routePartitionName\r\n            && line.get('autoAnswer').value !== 'Auto Answer Off');\r\n          if (autoAnswerLine) {\r\n            autoAnswerErrorLine = {\r\n              autoAnswerErrorLine: lineAssociation.directoryNumber\r\n            };\r\n          }\r\n        });\r\n      }\r\n    }\r\n\r\n    return autoAnswerErrorLine;\r\n  }\r\n\r\n  verifyBeginEndTime(control: any) {\r\n    const parent = control.parent;\r\n    if (!parent || !parent.get('isActive') || !parent.get('allDay') || !parent.get('from') || !parent.get('to')) {\r\n      return null;\r\n    }\r\n\r\n    if (parent.get('isActive').value) {\r\n      if (!parent.get('allDay').value) {\r\n        if (!parent.get('from').value || parent.get('from').value === 'No Office Hours'\r\n          || !parent.get('to').value || parent.get('to').value === 'No Office Hours'\r\n          || parent.get('from').value > parent.get('to').value) {\r\n          return {\r\n            fromGreaterThanTo: true\r\n          };\r\n        }\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  time(control: any) {\r\n    if (control.value && !timeRegex.test(control.value)) {\r\n      return {timeFormat: true};\r\n    }\r\n    return null;\r\n  }\r\n\r\n\r\n  pinMultiCharacterCheck = (fieldName: string) => {\r\n    // @ts-ignore\r\n    return (control: any) => {\r\n      if (!control.parent) {\r\n        return null;\r\n      }\r\n      const matchingControl = control.parent.get(fieldName);\r\n      const ruleMultiCharacter = new RegExp('([0-9])\\\\1{2}');\r\n      if (matchingControl.value) {\r\n        const hasMultiCharacter = ruleMultiCharacter.test(matchingControl.value);\r\n        if (hasMultiCharacter) {\r\n          return {\r\n            multiCharacter: true\r\n          };\r\n        }\r\n      }\r\n    };\r\n  };\r\n\r\n  pinConsecutiveNumberCheck = (fieldName: string) => {\r\n    // @ts-ignore\r\n    return (control: any) => {\r\n      if (!control.parent) {\r\n        return null;\r\n      }\r\n      const matchingControl = control.parent.get(fieldName);\r\n      const strToCheck = matchingControl.value;\r\n      if (strToCheck && strToCheck.length > 1) {\r\n        const resAsc = this.pinOrderCheck(strToCheck);\r\n        if (resAsc === true) {\r\n          return {\r\n            consecutiveNumbers: true\r\n          };\r\n        }\r\n      }\r\n    };\r\n  };\r\n\r\n\r\n  pinOrderCheck(str: string): any {\r\n    if (str) {\r\n      const arr_num = ('' + str).split('');\r\n      for (let i = 0; i < arr_num.length - 2; i++) {\r\n        const num1 = parseInt(arr_num[i]);\r\n        const num2 = parseInt(arr_num[i + 1]);\r\n        const num3 = parseInt(arr_num[i + 2]);\r\n        if ((num2 - num1) === 1 && (num3 - num2 === num2 - num1)) {\r\n          return true;\r\n        }\r\n      }\r\n      return false;\r\n    }\r\n  }\r\n\r\n\r\n  pinMailboxExtensionCheck = (fieldName: string, extension: string) => {\r\n    return (control: any) => {\r\n      if (!control.parent) {\r\n        return null;\r\n      }\r\n      const matchingControl = control.parent.get(fieldName);\r\n      const strToCheck = matchingControl.value;\r\n      if (strToCheck === extension || strToCheck.includes(extension)) {\r\n        return {\r\n          mailboxExtension: true\r\n        };\r\n      }\r\n      return null;\r\n    };\r\n  };\r\n\r\n  isItemAlreadyInList(item: any, list: any): boolean {\r\n    if (!item || !list || !list.length) {\r\n      return false;\r\n    }\r\n    for (const listItem of list) {\r\n      if (item.equals(listItem)) {\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { SimplifiedUser } from '../../classes/simplified-user';\r\nimport { UserService } from '../../services/user.service';\r\nimport { DnsService } from '../../services/dns.service';\r\n\r\n@Component({\r\n  selector: 'app-device-associated-line-extension',\r\n  templateUrl: './device-associated-line-extension.component.html',\r\n  styleUrls: ['./device-associated-line-extension.component.scss'],\r\n})\r\nexport class DeviceAssociatedLineExtensionComponent implements OnInit {\r\n  @Input() control!: FormControl;\r\n  @Input() routePartition!: string;\r\n  @Input() directoryNumber!: string;\r\n  @Input() siteId!: number;\r\n  @Output() onChange = new EventEmitter<string>();\r\n  public dataPending!: boolean;\r\n\r\n  public filteredAvailableNumbers: any[] = [];\r\n\r\n  get user(): SimplifiedUser {\r\n    return this.userService.user;\r\n  }\r\n\r\n  get availableNumbers(): any {\r\n    // @ts-ignore\r\n    return this.routePartition && this.dnsService.availableNumbers ? this.dnsService.availableNumbers[this.routePartition] : null;\r\n  }\r\n\r\n\r\n  constructor(\r\n    public userService: UserService,\r\n    private dnsService: DnsService\r\n  ) {\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.getData();\r\n  }\r\n\r\n  public onChangeField(event: any): void {\r\n    const value = (event.option as HTMLInputElement).value.trim();\r\n    this.onChange.emit(value);\r\n  }\r\n\r\n  private getData() {\r\n    if (!this.siteId || !this.routePartition) {\r\n      return;\r\n    }\r\n    this.dataPending = true;\r\n    this.dnsService.getNumberRange(String(this.siteId), this.routePartition, true)\r\n      .subscribe(() => {\r\n        if (this.availableNumbers) {\r\n          // @ts-ignore\r\n          this.dnsService.availableNumbers[this.routePartition].push(this.directoryNumber);\r\n        }\r\n        this.dataPending = false;\r\n      });\r\n  }\r\n\r\n  compareFn(a: any, b: any): boolean {\r\n    return a === b; // or a.id === b.id\r\n  }\r\n\r\n  public setFiltereAvailableNumbers(): void {\r\n    this.filteredAvailableNumbers = this.availableNumbers;\r\n  }\r\n\r\n  public filterAvailableNumbers(event: Event): void {\r\n    const value = (event.target as HTMLInputElement).value.trim();\r\n    this.filteredAvailableNumbers = this.availableNumbers.filter((number: string) => number && number.includes(value));\r\n  }\r\n}\r\n","<!-- <div *ngIf=\"this.availableNumbers?.length\" class=\"user-calling-extension\">\r\n  <mat-select [formControl]=\"control\" (selectionChange)=\"this.onChangeField($event)\" [compareWith]=\"compareFn\" #page>\r\n    <mat-option *ngFor=\"let option of this.availableNumbers; let i = index;\"[value]=\"option\">{{option}}</mat-option>\r\n  </mat-select>\r\n  <mat-spinner *ngIf=\"this.dataPending\" [diameter]=\"50\"></mat-spinner>\r\n</div> -->\r\n\r\n<div *ngIf=\"this.availableNumbers?.length\" class=\"user-calling-extension\">\r\n  <mat-form-field appearance=\"outline\">\r\n    <input\r\n      [matAutocomplete]=\"auto\"\r\n      matInput\r\n      (input)=\"filterAvailableNumbers($event)\"\r\n      [formControl]=\"control\">\r\n    <mat-autocomplete\r\n      #auto=\"matAutocomplete\" [panelWidth]=\"'auto'\"\r\n      (optionSelected)=\"this.onChangeField($event)\">\r\n      <mat-option  *ngFor=\"let option of this.filteredAvailableNumbers; let i = index;\" [value]=\"option\" >\r\n        {{option}}\r\n      </mat-option>\r\n    </mat-autocomplete>\r\n    <mat-spinner *ngIf=\"this.dataPending\" [diameter]=\"50\"></mat-spinner>\r\n  </mat-form-field>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\n\r\nconst POPULAR_DEVICES = ['8851', '8841', '7841'];\r\nconst DEFAULT_SCREEN = 'cisco_8851';\r\n\r\n@Component({\r\n  selector: 'app-device-info',\r\n  templateUrl: './device-info.component.html',\r\n  styleUrls: ['./device-info.component.scss']\r\n})\r\nexport class DeviceInfoComponent {\r\n  @Input()\r\n  device: any = null;\r\n  @Input() \r\n  firstName?: string;\r\n  @Input() \r\n  lastName?: string;\r\n  @Input()\r\n  active!: boolean;\r\n  @Input()\r\n  email!: string;\r\n  @Input()\r\n  position!: string;\r\n  @Output() onclickBack = new EventEmitter<void>();\r\n\r\n  getImageClass(deviceType: string) {\r\n    const numbers = deviceType && deviceType.match(/\\d+/g);\r\n    if(numbers && POPULAR_DEVICES.includes(numbers[0])) {\r\n      return `cisco_${numbers[0]}`;\r\n    }\r\n    else return DEFAULT_SCREEN;\r\n  }\r\n\r\n  onClickBack() {\r\n    this.onclickBack.emit();\r\n  }\r\n}\r\n","<div class=\"info-holder\">\r\n  <!-- <div class=\"content-box\"> -->\r\n    <div class=\"info-holder__device-image\">\r\n      <i class=\"icon device-image\" [ngClass]=\"getImageClass(device?.model)\"></i>\r\n    </div>\r\n    <div class=\"info-holder__device-information\">\r\n      <div class=\"info-holder__device-name\">{{ device && device.model ? device.model : 'No device type available' }}</div>\r\n      <div class=\"info-holder__device-breadcrumbs\">\r\n        <div class=\"is-active\" *ngIf=\"device?.deviceRegStatus.toLowerCase() !== 'unknown'; else notActive\">\r\n          <span class=\"icon-device-status icon-device-status-active\"></span>Registered\r\n        </div>\r\n        <i style=\"transform: translateX(-10px);\" class=\"icon info-icon rem-1\"></i>\r\n        <div class=\"icon-text-wrapper\">\r\n          <div class=\"icon-separator\"></div>\r\n          <div class=\"phones\">Phones</div>\r\n        </div>\r\n        <div class=\"icon-text-wrapper\">\r\n          <div class=\"icon-separator\"></div>\r\n          <div class=\"position\">Device platform:</div>\r\n          <i class=\"icon cisco-icon rem-1\"></i>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div class=\"actions-wrapper\">\r\n      <div class=\"action-btn-wrapper\">\r\n            <button><span>Actions</span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"14\" viewBox=\"0 0 32 32\" style=\"vertical-align:middle;\"><path d=\"M28.708 9.293a1 1 0 0 0-1.415 0L16 20.586 4.707 9.293a1 1 0 0 0-1.414 1.414l12 12a1 1 0 0 0 1.414 0l12-12a1 1 0 0 0 0-1.414\" fill=\"currentColor\"/></svg></button>\r\n      </div>\r\n      <div class=\"back-button-block\" (click)=\"onClickBack()\">\r\n        <div style=\"gap: 0.6rem; display: flex; align-items: center;\">\r\n          <div class=\"icon-round-wrapper\">\r\n            <i class=\"icon people-regular rem-1_25\"></i>\r\n          </div>\r\n          <div class=\"lines-block\">\r\n            <span>{{firstName}}</span>\r\n            <span>{{lastName}}</span>\r\n          </div>\r\n        </div>\r\n        <i class=\"icon arrow-right-icon rem-1\"></i>\r\n      </div>\r\n    </div>\r\n  <!-- </div> -->\r\n\r\n</div>\r\n\r\n<ng-template #notActive>\r\n    <div class=\"is-active\">\r\n        <svg width=\"8\" height=\"9\" viewBox=\"0 0 8 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4 8.5C6.20914 8.5 8 6.70914 8 4.5C8 2.29086 6.20914 0.5 4 0.5C1.79086 0.5 0 2.29086 0 4.5C0 6.70914 1.79086 8.5 4 8.5Z\" fill=\"grey\"/>\r\n        </svg>\r\n        <div>Not Registered</div>\r\n    </div>\r\n</ng-template>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n  name: 'macAddress'\r\n})\r\nexport class MacAddressPipe implements PipeTransform {\r\n\r\n  transform(value: string): string {\r\n    if (!value) {\r\n      return '';\r\n    }\r\n\r\n    const cleaned = value.replace(/[^a-fA-F0-9]/g, '');\r\n\r\n    if (cleaned.length !== 12) {\r\n      return value;\r\n    }\r\n\r\n    return cleaned\r\n      .match(/.{1,2}/g)\r\n      ?.join(':')\r\n      .toUpperCase() || value;\r\n  }\r\n}","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { FormArray, FormControl, FormControlName, FormGroup, Validators } from '@angular/forms';\r\nimport { SimplifiedUser } from './classes/simplified-user';\r\nimport { LineAssociation } from './classes/line-association';\r\nimport { LineAssociationInterface } from './classes/line-association-interface';\r\nimport { Device, DeviceViewType } from './classes/device';\r\nimport { finalize, forkJoin, Subject, takeUntil } from 'rxjs';\r\nimport { MatTabGroup } from '@angular/material/tabs';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { InfoDialogComponent } from './confirm-dialog/info-dialog.component';\r\nimport { UserService } from './services/user.service';\r\nimport { DeviceService } from './services/device.service';\r\nimport { APIService } from './services/api.service';\r\nimport { LineService } from './services/line.service';\r\nimport { SiteSettingsService } from './services/site-settings.service';\r\nimport { ValidationService } from './services/validation.service';\r\nimport { TOGGLE_TYPES } from './app.constants';\r\nimport { DnsService } from './services/dns.service';\r\n\r\n@Component({\r\n  selector: 'app-device-manage-widget',\r\n  templateUrl: './device-manage-widget.component.html',\r\n  styleUrls: ['./device-manage-widget.component.scss'],\r\n})\r\nexport class DeviceManageWidgetComponent implements OnDestroy {\r\n  @Output() onSave = new EventEmitter<string>();\r\n  @Output() onChange = new EventEmitter<string>();\r\n  @Output() discardChanges = new EventEmitter();\r\n  @Output() goBack = new EventEmitter();\r\n  @Input() token!: string;\r\n  @Input() host!: string;\r\n  @Input() siteId!: number;\r\n  @Input() userId!: string;\r\n  @Input() isLdap!: boolean;\r\n  @Input() deviceName!: string;\r\n\r\n  @ViewChild('tagInput') tagInput!: ElementRef<HTMLInputElement>;\r\n\r\n  dataPending!: boolean;\r\n  private readonly destroy$ = new Subject<void>();\r\n  public device: any = null;\r\n  public tokenObj: any = null;\r\n\r\n  public readonly HOTELING_TIME_HOURS = Array.from({ length: 120 }, (_, index) => index);\r\n\r\n  // public readonly hotelingLimitTime = new FormControl(24);\r\n  public logMissedCall = new FormControl(true);\r\n\r\n  tags: string[] = [];\r\n  isAdding = false;\r\n  newTag = '';\r\n  linesControls = new FormArray<FormControl<string>>([]);\r\n\r\n  get firstName(): string {\r\n    return this.userService.userName;\r\n  }\r\n\r\n  get lastName(): string {\r\n    return this.userService.userLastName;\r\n  }\r\n\r\n  get form(): FormGroup | undefined {\r\n    return this.userService.userDevice?.form;\r\n  }\r\n\r\n  get isWebex() {\r\n    return localStorage.getItem('webexUUID') && localStorage.getItem('webexUUID') !== 'null';\r\n  }\r\n\r\n  constructor(\r\n    public userService: UserService,\r\n    public deviceService: DeviceService,\r\n    private apiService: APIService,\r\n    public lineService: LineService,\r\n    public siteSettingsService: SiteSettingsService,\r\n    private validationService: ValidationService,\r\n    private dialog: MatDialog,\r\n    private readonly dnsService: DnsService,\r\n  ) {\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.apiService.token = this.token;\r\n    this.apiService.apiUrl = this.host;\r\n    console.log('this.apiService.apiUrl = ', this.apiService.apiUrl);\r\n    this.getData();\r\n  }\r\n\r\n  showInput() {\r\n    this.isAdding = true;\r\n\r\n    // wait until input appears in DOM\r\n    setTimeout(() => {\r\n      this.tagInput?.nativeElement.focus();\r\n    });\r\n  }\r\n\r\n  onBlur() {\r\n    const value = this.newTag.trim();\r\n\r\n    if (value) {\r\n      this.tags.push(value);\r\n    }\r\n\r\n    this.newTag = '';\r\n    this.isAdding = false;\r\n  }\r\n\r\n  removeTag(index: number) {\r\n    this.tags.splice(index, 1);\r\n  }\r\n\r\n  get hotelingEnabled(): FormControl {\r\n    return this.form?.get('hoteling')?.get('enabled') as FormControl;\r\n  }\r\n\r\n  get guestHoursLimit(): FormControl {\r\n    return this.form?.get('hoteling')?.get('guestHoursLimit') as FormControl;\r\n  }\r\n\r\n  private getData() {\r\n    this.dataPending = true;\r\n    let request;\r\n    const deviceType = localStorage.getItem('deviceType');\r\n    // const deviceType = this.deviceName;\r\n    if(localStorage.getItem('isWebex') === 'true') {\r\n      // request\r\n      const customerId = localStorage.getItem('customerId');\r\n      const webexId = localStorage.getItem('webexUUID');\r\n      request = this.userService.fetchWebexUserDevice(customerId!, webexId!, deviceType!);\r\n    } else {\r\n      request = this.userService.fetchDIUserDevice(this.siteId, this.userId, deviceType!);\r\n    }\r\n    request\r\n    .pipe(takeUntil(this.destroy$))\r\n    .pipe(finalize(() => this.dataPending = false))\r\n    .subscribe((data: any) => {\r\n      this.device = data;\r\n      this.initFormData(this.device);\r\n    });\r\n  }\r\n\r\n  initFormData(device: any) {\r\n\r\n    this.linesControls = new FormArray(\r\n      this.device.lines.map((line: any) =>\r\n        new FormControl(String(line.extension) || '')\r\n      )\r\n    );\r\n  }\r\n\r\n  public onNumberChange(event: Event, index: number) {\r\n    const value = (event.target as HTMLElement).innerText.trim();\r\n    this.device.lines[index].number = value;\r\n    this.onChange.emit();\r\n  }\r\n\r\n  public onExtensionChange(value: string, index: number) {\r\n    // const value = (event.target as HTMLElement).innerText.trim();\r\n    const extension = this.dnsService.getDnValue(value);\r\n    const number = this.dnsService.getMappedDids(extension, '0');\r\n    this.device.lines[index].extension = extension;\r\n    this.device.lines[index].number = number || '';\r\n    this.linesControls.at(index).setValue(extension);\r\n    this.onChange.emit();\r\n  }\r\n\r\n  saveChanges(): void {\r\n    if (!this.userService.hasUnsavedChanges() || this.form?.invalid) {\r\n      return;\r\n    }\r\n\r\n    const updatedLines = this.device.lines.filter((line: any, index: any) => this.userService.lineUpdated(line, index));\r\n    updatedLines.forEach((line: any) => this.userService.saveNewLine(line));\r\n\r\n    this.dataPending = true;\r\n    setTimeout(() => {\r\n      this.dataPending = false;\r\n    }, 20000);\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.destroy$.next();\r\n    this.destroy$.complete();\r\n  }\r\n\r\n  onGoBack(): void {\r\n    this.goBack.emit();\r\n  }\r\n}\r\n","\r\n\r\n<app-loader *ngIf=\"dataPending\"></app-loader>\r\n<div *ngIf=\"!dataPending\">\r\n  <!-- <div class=\"go-back-box\" (click)=\"onGoBack()\"> -->\r\n  <div class=\"go-back-box\">\r\n    <div class=\"go-back-box-container\">\r\n      <span class=\"app-icon icon-webex-left-arrow\"></span>\r\n      <span class=\"go-back-title\">Devices</span>\r\n    </div>\r\n  </div>\r\n\r\n  <app-device-info \r\n    [device]=\"device\" \r\n    [firstName]=\"firstName\" \r\n    [lastName]=\"lastName\"\r\n    (onclickBack)=\"onGoBack()\"\r\n    >\r\n    \r\n  </app-device-info>\r\n  <div class=\"device-info\">\r\n\r\n    <div class=\"device-info-part\">\r\n\r\n        <section class=\"card\">\r\n            <div class=\"header\">\r\n                <span class=\"title\">Details</span>\r\n            </div>\r\n            <div class=\"main-content\">\r\n                <div class=\"detail-row\">\r\n                    <div class=\"side left-part\">\r\n                        <span class=\"main-value\">{{ form?.get('maxLineCount')?.value || 'N/A' }}</span>\r\n                        <span class=\"extra-info\">Lines</span>\r\n                    </div>\r\n                    <div class=\"side right-part\">\r\n                        <span class=\"main-value\">{{ (form?.get('macAddress')?.value | macAddress) || 'N/A' }}</span>\r\n                        <span class=\"extra-info\">MAC address</span>\r\n                    </div>\r\n                </div>\r\n                <mat-divider></mat-divider>\r\n                <div class=\"detail-row\">\r\n                    <div class=\"side left-part\">\r\n                        <span class=\"main-value\">{{ form?.get('ipAddress')?.value || 'N/A' }}</span>\r\n                        <span class=\"extra-info\">Host IP address</span>\r\n                    </div>\r\n                    <div class=\"side right-part\">\r\n                        <span class=\"main-value\">{{ form?.get('remoteIpAddress')?.value || 'N/A' }}</span>\r\n                        <span class=\"extra-info\">Remote IP address</span>\r\n                    </div>\r\n                </div>\r\n                <mat-divider></mat-divider>\r\n                <div class=\"detail-row\">\r\n                    <div class=\"side left-part\">\r\n                        <span class=\"main-value\">Cisco</span>\r\n                        <span class=\"extra-info\">Managed By</span>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </section>\r\n\r\n        <section class=\"card\">\r\n            <div class=\"header\">\r\n                <span class=\"title\">Software</span>\r\n                <div class=\"icon-bordered-wrapper\">\r\n                    <i class=\"icon configure-icon rem1\"></i>\r\n                </div>\r\n            </div>\r\n            <div class=\"main-content\">\r\n                <div class=\"detail-row\">\r\n                    <div class=\"side left-part\">\r\n                        <span class=\"main-value\">{{ form?.get('softwareVersion')?.value || 'N/A'}}</span>\r\n                        <span class=\"extra-info\">Software Channel</span>\r\n                    </div>\r\n                    <div class=\"side right-part\">\r\n                        <span class=\"main-value\">{{ form?.get('softwareChannel')?.value || 'N/A'}}</span>\r\n                        <span class=\"extra-info\">Software version</span>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </section>\r\n\r\n        <section class=\"card\">\r\n            <div class=\"header\">\r\n                <span class=\"title\">Tags</span>\r\n            </div>\r\n            <div class=\"main-content\">\r\n                <div class=\"detail-row\" style=\"flex-direction: column; gap: 1rem;\">\r\n                    <div class=\"tags-list-container\">\r\n                        <div *ngFor=\"let tag of tags; let i = index\" class=\"tag-label\">\r\n                            <span class=\"tag-desccription\">{{ tag }}</span>\r\n                            <i class=\"icon close-icon\" (click)=\"removeTag(i)\" style=\"width: 0.75rem; height: 0.75rem; flex: 0 0 auto;\"></i>\r\n                        </div>\r\n                    </div>\r\n                    <div class=\"tags-list-container\">\r\n                        <button class=\"tag-label add-tag\" (click)=\"showInput()\">\r\n                            <span class=\"icon plus-icon\" style=\"width: 0.75rem; height: 0.75rem;\"></span>\r\n                            <span>Add tag</span>\r\n                        </button>\r\n                        <input \r\n                            #tagInput\r\n                            id=\"enter-tag-input\" \r\n                            *ngIf=\"isAdding\"\r\n                            [(ngModel)]=\"newTag\"\r\n                            (blur)=\"onBlur()\"\r\n                            type=\"text\"\r\n                            class=\"add-tag-input\" \r\n                            placeholder=\"Enter tag...\"\r\n                        >\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </section>\r\n\r\n    </div>\r\n\r\n    <div class=\"device-info-part\">\r\n        <section class=\"card\">\r\n             <div class=\"header\">\r\n                <span class=\"title\">Issues & Information</span>\r\n            </div>\r\n            <div class=\"main-content\">\r\n                <div class=\"detail-row\">\r\n                    <div class=\"description\">\r\n                        <i class=\"icon check-icon rem1\" style=\"filter: invert(26%) sepia(27%) saturate(1093%) hue-rotate(114deg) brightness(93%) contrast(90%);\"></i>\r\n                        <span class=\"text-description\">No reported issues at this time</span>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </section>\r\n\r\n        <section class=\"card\">\r\n             <div class=\"header\">\r\n                <span class=\"title\">Hoteling</span>\r\n            </div>\r\n            <div class=\"main-content\">\r\n                <div class=\"detail-row flex-column gap-0_75\">\r\n                    <span class=\"text-description\">Allow this device to be used as a Hoteling Host by visiting guests.</span>\r\n                    <div class=\"toggle-wrapper\">\r\n                        <mat-slide-toggle class=\"custom-toggle\" name=\"logMissedCalls\" [formControl]=\"hotelingEnabled\"></mat-slide-toggle>\r\n                        <i class=\"icon info-icon rem1\" \r\n                            style=\"filter: invert(20%) sepia(99%) saturate(2065%) hue-rotate(197deg) brightness(92%) contrast(101%);\"\r\n                            [matTooltip]=\"'Enabling this device for Hoteling means that a guest (end user) can log into this host (workspace phone) and use this phone as if it were their own. This is useful when traveling to a remote office but still needing to place/receive calls with their telephone number and to access features normally available to them on their own office phone.'\"\r\n                        ></i>\r\n                    </div>\r\n                    <span class=\"text-description\">Limit the time a guest can use this phone to</span>\r\n                    <mat-select [formControl]=\"guestHoursLimit\">\r\n                        <mat-option *ngFor=\"let type of HOTELING_TIME_HOURS\" [value]=\"type\">\r\n                            {{type}}\r\n                        </mat-option>\r\n                    </mat-select>\r\n                </div>\r\n            </div>\r\n        </section>\r\n        <section class=\"card\">\r\n            <div class=\"header\">\r\n                <span class=\"title\">Device Management</span>\r\n            </div>\r\n            <div class=\"main-content\">\r\n                <div class=\"detail-row flex-column gap-0_75\">\r\n                    <p class=\"text-description\">The users and workspaces that appear on this device are displayed below in the order of appearance.</p>\r\n                    <div class=\"flex-column\">\r\n                        <span class=\"text-description\">To add and remove users and workspaces, select <b>Configure Lines.</b></span>\r\n                        <span class=\"text-description\">To customize the programmable Line Keys, select <b>Configure Layout.</b></span>\r\n                        <span class=\"text-description\">To set up the display settings and dialing options, select <b>Device Settings</b>.</span>\r\n                    </div>\r\n                    <table style=\"border-collapse:collapse;\">\r\n                        <thead>\r\n                        <tr style=\"background:#ededed;\">\r\n                            <th style=\"padding:10px 16px; font-size:.75rem; font-weight:400; color:#545454; text-align:left; border-bottom:1px solid #e8e8e8;\">Index #</th>\r\n                            <th style=\"padding:10px 16px; font-size:.75rem; font-weight:400; color:#545454; text-align:left; border-bottom:1px solid #e8e8e8;\">Name</th>\r\n                            <th style=\"padding:10px 16px; font-size:.75rem; font-weight:400; color:#545454; text-align:left; border-bottom:1px solid #e8e8e8;\">Number/Extension</th>\r\n                            <th style=\"padding:10px 16px; font-size:.75rem; font-weight:400; color:#545454; text-align:left; border-bottom:1px solid #e8e8e8;\">Appearances</th>\r\n                            <th style=\"padding:10px 16px; font-size:.75rem; font-weight:400; color:#545454; text-align:left; border-bottom:1px solid #e8e8e8;\">Registered</th>\r\n                        </tr>\r\n                        </thead>\r\n                        <tbody>\r\n                        <ng-container *ngIf=\"device?.lines && device?.lines.length\">\r\n                            <tr style=\"background:#fff; cursor:pointer;\" onmouseover=\"this.style.background='#fafafa'\" onmouseout=\"this.style.background='#fff'\"\r\n                            \r\n                            *ngFor=\"let line of device.lines; let i = index\">\r\n                                <td style=\"padding: .25rem 1.25rem .25rem .75rem;; border-bottom:1px solid #e8e8e8;\">\r\n                                    <span style=\"display:inline-block; color:#000000f2; padding:4px 14px; font-size:.875rem; font-weight:400;\"></span>\r\n                                </td>\r\n                                <td style=\"padding: .25rem 1.25rem .25rem .75rem;; border-bottom:1px solid #e8e8e8;\">\r\n                                    <span style=\"display:inline-block; color:#000000f2; padding:4px 14px; font-size:.875rem; font-weight:400;\">{{line?.name}}</span>\r\n                                </td>\r\n                                <td style=\"padding: .25rem 1.25rem .25rem .75rem;; border-bottom:1px solid #e8e8e8;\">\r\n                                    <div style=\"display: flex; align-items: center;\">\r\n                                        <div style=\"width: 120px;\"\r\n                                            [attr.contenteditable]=\"!isWebex\"\r\n                                            (blur)=\"onNumberChange($event, i)\">\r\n                                            {{ line?.number || 'NA' }}\r\n                                        </div> \r\n                                        <span> &nbsp;/&nbsp; </span>\r\n                                        <!-- <span\r\n                                            [attr.contenteditable]=\"!isWebex\"\r\n                                            (blur)=\"onExtensionChange($event, i)\">\r\n                                            {{ line?.extension }}\r\n                                        </span> -->\r\n                                        <app-device-associated-line-extension\r\n                                                [control]=\"linesControls.at(i)\"\r\n                                                [routePartition]=\"line.routePartitionName\"\r\n                                                [directoryNumber]=\"line.directoryNumber\"\r\n                                                [siteId]=\"siteId\"\r\n                                                (onChange)=\"onExtensionChange($event, i)\">\r\n                                            </app-device-associated-line-extension>\r\n                                    </div>\r\n                                    \r\n                                </td>\r\n                                <td style=\"padding: .25rem 1.25rem .25rem .75rem;; border-bottom:1px solid #e8e8e8;\">\r\n                                    <span style=\"display:inline-block; color:#000000f2; padding:4px 14px; font-size:.875rem; font-weight:400;\">1</span>\r\n                                </td>\r\n                                <td style=\"padding: .25rem 1.25rem .25rem .75rem;; border-bottom:1px solid #e8e8e8;\">\r\n                                    <i class=\"icon warning-icon rem1\" [matTooltip]=\"'Unregistered'\"></i>\r\n                                </td>\r\n                        </tr>\r\n                        </ng-container>\r\n                        \r\n                        </tbody>\r\n                    </table>\r\n                    <div class=\"totals\">\r\n                       <span class=\"text-description\">15 of 16 total lines available</span>\r\n                    </div>\r\n                    <div class=\"configure-lines\" style=\"opacity: 0.4; pointer-events: none;\">\r\n                        <div class=\"line\">\r\n                            <div>\r\n                                <i class=\"icon configure-icon rem1-25\"></i>\r\n                                <span class=\"text-description\">Configure Lines</span>\r\n                            </div>\r\n                            <div style=\"cursor: pointer\">\r\n                                <span class=\"text-description\" style=\"font-weight: 500;\">Manage</span>\r\n                                <i class=\"icon arrow-right-icon rem1-25\"></i>\r\n                            </div>\r\n                        </div>\r\n                        <mat-divider></mat-divider>\r\n                        <div class=\"line\">\r\n                            <div>\r\n                                <i class=\"icon configure-icon rem1-25\"></i>\r\n                                <span class=\"text-description\">Configure Layout</span>\r\n                            </div>\r\n                            <div style=\"cursor: pointer\">\r\n                                <span class=\"text-description\" style=\"font-weight: 500;\">Manage</span>\r\n                                <i class=\"icon arrow-right-icon rem1-25\"></i>\r\n                            </div>\r\n                        </div>\r\n                        <mat-divider></mat-divider>\r\n                        <div class=\"line\">\r\n                            <div>\r\n                                <i class=\"icon configure-icon rem1-25\"></i>\r\n                                <span class=\"text-description\">Device Settings</span>\r\n                            </div>\r\n                            <div style=\"cursor: pointer\">\r\n                                <span class=\"text-description\" style=\"font-weight: 500;\">Manage</span>\r\n                                <i class=\"icon arrow-right-icon rem1-25\"></i>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </section>\r\n\r\n        <section class=\"card\">\r\n             <div class=\"header\">\r\n                <span class=\"title\">Support</span>\r\n            </div>\r\n            <div class=\"main-content\">\r\n                <div class=\"detail-row flex-column gap-0_75\">\r\n                    <div class=\"configure-lines\" style=\"opacity: 0.4; pointer-events: none;\">\r\n                        <div class=\"line\">\r\n                            <div>\r\n                                <span class=\"text-description\">Meetings & Calls</span>\r\n                                <span class=\"label new\">New</span>\r\n                                <i class=\"icon info-icon rem1\"\r\n                                    [matTooltip]=\"'Troubleshooting provides details about the device related to status, network activity, and call information.'\"\r\n                                ></i>\r\n                            </div>\r\n                            <div style=\"cursor: pointer\">\r\n                                <span class=\"text-description\" style=\"font-weight: 500;\">Go to troubleshooting</span>\r\n                                <i class=\"icon arrow-right-icon rem1-25\"></i>\r\n                            </div>\r\n                        </div>\r\n                        <mat-divider></mat-divider>\r\n                        <div class=\"line\">\r\n                            <div>\r\n                                <span class=\"text-description\">Device Logs</span>\r\n                                <i class=\"icon info-icon rem1\" [matTooltip]=\"'Generate device logs and download them to your computer.'\"></i>\r\n                            </div>\r\n                            <div style=\"cursor: pointer\">\r\n                                <span class=\"text-description\" style=\"font-weight: 500;\">Manage</span>\r\n                                <i class=\"icon arrow-right-icon rem1-25\"></i>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </section>\r\n    </div>\r\n\r\n  </div>\r\n  \r\n</div>","import { Component, Input } from \"@angular/core\";\r\n\r\n@Component({\r\n    selector: \"app-line-details-block\",\r\n    templateUrl: \"./device-associated-line-details-box.component.html\",\r\n    styleUrls: [\"./device-associated-line-details-box.component.scss\"]\r\n})\r\nexport class DeviceAssociatedLineDetailsBoxComponent {\r\n\r\n    @Input() title: string = '';\r\n\r\n    constructor() {}\r\n}\r\n","<div class=\"line-details-block\">\r\n    <div class=\"line-details-block__title\">{{ title }}</div>\r\n    <div class=\"line-details-block__content\">\r\n        <ng-content></ng-content>\r\n    </div>\r\n</div>","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { SimplifiedUser } from '../classes/simplified-user';\r\nimport { LineAssociation } from '../classes/line-association';\r\nimport { LineAssociationInterface } from '../classes/line-association-interface';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { RecordingOptions } from '../classes/device';\r\nimport { Subscription } from 'rxjs';\r\nimport { RECORDING_MEDIA_SOURCE, STATIC_OPTIONS } from '../app.constants';\r\nimport { UserService } from '../services/user.service';\r\nimport { APIService } from '../services/api.service';\r\nimport { SiteSettingsService } from '../services/site-settings.service';\r\nimport { LineService } from '../services/line.service';\r\nimport { DeviceService } from '../services/device.service';\r\nimport { ValidationService } from '../services/validation.service';\r\nimport { UtilsService } from '../services/utils.service';\r\n\r\n@Component({\r\n  selector: 'app-device-associated-line',\r\n  templateUrl: './device-associated-line.component.html',\r\n  styleUrls: ['./device-associated-line.component.scss'],\r\n})\r\nexport class DeviceAssociatedLineComponent implements OnInit, OnDestroy {\r\n  @Input() lineIndex!: number;\r\n  @Input() deviceIndex!: number;\r\n  @Input() deviceName!: string;\r\n  @Input() siteId!: number;\r\n  @Output() updatedLineAssociationEvent = new EventEmitter();\r\n  @Output() onChange = new EventEmitter<string>();\r\n  dataPending!: boolean;\r\n  recordingOptions = RecordingOptions;\r\n  recordingMediaSources: string[] = RECORDING_MEDIA_SOURCE;\r\n  staticOptions = STATIC_OPTIONS;\r\n  monitorCssList: any;\r\n  filteredMonitorCssList: any;\r\n  subscriptions: Array<Subscription>\r\n\r\n  get form(): FormGroup {\r\n    return this.userService?.user?.devices[this.deviceIndex] && this.userService?.user?.devices[this.deviceIndex].lineAssociations[this.lineIndex].form;\r\n  }\r\n\r\n  get lineAssociation(): LineAssociation | LineAssociationInterface {\r\n    return this.userService?.user?.devices[this.deviceIndex].lineAssociations[this.lineIndex];\r\n  }\r\n\r\n  get originLineAssociation(): LineAssociation | LineAssociationInterface {\r\n    return this.userService?.originUser?.devices[this.deviceIndex].lineAssociations[this.lineIndex];\r\n  }\r\n\r\n  get user(): SimplifiedUser {\r\n    return this.userService.user;\r\n  }\r\n\r\n\r\n  constructor(\r\n    public userService: UserService,\r\n    private apiService: APIService,\r\n    private siteSettingsService: SiteSettingsService,\r\n    private lineService: LineService,\r\n    private deviceService: DeviceService,\r\n    private dialog: MatDialog,\r\n    private validationService: ValidationService\r\n  ) {\r\n    this.subscriptions = [];\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.getData();\r\n    this.lineService.onSaveLineAssociationEvent\r\n      .subscribe(() => {\r\n        this.updateLine(this.lineAssociation);\r\n      })\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.subscriptions?.length) {\r\n      this.subscriptions.forEach((subscription: Subscription) => subscription.unsubscribe());\r\n    }\r\n  }\r\n\r\n  onChangeField(token: string): void {\r\n    if (!token) {\r\n      return;\r\n    }\r\n    (this.userService.user.devices[this.deviceIndex].lineAssociations[this.lineIndex] as any)[token] = this.form?.get(token)?.value;\r\n    this.setHasChangesToLine();\r\n    this.onChange.emit();\r\n\r\n  }\r\n\r\n  onAutocomplete(token: string) {\r\n    const value = this.form?.get(token)?.value;\r\n    this.filteredMonitorCssList = UtilsService.filterOptions(this.monitorCssList, value);\r\n  }\r\n\r\n  recordingOptionChanged(token: string): void {\r\n    const value = this.form.get(token)?.value;\r\n    this.onChangeField(token);\r\n\r\n    if (value === RecordingOptions.auto_enabled || value === RecordingOptions.selective_enabled) {\r\n      if (!this.form?.get('recordingProfile')?.touched) {\r\n        this.form.get('recordingProfile')?.markAsTouched();\r\n      }\r\n      this.form.get('recordingProfile')?.enable();\r\n      this.form.get('recordingMediaSource')?.enable();\r\n    } else {\r\n      this.form.get('recordingProfile')?.disable();\r\n      this.form.get('recordingProfile')?.setValue('');\r\n      this.onChangeField('recordingProfile');\r\n\r\n      /* if (!this.authService.hasRole('SUPER_USER')) {\r\n         recordingMediaSource.disable();\r\n         recordingMediaSource.setValue(this.recordingMediaSources[0]);\r\n         this.changeField('recordingMediaSource');\r\n       }*/\r\n    }\r\n  }\r\n\r\n  getRule(): string {\r\n    // @ts-ignore\r\n    if (this.form.get('e164Mask')?.errors && this.form.get('e164Mask')?.errors['e164MaskRule']) {\r\n      // @ts-ignore\r\n      return this.form.get('e164Mask')?.errors['e164MaskRule']['rule']\r\n    }\r\n    return '';\r\n\r\n  }\r\n\r\n  toggleEditMode() {\r\n    this.userService.user.toggleEditMode();\r\n  }\r\n\r\n  isSavingDisabled(): boolean {\r\n    return !this.userService.hasUnsavedChanges() || this.userService.hasExistedUserId;\r\n  }\r\n\r\n  onChangeExtension(value: string): void {\r\n    if (this.lineAssociation && this.lineAssociation.directoryNumber) {\r\n      this.userService.user.devices[0].lineAssociations[0].directoryNumber.directoryNumber = value;\r\n    }\r\n  }\r\n\r\n  onLineRemove(): void {\r\n\r\n  }\r\n\r\n  private getData() {\r\n    this.dataPending = true;\r\n    const subscription = this.siteSettingsService.getMonitorCss(this.siteId)\r\n      .subscribe((res: any) => {\r\n        this.monitorCssList = res?.length ? res.slice() : [];\r\n        this.filteredMonitorCssList = res?.length ? res.slice() : [];\r\n      });\r\n\r\n    this.subscriptions.push(subscription);\r\n  }\r\n\r\n  private updateLine(line: LineAssociation | LineAssociationInterface): void {\r\n    const body = this.lineService.getLineAssociationBody(this.originLineAssociation, this.lineAssociation);\r\n    console.log('update line', body);\r\n    this.deviceService.dataPending = true;\r\n    this.deviceService.putDeviceFields(this.siteId, this.deviceName, this.userService.user.token, body)\r\n      .subscribe(() => {\r\n        this.userService.persistUserCache()\r\n          .subscribe(() => {\r\n            this.userService.fetchUserToken(this.siteId, this.userService.user.userid, this.validationService)\r\n              .subscribe(() => {\r\n                this.updatedLineAssociationEvent.emit();\r\n                this.deviceService.dataPending = false;\r\n              }, () => this.deviceService.dataPending = false);\r\n          }, () => this.deviceService.dataPending = true)\r\n      }, () => this.deviceService.dataPending = true)\r\n  }\r\n\r\n  private deleteLine(line: LineAssociation): void {\r\n    this.lineService.deleteLine(this.siteId, line.linePkid, this.userService.user.token)\r\n      .subscribe(() => {\r\n        this.userService.persistUserCache()\r\n          .subscribe(() => {\r\n            this.userService.fetchUserToken(this.siteId, this.userService.user.userid, this.validationService)\r\n              .subscribe(() => {\r\n                this.updatedLineAssociationEvent.emit();\r\n              });\r\n          })\r\n      })\r\n  }\r\n\r\n  private setHasChangesToLine(): void {\r\n    if (this.lineAssociation) {\r\n      this.userService.user.devices[this.deviceIndex].lineAssociations[this.lineIndex].hasChanges = !this.lineAssociation.fullEqual(this.originLineAssociation);\r\n      this.userService.user.devices[this.deviceIndex].lineAssociationsHasChanges = !this.lineAssociation.fullEqual(this.originLineAssociation);\r\n    }\r\n  }\r\n}\r\n","<div id=\"device-associated-line\" *ngIf=\"lineAssociation && form\" [formGroup]=\"form\">\r\n  <ng-container class=\"line-details__container\">\r\n      <app-line-details-block [title]=\"'Line setting on the device'\">\r\n        <div class=\"form-group\">\r\n          <label>Display Caller ID</label>\r\n          <mat-form-field appearance=\"outline\">\r\n            <input matInput type=\"text\" name=\"displayLabel\" formControlName=\"displayLabel\"\r\n                   (input)=\"onChangeField('displayLabel')\">\r\n            <mat-error *ngIf=\"form.get('displayLabel')?.hasError('maxlength')\">\r\n              <i class=\"fa fa-exclamation-triangle\"></i>\r\n              This field can’t have more than 30 characters\r\n            </mat-error>\r\n            <mat-error *ngIf=\"form.get('displayLabel')?.hasError('pattern')\">\r\n              <i class=\"fa fa-exclamation-triangle\"></i>\r\n              Invalid symbols are used\r\n            </mat-error>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-group__separator\"></div>\r\n        <div class=\"form-group\">\r\n          <label>Text Label</label>\r\n          <mat-form-field appearance=\"outline\">\r\n            <input formControlName=\"textLabel\" name=\"textLabel\"\r\n                   matInput (input)=\"onChangeField('textLabel')\">\r\n            <mat-error *ngIf=\"form.get('textLabel')?.hasError('maxlength')\">\r\n              <i class=\"fa fa-exclamation-triangle\"></i>\r\n              This field can’t have more than 30 characters\r\n            </mat-error>\r\n            <mat-error *ngIf=\"form.get('textLabel')?.hasError('pattern')\">\r\n              <i class=\"fa fa-exclamation-triangle\"></i>\r\n              Invalid symbols are used\r\n            </mat-error>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-group__separator\"></div>\r\n        <div class=\"form-group\">\r\n          <label>External Phone Number Mask</label>\r\n          <mat-form-field appearance=\"outline\">\r\n            <input matInput type=\"text\" name=\"e164Mask\" formControlName=\"e164Mask\"\r\n                   (input)=\"onChangeField('e164Mask')\">\r\n            <mat-error *ngIf=\"form.get('e164Mask')?.hasError('e164MaskRule')\">\r\n              <i class=\"fa fa-exclamation-triangle\"></i>\r\n              e164Mask does not match the rule {{getRule()}}\r\n            </mat-error>\r\n          </mat-form-field>\r\n        </div>\r\n      </app-line-details-block>\r\n      <div class=\"form-group__separator_2px\"></div>\r\n      <app-line-details-block [title]=\"'Multiple Call/Call Waiting Settings'\">\r\n        <div class=\"form-group\">\r\n          <label>Max Calls</label>\r\n          <mat-form-field appearance=\"outline\">\r\n            <input matInput type=\"number\" name=\"maxNumberOfCalls\" formControlName=\"maxNumberOfCalls\"\r\n                   (input)=\"onChangeField('maxNumberOfCalls')\">\r\n            <mat-error *ngIf=\"form.get('maxNumberOfCalls')?.hasError('max')\">\r\n              <i class=\"fa fa-exclamation-triangle\"></i>\r\n              Value is too big\r\n            </mat-error>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-group__separator\"></div>\r\n        <div class=\"form-group\">\r\n          <label>Busy Trigger</label>\r\n          <mat-form-field appearance=\"outline\">\r\n            <input matInput type=\"number\" name=\"busyTrigger\" formControlName=\"busyTrigger\"\r\n                   (input)=\"onChangeField('busyTrigger')\">\r\n            <mat-error *ngIf=\"form.get('busyTrigger')?.hasError('max')\">\r\n              <i class=\"fa fa-exclamation-triangle\"></i>\r\n              Value can't be bigger than Max Calls\r\n            </mat-error>\r\n          </mat-form-field>\r\n        </div>\r\n      </app-line-details-block>\r\n      <div class=\"form-group__separator_2px\"></div>\r\n      <app-line-details-block [title]=\"'Call Recording'\">\r\n        <div class=\"form-group\">\r\n          <label>Recording Option</label>\r\n          <mat-form-field appearance=\"outline\">\r\n            <mat-select\r\n              (selectionChange)=\"recordingOptionChanged('recordingOption')\"\r\n              formControlName=\"recordingOption\"\r\n              [id]=\"'associatedLineRecordingOptionField'\">\r\n              <mat-option [value]=recordingOptions.disabled>Call Recording Disabled</mat-option>\r\n              <mat-option [value]=recordingOptions.auto_enabled>Automatic Call Recording Enabled</mat-option>\r\n              <mat-option [value]=recordingOptions.selective_enabled>Selective Call Recording Enabled</mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-group__separator\"></div>\r\n        <div class=\"form-group\">\r\n          <label>Recording Media Source</label>\r\n          <mat-form-field appearance=\"outline\">\r\n            <mat-select\r\n              (selectionChange)=\"onChangeField('recordingMediaSource')\" formControlName=\"recordingMediaSource\"\r\n              [id]=\"'associatedLineRecordingMediaSourceField'\">\r\n              <mat-option *ngFor=\"let source of recordingMediaSources\" [value]=\"source\">{{source}}</mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-group__separator\"></div>\r\n        <div class=\"form-group\">\r\n          <label>Recording Profile</label>\r\n          <app-lazy-loading-select\r\n            [siteId]=\"siteId\"\r\n            [controlName]=\"'recordingProfile'\"\r\n            [form]=\"form\"\r\n            (changeField)=\"onChangeField('recordingProfile')\"\r\n            [optionsToken]=\"'recordingProfile'\"></app-lazy-loading-select>\r\n        </div>\r\n      </app-line-details-block>\r\n      <div class=\"form-group__separator_2px\"></div>\r\n      <app-line-details-block [title]=\"'Additional line settings on the device'\">\r\n        <div class=\"form-group\">\r\n          <label>Visual Message Waiting Indicator Policy</label>\r\n          <mat-form-field appearance=\"outline\">\r\n            <mat-select\r\n              formControlName=\"visualMWI\"\r\n              (selectionChange)=\"onChangeField('visualMWI')\">\r\n              <mat-option\r\n                *ngFor=\"let option of staticOptions.VISUAL_MWI\" [value]=\"option\">\r\n                {{option}}\r\n              </mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-group__separator\"></div>\r\n        <div class=\"form-group\">\r\n          <label>Ring Setting (Phone Idle)</label>\r\n          <mat-form-field appearance=\"outline\">\r\n            <mat-select\r\n              formControlName=\"ringSetting_idle\"\r\n              (selectionChange)=\"onChangeField('ringSetting_idle')\">\r\n              <mat-option *ngFor=\"let option of staticOptions.RING_SETTING_IDLE\" [value]=\"option\">\r\n                {{option}}\r\n              </mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-group__separator\"></div>\r\n        <div class=\"form-group\">\r\n          <label>Call Pickup Audio Alert Setting (Phone Idle)</label>\r\n          <mat-form-field appearance=\"outline\">\r\n            <mat-select name=\"pickupAAS_idle\"\r\n              formControlName=\"pickupAAS_idle\"\r\n              (selectionChange)=\"onChangeField('pickupAAS_idle')\">\r\n              <mat-option *ngFor=\"let option of staticOptions.CALL_PICKUP_GROUP_AUDIO_SETTING_PHONE_IDLE\" [value]=\"option\">\r\n                {{option}}\r\n              </mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-group__separator\"></div>\r\n        <div class=\"form-group\">\r\n          <label>Monitoring Calling Search Space</label>\r\n          <mat-form-field appearance=\"outline\">\r\n            <input\r\n              [matAutocomplete]=\"auto\"\r\n              matInput\r\n              (input)=\"onAutocomplete('monitorCSS')\"\r\n              formControlName=\"monitorCSS\">\r\n            <mat-autocomplete\r\n              #auto=\"matAutocomplete\"\r\n              (optionSelected)=\"onChangeField('monitorCSS')\">\r\n              <mat-option  *ngFor=\"let option of filteredMonitorCssList\" [value]=\"option\" >\r\n                {{option}}\r\n              </mat-option>\r\n            </mat-autocomplete>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-group__separator\"></div>\r\n        <div class=\"form-group\">\r\n          <label>Audible Message Waiting Indicator Policy</label>\r\n          <mat-form-field appearance=\"outline\">\r\n            <mat-select\r\n              formControlName=\"audibleMWI\"\r\n              (selectionChange)=\"onChangeField('audibleMWI')\">\r\n              <mat-option *ngFor=\"let option of staticOptions.DEFAULT_ON_OFF\" [value]=\"option\">\r\n                {{option}}\r\n              </mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-group__separator\"></div>\r\n        <div class=\"form-group\">\r\n          <label>Ring Setting (Phone Active)</label>\r\n          <mat-form-field appearance=\"outline\">\r\n            <mat-select\r\n              formControlName=\"ringSetting_active\"\r\n              (selectionChange)=\"onChangeField('ringSetting_active')\">\r\n              <mat-option *ngFor=\"let option of staticOptions.RING_SETTING_ACTIVE\" [value]=\"option\">\r\n                {{option}}\r\n              </mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-group__separator\"></div>\r\n        <div class=\"form-group\">\r\n          <label>Call Pickup Audio Alert Setting (Phone Active)</label>\r\n          <mat-form-field appearance=\"outline\">\r\n            <mat-select\r\n              formControlName=\"pickupAAS_active\"\r\n              (selectionChange)=\"onChangeField('pickupAAS_active')\">\r\n              <mat-option\r\n                *ngFor=\"let option of staticOptions.CALL_PICKUP_GROUP_AUDIO_SETTING_PHONE_ACTIVE\"\r\n                [value]=\"option\">\r\n                {{option}}\r\n              </mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-group__separator\"></div>\r\n        <div class=\"form-group\">\r\n          <label>Log Missed Calls</label>\r\n          <mat-slide-toggle class=\"custom-toggle\" name=\"logMissedCalls\" formControlName=\"logMissedCall\"></mat-slide-toggle>\r\n        </div>\r\n      </app-line-details-block>\r\n      <div class=\"form-group__separator_2px\"></div>\r\n      <app-line-details-block [title]=\"'Forwardred call information display'\">\r\n        <div class=\"form-group\">\r\n          <label>Caller Name</label>\r\n          <mat-slide-toggle class=\"custom-toggle\" name=\"callerName\" formControlName=\"callerName\" (change)=\"onChangeField('callerName')\"></mat-slide-toggle>\r\n        </div>\r\n        <div class=\"form-group__separator\"></div>\r\n        <div class=\"form-group\">\r\n          <label>Redirected Number</label>\r\n          <mat-slide-toggle class=\"custom-toggle\" name=\"redirectedNumber\" formControlName=\"redirectedNumber\" (change)=\"onChangeField('redirectedNumber')\"></mat-slide-toggle>\r\n        </div>\r\n        <div class=\"form-group__separator\"></div>\r\n        <div class=\"form-group\">\r\n          <label>Caller Number</label>\r\n          <mat-slide-toggle class=\"custom-toggle\" name=\"callerNumber\" formControlName=\"callerNumber\" (change)=\"onChangeField('callerNumber')\"></mat-slide-toggle>\r\n        </div>\r\n        <div class=\"form-group__separator\"></div>\r\n        <div class=\"form-group\">\r\n          <label>Dialed Number</label>\r\n          <mat-slide-toggle class=\"custom-toggle\" name=\"dialedNumber\" formControlName=\"dialedNumber\" (change)=\"onChangeField('dialedNumber')\"></mat-slide-toggle>\r\n        </div>\r\n      </app-line-details-block>\r\n  </ng-container>\r\n\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport { LineAssociation } from '../../classes/line-association';\r\nimport { LineAssociationInterface } from '../../classes/line-association-interface';\r\n\r\n@Component({\r\n  selector: \"app-associated-line-row\",\r\n  templateUrl: \"./associated-line-row.component.html\",\r\n  styleUrls: [\"./associated-line-row.component.scss\"]\r\n})\r\nexport class AssociatedLineRowComponent {\r\n  @Input() line!: LineAssociation | LineAssociationInterface;\r\n  @Input() toggled: boolean = false;\r\n\r\n  @Output() toggleAssociatedLine = new EventEmitter<string>();\r\n  @Output() removeAssociatedLine = new EventEmitter();\r\n\r\n  constructor() {\r\n  }\r\n\r\n  onToggleDetails(): void {\r\n    this.toggled = !this.toggled;\r\n    this.toggleAssociatedLine.emit(this.toggled ? this.line.displayLabel : '')\r\n  }\r\n\r\n  onLineRemove(): void {\r\n      this.removeAssociatedLine.emit();\r\n  }\r\n}\r\n","<div class=\"line-item\">\r\n    <div class=\"line-informations\">\r\n        <div class=\"line-drag\">\r\n          <i class=\"app-icon icon-dragger-vertical\"></i>\r\n        </div>\r\n        <div class=\"line-label\">Button Position {{ line.position }}</div>\r\n        <div class=\"line-sep flex-box\">\r\n          <div class=\"app-icon icon-vertical-divider\"></div>\r\n          <div class=\"line-dn-box\">Line {{line.directoryNumber.directoryNumber}}</div>\r\n        </div>\r\n        <div class=\"line-name\">{{ line.displayLabel }}</div>\r\n    </div>\r\n    <div class=\"line-actions\">\r\n        <div class=\"line-delete\">\r\n          <i class=\"app-icon icon-delete\" (click)=\"onLineRemove()\"></i>\r\n        </div>\r\n        <div class=\"line-toggle-details\" (click)=\"onToggleDetails()\">\r\n          <i class=\"app-icon icon-arrow-right\"></i>\r\n        </div>\r\n    </div>\r\n</div>\r\n","import { Component, Inject, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n  selector: 'app-info-dialog',\r\n  templateUrl: './info-dialog.component.html',\r\n  styleUrls: ['./info-dialog.component.scss'],\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class InfoDialogComponent implements OnInit {\r\n  public confirmButtonText = 'OK';\r\n  public message = '';\r\n  public title = '';\r\n\r\n  constructor(\r\n    public dialogRef: MatDialogRef<any>,\r\n    @Inject(MAT_DIALOG_DATA) public data: InfoDialogConfig\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.confirmButtonText = this.data.confirmButtonText || '';\r\n    this.message = this.data.message || '';\r\n    this.title = this.data.title || '';\r\n  }\r\n\r\n  public onClose(val: boolean): void {\r\n    this.dialogRef.close(val);\r\n  }\r\n}\r\n\r\nexport class InfoDialogConfig {\r\n  message!: string;\r\n  title!: string;\r\n  confirmButtonText!: string;\r\n}\r\n","<div id=\"info-dialog\" class=\"app-dialog\" aria-labelledby=\"info-dialog-label\" role=\"dialog\">\r\n  <h3 *ngIf=\"title\" class=\"app-dialog-title\">{{title}}</h3>\r\n  <div mat-dialog-content *ngIf=\"message\" class=\"app-dialog-content\">\r\n    <div [innerHTML]=\"message\"></div>\r\n  </div>\r\n  <div mat-dialog-actions class=\"flex-gap-container\">\r\n    <button class=\"app-dialog-button app-dialog-cancel-button\" (click)=\"onClose(false)\">\r\n      Cancel\r\n    </button>\r\n    <button class=\"app-dialog-button app-dialog-confirm-button\" (click)=\"onClose(true)\">\r\n      {{confirmButtonText}}\r\n    </button>\r\n  </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { APIService } from './services/api.service';\r\nimport { AppLoaderComponent } from './utils/app-loader/app-loader';\r\nimport { UserService } from './services/user.service';\r\nimport { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\r\nimport { AuthInterceptor } from './interseptors/auth.interceptor';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MaterialModule } from './material.module';\r\nimport { NotificationService } from './services/notification.service';\r\nimport { NotificationsComponent } from './notifications/notification.component';\r\nimport { RemoveKynFromIBMService } from './services/removeKynFromIBM.service';\r\nimport { SiteSettingsService } from './services/site-settings.service';\r\nimport { LazyLoadingSelectComponent } from './lazy-loading-select/lazy-loading-select.component';\r\nimport { DnsService } from './services/dns.service';\r\nimport { LineService } from './services/line.service';\r\nimport { DeviceListComponent } from './device-list/device-list.component';\r\nimport { DeviceManageWidgetComponent } from './device-manage-widget.component';\r\nimport { DeviceAssociatedLineComponent } from './device-associated-line/device-associated-line.component';\r\nimport {\r\n  DeviceAssociatedLineExtensionComponent\r\n} from './device-associated-line/device-associated-line-extension/device-associated-line-extension.component';\r\nimport {\r\n  DeviceAssociatedLineDetailsBoxComponent\r\n} from './device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component';\r\nimport { AssociatedLineRowComponent } from './device-associated-line/associated-line-row/associated-line-row.component';\r\nimport { DeviceService } from './services/device.service';\r\nimport { InfoDialogComponent } from './confirm-dialog/info-dialog.component';\r\nimport { ValidationService } from './services/validation.service';\r\nimport { DeviceInfoComponent } from './device-info/device-info.component';\r\nimport { MacAddressPipe } from './pipes/mac-address.pipe';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    AppLoaderComponent,\r\n    NotificationsComponent,\r\n    LazyLoadingSelectComponent,\r\n    DeviceListComponent,\r\n    DeviceManageWidgetComponent,\r\n    DeviceAssociatedLineComponent,\r\n    DeviceAssociatedLineExtensionComponent,\r\n    DeviceAssociatedLineDetailsBoxComponent,\r\n    AssociatedLineRowComponent,\r\n    InfoDialogComponent,\r\n    DeviceInfoComponent,\r\n    MacAddressPipe,\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    BrowserModule,\r\n    BrowserAnimationsModule,\r\n    FormsModule,\r\n    ReactiveFormsModule,\r\n    HttpClientModule,\r\n    MaterialModule,\r\n  ],\r\n  providers: [\r\n    APIService,\r\n    UserService,\r\n    NotificationService,\r\n    RemoveKynFromIBMService,\r\n    SiteSettingsService,\r\n    DnsService,\r\n    LineService,\r\n    DeviceService,\r\n    ValidationService,\r\n    {provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true}\r\n  ],\r\n  exports: [\r\n    DeviceManageWidgetComponent\r\n  ]\r\n\r\n})\r\nexport class UserDeviceManageModule {\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.APIService","DeviceTypes","i2.LineService","i1","i1.NotificationService","i2.SiteSettingsService","i4","i7","i8","i2","i1.SiteSettingsService","i1.UserService","i2.DnsService","i9","i2.DeviceService","i3.APIService","i4.LineService","i5.SiteSettingsService","i6.ValidationService","i8.DnsService","i10","i16.AppLoaderComponent","i17.DeviceAssociatedLineExtensionComponent","i18.DeviceInfoComponent","i19.MacAddressPipe","i2.APIService","i3.SiteSettingsService","i5.DeviceService","i6","i7.ValidationService","i11","i12","i16.LazyLoadingSelectComponent","i17.DeviceAssociatedLineDetailsBoxComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAMa,UAAU,CAAA;AAGrB,IAAA,WAAA,CACU,UAAsB,EAAA;AAAtB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AAFhC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC;KAI5E;AAED,IAAA,KAAK,CAAC,GAAW,EAAE,MAAY,EAAE,KAAe,EAAA;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACvC,QAAA,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAC,CAAC,CAAC;KACrG;AAED,IAAA,IAAI,CAAC,GAAW,EAAE,IAAS,EAAE,MAAM,GAAG,EAAE,EAAA;AACtC,QAAA,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC;AACpB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAC,CAAC,CAAC;KAC5G;;AAGD,IAAA,YAAY,CAAC,GAAW,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAA;AAC9D,QAAA,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;AACvC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE;YACnD,OAAO;AACP,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;AAC1C,SAAA,CAAC,CAAC;KACJ;IAED,GAAG,CAAC,GAAW,EAAE,IAAA,GAAY,IAAI,EAAE,MAAM,GAAG,EAAE,EAAA;AAC5C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,EAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC;KAC3G;AAED,IAAA,MAAM,CAAC,GAAW,EAAE,MAAM,GAAG,EAAE,EAAA;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,EAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC;KACxG;IAED,eAAe,CAAC,GAAW,EAAE,QAAgB,EAAE,UAAkB,EAAE,gBAAgB,GAAG,EAAE,EAAE,KAAe,EAAA;AACvG,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,EAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAC,CAAC,CAAC;QAC7G,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAoB,CAAC;KAC1D;AAEO,IAAA,oBAAoB,CAAC,MAAW,EAAA;QACtC,MAAM,MAAM,GAAQ,EAAE,CAAC;QAEvB,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACrC,YAAA,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE;gBACf,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC3C,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;AACzF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAEO,IAAA,UAAU,CAAC,KAAe,EAAA;AAChC,QAAA,IAAI,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAChC,QAAA,IAAI,KAAK,EAAE;YACT,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC7C,SAAA;AACD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC7D,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,GAAE,KAAK,CAAC,CAAC;AAC5D,QAAA,OAAO,OAAO,CAAC;KAChB;IAEO,kBAAkB,CAAC,IAAS,EAAE,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAA;QAC9D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACvC,IAAI,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,mBAAmB,CAAC,EACzD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;AAC3B,QAAA,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;KAC3D;;wGA9EU,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;4GAAV,UAAU,EAAA,CAAA,CAAA;4FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,UAAU;;;ACLJ,MAAM,GAAG,GAAG;AACjB,IAAA,UAAU,EAAE,4CAA4C;AACxD,IAAA,kBAAkB,EAAE,0CAA0C;AAC9D,IAAA,kBAAkB,EAAE,wCAAwC;AAC5D,IAAA,UAAU,EAAE,sCAAsC;AAClD,IAAA,kBAAkB,EAAE,wBAAwB;AAC5C,IAAA,QAAQ,EAAE,0CAA0C;AACpD,IAAA,YAAY,EAAE,4CAA4C;AAC1D,IAAA,aAAa,EAAE,6CAA6C;AAC5D,IAAA,iBAAiB,EAAE,kDAAkD;AACrE,IAAA,sBAAsB,EAAE,2CAA2C;AACnE,IAAA,WAAW,EAAE,gDAAgD;AAC7D,IAAA,iBAAiB,EAAE,2EAA2E;AAC9F,IAAA,iBAAiB,EAAE,0CAA0C;AAC7D,IAAA,cAAc,EAAE,iEAAiE;AACjF,IAAA,wBAAwB,EAAE,iCAAiC;AAC3D,IAAA,kBAAkB,EAAE,gDAAgD;AACpE,IAAA,oBAAoB,EAAE,wDAAwD;AAC9E,IAAA,iBAAiB,EAAE,iDAAiD;AACpE,IAAA,aAAa,EAAE,6BAA6B;AAC5C,IAAA,UAAU,EAAE,uCAAuC;AACnD,IAAA,4BAA4B,EAAE,+DAA+D;AAC7F,IAAA,oCAAoC,EAAE,+DAA+D;AACrG,IAAA,kCAAkC,EAAE,mFAAmF;AACvH,IAAA,gCAAgC,EAAE,2DAA2D;AAC7F,IAAA,uBAAuB,EAAE,mDAAmD;AAC5E,IAAA,gBAAgB,EAAE,+DAA+D;AACjF,IAAA,kBAAkB,EAAE,uEAAuE;AAC3F,IAAA,wBAAwB,EAAE,4CAA4C;CACvE,CAAC;AACK,MAAM,aAAa,GAAG;AAC3B,IAAA,KAAK,EAAE,0EAA0E;QAC/E,+CAA+C;QAC/C,yDAAyD;CAC5D,CAAC;AAEK,MAAM,mBAAmB,GAAG;AACjC,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,KAAK,EAAE,CAAC;CACT,CAAA;AACM,MAAM,uBAAuB,GAAG;IACrC,EAAE;IACF,EAAE;IACF,GAAG;IACH,GAAG;CACJ,CAAC;AACK,MAAM,cAAc,GAAG;IAC5B,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;CACJ,CAAC;AACK,MAAM,eAAe,GAAG;IAC7B,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;CACJ,CAAC;AACK,MAAM,sBAAsB,GAAG;IACpC,mBAAmB;IACnB,iBAAiB;CAClB,CAAC;AACK,MAAM,cAAc,GAAG;AAC5B,IAAA,4CAA4C,EAAE,CAAC,oBAAoB,EAAE,SAAS,EAAE,WAAW,CAAC;AAC5F,IAAA,0CAA0C,EAAE,CAAC,oBAAoB,EAAE,SAAS,EAAE,WAAW,CAAC;AAC1F,IAAA,gBAAgB,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;AACvC,IAAA,cAAc,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC;AACxC,IAAA,cAAc,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC;AAClD,IAAA,GAAG,EAAE,CAAC,kCAAkC,EAAE,aAAa,EAAE,YAAY,CAAC;AACtE,IAAA,wBAAwB,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC;IAChE,iBAAiB,EAAE,CAAC,oBAAoB,EAAE,aAAa,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,CAAC;AACpH,IAAA,SAAS,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;AACtD,IAAA,gBAAgB,EAAE,CAAC,UAAU,EAAE,4BAA4B,EAAE,kCAAkC,CAAC;AAChG,IAAA,eAAe,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;AACpD,IAAA,mBAAmB,EAAE,CAAC,MAAM,EAAE,uBAAuB,CAAC;AACtD,IAAA,WAAW,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAC1G,IAAA,cAAc,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC;IACnD,iBAAiB,EAAE,CAAC,oBAAoB,EAAE,SAAS,EAAG,YAAY,EAAG,WAAW,EAAG,MAAM,CAAC;AAC1F,IAAA,mBAAmB,EAAE,CAAC,oBAAoB,EAAE,SAAS,EAAG,YAAY,EAAG,WAAW,EAAG,MAAM,EAAE,WAAW,CAAC;IACzG,oBAAoB,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC;AACrE,IAAA,cAAc,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC;IACrD,UAAU,EAAE,CAAC,mBAAmB,EAAE,kBAAkB,EAAG,aAAa,EAAG,YAAY,EAAG,MAAM,CAAC;AAC7F,IAAA,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC;IACxF,YAAY,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC;AAC9C,IAAA,cAAc,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;AAC3D,IAAA,uBAAuB,EAAE,CAAC,2BAA2B,EAAE,oCAAoC,EAAE,qBAAqB,CAAC;IACnH,YAAY,EAAE,CAAC,SAAS,EAAE,kBAAkB,EAAE,mCAAmC,EAAE,cAAc,CAAC;AAClG,IAAA,kBAAkB,EAAE,CAAC,iBAAiB,EAAE,UAAU,EAAE,SAAS,CAAC;IAC9D,qBAAqB,EAAE,CAAC,sBAAsB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,cAAc,CAAE;IAC7F,mBAAmB,EAAE,CAAC,0BAA0B,EAAE,gBAAgB,EAAE,6CAA6C,EAAE,6CAA6C,CAAC;AACjK,IAAA,SAAS,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,0BAA0B,CAAC;AAC9D,IAAA,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;IACrC,4BAA4B,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;CACtE,CAAC;AAEK,MAAM,YAAY,GAAG;AAC1B,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,oBAAoB,EAAE,sBAAsB;CAC7C;;MCjGY,YAAY,CAAA;IAuEvB,WAAY,CAAA,YAAoC,EAAE,gBAA0B,EAAA;;AAC1E,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;AAEjC,QAAA,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAClC,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ,KAAK,MAAM,CAAC;AACjD,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,oBAAoB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,EAAE,CAAC;AAClC,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,EAAE,CAAC;AAC9B,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,EAAE,CAAC;AACvB,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,sBAAsB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,EAAE,CAAC;AACrC,SAAA;AACD;;;AAGG;KACJ;AACF;;ACtFD,MAAM,MAAM,GAAG;IACb,SAAS,EAAE,GAAG,CAAC,QAAQ;IACvB,WAAW,EAAE,GAAG,CAAC,YAAY;IAC7B,YAAY,EAAE,GAAG,CAAC,aAAa;IAC/B,gBAAgB,EAAE,GAAG,CAAC,iBAAiB;CACxC,CAAA;MAGY,mBAAmB,CAAA;AAW9B,IAAA,IAAI,uBAAuB,GAAA;;QACzB,OAAO,CAAA,MAAA,IAAI,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,KAAI,EAAE,CAAC;KAC3C;AAED,IAAA,IAAI,WAAW,GAAA;;QACb,OAAO,CAAA,MAAA,IAAI,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,gBAAgB,KAAI,EAAE,CAAC;KAClD;AAED,IAAA,WAAA,CACU,UAAsB,EAAA;AAAtB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AAE9B,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;KACnB;IACM,mBAAmB,CAAC,MAAc,EAAE,KAAa,EAAA;QACtD,IAAG,CAAC,MAAM,EAAE;YACV,OAAO;AACR,SAAA;;AAED,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACjE,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,GAAa,KAAI;AAC1B,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;YAC1B,OAAO,IAAI,CAAC,OAAO,CAAC;SACrB,CAAC,CAAC,CAAC;KACP;AAEM,IAAA,yBAAyB,CAAC,MAAc,EAAA;;QAE7C,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC;AAChG,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,SAAmB,KAAK,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAAC,CAAC;;KAEhF;AAEM,IAAA,eAAe,CAAC,MAAc,EAAE,YAAsB,EAAE,iBAA0B,EAAA;AACvF;;;;AAIG;QACH,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;AACnF,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,YAAmC,KAAI;AAChD,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC;AACxE,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;AACpE,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,YAAY,CAAC,kBAAkB,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC;SACvF,CAAC,CAAC,CAAA;;KAEN;AAEM,IAAA,aAAa,CAAC,MAAc,EAAA;QACjC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;;KAEnG;AAEM,IAAA,mBAAmB,CAAC,MAAc,EAAA;QACvC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;;KAE7F;;iHAnEU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qHAAnB,mBAAmB,EAAA,CAAA,CAAA;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;;;ACZJ,MAAM,cAAc,GAAG,CAAC,KAAU,EAAE,OAAuB,KAAI;IACpE,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,IAAA,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;QAC7B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACpE,KAAA;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,KAAI;QACnC,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE;YACnF,MAAc,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAC7E,SAAA;AAAM,aAAA,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE;YACnE,MAAc,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;AACpD,SAAA;AAAM,aAAA;YACJ,MAAc,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;AACnC,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;;MCXY,aAAa,CAAA;AAiCtB,IAAA,WAAA,CAAY,MAAqB,EAAA;AAC7B,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;KACzB;AAED,IAAA,QAAQ,CAAC,MAAqB,EAAA;;AAC1B,QAAA,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AACtC,QAAA,MAAM,YAAY,GAAG;AACjB,YAAA,UAAU,EAAE,IAAI,WAAW,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,UAAU,IAAI,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;YACpF,QAAQ,EAAE,IAAI,SAAS,CAAC;AACpB,gBAAA,OAAO,EAAE,IAAI,WAAW,CAAC,CAAA,MAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,QAAQ,0CAAE,OAAO,KAAI,KAAK,CAAC;gBAC5D,aAAa,EAAE,IAAI,WAAW,CAAC,EAAC,KAAK,EAAE,CAAA,CAAA,EAAA,GAAA,MAAM,KAAN,IAAA,IAAA,MAAM,uBAAN,MAAM,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,KAAI,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AACjG,gBAAA,eAAe,EAAE,IAAI,WAAW,CAAC,CAAA,MAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,QAAQ,0CAAE,eAAe,KAAI,SAAS,CAAC;aACnF,CAAC;AACF,YAAA,YAAY,EAAE,IAAI,WAAW,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,YAAY,IAAI,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AACxF,YAAA,KAAK,EAAE,IAAI,SAAS,EACf,MAAA,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,0CAAE,GAAG,CAAC,CAAC,IAAI,KAAI;gBACxB,OAAO,IAAI,SAAS,CAAC;oBACjB,IAAI,EAAE,IAAI,WAAW,CAAC,EAAC,KAAK,EAAE,CAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,uBAAJ,IAAI,CAAE,IAAI,KAAI,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;oBACvE,SAAS,EAAE,IAAI,WAAW,CAAC,EAAC,KAAK,EAAE,CAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,uBAAJ,IAAI,CAAE,SAAS,KAAI,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;oBACjF,MAAM,EAAE,IAAI,WAAW,CAAC,EAAC,KAAK,EAAE,CAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,uBAAJ,IAAI,CAAE,SAAS,KAAI,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AACjF,iBAAA,CAAC,CAAC;AACP,aAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,EACX;AACD,YAAA,eAAe,EAAE,IAAI,WAAW,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,eAAe,IAAI,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AAC1F,YAAA,KAAK,EAAE,IAAI,WAAW,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AAC1E,YAAA,SAAS,EAAE,IAAI,WAAW,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,SAAS,IAAI,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AAClF,YAAA,eAAe,EAAE,IAAI,WAAW,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,eAAe,IAAI,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AAC9F,YAAA,eAAe,EAAE,IAAI,WAAW,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,eAAe,IAAI,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AAC9F,YAAA,eAAe,EAAE,IAAI,WAAW,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,eAAe,IAAI,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AAC9F,YAAA,IAAI,EAAE,IAAI,SAAS,EACd,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,EAC1D;SACJ,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;KAC7C;IAEH,cAAc,GAAA;AACV,QAAA,MAAM,cAAc,GAAa,CAAC,MAAM,CAAC,CAAC;AAC1C,QAAA,OAAO,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;KAC/C;AACJ;;MC1EY,aAAa,CAAA;AAWxB,IAAA,WAAA,CAAY,aAAqC,EAAA;QAC/C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC;;AAEzC,QAAA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACnD,YAAA,IAAI,CAAC,YAAY,GAAG,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,CAAA,EAAI,IAAI,CAAC,kBAAkB,CAAA,CAAE,CAAC;AAC1E,SAAA;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,cAAc,GAAA;AACZ,QAAA,OAAO,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,yBAAyB,CAAC,CAAC,CAAC;KAClF;AAED,IAAA,KAAK,CAAC,aAAkB,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC;KACjG;IAED,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AACtC,QAAA,MAAM,YAAY,GAAG;YACnB,eAAe,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,eAAe,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC7F,YAAA,kBAAkB,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;SAC7E,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;KAC7C;AACF;;MCpCY,mBAAmB,CAAA;AAS9B,IAAA,WAAA,CAAY,mBAAiD,EAAA;QAC3D,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,mBAAmB,IAAI,EAAE,CAAC,CAAC;KAChD;IAED,cAAc,GAAA;QACZ,OAAO,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;KACvC;AACF;;MCfY,kBAAkB,CAAA;AAa7B,IAAA,WAAA,CAAY,kBAAgD,EAAA;QAC1D,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAEM,cAAc,GAAA;QACnB,OAAO,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;KAC/D;IAED,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AACtC,QAAA,MAAM,YAAY,GAAG;YACnB,OAAO,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,EAAC,CAAC;YACtC,6BAA6B,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,6BAA6B,IAAI,EAAE,EAAC,CAAC;SACnF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;KAC7C;IAEM,SAAS,GAAA;QACd,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE;AACrC,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACrB,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;YAC7B,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAEO,kBAAkB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;KAC3F;AACF;;MCvCY,eAAe,CAAA;IAiD1B,WAAY,CAAA,eAAoB,EAAE,aAAgC,EAAA;AAhBlE,QAAA,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;AACjB,QAAA,IAAa,CAAA,aAAA,GAAG,EAAE,CAAC;AAYnB,QAAA,IAAM,CAAA,MAAA,GAAG,KAAK,CAAC;AACf,QAAA,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QAGjB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,IAAI,EAAE,CAAC,CAAC;AAC3C,QAAA,IAAI,eAAe,EAAE;YACnB,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,IAAI,IAAI,CAAC;YAC3C,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC,QAAQ,IAAI,IAAI,CAAC;YACjD,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC,SAAS,IAAI,EAAE,CAAC;YACjD,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC,YAAY,IAAI,EAAE,CAAC;YACvD,IAAI,CAAC,iBAAiB,GAAG,eAAe,CAAC,iBAAiB,IAAI,EAAE,CAAC;AACjE,YAAA,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC,QAAQ,IAAI,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC;YACvE,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC,gBAAgB,IAAI,IAAI,CAAC;YACjE,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,WAAW,IAAI,IAAI,CAAC;YACvD,IAAI,CAAC,eAAe,GAAG,IAAI,aAAa,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;YAC1E,IAAI,CAAC,UAAU,GAAG,IAAI,kBAAkB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YACrE,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC,eAAe,IAAI,gBAAgB,CAAC,QAAQ,CAAC;YACpF,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC,gBAAgB,IAAI,EAAE,CAAC;YAC/D,IAAI,CAAC,oBAAoB,GAAG,eAAe,CAAC,oBAAoB,IAAI,sBAAsB,CAAC,CAAC,CAAC,CAAC;YAC9F,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC,SAAS,IAAI,EAAE,CAAC;YACjD,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,UAAU,IAAI,EAAE,CAAC;YACnD,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC,gBAAgB,IAAI,EAAE,CAAC;YAC/D,IAAI,CAAC,kBAAkB,GAAG,eAAe,CAAC,kBAAkB,IAAI,EAAE,CAAC;YACnE,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC,cAAc,IAAI,EAAE,CAAC;YAC3D,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC,gBAAgB,IAAI,EAAE,CAAC;YAC/D,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,UAAU,IAAI,EAAE,CAAC;YACnD,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,aAAa,IAAI,IAAI,CAAC;YAC3D,IAAI,CAAC,eAAe,GAAG,IAAI,mBAAmB,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;AAChF,YAAA,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,WAAW,IAAI,eAAe,CAAC,OAAO,IAAI,EAAE,CAAC;YAChF,IAAI,CAAC,kBAAkB,GAAG,eAAe,CAAC,kBAAkB,IAAI,EAAE,CAAC;AACnE,YAAA,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC;AAC/C,YAAA,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC;AAC7C,YAAA,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC,YAAY,CAAC;AACjD,YAAA,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC;AAC/C,YAAA,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC,YAAY,CAAC;AACjD,YAAA,IAAI,CAAC,qBAAqB,GAAG,eAAe,CAAC,qBAAqB,CAAC;AACnE,YAAA,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC,YAAY,CAAC;AACjD,YAAA,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC,eAAe,CAAC;AACvD,YAAA,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC;AAC/C,YAAA,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC,eAAe,CAAC;AACxD,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;KAC9B;IAED,cAAc,GAAA;QACZ,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;AACrK,QAAA,OAAO,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;KAC7C;IAED,WAAW,GAAA;AACT,QAAA,OAAO,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;KAC/D;IAED,gBAAgB,GAAA;KAEf;AAED;;;;;;;;AAQG;AAEH,IAAA,QAAQ,CAAC,aAAgC,EAAA;AACvC,QAAA,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AACtC,QAAA,MAAM,YAAY,GAAG;YACnB,YAAY,EAAE,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAC7G,YAAA,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;YAC9D,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1F,YAAA,gBAAgB,EAAE,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,EAAE,CAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,WAAW,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,GAAG,CAAC,CAAC,CAAC;AACxG,YAAA,eAAe,EAAE,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC;YAC7C,gBAAgB,EAAE,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,iBAAiB,EAClG,CAAC,gBAAgB,CAAC,YAAY,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;AACxE,YAAA,oBAAoB,EAAE,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC;AACvD,YAAA,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;AACjC,YAAA,UAAU,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;AACnC,YAAA,gBAAgB,EAAE,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC;AAC/C,YAAA,kBAAkB,EAAE,CAAC,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC;AACnD,YAAA,cAAc,EAAE,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;AAC3C,YAAA,gBAAgB,EAAE,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC;AAC/C,YAAA,UAAU,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;AACnC,YAAA,aAAa,EAAE,CAAC,IAAI,CAAC,aAAa,KAAK,MAAM,CAAC;AAC9C,YAAA,UAAU,EAAG,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,KAAK,MAAM,CAAC;AACjF,YAAA,YAAY,EAAE,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,YAAY,KAAK,MAAM,CAAC;AACpF,YAAA,gBAAgB,EAAE,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,gBAAgB,KAAK,MAAM,CAAC;AAC5F,YAAA,YAAY,EAAE,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,YAAY,KAAK,MAAM,CAAE;;;;SAKtF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACpE,SAAA;QACD,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1D,SAAA;KACF;AAED,IAAA,MAAM,CAAC,IAA2B,EAAA;QAChC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,KAAK,IAAI,CAAC,eAAe,CAAC,eAAe;YAClF,IAAI,CAAC,eAAe,CAAC,kBAAkB,KAAK,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC;KACvF;AAED,IAAA,SAAS,CAAC,IAAgD,EAAA;QACxD,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;KAClF;AACF;;MCzKY,MAAM,CAAA;IAyBjB,WAAY,CAAA,MAAW,EAAE,iBAAoC,EAAA;;AAnB7D,QAAA,IAA0B,CAAA,0BAAA,GAAG,KAAK,CAAC;AAgBnC,QAAA,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AAIlB,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AACpC,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAChC,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACtC,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAC5C,YAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAC9C,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAC5C,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAChC,YAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAC9C,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACtC,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC5D,YAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;AACpC,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;YAExB,IAAI,CAAC,gBAAgB,GAAG,CAAA,CAAA,EAAA,GAAA,MAAM,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM;gBACrD,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,eAAe,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,GAAG,EAAE,CAAC;AACjG,SAAA;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AACtC,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,SAAS,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AAC1D,YAAA,kBAAkB,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AAC5E,YAAA,WAAW,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;AAC/D,YAAA,QAAQ,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AACxD,YAAA,eAAe,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,eAAe,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;AACvE,YAAA,cAAc,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AACpE,YAAA,QAAQ,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AACxD,YAAA,cAAc,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;AACrE,YAAA,sBAAsB,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,sBAAsB,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;AACrF,YAAA,eAAe,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,eAAe,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AACtE,YAAA,WAAW,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;SAC/D,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;KAC7C;IAED,cAAc,GAAA;AACZ,QAAA,MAAM,cAAc,GAAa,CAAC,MAAM,EAAE,WAAW,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,4BAA4B,CAAC,CAAC;AAC/J,QAAA,OAAO,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;KAC7C;IAED,kBAAkB,GAAA;QAChB,MAAM,cAAc,GAAa,CAAC,MAAM,EAAE,kBAAkB,EAAE,4BAA4B,CAAC,CAAC;AAC5F,QAAA,OAAO,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;KAC7C;IAED,wBAAwB,GAAA;AACtB,QAAA,MAAM,cAAc,GAAa,CAAC,MAAM,EAAE,WAAW,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,4BAA4B,CAAC,CAAC;AAC/H,QAAA,OAAO,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;KAC7C;AACF,CAAA;AA+DD,IAAY,gBAIX,CAAA;AAJD,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,yBAAoC,CAAA;AACpC,IAAA,gBAAA,CAAA,cAAA,CAAA,GAAA,kCAAiD,CAAA;AACjD,IAAA,gBAAA,CAAA,mBAAA,CAAA,GAAA,kCAAsD,CAAA;AACxD,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,GAI3B,EAAA,CAAA,CAAA,CAAA;MAiHY,cAAc,CAAA;AAMzB,IAAA,WAAA,GAAA,GAAgB;AACjB,CAAA;AAED,IAAY,cAKX,CAAA;AALD,CAAA,UAAY,cAAc,EAAA;IACxB,cAAA,CAAA,cAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;IACR,cAAA,CAAA,cAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;IACT,cAAA,CAAA,cAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;IACT,cAAA,CAAA,cAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACT,CAAC,EALW,cAAc,KAAd,cAAc,GAKzB,EAAA,CAAA,CAAA,CAAA;AACD,IAAY,UAGX,CAAA;AAHD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,SAAkB,CAAA;AAClB,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,gBAAgC,CAAA;AAClC,CAAC,EAHW,UAAU,KAAV,UAAU,GAGrB,EAAA,CAAA,CAAA,CAAA;AAED,IAAYC,aAIX,CAAA;AAJD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC,CAAA;AACnC,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,mBAAgC,CAAA;AAClC,CAAC,EAJWA,aAAW,KAAXA,aAAW,GAItB,EAAA,CAAA,CAAA;;MC1RY,cAAc,CAAA;IAqCzB,WAAY,CAAA,IAAS,EAAE,iBAAoC,EAAA;;AACzD,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC1B,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAChC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC9B,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC1B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAE9B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AAClC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AACtC,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;AAChD,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACpC,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC;AAC5D,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AAClC,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC;AAE9D,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AAClC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AAC5C,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AACtC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AACtC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AAClC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACpC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AAEpC,YAAA,IAAI,MAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EAAE;gBACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAW,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACxF,gBAAA,IAAI,MAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EAAE;AACtB,oBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG;;wBAC5B,IAAI,CAAA,EAAA,GAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,gBAAgB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,EAAE;AACpC,4BAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,eAAe,IAAG;AAChD,gCAAA,eAAe,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;gCACxG,eAAe,CAAC,SAAS,GAAG,eAAe,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;gCACzH,eAAe,CAAC,YAAY,GAAG,eAAe,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC;AACpI,6BAAC,CAAC,CAAA;AACH,yBAAA;AACH,qBAAC,CAAC,CAAA;AACH,iBAAA;AACF,aAAA;AAEF,SAAA;QACD,IAAI,CAAC,QAAQ,EAAE,CAAA;KAChB;AAED,IAAA,UAAU,CAAC,eAA2D,EAAE,KAAU,EAAE,KAAa,EAAA;QAC/F,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,eAAe,CAAC,eAAe,KAAK,eAAe,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;QACvI,OAAO,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KAC9C;IAED,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AACtC,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,MAAM,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACvG,YAAA,KAAK,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAC,EAAE;AAClD,oBAAA,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC;AACvC,oBAAA,UAAU,CAAC,QAAQ;iBACpB,CAAC;AACF,YAAA,SAAS,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;AAC3D,YAAA,QAAQ,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAC,EAAE,UAAU,CAAC,QAAQ,CAAC;AAC9E,YAAA,UAAU,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;AAC7D,YAAA,UAAU,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;AAC7D,YAAA,KAAK,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;AACnD,YAAA,eAAe,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,eAAe,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;AACvE,YAAA,UAAU,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;AAC7D,YAAA,YAAY,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;AACjE,YAAA,WAAW,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;AAC/D,YAAA,WAAW,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;AAC/D,YAAA,OAAO,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;AACvD,YAAA,YAAY,EAAE,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;AACvC,YAAA,YAAY,EAAE,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;AACvC,YAAA,WAAW,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,YAAA,uBAAuB,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC;AACvD,YAAA,UAAU,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;YACnC,iBAAiB,EAAE,CAAC,EAAE,CAAC;YACvB,wBAAwB,EAAE,CAAC,EAAE,CAAC;SAC/B,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;KAC7C;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC/B,QAAA,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,IAAG;;YAC3D,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EAAE,CAAC;AAChC,aAAA;AAAM,iBAAA;gBACL,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,EAAE,CAAC;AACjC,aAAA;AACH,SAAC,CAAC,CAAA;KACH;IAED,cAAc,GAAA;AACZ,QAAA,MAAM,cAAc,GAAa,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,CAAC,CAAC;AAC3H,QAAA,OAAO,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;KAC7C;IAED,WAAW,GAAA;AACT,QAAA,MAAM,cAAc,GAAa,CAAC,MAAM,CAAC,CAAC;AAC1C,QAAA,OAAO,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;KAC7C;IACD,yBAAyB,GAAA;QACvB,MAAM,cAAc,GAAa,CAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,aAAa,EAAE,iBAAiB,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,CAAC,CAAC;AAC9O,QAAA,OAAO,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;KAC7C;AAED,IAAA,KAAK,CAAC,aAA8B,EAAA;QAClC,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC;KACjG;AAEF;;AC1JD,MAAM,YAAY,GAAG,UAAU,QAAkB,EAAE,OAAiB,EAAE,OAAe,EAAA;AACnF,IAAA,IAAI,CAAC,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE;AAC/D,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;IACD,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,UAAU,QAAkB,EAAE,OAAiB,EAAE,OAAe,EAAA;AACrF,IAAA,IAAI,CAAC,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE;AAC/D,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAG,EAAA,OAAO,CAAI,CAAA,EAAA,GAAG,CAAI,CAAA,EAAA,OAAO,CAAC,GAAG,CAAC,CAAE,CAAA,CAAC,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,UAAU,QAAkB,EAAE,OAAiB,EAAE,OAAe,EAAA;AAC/E,IAAA,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE;;QAExB,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAG,EAAA,OAAO,CAAI,CAAA,EAAA,GAAG,CAAI,CAAA,EAAA,OAAO,CAAC,GAAG,CAAC,CAAE,CAAA,CAAC,CAAC;AAC7E,KAAA;AAAM,SAAA,IAAI,QAAQ,IAAI,CAAC,OAAO,EAAE;QAC/B,OAAO,CAAA,EAAG,OAAO,CAAA,KAAA,CAAO,CAAC;AAC1B,KAAA;AAAM,SAAA;AACL,QAAA,OAAO,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;AACjE,KAAA;AACH,CAAC,CAAC;MAGW,mBAAmB,CAAA;IAsCvB,OAAO,wBAAwB,CAAC,KAA6B,EAAA;QAClE,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACzB,YAAA,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,EAAE;AACjC,gBAAA,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3D,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/C,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAED,OAAO,wBAAwB,CAAC,KAAsB,EAAA;QACpD,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YACzB,IAAI,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC,eAAe,EAAE;AAC5C,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;YACD,IAAI,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC,eAAe,EAAE;AAC3C,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;YACD,IAAI,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,eAAe,EAAE;gBAC3C,OAAO,CAAC,CAAC,CAAC;AACX,aAAA;AACD,YAAA,MAAM,gBAAgB,GAAG,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC;AAC3D,YAAA,MAAM,gBAAgB,GAAG,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC;YAC3D,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,GAAG,gBAAgB,IAAI,CAAC,GAAG,CAAC,CAAC;AACpG,SAAC,CAAC,CAAC;KACJ;IAED,OAAO,8BAA8B,CAAC,KAAwB,EAAA;QAC5D,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YACzB,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;AAC9B,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;YACD,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;AAC7B,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;YACD,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,EAAE;gBAC7B,OAAO,CAAC,CAAC,CAAC;AACX,aAAA;AACD,YAAA,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC;AAC7B,YAAA,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC;YAC7B,OAAO,CAAC,SAAS,GAAG,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC;AACxE,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,OAAO,uBAAuB,CAAC,KAAU,EAAE,MAAc,EAAA;QACvD,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,KAAI;YACnC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;AAC5B,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;YACD,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;AAC3B,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;YACD,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;gBAC3B,OAAO,CAAC,CAAC,CAAC;AACX,aAAA;AACD,YAAA,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5B,YAAA,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;YAC5B,OAAO,CAAC,SAAS,GAAG,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC;AACxE,SAAC,CAAC,CAAC;KACJ;IAGD,OAAO,IAAI,CAAC,UAAe,EAAE,UAAe,EAAE,IAAY,EAAE,YAAiB,EAAA;QAC3E,IAAI,MAAM,GAAQ,EAAE,CAAC;QACrB,IAAI,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE;AACrC,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AACjD,YAAA,OAAO,UAAU,CAAC;AACnB,SAAA;AACD,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzG,MAAM,MAAM,GAAG,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;QACzF,MAAM;aACH,OAAO,CAAC,GAAG,IAAG;;AAEb,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;;AAExB,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAA,EAAG,IAAI,GAAG,GAAG,GAAG,EAAE,CAAA,EAAG,GAAG,CAAA,CAAE,CAAC,CAAC;AAChH,gBAAA,IAAI,aAAa,EAAE;AACjB,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;wBAChC,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC;AACxC,qBAAA;AAAM,yBAAA;AACL,wBAAA,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC5B,qBAAA;AACF,iBAAA;AACF,aAAA;AAAM,iBAAA,IAAI,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;AACrF,gBAAA,IAAI,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;AACjE,oBAAA,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAA,EAAG,IAAI,GAAG,GAAG,GAAG,EAAE,CAAG,EAAA,GAAG,EAAE,CAAC;oBAClD,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;oBACjG,IAAI,MAAM,KAAK,SAAS,EAAE;wBACxB,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;AACjC,qBAAA;AACF,iBAAA;AACF,aAAA;AAAM,iBAAA,IAAI,UAAU,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3H,gBAAA,MAAM,KAAK,GAAG,UAAU,GAAG,mBAAmB,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;gBACrF,MAAM,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAG,EAAA,IAAI,GAAG,GAAG,GAAG,EAAE,CAAA,EAAG,GAAG,CAAI,CAAA,EAAA,KAAK,CAAE,CAAA,CAAC,CAAC;AACzD,aAAA;AACH,SAAC,CAAC,CAAC;AACL,QAAA,OAAO,MAAM,CAAC;KACf;IAED,OAAO,aAAa,CAAC,KAAU,EAAA;AAC7B,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QACD,QAAQ,OAAO,KAAK;AAClB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,KAAK,CAAC;AACf,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,EAAE,CAAC;AACZ,YAAA;AACE,gBAAA,OAAO,IAAI,CAAC;AACf,SAAA;KACF;AAED,IAAA,OAAO,OAAO,CAAC,IAAS,EAAE,IAAS,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACtD;;AArKM,mBAAA,CAAA,UAAU,GAAG;AAClB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,eAAe,EAAE,cAAc;AAC/B,IAAA,oBAAoB,EAAE,cAAc;AACpC,IAAA,UAAU,EAAE,UAAU,QAAa,EAAE,OAAY,EAAE,OAAe,EAAA;AAChE,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE;AAC/D,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;QAED,IAAI,GAAG,GAAQ,EAAE,CAAC;AAClB,QAAA,OAAO,CAAC,GAAG,CAAC,CAAC,SAAc,KAAI;YAC7B,MAAM,cAAc,GAAG,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,SAAS,CAAC,KAAK,CAAA,CAAE,CAAC;AACvD,YAAA,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,SAAS,CAAC,GAAG,CAAC,CAAE,CAAA,CAAC,CAAC,CAAC;AAClG,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,GAAG,CAAC;KACZ;AACD,IAAA,gBAAgB,EAAE,UAAU,QAAoC,EAAE,OAAmC,EAAE,OAAe,EAAA;AACpH,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE;AAC/D,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,IAAI,GAAG,GAAQ,EAAE,CAAC;AAClB,QAAA,OAAO,CAAC,GAAG,CAAC,CAAC,eAAyC,KAAI;YACxD,MAAM,cAAc,GAAG,CAAG,EAAA,OAAO,IAAI,eAAe,CAAC,QAAQ,GAAG,eAAe,CAAC,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAA,CAAE,CAAC;AACzH,YAAA,MAAM,uBAAuB,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,eAAe,CAAC,KAAK,CAAC,CAAC;YAC5F,IAAI,mBAAmB,CAAC,OAAO,CAAC,uBAAuB,EAAE,eAAe,CAAC,EAAE;AACzE,gBAAA,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,uBAAuB,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;gBACpG,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACzB,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,GAAG,CAAC;KACZ;AACD,IAAA,gBAAgB,EAAE,QAAQ;AAC1B,IAAA,UAAU,EAAE,QAAQ;CACrB,CAAC;iHApCS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qHAAnB,mBAAmB,EAAA,CAAA,CAAA;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;;;MC7BE,YAAY,CAAA;IAEvB,OAAO,aAAa,CAAC,OAAc,EAAE,KAAa,EAAE,UAAgB,EAAE,KAAc,EAAA;QAClF,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QACD,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,OAAO,CAAC;AAChB,SAAA;AACD,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,IAAG;YAC7B,QACE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/E,gBAAA,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAClE,qBAAC,UAAU,IAAI,UAAU,KAAK,MAAM,CAAC,EACvC;AACJ,SAAC,CAAC,CAAC;KACJ;;AAED,IAAA,OAAO,uBAAuB,CAAC,KAAS,EAAE,MAAc,EAAA;QACtD,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YACzB,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;AAC5B,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;YACD,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;AAC3B,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;YACD,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;gBAC3B,OAAO,CAAC,CAAC,CAAC;AACX,aAAA;AACD,YAAA,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5B,YAAA,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;YAC5B,OAAO,CAAC,SAAS,GAAG,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC;AACxE,SAAC,CAAC,CAAC;KACJ;IAED,OAAO,IAAI,CAAC,UAAe,EAAE,UAAe,EAAE,IAAY,EAAE,YAAuB,EAAA;QACjF,IAAI,MAAM,GAAQ,EAAE,CAAC;QACrB,IAAI,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE;AACrC,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AACjD,YAAA,OAAO,UAAU,CAAC;AACnB,SAAA;AACD,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzG,MAAM,MAAM,GAAG,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;QACzF,MAAM;aACH,OAAO,CAAC,GAAG,IAAG;AACb,YAAA,IAAI,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;AAC9E,gBAAA,IAAI,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;AAC1D,oBAAA,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAA,EAAG,IAAI,GAAG,GAAG,GAAG,EAAE,CAAG,EAAA,GAAG,EAAE,CAAC;oBAClD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;oBAC1F,IAAI,MAAM,KAAK,SAAS,EAAE;wBACxB,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;AACjC,qBAAA;AACF,iBAAA;AACF,aAAA;AAAM,iBAAA,IAAI,UAAU,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3H,gBAAA,MAAM,KAAK,GAAG,UAAU,GAAG,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;gBAC9E,MAAM,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAG,EAAA,IAAI,GAAG,GAAG,GAAG,EAAE,CAAA,EAAG,GAAG,CAAI,CAAA,EAAA,KAAK,CAAE,CAAA,CAAC,CAAC;AACzD,aAAA;AACH,SAAC,CAAC,CAAC;AACL,QAAA,OAAO,MAAM,CAAC;KACf;IAED,OAAO,aAAa,CAAC,KAAU,EAAA;AAC7B,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QACD,QAAQ,OAAO,KAAK;AAClB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,KAAK,CAAC;AACf,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,EAAE,CAAC;AACZ,YAAA;AACE,gBAAA,OAAO,IAAI,CAAC;AACf,SAAA;KACF;AAED,IAAA,OAAO,OAAO,CAAC,IAAS,EAAE,IAAS,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACtD;;0GAlFU,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;8GAAZ,YAAY,EAAA,CAAA,CAAA;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;;;MCOE,WAAW,CAAA;AAMtB,IAAA,WAAA,CACU,UAAsB,EAAA;AAAtB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AAHhC,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,OAAO,EAAE,CAAC;KAM1C;AACM,IAAA,+BAA+B,CAAC,eAAqB,EAAA;QAC3D,OAAO;AACL,YAAA,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,GAAG,IAAI;AACrF,YAAA,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC,oCAAoC,CAAC,eAAe,CAAC,GAAG,IAAI;YAC/F,UAAU,EAAE,eAAe,GAAG,eAAe,CAAC,MAAM,GAAG,MAAM;YAC7D,KAAK,EAAE,eAAe,GAAG,eAAe,CAAC,KAAK,GAAG,IAAI;YACrD,QAAQ,EAAE,eAAe,GAAG,eAAe,CAAC,QAAQ,GAAG,IAAI;YAC3D,SAAS,EAAE,eAAe,GAAG,eAAe,CAAC,SAAS,GAAG,IAAI;;YAE7D,YAAY,EAAE,eAAe,GAAG,eAAe,CAAC,YAAY,GAAG,IAAI;YACnE,YAAY,EAAE,eAAe,GAAG,EAAE,GAAG,MAAM;SAC5C,CAAA;KACD;IAED,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YAChC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACvG,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,qBAAqB,CAAC,eAAqB,EAAA;QACzC,OAAO;YACL,eAAe,EAAE,eAAe,CAAC,SAAS;YAC1C,kBAAkB,EAAE,eAAe,CAAC,kBAAkB;SACvD,CAAA;KACF;AAED,IAAA,oCAAoC,CAAC,eAAqB,EAAA;QACxD,OAAO;YACL,6BAA6B,EAAE,eAAe,CAAC,eAAe;SAC/D,CAAA;KACF;IAEM,iBAAiB,CAAC,IAAqB,EAAE,MAAc,EAAA;AAC5D,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,eAAe;AAC/C,YAAA,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,kBAAkB;SACxD,CAAC;QACF,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;;KAE/F;AAEM,IAAA,UAAU,CAAC,MAAc,EAAE,IAAY,EAAE,KAAa,EAAA;AAC3D,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;;KAE1J;AAEM,IAAA,gBAAgB,CAAC,MAAc,EAAE,QAAgB,EAAE,KAAa,EAAE,UAAkB,EAAA;AACzF,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAC3B,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AACrD,aAAA,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC;AAC9B,aAAA,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC;aAClC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;;KAEvD;AAEM,IAAA,gBAAgB,CAAC,MAAc,EAAE,IAAY,EAAE,KAAa,EAAE,YAAiB,EAAA;QACpF,MAAM,IAAI,GAAG,CAAC,mBAAmB,EAAE,CAAqB,kBAAA,EAAA,YAAY,CAAE,CAAA,CAAC,CAAC;AACxE,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;;KAErL;IAED,sBAAsB,CAAC,qBAAiE,EAAE,eAA2D,EAAA;QACnJ,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,EAAE,eAAe,CAAC,cAAc,EAAE,EAC5G,CAAA,wBAAA,EAA2B,eAAe,CAAC,QAAQ,CAAE,CAAA,EAAE,IAAI,CAAC,CAAC;AAC/D,QAAA,OAAO,IAAI,CAAC;KACb;;yGA9EU,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;6GAAX,WAAW,EAAA,CAAA,CAAA;4FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;;;MCQE,WAAW,CAAA;AAatB,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;AAID,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;AAID,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;AAID,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AAID,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;AAED,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;KACnG;AAED,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;KAC/E;IAED,WACU,CAAA,UAAsB,EACtB,WAAwB,EAAA;AADxB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AACtB,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AAlDlC,QAAA,IAAM,CAAA,MAAA,GAAW,CAAC,CAAC,CAAC;AACpB,QAAA,IAAM,CAAA,MAAA,GAAW,EAAE,CAAC;AACpB,QAAA,IAAkB,CAAA,kBAAA,GAAG,KAAK,CAAC;AAC3B,QAAA,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;AAIzB,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAAO,CAAC;AACtC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAO,CAAC;AAE/B,QAAA,IAAU,CAAA,UAAA,GAAW,EAAE,CAAC;AAMxB,QAAA,IAAS,CAAA,SAAA,GAAW,EAAE,CAAC;AAMvB,QAAA,IAAa,CAAA,aAAA,GAAW,EAAE,CAAC;AAM3B,QAAA,IAAO,CAAA,OAAA,GAAW,EAAE,CAAC;KAyB5B;IAED,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;KACzB;AAED,IAAA,oBAAoB,CAAC,WAAmB,EAAE,SAAiB,EAAE,iBAAoC,EAAA;;AAC/F,QAAA,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,CAAC,WAAW,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACtF,QAAA,IAAI,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,0CAAE,OAAO,CAAC,WAAW,CAAC,0CAAE,gBAAgB,CAAC,SAAS,CAAC,KAAI,UAAU,EAAE;AAC9E,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;AAC1J,SAAA;KACF;IAED,WAAW,CAAC,aAAqB,EAAE,iBAAoC,EAAA;QACrE,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,CAAC,CAAC;QAChG,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,CAAC,CAAC;AAC5F,QAAA,IAAI,YAAY,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE;AAClC,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC;AACvE,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;YAC5H,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AACjE,YAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AACpE,SAAA;KACF;AAEM,IAAA,cAAc,CAAC,MAAc,EAAE,MAAc,EAAE,iBAAoC,EAAE,iBAA2B,EAAA;AACrH;;AAEG;AACH,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpJ,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,MAAW,KAAI;AACxB,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,YAAA,MAAM,SAAS,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,YAAA,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,iBAAiB,EAAE;oBACtB,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;AAC5D,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;;AAE7B,iBAAA;AACD,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,aAAA;AACD,YAAA,OAAO,MAAM,CAAC;SACf,CAAC,CAAC,CAAA;;KAEN;AAEM,IAAA,iBAAiB,CAAC,MAAc,EAAE,MAAc,EAAE,UAAkB,EAAA;AACzE,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpJ,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,MAAW,KAAI;;AACxB,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,YAAA,MAAM,SAAS,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnD,YAAA,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5B,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAChC,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;AACnC,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;AAC3B,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAW,KAAK,MAAM,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;AACzF,gBAAA,IAAG,WAAW,EAAE;oBACd,IAAI,CAAC,WAAW,GAAG,IAAI,aAAa,CAC/B,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,WAAW,KACd,KAAK,EAAE,WAAW,KAAX,IAAA,IAAA,WAAW,uBAAX,WAAW,CAAE,UAAU,EAC9B,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,EAChD,KAAK,EAAE,MAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAX,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,WAAW,CAAE,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,CAAC,CAAC,IAAS,KAAI;;4BACtD,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;4BAC1E,OAAO;gCACL,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAI,CAAA,EAAA,IAAI,CAAC,aAAa,CAAE,CAAA;AAC/C,gCAAA,SAAS,EAAE,IAAI,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,IAAI,IAAI,CAAC,eAAe,CAAC,eAAe,IAAI,EAAE;AAChI,gCAAA,MAAM,EAAE,SAAS,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE;gCACvD,WAAW,EAAE,SAAS,IAAI,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,EAAE;gCACvH,kBAAkB,EAAE,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,IAAI,EAAE;AACzE,gCAAA,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE;AACjC,gCAAA,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS;AACtC,gCAAA,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,SAAS;AAC5C,gCAAA,SAAS,EAAE,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE;AACvC,gCAAA,YAAY,EAAE,IAAI,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE;AAC7C,gCAAA,YAAY,EAAE,IAAI,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE;6BAC9C,CAAA;AACH,yBAAC,CAAC,EACF,eAAe,EAAE,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAX,WAAW,CAAE,eAAe,EAAA,CAAA,CAC7C,CAAA;AACH,iBAAA;AACF,aAAA;YACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC;YAC9F,OAAO,IAAI,CAAC,WAAW,CAAC;SACzB,CAAC,CAAC,CAAA;KACN;AAEO,IAAA,aAAa,CAAC,IAAY,EAAA;QAChC,MAAM,QAAQ,GAAG,mBAAmB,CAAC;AACrC,QAAA,IAAI,UAAU,CAAC;AAEf,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC7C,UAAU,GAAG,IAAI,CAAC;AACnB,SAAA;AAAM,aAAA;YACL,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,YAAA,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;AAC3D,SAAA;AAED,QAAA,OAAO,UAAU,CAAC;KACnB;AAEM,IAAA,oBAAoB,CAAC,UAAkB,EAAE,MAAc,EAAE,UAAkB,EAAA;AAChF,QAAA,OAAO,QAAQ,CAAC;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjJ,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACpJ,CAAC;AACC,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,OAAY,KAAI;;YACzB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACtC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACzC,YAAA,IAAG,OAAO,CAAC,CAAC,CAAC,EAAE;gBACb,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAW,KAAK,MAAM,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC;gBAC1F,IAAI,CAAC,WAAW,GAAG,IAAI,aAAa,CAC/B,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,WAAW,KACd,UAAU,EAAE,WAAW,CAAC,GAAG,EAC3B,YAAY,EAAE,MAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAX,WAAW,CAAE,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,YAAY,EACtD,KAAK,EAAE,MAAA,CAAA,EAAA,GAAA,WAAW,aAAX,WAAW,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAX,WAAW,CAAE,aAAa,0CAAE,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,CAAC,CAAC,MAAW,KAAI;wBAC9D,OAAO;4BACL,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,CAAI,CAAA,EAAA,MAAM,CAAC,QAAQ,CAAE,CAAA;4BAC9C,SAAS,EAAE,MAAM,CAAC,SAAS;yBAC5B,CAAA;qBACF,CAAC,IACF,CAAA;AACH,aAAA;YACD,OAAO,IAAI,CAAC,WAAW,CAAC;SACzB,CAAC,CAAC,CAAA;KACN;AAEM,IAAA,gBAAgB,CAAC,IAAS,EAAA;;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAC,MAAA,IAAI,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,CAAA,EAAE;YACrD,OAAO;AACR,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAA;;KAEpI;AAEM,IAAA,aAAa,CAAC,EAAU,EAAA;AAC7B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;AAC/B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChJ,aAAA,IAAI,CAAC,GAAG,CAAC,MAAM,IAAG;AACjB,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;AAChC,YAAA,OAAO,MAAM,CAAC;SACf,CAAC,CAAC,CAAC;KACP;AAEM,IAAA,6BAA6B,CAAC,EAAU,EAAA;AAC7C,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KACvK;AAEM,IAAA,oCAAoC,CAAC,EAAU,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/K;IACM,kCAAkC,CAAC,EAAU,EAAE,oBAA4B,EAAA;QAChF,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxG,aAAA,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,CAAC,CAAC;KAC3H;AACM,IAAA,gCAAgC,CAAC,EAAU,EAAA;AAChD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3K;IAEM,mBAAmB,GAAA;AACxB;;AAEI;QACJ,OAAO,IAAI,CAAC,yBAAyB,EAAE;AACpC,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,MAAW,KAAI;AACxB,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;iBAClI,SAAS,CAAC,MAAK;AAEhB,aAAC,CAAC,CAAA;;;;;;SAML,CAAC,CAAC,CAAC;KACP;IAEM,yBAAyB,GAAA;QAC9B,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,yBAAyB,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,MAAM,CAAC,CAAC;AAC3H,QAAA,IAAI,IAAI,KAAJ,IAAA,IAAA,IAAI,uBAAJ,IAAI,CAAE,MAAM,EAAE;YAChB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC,SAAA;QACD,IAAI,EAAC,KAAK,KAAL,IAAA,IAAA,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAA,EAAE;AAClB,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,SAAA;QAED,OAAO,QAAQ,CAAC,KAAK,CAAC;AACnB,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,SAAc,KAAI;;AAE3B,YAAA,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;SACxC,CAAC,CAAC,CAAA;;KAGN;AAEM,IAAA,WAAW,CAAC,IAAS,EAAA;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACxE,SAAS,CAAC,MAAK;YACd,MAAM,GAAG,GAAG,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7G,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAG;iBAC5B,SAAS,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAChC,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;KACN;IAEM,gBAAgB,GAAA;QACrB,MAAM,GAAG,GAAG,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7G,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAG,CAAC;KACxC;AAEM,IAAA,kBAAkB,CAAC,IAAS,EAAA;;;AAEjC,QAAA,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAC1C,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,IAAI,CAAC,EACtD,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,IAAI,CAAC,EACtD,yBAAyB,EAAE,IAAI,CAChC,CAAC;AACF,QAAA,IAAI,CAAC,yBAAyB,CAC5B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,EAC7C,WAAW,EACX,IAAI,EACJ,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,kBAAkB,CACzC;AACA,aAAA,IAAI,CAAC,SAAS,CAAC,MAAK;YACnB,MAAM,GAAG,GAAG,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7G,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAG,CAAC;AACzC,SAAC,CAAC,CAAC;AACF,aAAA,SAAS,CAAC,CAAC,QAAa,KAAI;;AAC3B,YAAA,IAAI,QAAQ,KAAR,IAAA,IAAA,QAAQ,uBAAR,QAAQ,CAAE,kBAAkB,EAAE;AAChC,gBAAA,MAAM,QAAQ,GAAG,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,0CAAE,gBAAgB,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,MAAI,MAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,gBAAgB,CAAC,CAAC,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,CAAA,CAAC;AACnK,gBAAA,QAAQ,CAAC;AACP,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,YAAY,CAAC;oBAChG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC;AACpG,iBAAA,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;oBAC7B,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACzD,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAa,KAAK,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;AACzG,oBAAA,IAAG,kBAAkB,EAAE;AACrB,wBAAA,kBAAkB,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;wBAC9C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;AACxD,qBAAA;AACD,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,iBAAC,CAAC,CAAC;AACJ,aAAA;AACH,SAAC,CAAC,CAAA;;KAEH;AAEM,IAAA,UAAU,CAAC,MAAc,EAAE,IAAY,EAAE,KAAa,EAAA;AAC3D,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;;KAE1J;AAEM,IAAA,gBAAgB,CAAC,MAAc,EAAE,QAAgB,EAAE,KAAa,EAAE,UAAkB,EAAA;AACzF,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAC3B,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AACrD,aAAA,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC;AAC9B,aAAA,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC;aAClC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;;KAEvD;AAEM,IAAA,gBAAgB,CAAC,MAAc,EAAE,IAAY,EAAE,KAAa,EAAE,YAAiB,EAAA;QACpF,MAAM,IAAI,GAAG,CAAC,mBAAmB,EAAE,CAAqB,kBAAA,EAAA,YAAY,CAAE,CAAA,CAAC,CAAC;AACxE,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;;KAErL;AAEM,IAAA,kBAAkB,CAAC,MAAc,EAAE,UAAkB,EAAE,KAAa,EAAA;AACzE,QAAA,MAAM,IAAI,GAAG,CAAC,6BAA6B,CAAC,CAAC;AAC7C,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;;KAE/K;AAEM,IAAA,sBAAsB,CAAC,MAAc,EAAE,eAAuB,EAAE,kBAA0B,EAAA;AAC/F,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,MAAM,EAAE,WAAW;SACpB,CAAC;AACF,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,eAAe,EAAE,eAAe;AAChC,YAAA,kBAAkB,EAAE,kBAAkB;SACvC,CAAC;QACF,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;KACpG;IAEM,yBAAyB,CAAC,MAAc,EAAE,UAAkB,EAAE,IAAS,EAAE,IAAS,EAAE,GAAQ,EAAA;QACjG,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,MAAM,GAAG,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;AAC3B,SAAA;AACD,QAAA,IAAI,GAAG,EAAE;;AAEP,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AACrB,SAAA;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC;AACjH,aAAA,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;;KAExE;IAEM,iBAAiB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC;AAC/E,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAEM,IAAA,iBAAiB,CAAC,IAAS,EAAE,iBAAoC,EAAE,SAAkB,EAAA;QAC1F,IAAI,CAAC,IAAI,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AACxD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,GAAG,IAAI,cAAc,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;AAChC,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;;AAE7B,SAAA;KACF;IAEM,sBAAsB,CACzB,MAAc,EACd,UAAkB,EAClB,UAAkB,EAClB,SAAiB,EACjB,kBAA0B,EAC1B,WAAmB,EAAA;AAErB,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,eAAe,EAAE,UAAU;SAC5B,CAAC;AACF,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,wBAAwB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,UAAU;aACnB,GAAG,CAAC,GAAG,EAAE,EAAE,6BAA6B,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;KAC7I;IAEM,WAAW,CAAC,IAAS,EAAE,KAAa,EAAA;AACzC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAChE,QAAA,OAAO,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,YAAY,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC;KACzF;AAEM,IAAA,iBAAiB,CAAC,IAAS,EAAA;AAChC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAa,KAAK,QAAQ,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;AACxJ,QAAA,OAAO,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC;KAC/B;AAEO,IAAA,sBAAsB,CAAC,SAAc,EAAA;QAC3C,IAAI,EAAC,SAAS,KAAT,IAAA,IAAA,SAAS,uBAAT,SAAS,CAAE,MAAM,CAAA,EAAE;YACtB,OAAO;AACR,SAAA;AACD,QAAA,KAAK,IAAI,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YACzD,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE;;AAEnD,gBAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAClC,OAAO;AACR,aAAA;AACF,SAAA;KACF;;yGA9ZU,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;6GAAX,WAAW,EAAA,CAAA,CAAA;4FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;;;MCLE,aAAa,CAAA;AAMxB,IAAA,WAAA,CACU,UAAsB,EAAA;AAAtB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AAHhC,QAAA,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;KAKnB;IAEM,iBAAiB,CAAC,MAAc,EAAE,YAAoB,EAAA;AAC3D,QAAA,IAAI,MAAM,KAAN,IAAA,IAAA,MAAM,uBAAN,MAAM,CAAE,0BAA0B,EAAE;AACtC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,IAAI,MAAM,IAAI,YAAY,EAAE;AAC1B,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,CAAC;AAClG,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAEM,2BAA2B,CAAC,MAAc,EAAE,YAAoB,EAAA;QACrE,IAAI,MAAM,IAAI,YAAY,EAAE;AAC1B,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,wBAAwB,EAAE,CAAC,CAAC;AACtH,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAEM,qBAAqB,CAAC,MAAc,EAAE,cAAsB,EAAA;;;;;;;;QASjE,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,wBAAwB,EAAE,EAAE,MAAM,CAAC,wBAAwB,EAAE,EAAE,QAAQ,EAC1H,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACpC,QAAA,OAAO,IAAI,CAAC;KACb;IAEM,oCAAoC,CAAC,MAAc,EAAE,MAAc,EAAA;AACxE,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KAC9K;IAEM,wBAAwB,CAAC,MAAc,EAAE,kBAA0B,EAAA;AACxE,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAC,IAAI,EAAE,kBAAkB,EAAC,EAAE,IAAI,CAAC,CAAA;;KAElH;AAEM,IAAA,eAAe,CAAC,MAAc,EAAE,UAAkB,EAAE,KAAa,EAAE,IAAS,EAAA;AACjF,QAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;AACnC,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,oBAAoB;AACjC,aAAA,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AAClC,aAAA,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC;AAClC,aAAA,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC5B,QAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;;KAEvC;IAEM,oBAAoB,CAAC,MAAc,EAAE,MAAc,EAAA;QACxD,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3C,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;YAC1B,MAAM,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3C,SAAA;AACD,QAAA,IAAI,MAAM,CAAC,cAAc,KAAK,EAAE,EAAE;AAChC,YAAA,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC;AAC3B,YAAA,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;AACnB,SAAA;AACD,QAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,eAAyC,KAAK,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC/H,OAAO,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;AAChE,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,cAA8B,KAAI;AAC3C,YAAA,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC,SAAS,CAAC;YAC9C,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,QAAgB,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC/G,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;AAC5D,YAAA,OAAO,MAAM,CAAC;SACf,CAAC,CAAC,CAAA;;KAEN;;2GAlFU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;+GAAb,aAAa,EAAA,CAAA,CAAA;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;;;MCDE,kBAAkB,CAAA;AAC7B,IAAA,WAAA,GAAA;KACC;;gHAFU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,kDCR/B,wMAOA,EAAA,MAAA,EAAA,CAAA,8FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4FDCa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;+BACE,YAAY,EAAA,aAAA,EAGP,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,wMAAA,EAAA,MAAA,EAAA,CAAA,8FAAA,CAAA,EAAA,CAAA;;;MEA1B,eAAe,CAAA;AAC1B,IAAA,WAAA,GAAA;KACC;IAED,SAAS,CACP,OAAyB,EACzB,IAAiB,EAAA;AAEjB,QAAA,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;AACtB,YAAA,UAAU,EAAE;;AAEX,aAAA;AACC,YAAA,eAAe,EAAE,IAAI;AACxB,SAAA,CAAC,CAAA;AAEF,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAG;YAChD,IAAI,GAAG,YAAY,iBAAiB,EAAE;AACpC,gBAAA,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AACtB,oBAAA,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,wBAAA,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;AACxB,qBAAA;AAAM,yBAAA;AACL,wBAAA,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,kBAAkB,CAAC;AACxC,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;SACxB,CAAC,CAAC,CAAC;KACL;;6GA3BU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;iHAAf,eAAe,EAAA,CAAA,CAAA;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;;;MCgFE,cAAc,CAAA;;4GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAxDvB,cAAc;QACd,eAAe;QACf,aAAa;QACb,wBAAwB;QACxB,kBAAkB;QAClB,cAAc;QACd,cAAc;QACd,aAAa;QACb,aAAa;QACb,aAAa;QACb,mBAAmB;QACnB,mBAAmB;QACnB,gBAAgB;QAChB,qBAAqB;QACrB,cAAc;QACd,gBAAgB;QAChB,kBAAkB;QAClB,gBAAgB;QAChB,aAAa;QACb,aAAa;QACb,eAAe;QACf,iBAAiB;QACjB,oBAAoB;QACpB,cAAc;QACd,kBAAkB;AAClB,QAAA,eAAe,aAGf,cAAc;QACd,eAAe;QACf,aAAa;QACb,wBAAwB;QACxB,kBAAkB;QAClB,cAAc;QACd,cAAc;QACd,aAAa;QACb,aAAa;QACb,aAAa;QACb,mBAAmB;QACnB,mBAAmB;QACnB,gBAAgB;QAChB,qBAAqB;QACrB,cAAc;QACd,gBAAgB;QAChB,kBAAkB;QAClB,gBAAgB;QAChB,aAAa;QACb,aAAa;QACb,iBAAiB;QACjB,eAAe;QACf,oBAAoB;QACpB,wBAAwB;QACxB,cAAc;QACd,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAGT,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAxDvB,cAAc;QACd,eAAe;QACf,aAAa;QACb,wBAAwB;QACxB,kBAAkB;QAClB,cAAc;QACd,cAAc;QACd,aAAa;QACb,aAAa;QACb,aAAa;QACb,mBAAmB;QACnB,mBAAmB;QACnB,gBAAgB;QAChB,qBAAqB;QACrB,cAAc;QACd,gBAAgB;QAChB,kBAAkB;QAClB,gBAAgB;QAChB,aAAa;QACb,aAAa;QACb,eAAe;QACf,iBAAiB;QACjB,oBAAoB;QACpB,cAAc;QACd,kBAAkB;AAClB,QAAA,eAAe,EAGf,cAAc;QACd,eAAe;QACf,aAAa;QACb,wBAAwB;QACxB,kBAAkB;QAClB,cAAc;QACd,cAAc;QACd,aAAa;QACb,aAAa;QACb,aAAa;QACb,mBAAmB;QACnB,mBAAmB;QACnB,gBAAgB;QAChB,qBAAqB;QACrB,cAAc;QACd,gBAAgB;QAChB,kBAAkB;QAClB,gBAAgB;QAChB,aAAa;QACb,aAAa;QACb,iBAAiB;QACjB,eAAe;QACf,oBAAoB;QACpB,wBAAwB;QACxB,cAAc;QACd,kBAAkB,CAAA,EAAA,CAAA,CAAA;4FAGT,cAAc,EAAA,UAAA,EAAA,CAAA;kBA1D1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,cAAc;wBACd,eAAe;wBACf,aAAa;wBACb,wBAAwB;wBACxB,kBAAkB;wBAClB,cAAc;wBACd,cAAc;wBACd,aAAa;wBACb,aAAa;wBACb,aAAa;wBACb,mBAAmB;wBACnB,mBAAmB;wBACnB,gBAAgB;wBAChB,qBAAqB;wBACrB,cAAc;wBACd,gBAAgB;wBAChB,kBAAkB;wBAClB,gBAAgB;wBAChB,aAAa;wBACb,aAAa;wBACb,eAAe;wBACf,iBAAiB;wBACjB,oBAAoB;wBACpB,cAAc;wBACd,kBAAkB;wBAClB,eAAe;AAChB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,cAAc;wBACd,eAAe;wBACf,aAAa;wBACb,wBAAwB;wBACxB,kBAAkB;wBAClB,cAAc;wBACd,cAAc;wBACd,aAAa;wBACb,aAAa;wBACb,aAAa;wBACb,mBAAmB;wBACnB,mBAAmB;wBACnB,gBAAgB;wBAChB,qBAAqB;wBACrB,cAAc;wBACd,gBAAgB;wBAChB,kBAAkB;wBAClB,gBAAgB;wBAChB,aAAa;wBACb,aAAa;wBACb,iBAAiB;wBACjB,eAAe;wBACf,oBAAoB;wBACpB,wBAAwB;wBACxB,cAAc;wBACd,kBAAkB;AACnB,qBAAA;iBACF,CAAA;;;ACpFM,MAAM,WAAW,GAAG;AACzB,IAAA,UAAU,EAAE,KAAK;;AAEjB,IAAA,MAAM,EAAE,2BAA2B;AACnC,IAAA,qBAAqB,EAAE,KAAK;AAC5B,IAAA,yBAAyB,EAAE,KAAK;AAChC,IAAA,cAAc,EAAE,MAAM;AACtB,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,SAAS,EAAE,8BAA8B;CAC1C;;ACPD,MAAM,WAAW,GAAG,WAAW,CAAC,qBAAqB,CAAC;AACtD,MAAM,gBAAgB,GAAG,WAAW,CAAC,yBAAyB,CAAC;AAE/D,IAAY,gBAKX,CAAA;AALD,CAAA,UAAY,gBAAgB,EAAA;AACxB,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,gBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,gBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,gBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACvB,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,GAK3B,EAAA,CAAA,CAAA,CAAA;MAEY,YAAY,CAAA;AAOvB,IAAA,WAAA,CAAY,IAAS,EAAA;AAHrB,QAAA,IAAG,CAAA,GAAA,GAAW,WAAW,CAAC;QAIxB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AAEhC,QAAA,IAAG,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;AACzB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,GAAG,WAAW,GAAG,gBAAgB,CAAC;AAC7G,SAAA;KACF;IAED,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,CAAC;KAC5C;IACD,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,KAAK,CAAC;KAC7C;IACD,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,OAAO,CAAC;KAC/C;IACD,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,OAAO,CAAC;KAC/C;AACF;;ACpCD,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,wBAAwB,GAAG,6DAA6D,CAAC;AAC/F,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;MAG/B,mBAAmB,CAAA;AAO9B,IAAA,WAAA,GAAA;AALO,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAE,CAAC;AAE1B,QAAA,IAAG,CAAA,GAAA,GAAG,CAAC,CAAC;AACR,QAAA,IAAI,CAAA,IAAA,GAAmB,EAAE,CAAC;KAIjC;IAED,KAAK,CAAC,OAAe,EAAE,GAAY,EAAA;QACjC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;KACpC;IAED,OAAO,CAAC,OAAe,EAAE,GAAY,EAAA;QACnC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI,YAAY,GAAG,GAAG,CAAC,CAAC;KAC9D;IAED,OAAO,CAAC,OAAe,EAAE,GAAY,EAAA;QACnC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;KACtC;IAED,IAAI,CAAC,OAAe,EAAE,GAAY,EAAA;QAChC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;KACnC;AACO,IAAA,MAAM,CAAC,IAAY,EAAE,OAAe,EAAE,GAAY,EAAA;AACxD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAe,KAAK,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;AACzE,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpB,SAAA;AACD,QAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC;AACpC,YAAA,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG;YACd,IAAI,EAAE,OAAO,EAAE,GAAG;AACnB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,YAAY,CAAC,GAAG,GAAG,CAAC,EAAE;YACxB,YAAY,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;AAC5F,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjC;IAED,MAAM,CAAC,YAA0B,EAAE,IAAc,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC,OAAO,EAAE;;AAEjC,YAAA,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACrC,SAAA;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjC;IAEO,0BAA0B,GAAA;QAChC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACnC,OAAO;AACR,SAAA;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,wBAAwB,IAAI,CAAC,CAAC,OAAO,KAAK,gBAAgB,CAAC,CAAC;QAC5G,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjC;;iHAzDU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qHAAnB,mBAAmB,EAAA,CAAA,CAAA;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;;;MCIE,sBAAsB,CAAA;IAKjC,WACS,CAAA,mBAAwC,EACvC,GAAsB,EAAA;AADvB,QAAA,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;AACvC,QAAA,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;KAE/B;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;KACrC;IAEM,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;KACpC;AAEM,IAAA,kBAAkB,CAAC,YAA0B,EAAA;AAClD,QAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KAC/C;IAEO,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU;AACxD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACvB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAC3B,SAAC,CAAC,CAAC;KACN;;oHAjCU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,wDCXnC,8jDAiCA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;4FDtBa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;+BACE,kBAAkB,EAAA,eAAA,EAGX,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,8jDAAA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,CAAA;;;MELpC,uBAAuB,CAAA;AAClC,IAAA,WAAA,GAAA;KACC;IAGD,WAAW,CAAC,IAAS,EAAE,UAAkB,EAAA;QACvC,IAAI,UAAU,KAAK,CAAC,EAAE;YACpB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAQ,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACrF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,UAAU,CAAC,IAAS,EAAE,UAAkB,EAAA;QACtC,IAAI,UAAU,KAAK,CAAC,EAAE;YACpB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAQ,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;;qHAjBU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;yHAAvB,uBAAuB,EAAA,CAAA,CAAA;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;;;MCaE,0BAA0B,CAAA;AA6BrC,IAAA,IAAI,WAAW,GAAA;;QACb,OAAO,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAgB,CAAC;KACxD;IAGD,WACU,CAAA,mBAAwC,EACxC,mBAAwC,EAAA;AADxC,QAAA,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;AACxC,QAAA,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;AA3B3C,QAAA,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC;AAQlB,QAAA,IAAU,CAAA,UAAA,GAAG,UAAU,CAAC;AAUxB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU,CAAC;KAW/C;IAED,kBAAkB,GAAA;;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,0CAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,CAAC,CAAC;KAC1D;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3C,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC;aACzE,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;;YAE5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SAC5D,EAAE,MAAK;AACN,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;;AAE9B,SAAC,CAAC,CAAC;KACN;AAEM,IAAA,aAAa,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9B;;wHA9DU,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,0BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,4WChBvC,mjGAmEA,EAAA,MAAA,EAAA,CAAA,uyDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,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,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDnDa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBALtC,SAAS;+BACE,yBAAyB,EAAA,QAAA,EAAA,mjGAAA,EAAA,MAAA,EAAA,CAAA,uyDAAA,CAAA,EAAA,CAAA;sIAS5B,MAAM,EAAA,CAAA;sBADZ,KAAK;gBAGC,IAAI,EAAA,CAAA;sBADV,KAAK;gBAGC,UAAU,EAAA,CAAA;sBADhB,KAAK;gBAGC,WAAW,EAAA,CAAA;sBADjB,KAAK;gBAGC,WAAW,EAAA,CAAA;sBADjB,KAAK;gBAGC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAGC,UAAU,EAAA,CAAA;sBADhB,KAAK;gBAGC,SAAS,EAAA,CAAA;sBADf,KAAK;gBAGC,SAAS,EAAA,CAAA;sBADf,KAAK;gBAGC,OAAO,EAAA,CAAA;sBADb,KAAK;gBAGC,EAAE,EAAA,CAAA;sBADR,KAAK;gBAGC,WAAW,EAAA,CAAA;sBADjB,MAAM;;;AEgBT,IAAY,gBAMX,CAAA;AAND,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,gBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,gBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,gBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B,CAAA;AAC/B,CAAC,EANW,gBAAgB,KAAhB,gBAAgB,GAM3B,EAAA,CAAA,CAAA,CAAA;AAqED,IAAY,WAOX,CAAA;AAPD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,WAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,WAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACb,CAAC,EAPW,WAAW,KAAX,WAAW,GAOtB,EAAA,CAAA,CAAA;;ACpIM,MAAM,SAAS,GAAG,IAAI,CAAC;MAGjB,UAAU,CAAA;AAIrB,IAAA,WAAA,CACU,UAAsB,EAAA;AAAtB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AAJhC,QAAA,IAAgB,CAAA,gBAAA,GAAG,EAAE,CAAC;KAOrB;IACM,cAAc,CAAC,MAAc,EAAE,cAAsB,EAAE,QAAkB,EAAE,IAAa,EAAE,QAAiB,EAAA;;;QAEhH,IAAI,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,EAAE;AACjD,YAAA,OAAO,IAAI,UAAU,CAAM,QAAQ,IAAG;;gBAEpC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC;AACvD,aAAC,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE,CAAC;QACzC,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,EAAC,MAAM,EAAE,WAAW,CAAC,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAC,CAAC;AACxG,QAAA,IAAI,QAAQ,EAAE;;AAEZ,YAAA,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;AAC7B,SAAA;AACD,QAAA,IAAI,IAAI,EAAE;;AAER,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AACvB,SAAA;;AAED,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;AAEpF,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC;AACxF,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,KAAI;YACnB,GAAG,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,eAAmD,KAAI;AACtF,gBAAA,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,CAAC;;gBAEhD,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC,CAAC;AACpI,aAAC,CAAC,CAAC;SACJ,CAAC,CACH,CAAA;;KAEJ;AAEM,IAAA,yBAAyB,CAAC,eAAoB,EAAA;QACnD,IAAI,eAAe,CAAC,qBAAqB,IAAI,eAAe,CAAC,qBAAqB,CAAC,MAAM,EAAE;YAEzF,eAAe,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,cAAmB,KAAI;AACpE,gBAAA,MAAM,EAAE,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;gBAC1C,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC/C,gBAAA,IAAI,cAAc,CAAC,wBAAwB,CAAC,IAAI,cAAc,CAAC,wBAAwB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oBACnG,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,wBAAwB,CAAC,CAAC;AACnF,oBAAA,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChE,oBAAA,IAAI,cAAc,CAAC,YAAY,CAAC,IAAI,cAAc,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3E,wBAAA,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;AACzF,qBAAA;AACF,iBAAA;AACD,gBAAA,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;AAC1E,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;AAEM,IAAA,oBAAoB,CAAC,eAAoB,EAAA;AAC9C,QAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,eAAe,CAAC,gBAAgB,CAAC,EAAE,CAAC;AACvH,aAAA,GAAG,CAAC,CAAC,eAAuB,KAAI;YAC/B,MAAM,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,MAAM,GAAG,eAAe,CAAC;YACrE,IAAI,GAAG,GAAG,EAAE,CAAC;AACb,YAAA,IAAI,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACjG,gBAAA,IAAI,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACnI,oBAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACrB,GAAG,IAAI,gBAAgB,IAAI,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU;AACzG,wBAAA,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,iBAAA;AACD,gBAAA,IAAI,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;oBACpD,GAAG,IAAI,qBAAqB,CAAC;AAC9B,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,GAAG,CAAC;AACb,SAAC,CAAC,CAAC;QACL,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,eAAuB,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;AAClI,QAAA,OAAO,iBAAiB,CAAC;KAC1B;IAEM,iBAAiB,CAAC,KAAa,EAAE,GAAW,EAAA;QACjD,MAAM,MAAM,GAAG,OAAO,CAAC;QACvB,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACpC,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3B,SAAA;AACD,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;AACpC,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;;AAEhC,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;YACjG,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,YAAY,GAAG,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE;AACjD,gBAAA,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACvC,aAAA;YACD,OAAO,YAAY,GAAG,MAAM,CAAC;AAC/B,SAAC,CAAC,CAAC;KACJ;AAEM,IAAA,UAAU,CAAC,SAAiB,EAAA;QACjC,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,EAAE,GAAG,SAAS,CAAC;AACnB,QAAA,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;YACZ,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7B,YAAA,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;AAChB,SAAA;QACD,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AACzB,YAAA,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;KACvC;AAEM,IAAA,qBAAqB,CAAC,SAAiB,EAAA;QAC5C,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,EAAE,GAAG,SAAS,CAAC;AACnB,QAAA,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;YACZ,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7B,YAAA,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;AAChB,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;IAEM,aAAa,CAAE,SAAiB,EAAE,KAAa,EAAA;QACpD,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACtC,QAAA,IAAI,IAAI,CAAC,8BAA8B,IAAI,IAAI,CAAC,8BAA8B,IAAI,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC;YACvH,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AACtG,YAAA,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE;AACjE,YAAA,OAAO,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACjF,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;;wGArIU,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAR,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;4GAAV,UAAU,EAAA,CAAA,CAAA;4FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,UAAU;;;MCFE,mBAAmB,CAAA;AAK9B,IAAA,WAAA,GAAA;AAFA,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU,CAAC;AAG1C,QAAA,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;KAE7B;AAGD,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAClC;;iHAbU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,sICRhC,05CA2BA,EAAA,MAAA,EAAA,CAAA,o8CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,GAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDnBa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,05CAAA,EAAA,MAAA,EAAA,CAAA,o8CAAA,CAAA,EAAA,CAAA;0EAKlB,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEN,cAAc,EAAA,CAAA;sBADb,MAAM;;;AEVT,IAAY,aAGX,CAAA;AAHD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;AAC7B,CAAC,EAHW,aAAa,KAAb,aAAa,GAGxB,EAAA,CAAA,CAAA,CAAA;AACD,IAAY,iBAGX,CAAA;AAHD,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACnB,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,GAG5B,EAAA,CAAA,CAAA,CAAA;AACD,IAAY,oBAKX,CAAA;AALD,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,cAAA,CAAA,GAAA,cAA+B,CAAA;AAC/B,IAAA,oBAAA,CAAA,cAAA,CAAA,GAAA,cAA+B,CAAA;AAC/B,IAAA,oBAAA,CAAA,aAAA,CAAA,GAAA,aAA6B,CAAA;AAC7B,IAAA,oBAAA,CAAA,aAAA,CAAA,GAAA,aAA6B,CAAA;AAC/B,CAAC,EALW,oBAAoB,KAApB,oBAAoB,GAK/B,EAAA,CAAA,CAAA,CAAA;AACD,IAAY,WAIX,CAAA;AAJD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC,CAAA;AACnC,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,mBAAgC,CAAA;AAClC,CAAC,EAJW,WAAW,KAAX,WAAW,GAItB,EAAA,CAAA,CAAA;;ACbD,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7C,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC;AAC3C,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,sCAAsC,CAAC,CAAC;MAGxD,iBAAiB,CAAA;AAE5B,IAAA,WAAA,CACU,mBAAwC,EAAA;AAAxC,QAAA,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;AA6HlD,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,SAAiB,KAAI;YACnC,OAAO,CAAC,OAAY,KAAI;gBACtB,IAAI,EAAC,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAA,EAAE;AACpB,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;gBACD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACtD,IAAI,eAAe,CAAC,KAAK,IAAI,eAAe,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE;oBACpE,OAAO;AACL,wBAAA,YAAY,EAAE,IAAI;qBACnB,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,SAAiB,KAAI;YAClC,OAAO,CAAC,OAAY,KAAI;gBACtB,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACrC,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;gBACD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACtD,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;AAC5E,qBAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;qBACvE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;AAC5E,yBAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC/E,eAAe,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE;oBACvD,OAAO;AACL,wBAAA,WAAW,EAAE,IAAI;qBAClB,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,IAAA,CAAA,gBAAgB,GAAG,CAAC,OAAe,EAAE,OAAe,KAAI;YACtD,OAAO,CAAC,OAAY,KAAI;gBACtB,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACrC,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;gBACD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC;AAC1E,gBAAA,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE;oBACpC,OAAO;AACL,wBAAA,SAAS,EAAE,IAAI;qBAChB,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,SAAiB,KAAI;YACjC,OAAO,CAAC,OAAY,KAAI;gBACtB,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACrC,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;gBACD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACtD,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,eAAe,CAAC,KAAK,IAAI,eAAe,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE;oBAC3H,OAAO;AACL,wBAAA,UAAU,EAAE,IAAI;qBACjB,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,IAAA,CAAA,cAAc,GAAG,CAAC,SAAiB,EAAE,IAAY,KAAI;YACnD,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,IACE,SAAS,KAAK,aAAa,KAAK,IAAI,KAAK,oBAAoB,CAAC,cAAc,CAAC,IAAI,IAAI,KAAK,oBAAoB,CAAC,cAAc,CAAC,CAAC;oBAC/H,SAAS,KAAK,cAAc,IAAI,IAAI,KAAK,oBAAoB,CAAC,aAAa,CAAC,EAC5E;oBACA,OAAO;AACL,wBAAA,QAAQ,EAAE,IAAI;qBACf,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,IAAgB,CAAA,gBAAA,GAAG,CAAC,SAAiB,EAAE,SAAiB,EAAE,eAAuB,KAAI;YACnF,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;gBACD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACtD,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACvD,MAAM,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAEnE,IAAI,gBAAgB,IAAI,sBAAsB,IAAI,sBAAsB,CAAC,KAAK,KAAK,iBAAiB,CAAC,MAAM,EAAE;AAC3G,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;AAED,gBAAA,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,KAAK,KAAK,iBAAiB,CAAC,MAAM,IAAI,eAAe,IAAI,eAAe,CAAC,KAAK,IAAI,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACpL,OAAO;AACL,wBAAA,WAAW,EAAE,IAAI;qBAClB,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,IAAA,CAAA,eAAe,GAAG,CAAC,SAAiB,EAAE,SAAiB,KAAI;YACzD,OAAO,CAAC,OAAY,KAAI;gBACtB,IAAI,EAAC,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAA,EAAE;AACpB,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;gBACD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACtD,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAEvD,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,KAAK,KAAK,iBAAiB,CAAC,MAAM,IAAI,eAAe,CAAC,KAAK,IAAI,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACjK,OAAO;AACL,wBAAA,UAAU,EAAE,IAAI;qBACjB,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,SAAiB,KAAI;YACjC,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,IAAI,EAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,CAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACtC,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;gBACD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACtD,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,IAAI,KAAK,EAAE;oBACnD,OAAO;AACL,wBAAA,UAAU,EAAE,IAAI;qBACjB,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,mBAAmB,GAAG,CAAC,SAAiB,KAAI;YAC1C,OAAO,CAAC,OAAY,KAAI;gBACtB,IAAI,EAAC,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAA,EAAE;AACnB,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;gBACD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACjD,gBAAA,IAAI,OAAO,EAAE;AACX,oBAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC5B,MAAM,aAAa,GAAa,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACpD,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBAC7C,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;4BAC5C,OAAO;AACL,gCAAA,mBAAmB,EAAE,IAAI;6BAC1B,CAAC;AACH,yBAAA;AACF,qBAAA;AACF,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,SAAiB,KAAI;YAClC,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,IAAI,EAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,CAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACtC,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;gBACD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACtD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC3N,OAAO;AACL,wBAAA,WAAW,EAAE,IAAI;qBAClB,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,mBAAmB,GAAG,CAAC,MAAc,KAAI;YACvC,OAAO,CAAC,OAAY,KAAI;;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,CAAC,aAAa,EAAE;oBACpE,OAAO;AACR,iBAAA;gBACD,IAAI,MAAM,CAAC,eAAe,EAAE;oBAC1B,IAAI,GAAG,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE;wBAC7C,GAAG,GAAG,SAAS,CAAC;AACjB,qBAAA;oBACD,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE;wBACpC,GAAG,GAAG,WAAW,CAAC;AACnB,qBAAA;AACD,oBAAA,OAAO,GAAG,GAAG,EAAC,QAAQ,EAAE,GAAG,EAAC,GAAG,IAAI,CAAC;AACrC,iBAAA;gBACD,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;AACpD,oBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC;oBACvD,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;oBACvC,MAAM,OAAO,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,mBAAmB,CAAC;AAC3D,oBAAA,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtD,oBAAA,MAAM,UAAU,GAAG,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;AACvD,oBAAA,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACvB,wBAAA,OAAO,EAAC,QAAQ,EAAE,EAAC,OAAO,EAAC,EAAC,CAAC;AAC9B,qBAAA;AACF,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,IAAA,CAAA,wBAAwB,GAAG,CAAC,MAAc,EAAE,UAAkB,KAAI;YAChE,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,CAAC,aAAa,EAAE;oBACpE,OAAO;AACR,iBAAA;AACD,gBAAA,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,eAAe,EAAE;AACnF,oBAAA,OAAO,EAAC,QAAQ,EAAE,iBAAiB,EAAC,CAAC;AACtC,iBAAA;gBACD,IAAI,MAAM,CAAC,eAAe,EAAE;oBAC1B,IAAI,GAAG,GAAG,EAAE,CAAC;AACb,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE;wBAC1C,GAAG,GAAG,SAAS,CAAC;AACjB,qBAAA;oBACD,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE;wBACjC,GAAG,GAAG,WAAW,CAAC;AACnB,qBAAA;AACD,oBAAA,OAAO,GAAG,GAAG,EAAC,QAAQ,EAAE,GAAG,EAAC,GAAG,IAAI,CAAC;AACrC,iBAAA;gBACF,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;AACpD,oBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC;;oBAEtD,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACvC,oBAAA,IAAI,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC;oBACxD,IAAI,CAAC,OAAO,EAAE;wBACZ,OAAO,GAAG,QAAQ,CAAC;AACpB,qBAAA;AACD,oBAAA,MAAM,KAAK,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACnD,MAAM,UAAU,GAAG,KAAK,IAAI,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,oBAAA,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACvB,wBAAA,OAAO,EAAC,QAAQ,EAAE,EAAC,OAAO,EAAC,EAAC,CAAC;AAC9B,qBAAA;AACF,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,IAA8B,CAAA,8BAAA,GAAG,CAAC,IAAS,EAAE,IAAc,EAAE,MAAe,KAAI;YAC9E,OAAO,CAAC,OAAY,KAAI;gBACtB,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;oBACzE,OAAO;AACR,iBAAA;AACD,gBAAA,MAAM,UAAU,GAAG,MAAM,GAAG,GAAG,MAAM,CAAA,EAAG,OAAO,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;AACxE,gBAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAc,KAAK,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;AACnG,gBAAA,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,oBAAA,IAAI,CAAC,IAAI,EAAE;AACT,wBAAA,OAAO,EAAC,iBAAiB,EAAE,IAAI,EAAC,CAAC;AAClC,qBAAA;yBAAM,IAAI,IAAI,KAAK,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAClD,wBAAA,OAAO,EAAC,iBAAiB,EAAE,IAAI,EAAC,CAAC;AAClC,qBAAA;AACF,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,IAAA,CAAA,mBAAmB,GAAG,CAAC,SAAiB,EAAE,uBAA8B,KAAI;YAC1E,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;gBAC/B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE;oBACxE,OAAO;AACR,iBAAA;AACD,gBAAA,IAAI,uBAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;oBACpF,OAAO;AACL,wBAAA,QAAQ,EAAE,IAAI;qBACf,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,IAAA,CAAA,gCAAgC,GAAG,CAAC,SAAiB,EAAE,uBAA8B,KAAI;YACvF,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;AAC/B,gBAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;oBAC9G,OAAO;AACR,iBAAA;gBACD,IAAI,uBAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;oBACzF,OAAO;AACL,wBAAA,QAAQ,EAAE,IAAI;qBACf,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,IAAA,CAAA,sCAAsC,GAAG,CAAC,SAAiB,EAAE,uBAA8B,KAAI;YAC7F,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;AAC/B,gBAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;oBAC9G,OAAO;AACR,iBAAA;gBACD,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,uBAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;AACrG,oBAAA,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK;oBAC1D,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC/G,OAAO;AACL,wBAAA,iBAAiB,EAAE,IAAI;qBACxB,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,4BAA4B,GAAG,CAAC,SAAc,KAAI;YAChD,MAAM,YAAY,GAAG,oEAAoE,CAAC;YAC1F,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;gBAC9B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACrC,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;AACD,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;oBAClD,OAAO;AACL,wBAAA,cAAc,EAAE,IAAI;AACpB,wBAAA,aAAa,EAAE,IAAI;qBACpB,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;AAGF,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,SAAiB,KAAI;YAEhC,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;gBAC9B,MAAM,QAAQ,GAAG,oEAAoE,CAAC;gBACtF,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACvC,gBAAA,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACrD,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC3B,oBAAA,OAAO,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC;AACxB,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;QAGF,IAAW,CAAA,WAAA,GAAG,CAAC,UAAkB,EAAE,IAAU,EAAE,UAAoB,KAAI;YACrE,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,CAAC,eAAe,EAAE;AACnE,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;gBACD,IAAI,UAAU,GAAG,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;AACzD,gBAAA,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE;AACnC,oBAAA,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,kBAAkB,EAAE;AACpD,wBAAA,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAW,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAChH,qBAAA;oBACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;wBACvC,OAAO;AACL,4BAAA,YAAY,EAAE,IAAI;yBACnB,CAAC;AACH,qBAAA;AACF,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,uBAAuB,GAAG,CAAC,sBAA8B,KAAI;YAC3D,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,sBAAsB,EAAE;AAC7C,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;AACD,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;oBAClB,OAAO;AACL,wBAAA,QAAQ,EAAE,IAAI;qBACf,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,IAAA,CAAA,UAAU,GAAG,CAAC,UAAkB,EAAE,IAAU,KAAI;YAC9C,OAAO,CAAC,OAAY,KAAI;gBACtB,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,KAAK,IAAI,EAAE;AACnC,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;AACD,gBAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC7B,OAAO;AACL,wBAAA,WAAW,EAAE,IAAI;qBAClB,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,IAAA,CAAA,oBAAoB,GAAG,CAAC,UAAkB,EAAE,UAAgB,KAAI;YAC9D,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;oBAClB,OAAO,OAAO,CAAC,KAAK,CAAC;AACtB,iBAAA;;gBAED,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,gBAAA,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE;AACnC,oBAAA,UAAU,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;wBAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;AAC7D,wBAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC9B,qBAAC,CAAC,CAAC;;oBAEH,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;wBAC/C,OAAO;AACL,4BAAA,YAAY,EAAE,IAAI;yBACnB,CAAC;AACH,qBAAA;AACF,iBAAA;AAAM,qBAAA,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;oBAC5C,OAAO;AACL,wBAAA,YAAY,EAAE,IAAI;qBACnB,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;QAYF,IAAA,CAAA,4BAA4B,GAAG,CAAC,UAAkB,EAAE,UAAkB,KAAI;YACxE,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;AACD,gBAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC;AAC3D,gBAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC;AAC3D,gBAAA,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE;oBACpC,OAAO;AACL,wBAAA,4BAA4B,EAAE,IAAI;qBACnC,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,IAAA,CAAA,iBAAiB,GAAG,CAAC,UAAkB,EAAE,UAAkB,KAAI;YAC7D,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;gBACD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC;gBAC7F,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC;AAC7F,gBAAA,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE;oBACpC,OAAO;AACL,wBAAA,iBAAiB,EAAE,IAAI;qBACxB,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,IAAA,CAAA,eAAe,GAAG,CAAC,SAAiB,EAAE,iBAAsB,KAAI;YAC9D,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AAC/B,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;gBACD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;gBACtF,IAAI,QAAQ,IAAI,QAAQ,KAAK,iBAAiB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;oBAChE,OAAO;AACL,wBAAA,QAAQ,EAAE,IAAI;qBACf,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,IAAA,CAAA,iBAAiB,GAAG,CAAC,UAAkB,EAAE,UAAkB,KAAI;YAC7D,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;AACD,gBAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC;AAC3D,gBAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC;gBAC3D,IAAI,aAAa,IAAI,aAAa,EAAE;oBAClC,OAAO;AACL,wBAAA,mBAAmB,EAAE,IAAI;qBAC1B,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,IAAA,CAAA,mBAAmB,GAAG,CAAC,UAAkB,EAAE,SAAc,KAAI;YAC3D,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;AACD,gBAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC;AAC/D,gBAAA,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;AAC5D,gBAAA,IAAI,iBAAiB,IAAI,CAAC,eAAe,EAAE;oBACzC,OAAO;AACL,wBAAA,QAAQ,EAAE,IAAI;qBACf,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;AAmHF,QAAA,IAAA,CAAA,sBAAsB,GAAG,CAAC,SAAiB,KAAI;;YAE7C,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;gBACD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACtD,gBAAA,MAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC;gBACvD,IAAI,eAAe,CAAC,KAAK,EAAE;oBACzB,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AACzE,oBAAA,IAAI,iBAAiB,EAAE;wBACrB,OAAO;AACL,4BAAA,cAAc,EAAE,IAAI;yBACrB,CAAC;AACH,qBAAA;AACF,iBAAA;AACH,aAAC,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,yBAAyB,GAAG,CAAC,SAAiB,KAAI;;YAEhD,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;gBACD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACtD,gBAAA,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC;AACzC,gBAAA,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;oBAC9C,IAAI,MAAM,KAAK,IAAI,EAAE;wBACnB,OAAO;AACL,4BAAA,kBAAkB,EAAE,IAAI;yBACzB,CAAC;AACH,qBAAA;AACF,iBAAA;AACH,aAAC,CAAC;AACJ,SAAC,CAAC;QAmBF,IAAA,CAAA,wBAAwB,GAAG,CAAC,SAAiB,EAAE,SAAiB,KAAI;YAClE,OAAO,CAAC,OAAY,KAAI;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;gBACD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACtD,gBAAA,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC;gBACzC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;oBAC9D,OAAO;AACL,wBAAA,gBAAgB,EAAE,IAAI;qBACvB,CAAC;AACH,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC;KAhyBD;AAED,IAAA,aAAa,CAAC,OAAY,EAAA;QACxB,MAAM,QAAQ,GAAG,CAAA,iBAAA,CAAmB,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACvC,QAAA,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACtD,OAAO,EAAC,YAAY,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC,EAAC,CAAC;AACzC,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,KAAK,CAAC,OAAY,EAAA;QAChB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,MAAM,OAAO,GAAG,WAAW,CAAC;AAC5B,QAAA,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,EAAE;AACjE,YAAA,OAAO,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC;AAC1B,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,YAAY,CAAC,OAAY,EAAA;QACvB,MAAM,QAAQ,GAAG,CAAA,mBAAA,CAAqB,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACvC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAC,EAAC,CAAC;AACjD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAID,IAAA,iBAAiB,CAAC,OAAY,EAAA;QAC5B,MAAM,QAAQ,GAAG,+CAA+C,CAAC;QACjE,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACvC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAC,EAAC,CAAC;AACjD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,4BAA4B,CAAC,IAAY,EAAA;QAEvC,OAAO,CAAC,OAAY,KAAI;AACtB,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC9B,IAAI,IAAI,KAAK,aAAa,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE;AAC/C,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACD,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAClB,gBAAA,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;AACzB,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC;KACH;IAED,oBAAoB,GAAA;QAClB,OAAO,CAAC,OAAY,KAAI;AACtB,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAC9B,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;YACD,MAAM,kBAAkB,GAAG,EAAE;gBAC3B,wBAAwB;gBACxB,GAAG;gBACH,IAAI;gBACJ,sBAAsB;gBACtB,GAAG;gBACH,kCAAkC;gBAClC,GAAG;gBACH,6DAA6D;gBAC7D,GAAG;AACH,gBAAA,IAAI,CAAC;YACP,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;YACjD,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACrC,gBAAA,OAAO,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC;AACxB,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC;KAEH;AAED,IAAA,+BAA+B,CAAC,IAAY,EAAA;QAE1C,OAAO,CAAC,OAAY,KAAI;AACtB,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AAC9B,YAAA,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,aAAa,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE;AAC3H,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC;KACH;AAGD,IAAA,2BAA2B,CAAC,OAAY,EAAA;QACtC,MAAM,MAAM,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAChD,OAAO,EAAC,SAAS,EAAE,EAAC,KAAK,EAAE,GAAG,EAAC,EAAC,CAAC;AAClC,SAAA;QACD,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACzC,OAAO,EAAC,SAAS,EAAE,EAAC,KAAK,EAAE,OAAO,EAAC,EAAC,CAAC;AACtC,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,eAAe,CAAC,OAAY,EAAA;AAC1B,QAAA,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAClD,OAAO,EAAC,SAAS,EAAE,EAAC,KAAK,EAAE,OAAO,EAAC,EAAC,CAAC;AACtC,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,qBAAqB,CAAC,OAAY,EAAA;AAChC,QAAA,IAAI,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,KAAK,KAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACzD,OAAO,EAAC,SAAS,EAAE,EAAC,KAAK,EAAE,GAAG,EAAC,EAAC,CAAC;AAClC,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAwZM,IAAA,2BAA2B,CAAC,UAAkB,EAAA;QACnD,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,EAAE,GAAG,UAAU,CAAC;AACpB,QAAA,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;YACZ,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC9B,YAAA,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;AAChB,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AAiFO,IAAA,cAAc,CAAC,KAAa,EAAA;AAClC,QAAA,QAAQ,KAAK;AACX,YAAA,KAAK,KAAK,CAAC;AACX,YAAA,KAAK,YAAY,CAAC;AAClB,YAAA,KAAK,oBAAoB;AACvB,gBAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC;AAC1D,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,YAAY,IAAI,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,SAAS,CAAC;AAClG,YAAA,KAAK,YAAY;AACf,gBAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;AAC9C,YAAA,KAAK,gBAAgB;AACnB,gBAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;AACtD,YAAA,KAAK,wBAAwB;AAC3B,gBAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,2BAA2B,CAAC;AAC9D,YAAA,KAAK,aAAa;AAChB,gBAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;AAC9C,YAAA,KAAK,oBAAoB;AACvB,gBAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC;AACzD,YAAA,KAAK,kBAAkB;AACrB,gBAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC;AACnD,YAAA;AACE,gBAAA,OAAO,EAAE,CAAC;AACb,SAAA;KACF;AAED,IAAA,gBAAgB,CAAC,OAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAClB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,EAAE;YAC7D,OAAO;AACL,gBAAA,aAAa,EAAE,IAAI;aACpB,CAAC;AACH,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAGD,IAAA,QAAQ,CAAC,OAAY,EAAA;QACnB,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;QAEjE,MAAM,UAAU,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEpD,IAAI,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,CAAC,EAAE;YACxD,OAAO;AACL,gBAAA,YAAY,EAAE,IAAI;aACnB,CAAC;AACH,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,gBAAgB,CAAC,OAAY,EAAA;AAC3B,QAAA,IAAI,EAAC,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,KAAK,CAAA,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACjD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,IAAI,mBAAmB,GAAG,IAAI,CAAC;QAC/B,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;AAClH,YAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;YAClC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;YACxD,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvC,YAAA,IAAI,KAAK,EAAE;gBACT,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,eAAoB,KAAI;AACtD,oBAAA,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,eAAe,KAAK,eAAe,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,kBAAkB,KAAK,eAAe,CAAC,kBAAkB;2BACzO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,KAAK,iBAAiB,CAAC,CAAC;AACzD,oBAAA,IAAI,cAAc,EAAE;AAClB,wBAAA,mBAAmB,GAAG;4BACpB,mBAAmB,EAAE,eAAe,CAAC,eAAe;yBACrD,CAAC;AACH,qBAAA;AACH,iBAAC,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;AAED,QAAA,OAAO,mBAAmB,CAAC;KAC5B;AAED,IAAA,kBAAkB,CAAC,OAAY,EAAA;AAC7B,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AAC9B,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC3G,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QAED,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE;YAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE;AAC/B,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,iBAAiB;AAC1E,uBAAA,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,iBAAiB;AACvE,uBAAA,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;oBACtD,OAAO;AACL,wBAAA,iBAAiB,EAAE,IAAI;qBACxB,CAAC;AACH,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,IAAI,CAAC,OAAY,EAAA;AACf,QAAA,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACnD,YAAA,OAAO,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC;AAC3B,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AA0CD,IAAA,aAAa,CAAC,GAAW,EAAA;AACvB,QAAA,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AACrC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACtC,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,EAAE;AACxD,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;KACF;IAmBD,mBAAmB,CAAC,IAAS,EAAE,IAAS,EAAA;QACtC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAClC,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE;AAC3B,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;AACzB,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;;+GAjzBU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAjB,iBAAiB,EAAA,CAAA,CAAA;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;;;MCEE,sCAAsC,CAAA;AAUjD,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;KAC9B;AAED,IAAA,IAAI,gBAAgB,GAAA;;QAElB,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;KAC/H;IAGD,WACS,CAAA,WAAwB,EACvB,UAAsB,EAAA;AADvB,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AACvB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AAjBtB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAU,CAAC;AAGzC,QAAA,IAAwB,CAAA,wBAAA,GAAU,EAAE,CAAC;KAgB3C;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;AAEM,IAAA,aAAa,CAAC,KAAU,EAAA;QAC7B,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC9D,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;IAEO,OAAO,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxC,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC;aAC3E,SAAS,CAAC,MAAK;YACd,IAAI,IAAI,CAAC,gBAAgB,EAAE;;AAEzB,gBAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAClF,aAAA;AACD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC3B,SAAC,CAAC,CAAC;KACN;IAED,SAAS,CAAC,CAAM,EAAE,CAAM,EAAA;AACtB,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC;KAChB;IAEM,0BAA0B,GAAA;AAC/B,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,gBAAgB,CAAC;KACvD;AAEM,IAAA,sBAAsB,CAAC,KAAY,EAAA;QACxC,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC9D,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAc,KAAK,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;KACpH;;oIA7DU,sCAAsC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtC,sCAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sCAAsC,uOCXnD,upCAuBM,EAAA,MAAA,EAAA,CAAA,uGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,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,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,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,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDZO,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBALlD,SAAS;+BACE,sCAAsC,EAAA,QAAA,EAAA,upCAAA,EAAA,MAAA,EAAA,CAAA,uGAAA,CAAA,EAAA,CAAA;qHAKvC,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACI,QAAQ,EAAA,CAAA;sBAAjB,MAAM;;;AEbT,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACjD,MAAM,cAAc,GAAG,YAAY,CAAC;MAOvB,mBAAmB,CAAA;AALhC,IAAA,WAAA,GAAA;AAOE,QAAA,IAAM,CAAA,MAAA,GAAQ,IAAI,CAAC;AAWT,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAQ,CAAC;KAalD;AAXC,IAAA,aAAa,CAAC,UAAkB,EAAA;QAC9B,MAAM,OAAO,GAAG,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACvD,IAAG,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;AAClD,YAAA,OAAO,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9B,SAAA;;AACI,YAAA,OAAO,cAAc,CAAC;KAC5B;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KACzB;;iHAzBU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,oOCXhC,8mFAoDA,EAAA,MAAA,EAAA,CAAA,ot8kBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAV,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDzCa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,8mFAAA,EAAA,MAAA,EAAA,CAAA,ot8kBAAA,CAAA,EAAA,CAAA;8BAM3B,MAAM,EAAA,CAAA;sBADL,KAAK;gBAGN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAGN,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAGN,MAAM,EAAA,CAAA;sBADL,KAAK;gBAGN,KAAK,EAAA,CAAA;sBADJ,KAAK;gBAGN,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;;;MEnBI,cAAc,CAAA;AAEzB,IAAA,SAAS,CAAC,KAAa,EAAA;;QACrB,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AAEnD,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE;AACzB,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QAED,OAAO,CAAA,MAAA,OAAO;AACX,aAAA,KAAK,CAAC,SAAS,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CACf,IAAI,CAAC,GAAG,CAAA,CACT,WAAW,EAAE,KAAI,KAAK,CAAC;KAC3B;;4GAjBU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;0GAAd,cAAc,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,CAAA;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,YAAY;iBACnB,CAAA;;;MCoBY,2BAA2B,CAAA;AA6BtC,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;KAClC;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;KACtC;AAED,IAAA,IAAI,IAAI,GAAA;;QACN,OAAO,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,CAAC;KAC1C;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,MAAM,CAAC;KAC1F;AAED,IAAA,WAAA,CACS,WAAwB,EACxB,aAA4B,EAC3B,UAAsB,EACvB,WAAwB,EACxB,mBAAwC,EACvC,iBAAoC,EACpC,MAAiB,EACR,UAAsB,EAAA;AAPhC,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AACxB,QAAA,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;AAC3B,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AACvB,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AACxB,QAAA,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;AACvC,QAAA,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;AACpC,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;AACR,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AApD/B,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAU,CAAC;AACpC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAU,CAAC;AACtC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE,CAAC;AACpC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;AAWrB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;AACzC,QAAA,IAAM,CAAA,MAAA,GAAQ,IAAI,CAAC;AACnB,QAAA,IAAQ,CAAA,QAAA,GAAQ,IAAI,CAAC;QAEZ,IAAmB,CAAA,mBAAA,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC;;QAGhF,IAAA,CAAA,aAAa,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;AAE7C,QAAA,IAAI,CAAA,IAAA,GAAa,EAAE,CAAC;AACpB,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AACjB,QAAA,IAAM,CAAA,MAAA,GAAG,EAAE,CAAC;QACZ,IAAA,CAAA,aAAa,GAAG,IAAI,SAAS,CAAsB,EAAE,CAAC,CAAC;KA4BtD;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;IAED,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;;QAGrB,UAAU,CAAC,MAAK;;YACd,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC,KAAK,EAAE,CAAC;AACvC,SAAC,CAAC,CAAC;KACJ;IAED,MAAM,GAAA;QACJ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAEjC,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,SAAA;AAED,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;KACvB;AAED,IAAA,SAAS,CAAC,KAAa,EAAA;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KAC5B;AAED,IAAA,IAAI,eAAe,GAAA;;AACjB,QAAA,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAC,UAAU,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAC,SAAS,CAAgB,CAAC;KAClE;AAED,IAAA,IAAI,eAAe,GAAA;;AACjB,QAAA,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAC,UAAU,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAC,iBAAiB,CAAgB,CAAC;KAC1E;IAEO,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,IAAI,OAAO,CAAC;QACZ,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;;QAEtD,IAAG,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,MAAM,EAAE;;YAE7C,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAClD,YAAA,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,UAAW,EAAE,OAAQ,EAAE,UAAW,CAAC,CAAC;AACrF,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,UAAW,CAAC,CAAC;AACrF,SAAA;QACD,OAAO;AACN,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;AAC9C,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACvB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjC,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,YAAY,CAAC,MAAW,EAAA;AAEtB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,SAAS,CAChC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,KAC9B,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAC9C,CACF,CAAC;KACH;IAEM,cAAc,CAAC,KAAY,EAAE,KAAa,EAAA;QAC/C,MAAM,KAAK,GAAI,KAAK,CAAC,MAAsB,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;AACxC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACtB;IAEM,iBAAiB,CAAC,KAAa,EAAE,KAAa,EAAA;;QAEnD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACpD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC;AAC/C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;AAC/C,QAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACtB;IAED,WAAW,GAAA;;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,KAAI,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,CAAA,EAAE;YAC/D,OAAO;AACR,SAAA;AAED,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAS,EAAE,KAAU,KAAK,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACpH,QAAA,YAAY,CAAC,OAAO,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAExE,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;SAC1B,EAAE,KAAK,CAAC,CAAC;KACX;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;KACpB;;yHApKU,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAQ,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAX,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAY,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,yYCxBxC,84iBA4SM,EAAA,MAAA,EAAA,CAAA,uqjBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,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,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,EAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,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,UAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sCAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,cAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDpRO,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;+BACE,0BAA0B,EAAA,QAAA,EAAA,84iBAAA,EAAA,MAAA,EAAA,CAAA,uqjBAAA,CAAA,EAAA,CAAA;iRAK1B,MAAM,EAAA,CAAA;sBAAf,MAAM;gBACG,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBACG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,MAAM,EAAA,CAAA;sBAAf,MAAM;gBACE,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEiB,QAAQ,EAAA,CAAA;sBAA9B,SAAS;uBAAC,UAAU,CAAA;;;ME7BV,uCAAuC,CAAA;AAIhD,IAAA,WAAA,GAAA;AAFS,QAAA,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;KAEZ;;qIAJP,uCAAuC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvC,uCAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uCAAuC,0FCPpD,sNAKM,EAAA,MAAA,EAAA,CAAA,8NAAA,CAAA,EAAA,CAAA,CAAA;4FDEO,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBALnD,SAAS;+BACI,wBAAwB,EAAA,QAAA,EAAA,sNAAA,EAAA,MAAA,EAAA,CAAA,8NAAA,CAAA,EAAA,CAAA;0EAMzB,KAAK,EAAA,CAAA;sBAAb,KAAK;;;MEaG,6BAA6B,CAAA;AAexC,IAAA,IAAI,IAAI,GAAA;;AACN,QAAA,OAAO,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAI,MAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,0CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAE,CAAA,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAE,CAAA,IAAI,CAAA,CAAC;KACrJ;AAED,IAAA,IAAI,eAAe,GAAA;;QACjB,OAAO,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,WAAW,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,0CAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC3F;AAED,IAAA,IAAI,qBAAqB,GAAA;;QACvB,OAAO,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,WAAW,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAU,0CAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACjG;AAED,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;KAC9B;AAGD,IAAA,WAAA,CACS,WAAwB,EACvB,UAAsB,EACtB,mBAAwC,EACxC,WAAwB,EACxB,aAA4B,EAC5B,MAAiB,EACjB,iBAAoC,EAAA;AANrC,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AACvB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AACtB,QAAA,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;AACxC,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AACxB,QAAA,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;AAC5B,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;AACjB,QAAA,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;AAlCpC,QAAA,IAAA,CAAA,2BAA2B,GAAG,IAAI,YAAY,EAAE,CAAC;AACjD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAU,CAAC;AAEhD,QAAA,IAAgB,CAAA,gBAAA,GAAG,gBAAgB,CAAC;AACpC,QAAA,IAAqB,CAAA,qBAAA,GAAa,sBAAsB,CAAC;AACzD,QAAA,IAAa,CAAA,aAAA,GAAG,cAAc,CAAC;AA+B7B,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;KACzB;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,CAAC,0BAA0B;aACxC,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACxC,SAAC,CAAC,CAAA;KACL;IAED,WAAW,GAAA;;AACT,QAAA,IAAI,MAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EAAE;AAC9B,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,YAA0B,KAAK,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;AACxF,SAAA;KACF;AAED,IAAA,aAAa,CAAC,KAAa,EAAA;;QACzB,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;AACR,SAAA;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAS,CAAC,KAAK,CAAC,GAAG,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,CAAC,KAAK,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC;QAChI,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KAEtB;AAED,IAAA,cAAc,CAAC,KAAa,EAAA;;AAC1B,QAAA,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAC,KAAK,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC;AAC3C,QAAA,IAAI,CAAC,sBAAsB,GAAG,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;KACtF;AAED,IAAA,sBAAsB,CAAC,KAAa,EAAA;;AAClC,QAAA,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAE1B,IAAI,KAAK,KAAK,gBAAgB,CAAC,YAAY,IAAI,KAAK,KAAK,gBAAgB,CAAC,iBAAiB,EAAE;AAC3F,YAAA,IAAI,EAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAC,kBAAkB,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,CAAA,EAAE;gBAChD,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,EAAE,CAAC;AACpD,aAAA;YACD,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EAAE,CAAC;YAC5C,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EAAE,CAAC;AACjD,SAAA;AAAM,aAAA;YACL,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,EAAE,CAAC;AAC7C,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,CAAC,EAAE,CAAC,CAAC;AAChD,YAAA,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;AAEvC;;;;AAII;AACL,SAAA;KACF;IAED,OAAO,GAAA;;;AAEL,QAAA,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,MAAI,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAC,cAAc,CAAC,CAAA,EAAE;;AAE1F,YAAA,OAAO,MAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC,cAAc,CAAE,CAAA,MAAM,CAAC,CAAA;AACjE,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KAEX;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;KACxC;IAED,gBAAgB,GAAA;AACd,QAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;KACnF;AAED,IAAA,iBAAiB,CAAC,KAAa,EAAA;QAC7B,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE;YAChE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,eAAe,GAAG,KAAK,CAAC;AAC9F,SAAA;KACF;IAED,YAAY,GAAA;KAEX;IAEO,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;AACrE,aAAA,SAAS,CAAC,CAAC,GAAQ,KAAI;YACtB,IAAI,CAAC,cAAc,GAAG,CAAA,GAAG,KAAH,IAAA,IAAA,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,MAAM,IAAG,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;YACrD,IAAI,CAAC,sBAAsB,GAAG,CAAA,GAAG,KAAH,IAAA,IAAA,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,MAAM,IAAG,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;AAC/D,SAAC,CAAC,CAAC;AAEL,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACvC;AAEO,IAAA,UAAU,CAAC,IAAgD,EAAA;AACjE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACvG,QAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;aAChG,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE;iBAChC,SAAS,CAAC,MAAK;gBACd,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC;qBAC/F,SAAS,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAC;AACxC,oBAAA,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,KAAK,CAAC;AACzC,iBAAC,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;AACrD,aAAC,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;AACnD,SAAC,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;KAClD;AAEO,IAAA,UAAU,CAAC,IAAqB,EAAA;QACtC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;aACjF,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE;iBAChC,SAAS,CAAC,MAAK;gBACd,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC;qBAC/F,SAAS,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAC;AAC1C,iBAAC,CAAC,CAAC;AACP,aAAC,CAAC,CAAA;AACN,SAAC,CAAC,CAAA;KACL;IAEO,mBAAmB,GAAA;QACzB,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC1J,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,0BAA0B,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC1I,SAAA;KACF;;2HA1KU,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAb,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAc,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAV,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAW,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,6BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,6QCtB1C,gjYAiPA,EAAA,MAAA,EAAA,CAAA,mmKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAArB,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,EAAA,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,EAAAY,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,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,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,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,UAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,0BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uCAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FD3Na,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBALzC,SAAS;+BACE,4BAA4B,EAAA,QAAA,EAAA,gjYAAA,EAAA,MAAA,EAAA,CAAA,mmKAAA,CAAA,EAAA,CAAA;2PAK7B,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACI,2BAA2B,EAAA,CAAA;sBAApC,MAAM;gBACG,QAAQ,EAAA,CAAA;sBAAjB,MAAM;;;MEnBI,0BAA0B,CAAA;AAOrC,IAAA,WAAA,GAAA;AALS,QAAA,IAAO,CAAA,OAAA,GAAY,KAAK,CAAC;AAExB,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAU,CAAC;AAClD,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAE,CAAC;KAGnD;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,CAAA;KAC3E;IAED,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;KACpC;;wHAjBU,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,0BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,sNCTvC,q5BAqBA,EAAA,MAAA,EAAA,CAAA,2hNAAA,CAAA,EAAA,CAAA,CAAA;4FDZa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBALtC,SAAS;+BACE,yBAAyB,EAAA,QAAA,EAAA,q5BAAA,EAAA,MAAA,EAAA,CAAA,2hNAAA,CAAA,EAAA,CAAA;0EAK1B,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEI,oBAAoB,EAAA,CAAA;sBAA7B,MAAM;gBACG,oBAAoB,EAAA,CAAA;sBAA7B,MAAM;;;MELI,mBAAmB,CAAA;IAK9B,WACS,CAAA,SAA4B,EACH,IAAsB,EAAA;AAD/C,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAmB;AACH,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAkB;AANjD,QAAA,IAAiB,CAAA,iBAAA,GAAG,IAAI,CAAC;AACzB,QAAA,IAAO,CAAA,OAAA,GAAG,EAAE,CAAC;AACb,QAAA,IAAK,CAAA,KAAA,GAAG,EAAE,CAAC;KAKb;IAEL,QAAQ,GAAA;QACN,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC;QAC3D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;KACpC;AAEM,IAAA,OAAO,CAAC,GAAY,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KAC3B;;AAlBU,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,gDAOpB,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAPd,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,uDCThC,kpBAcA,EAAA,MAAA,EAAA,CAAA,sgCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAxB,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4FDLa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;+BACE,iBAAiB,EAAA,aAAA,EAGZ,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,kpBAAA,EAAA,MAAA,EAAA,CAAA,sgCAAA,CAAA,EAAA,CAAA;;;8BASlC,MAAM;+BAAC,eAAe,CAAA;;;MAcd,gBAAgB,CAAA;AAI5B;;MEyCY,sBAAsB,CAAA;;oHAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,iBAvC/B,kBAAkB;QAClB,sBAAsB;QACtB,0BAA0B;QAC1B,mBAAmB;QACnB,2BAA2B;QAC3B,6BAA6B;QAC7B,sCAAsC;QACtC,uCAAuC;QACvC,0BAA0B;QAC1B,mBAAmB;QACnB,mBAAmB;AACnB,QAAA,cAAc,aAGd,YAAY;QACZ,aAAa;QACb,uBAAuB;QACvB,WAAW;QACX,mBAAmB;QACnB,gBAAgB;QAChB,cAAc,aAed,2BAA2B,CAAA,EAAA,CAAA,CAAA;AAIlB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,EAjBtB,SAAA,EAAA;QACT,UAAU;QACV,WAAW;QACX,mBAAmB;QACnB,uBAAuB;QACvB,mBAAmB;QACnB,UAAU;QACV,WAAW;QACX,aAAa;QACb,iBAAiB;QACjB,EAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAC;KACrE,EAAA,OAAA,EAAA,CAnBC,YAAY;QACZ,aAAa;QACb,uBAAuB;QACvB,WAAW;QACX,mBAAmB;QACnB,gBAAgB;QAChB,cAAc,CAAA,EAAA,CAAA,CAAA;4FAmBL,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAzClC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,kBAAkB;wBAClB,sBAAsB;wBACtB,0BAA0B;wBAC1B,mBAAmB;wBACnB,2BAA2B;wBAC3B,6BAA6B;wBAC7B,sCAAsC;wBACtC,uCAAuC;wBACvC,0BAA0B;wBAC1B,mBAAmB;wBACnB,mBAAmB;wBACnB,cAAc;AACf,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,aAAa;wBACb,uBAAuB;wBACvB,WAAW;wBACX,mBAAmB;wBACnB,gBAAgB;wBAChB,cAAc;AACf,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,UAAU;wBACV,WAAW;wBACX,mBAAmB;wBACnB,uBAAuB;wBACvB,mBAAmB;wBACnB,UAAU;wBACV,WAAW;wBACX,aAAa;wBACb,iBAAiB;wBACjB,EAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAC;AACrE,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,2BAA2B;AAC5B,qBAAA;iBAEF,CAAA;;;AC1ED;;AAEG;;;;"}