UNPKG

ngxsmk-tel-input

Version:

Angular international telephone input (intl-tel-input UI + libphonenumber-js validation). ControlValueAccessor. SSR-safe.

1 lines 212 kB
{"version":3,"file":"ngxsmk-tel-input.mjs","sources":["../../../projects/ngxsmk-tel-input/src/lib/signals.ts","../../../projects/ngxsmk-tel-input/src/lib/phone-intelligence.service.ts","../../../projects/ngxsmk-tel-input/src/lib/ngxsmk-tel-input.service.ts","../../../projects/ngxsmk-tel-input/src/lib/ngxsmk-tel-input.component.ts","../../../projects/ngxsmk-tel-input/src/lib/theme.service.ts","../../../projects/ngxsmk-tel-input/src/lib/phone-input.utils.ts","../../../projects/ngxsmk-tel-input/src/lib/themes/material.theme.ts","../../../projects/ngxsmk-tel-input/src/lib/themes/primeng.theme.ts","../../../projects/ngxsmk-tel-input/src/lib/testing/mock-phone-service.ts","../../../projects/ngxsmk-tel-input/src/lib/testing/test-fixtures.ts","../../../projects/ngxsmk-tel-input/src/lib/testing/e2e-helpers.ts","../../../projects/ngxsmk-tel-input/src/lib/testing/testing.module.ts","../../../projects/ngxsmk-tel-input/src/lib/integrations/verification.service.ts","../../../projects/ngxsmk-tel-input/src/lib/integrations/twilio.service.ts","../../../projects/ngxsmk-tel-input/src/lib/integrations/vonage.service.ts","../../../projects/ngxsmk-tel-input/src/lib/integrations/aws-sns.service.ts","../../../projects/ngxsmk-tel-input/src/lib/types-enhanced.ts","../../../projects/ngxsmk-tel-input/src/ngxsmk-tel-input.ts"],"sourcesContent":["/**\r\n * Signal-based API utilities for ngxsmk-tel-input.\r\n * Provides reactive signal-based interfaces for modern Angular applications.\r\n */\r\n\r\nimport { signal, computed, Signal, WritableSignal } from '@angular/core';\r\nimport { CountryCode } from 'libphonenumber-js';\r\nimport { ParseResult } from './ngxsmk-tel-input.service';\r\n\r\n/**\r\n * Signal-based state interface for phone input component.\r\n */\r\nexport interface PhoneInputState {\r\n  /** Raw input value as displayed */\r\n  raw: string;\r\n  /** E.164 formatted phone number or null if invalid */\r\n  e164: string | null;\r\n  /** Current country ISO2 code */\r\n  iso2: CountryCode;\r\n  /** Whether the phone number is valid */\r\n  isValid: boolean;\r\n  /** Whether the input has been touched */\r\n  touched: boolean;\r\n  /** Current validation errors */\r\n  errors: Record<string, boolean> | null;\r\n}\r\n\r\n/**\r\n * Creates a default phone input state signal.\r\n */\r\nexport function createPhoneInputState(): WritableSignal<PhoneInputState> {\r\n  return signal<PhoneInputState>({\r\n    raw: '',\r\n    e164: null,\r\n    iso2: 'US' as CountryCode,\r\n    isValid: false,\r\n    touched: false,\r\n    errors: null\r\n  });\r\n}\r\n\r\n/**\r\n * Computed signal for formatted phone number display.\r\n */\r\nexport function createFormattedValueSignal(\r\n  state: Signal<PhoneInputState>,\r\n  nationalDisplay: Signal<'formatted' | 'digits'>\r\n): Signal<string> {\r\n  return computed(() => {\r\n    const current = state();\r\n    if (!current.raw) return '';\r\n    \r\n    if (nationalDisplay() === 'formatted' && current.e164) {\r\n      // Return formatted national format\r\n      return current.raw;\r\n    }\r\n    \r\n    return current.raw;\r\n  });\r\n}\r\n\r\n/**\r\n * Computed signal for validation status.\r\n */\r\nexport function createValidationStatusSignal(\r\n  state: Signal<PhoneInputState>\r\n): Signal<{\r\n  isValid: boolean;\r\n  isInvalid: boolean;\r\n  hasErrors: boolean;\r\n  errorKeys: string[];\r\n}> {\r\n  return computed(() => {\r\n    const current = state();\r\n    const errors = current.errors || {};\r\n    const errorKeys = Object.keys(errors);\r\n    \r\n    return {\r\n      isValid: current.isValid,\r\n      isInvalid: !current.isValid && current.touched,\r\n      hasErrors: errorKeys.length > 0,\r\n      errorKeys\r\n    };\r\n  });\r\n}\r\n\r\n/**\r\n * Computed signal for phone number metadata.\r\n */\r\nexport function createPhoneMetadataSignal(\r\n  state: Signal<PhoneInputState>\r\n): Signal<{\r\n  countryCode: string;\r\n  dialCode: string | null;\r\n  nationalNumber: string | null;\r\n  internationalFormat: string | null;\r\n}> {\r\n  return computed(() => {\r\n    const current = state();\r\n    \r\n    if (!current.e164) {\r\n      return {\r\n        countryCode: current.iso2,\r\n        dialCode: null,\r\n        nationalNumber: null,\r\n        internationalFormat: null\r\n      };\r\n    }\r\n    \r\n    // Extract dial code from E.164\r\n    const dialCodeMatch = current.e164.match(/^\\+\\d{1,3}/);\r\n    const dialCode = dialCodeMatch ? dialCodeMatch[0].slice(1) : null;\r\n    \r\n    return {\r\n      countryCode: current.iso2,\r\n      dialCode,\r\n      nationalNumber: current.raw,\r\n      internationalFormat: current.e164\r\n    };\r\n  });\r\n}\r\n\r\n","/**\r\n * Phone intelligence service for advanced features\r\n * Provides carrier detection, number type detection, and smart formatting\r\n */\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { CountryCode, getNumberType, NumberType, parsePhoneNumberFromString } from 'libphonenumber-js';\r\n\r\nexport interface CarrierInfo {\r\n  country: CountryCode;\r\n  carrier?: string;\r\n  type: NumberType | 'UNKNOWN';\r\n  isMobile: boolean;\r\n  isLandline: boolean;\r\n  isTollFree: boolean;\r\n  isPremiumRate: boolean;\r\n  isVoip: boolean;\r\n}\r\n\r\nexport interface FormatSuggestion {\r\n  original: string;\r\n  suggested: string;\r\n  confidence: number;\r\n  reason: string;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PhoneIntelligenceService {\r\n  /**\r\n   * Detect carrier and number type\r\n   */\r\n  detectCarrierAndType(phoneNumber: string, country: CountryCode): CarrierInfo | null {\r\n    try {\r\n      const parsed = parsePhoneNumberFromString(phoneNumber, country);\r\n      if (!parsed || !parsed.isValid()) {\r\n        return null;\r\n      }\r\n\r\n      // getNumberType can accept PhoneNumber object directly (it's compatible with ParsedNumber)\r\n      // Use type assertion to work around TypeScript type mismatch\r\n      const numberType = getNumberType(parsed as any) || 'UNKNOWN';\r\n\r\n      return {\r\n        country: parsed.country as CountryCode,\r\n        type: numberType,\r\n        isMobile: numberType === 'MOBILE' || numberType === 'FIXED_LINE_OR_MOBILE',\r\n        isLandline: numberType === 'FIXED_LINE' || numberType === 'FIXED_LINE_OR_MOBILE',\r\n        isTollFree: numberType === 'TOLL_FREE',\r\n        isPremiumRate: numberType === 'PREMIUM_RATE',\r\n        isVoip: numberType === 'VOIP'\r\n      };\r\n    } catch {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get number type description\r\n   */\r\n  getNumberTypeDescription(type: NumberType | 'UNKNOWN'): string {\r\n    const descriptions: Record<string, string> = {\r\n      'MOBILE': 'Mobile phone',\r\n      'FIXED_LINE': 'Landline',\r\n      'FIXED_LINE_OR_MOBILE': 'Mobile or landline',\r\n      'TOLL_FREE': 'Toll-free number',\r\n      'PREMIUM_RATE': 'Premium rate number',\r\n      'VOIP': 'VoIP number',\r\n      'UNKNOWN': 'Unknown type'\r\n    };\r\n\r\n    return descriptions[type as string] || 'Unknown';\r\n  }\r\n\r\n  /**\r\n   * Suggest format corrections\r\n   */\r\n  suggestFormatCorrection(input: string, country: CountryCode): FormatSuggestion | null {\r\n    if (!input || input.length < 3) {\r\n      return null;\r\n    }\r\n\r\n    const digits = input.replace(/\\D/g, '');\r\n    if (digits.length < 3) {\r\n      return null;\r\n    }\r\n\r\n    try {\r\n      // Try to parse as-is\r\n      let parsed = parsePhoneNumberFromString(input, country);\r\n      \r\n      if (parsed && parsed.isValid()) {\r\n        return null; // Already valid\r\n      }\r\n\r\n      // Common corrections\r\n      const suggestions: FormatSuggestion[] = [];\r\n\r\n      // Remove leading zeros\r\n      if (digits.startsWith('0') && digits.length > 1) {\r\n        const withoutZero = digits.substring(1);\r\n        const testParsed = parsePhoneNumberFromString(withoutZero, country);\r\n        if (testParsed && testParsed.isValid()) {\r\n          suggestions.push({\r\n            original: input,\r\n            suggested: testParsed.formatNational(),\r\n            confidence: 0.8,\r\n            reason: 'Removed leading zero'\r\n          });\r\n        }\r\n      }\r\n\r\n      // Add country code if missing\r\n      if (!input.startsWith('+') && !input.startsWith('00')) {\r\n        const withPlus = `+${digits}`;\r\n        const testParsed = parsePhoneNumberFromString(withPlus);\r\n        if (testParsed && testParsed.isValid()) {\r\n          suggestions.push({\r\n            original: input,\r\n            suggested: testParsed.formatNational(),\r\n            confidence: 0.7,\r\n            reason: 'Added country code'\r\n          });\r\n        }\r\n      }\r\n\r\n      // Fix common formatting issues\r\n      const formatted = this.fixCommonFormattingIssues(input, country);\r\n      if (formatted && formatted !== input) {\r\n        const testParsed = parsePhoneNumberFromString(formatted, country);\r\n        if (testParsed && testParsed.isValid()) {\r\n          suggestions.push({\r\n            original: input,\r\n            suggested: testParsed.formatNational(),\r\n            confidence: 0.6,\r\n            reason: 'Fixed formatting'\r\n          });\r\n        }\r\n      }\r\n\r\n      // Return highest confidence suggestion\r\n      if (suggestions.length > 0) {\r\n        return suggestions.sort((a, b) => b.confidence - a.confidence)[0];\r\n      }\r\n\r\n      return null;\r\n    } catch {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Fix common formatting issues\r\n   */\r\n  private fixCommonFormattingIssues(input: string, country: CountryCode): string | null {\r\n    let fixed = input;\r\n\r\n    // Remove spaces and dashes, keep only digits and +\r\n    fixed = fixed.replace(/[^\\d+]/g, '');\r\n\r\n    // Remove multiple plus signs\r\n    if (fixed.indexOf('+') !== fixed.lastIndexOf('+')) {\r\n      fixed = '+' + fixed.replace(/\\+/g, '');\r\n    }\r\n\r\n    // Remove leading zeros after country code\r\n    if (fixed.startsWith('+')) {\r\n      const parts = fixed.split('+');\r\n      if (parts.length > 1) {\r\n        const numberPart = parts[1].replace(/^0+/, '');\r\n        fixed = '+' + numberPart;\r\n      }\r\n    }\r\n\r\n    return fixed;\r\n  }\r\n\r\n  /**\r\n   * Get timezone for phone number\r\n   */\r\n  getTimezone(phoneNumber: string, country: CountryCode): string | null {\r\n    try {\r\n      const parsed = parsePhoneNumberFromString(phoneNumber, country);\r\n      if (!parsed) {\r\n        return null;\r\n      }\r\n\r\n      // Basic timezone mapping (simplified)\r\n      const timezoneMap: Record<string, string> = {\r\n        'US': 'America/New_York',\r\n        'GB': 'Europe/London',\r\n        'AU': 'Australia/Sydney',\r\n        'CA': 'America/Toronto',\r\n        'DE': 'Europe/Berlin',\r\n        'FR': 'Europe/Paris',\r\n        'JP': 'Asia/Tokyo',\r\n        'CN': 'Asia/Shanghai',\r\n        'IN': 'Asia/Kolkata',\r\n        'BR': 'America/Sao_Paulo',\r\n        'MX': 'America/Mexico_City',\r\n        'RU': 'Europe/Moscow'\r\n      };\r\n\r\n      return timezoneMap[parsed.country || country] || null;\r\n    } catch {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if number is likely spam (basic heuristic)\r\n   */\r\n  isLikelySpam(phoneNumber: string, country: CountryCode): boolean {\r\n    try {\r\n      const parsed = parsePhoneNumberFromString(phoneNumber, country);\r\n      if (!parsed) {\r\n        return false;\r\n      }\r\n\r\n      const nationalNumber = parsed.nationalNumber;\r\n\r\n      // Check for suspicious patterns\r\n      const suspiciousPatterns = [\r\n        /^(\\d)\\1{6,}$/, // Same digit repeated 7+ times\r\n        /^123456789/, // Sequential\r\n        /^987654321/, // Reverse sequential\r\n        /^0000000/, // All zeros\r\n      ];\r\n\r\n      return suspiciousPatterns.some(pattern => pattern.test(nationalNumber));\r\n    } catch {\r\n      return false;\r\n    }\r\n  }\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { parsePhoneNumberFromString, type CountryCode } from 'libphonenumber-js';\r\n\r\n/**\r\n * Result of phone number parsing.\r\n */\r\nexport interface ParseResult {\r\n  /** E.164 formatted phone number (e.g., +14155550123) or null if invalid */\r\n  e164: string | null;\r\n  /** National format phone number or null if invalid */\r\n  national: string | null;\r\n  /** Whether the phone number is valid */\r\n  isValid: boolean;\r\n}\r\n\r\n/**\r\n * Enhanced parse result with invalid country code detection.\r\n */\r\nexport interface ParseWithInvalidResult extends ParseResult {\r\n  /** Whether the input appears to be an invalid international number */\r\n  isInvalidInternational: boolean;\r\n}\r\n\r\n/**\r\n * Service for parsing and validating phone numbers using libphonenumber-js.\r\n * Provides caching for improved performance and enhanced validation features.\r\n * \r\n * @example\r\n * ```typescript\r\n * constructor(private telService: NgxsmkTelInputService) {}\r\n * \r\n * validatePhone(input: string, country: CountryCode) {\r\n *   const result = this.telService.parse(input, country);\r\n *   return result.isValid;\r\n * }\r\n * ```\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgxsmkTelInputService {\r\n  private parseCache = new Map<string, ParseResult>();\r\n  private parseWithInvalidCache = new Map<string, ParseWithInvalidResult>();\r\n  private validationCache = new Map<string, boolean>();\r\n  private readonly CACHE_SIZE_LIMIT = 1000;\r\n\r\n  /**\r\n   * Parses a phone number string and returns formatted results.\r\n   * Results are cached for performance.\r\n   * \r\n   * @param input - The phone number string to parse (can include formatting)\r\n   * @param iso2 - ISO 3166-1 alpha-2 country code (e.g., 'US', 'GB')\r\n   * @returns ParseResult with E.164 format, national format, and validity status\r\n   * \r\n   * @example\r\n   * ```typescript\r\n   * const result = service.parse('202-555-1234', 'US');\r\n   * // result.e164 = '+12025551234'\r\n   * // result.national = '(202) 555-1234'\r\n   * // result.isValid = true\r\n   * ```\r\n   */\r\n  parse(input: string, iso2: CountryCode): ParseResult {\r\n    const cacheKey = `${input || ''}|${iso2}`;\r\n    \r\n    if (this.parseCache.has(cacheKey)) {\r\n      return this.parseCache.get(cacheKey)!;\r\n    }\r\n\r\n    try {\r\n      const phone = parsePhoneNumberFromString(input || '', iso2);\r\n      if (!phone) {\r\n        const result = { e164: null, national: null, isValid: false };\r\n        this.setCacheValue(this.parseCache, cacheKey, result);\r\n        return result;\r\n      }\r\n      \r\n      const isValid = phone.isValid();\r\n      const result = { \r\n        e164: isValid ? phone.number : null, \r\n        national: phone.formatNational(), \r\n        isValid \r\n      };\r\n      \r\n      this.setCacheValue(this.parseCache, cacheKey, result);\r\n      return result;\r\n    } catch {\r\n      const result = { e164: null, national: null, isValid: false };\r\n      this.setCacheValue(this.parseCache, cacheKey, result);\r\n      return result;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Validates whether a phone number string is valid for the given country.\r\n   * Results are cached for performance.\r\n   * \r\n   * @param input - The phone number string to validate\r\n   * @param iso2 - ISO 3166-1 alpha-2 country code\r\n   * @returns true if the phone number is valid, false otherwise\r\n   * \r\n   * @example\r\n   * ```typescript\r\n   * const isValid = service.isValid('202-555-1234', 'US'); // true\r\n   * const isInvalid = service.isValid('123', 'US'); // false\r\n   * ```\r\n   */\r\n  isValid(input: string, iso2: CountryCode): boolean {\r\n    const cacheKey = `${input || ''}|${iso2}`;\r\n    \r\n    if (this.validationCache.has(cacheKey)) {\r\n      return this.validationCache.get(cacheKey)!;\r\n    }\r\n\r\n    try {\r\n      const phone = parsePhoneNumberFromString(input || '', iso2);\r\n      const result = !!phone && phone.isValid();\r\n      \r\n      this.setCacheValue(this.validationCache, cacheKey, result);\r\n      return result;\r\n    } catch {\r\n      this.setCacheValue(this.validationCache, cacheKey, false);\r\n      return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets a value in the cache, implementing LRU eviction when cache is full.\r\n   * @param cache - The cache Map to update\r\n   * @param key - The cache key\r\n   * @param value - The value to cache\r\n   */\r\n  private setCacheValue<T>(cache: Map<string, T>, key: string, value: T): void {\r\n    if (cache.size >= this.CACHE_SIZE_LIMIT) {\r\n      const firstKey = cache.keys().next().value;\r\n      if (firstKey) cache.delete(firstKey);\r\n    }\r\n    cache.set(key, value);\r\n  }\r\n\r\n  /**\r\n   * Clears all caches. Useful for memory management or testing.\r\n   */\r\n  clearCache(): void {\r\n    this.parseCache.clear();\r\n    this.parseWithInvalidCache.clear();\r\n    this.validationCache.clear();\r\n  }\r\n\r\n  /**\r\n   * Checks if the input appears to be an international number with an invalid country code.\r\n   * This helps detect cases like \"1123456789\" where \"11\" is not a valid country code.\r\n   * \r\n   * @param input - The phone number string to check\r\n   * @returns true if the input appears to be an invalid international number\r\n   * @private\r\n   */\r\n  private isInvalidInternationalNumber(input: string): boolean {\r\n    if (!input || input.length < 3) return false;\r\n    \r\n    const digits = input.replace(/\\D/g, '');\r\n    if (digits.length < 3) return false;\r\n    \r\n    for (let i = 1; i <= 3 && i <= digits.length; i++) {\r\n      const potentialCountryCode = digits.substring(0, i);\r\n      const remainingDigits = digits.substring(i);\r\n      \r\n      if (remainingDigits.length >= 3) {\r\n        try {\r\n          const internationalNumber = `+${potentialCountryCode}${remainingDigits}`;\r\n          const phone = parsePhoneNumberFromString(internationalNumber);\r\n          \r\n          if (!phone) {\r\n            if (input.startsWith('+') || (potentialCountryCode.length >= 1 && potentialCountryCode.length <= 3)) {\r\n              return true;\r\n            }\r\n          }\r\n        } catch {\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n    \r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Enhanced parse method that detects invalid international numbers.\r\n   * This is useful for providing better error messages to users.\r\n   * Results are cached for performance.\r\n   * \r\n   * @param input - The phone number string to parse\r\n   * @param iso2 - ISO 3166-1 alpha-2 country code\r\n   * @returns ParseWithInvalidResult with additional invalid country code detection\r\n   * \r\n   * @example\r\n   * ```typescript\r\n   * const result = service.parseWithInvalidDetection('1123456789', 'US');\r\n   * // result.isInvalidInternational = true (because \"11\" is not a valid country code)\r\n   * // result.isValid = false\r\n   * ```\r\n   */\r\n  parseWithInvalidDetection(input: string, iso2: CountryCode): ParseWithInvalidResult {\r\n    const cacheKey = `${input || ''}|${iso2}`;\r\n    \r\n    if (this.parseWithInvalidCache.has(cacheKey)) {\r\n      return this.parseWithInvalidCache.get(cacheKey)!;\r\n    }\r\n\r\n    try {\r\n      const phone = parsePhoneNumberFromString(input || '', iso2);\r\n      const isInvalidInternational = this.isInvalidInternationalNumber(input);\r\n      \r\n      if (!phone) {\r\n        const result = { \r\n          e164: null, \r\n          national: null, \r\n          isValid: false,\r\n          isInvalidInternational \r\n        };\r\n        this.setCacheValue(this.parseWithInvalidCache, cacheKey, result);\r\n        return result;\r\n      }\r\n      \r\n      const isValid = phone.isValid();\r\n      const result = { \r\n        e164: isValid ? phone.number : null, \r\n        national: phone.formatNational(), \r\n        isValid,\r\n        isInvalidInternational \r\n      };\r\n      \r\n      this.setCacheValue(this.parseWithInvalidCache, cacheKey, result);\r\n      return result;\r\n    } catch {\r\n      const isInvalidInternational = this.isInvalidInternationalNumber(input);\r\n      const result = { \r\n        e164: null, \r\n        national: null, \r\n        isValid: false,\r\n        isInvalidInternational \r\n      };\r\n      this.setCacheValue(this.parseWithInvalidCache, cacheKey, result);\r\n      return result;\r\n    }\r\n  }\r\n}\r\n","import {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  inject,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  Optional,\n  Output,\n  PLATFORM_ID,\n  SimpleChanges,\n  ViewChild,\n  ChangeDetectionStrategy,\n  signal,\n  computed,\n  output,\n  input,\n  Signal,\n  WritableSignal,\n  effect,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator\n} from '@angular/forms';\nimport { AsYouType, CountryCode, validatePhoneNumberLength } from 'libphonenumber-js';\nimport { NgxsmkTelInputService, ParseResult, ParseWithInvalidResult } from './ngxsmk-tel-input.service';\nimport { CountryMap, IntlTelI18n } from './types';\nimport { createPhoneInputState, createFormattedValueSignal, createValidationStatusSignal, createPhoneMetadataSignal, PhoneInputState } from './signals';\nimport { PhoneIntelligenceService, CarrierInfo, FormatSuggestion } from './phone-intelligence.service';\n\n/**\n * Interface for custom theme colors.\n */\nexport interface ColorPalette {\n  background?: string;\n  foreground?: string;\n  border?: string;\n  borderHover?: string;\n  ring?: string;\n  placeholder?: string;\n}\n\n/**\n * Type definition for intl-tel-input instance.\n * Matches the actual implementation of the Iti class.\n */\ntype IntlTelInstance = {\n  destroy(): void;\n  setNumber(aNumber: string): void;\n  setCountry(countryCode: string): void;\n  getSelectedCountryData(): { iso2?: string; dialCode?: string };\n  promise?: Promise<unknown>;\n};\n\n/**\n * Type for intl-tel-input configuration options.\n */\ninterface IntlTelInputConfig {\n  initialCountry: string;\n  preferredCountries: string[];\n  onlyCountries?: string[];\n  nationalMode: boolean;\n  allowDropdown: boolean;\n  separateDialCode: boolean;\n  geoIpLookup: (callback: (iso2: string) => void) => void;\n  autoPlaceholder: 'off' | 'polite' | 'aggressive';\n  utilsScript?: string;\n  customPlaceholder?: (example: string, country: unknown) => string;\n  i18n?: IntlTelI18n;\n  localizedCountries?: Record<string, string>;\n  dropdownContainer?: HTMLElement;\n}\n\n/**\n * Type for clipboard event with data property.\n */\ninterface ClipboardEventWithData extends ClipboardEvent {\n  clipboardData: DataTransfer | null;\n}\n\n/**\n * Type for beforeinput event with data and inputType properties.\n */\ninterface BeforeInputEvent extends Event {\n  data: string | null;\n  inputType: string;\n}\n\n/**\n * Angular telephone input component with country dropdown, flags, and robust validation/formatting.\n * Wraps intl-tel-input for the UI and libphonenumber-js for parsing/validation.\n * Implements ControlValueAccessor for seamless integration with Angular Forms.\n * \n * **Compatibility**: Works with Angular 17+ and supports both:\n * - Zone.js (traditional Angular change detection)\n * - Zoneless Angular (Angular 18+ without Zone.js)\n * - All data binding types (property, event, two-way)\n * - Reactive Forms and Template-driven Forms\n * - Signals (Angular 16+)\n * \n * **Mobile Responsive**: Fully optimized for mobile devices with:\n * - Touch-friendly tap targets (44x44px minimum)\n * - Prevents iOS zoom (16px font size)\n * - Responsive dropdown that adapts to viewport\n * - Safe area insets support for notched devices\n * - Optimized touch interactions\n * \n * @example\n * ```html\n * <ngxsmk-tel-input\n *   formControlName=\"phone\"\n *   label=\"Phone Number\"\n *   [initialCountry]=\"'US'\"\n *   [preferredCountries]=\"['US','GB']\">\n * </ngxsmk-tel-input>\n * ```\n */\n@Component({\n  selector: 'ngxsmk-tel-input',\n  standalone: true,\n  imports: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n      <div class=\"ngxsmk-tel\"\n         [class.disabled]=\"disabledSignal() || disabled\"\n         [attr.data-size]=\"sizeSignal() || size\"\n         [attr.data-variant]=\"variantSignal() || variant\"\n         [attr.dir]=\"dir\"\n         [attr.aria-label]=\"label || 'Phone number input'\">\n      @if (label) {\n        <label class=\"ngxsmk-tel__label\" [for]=\"resolvedId\">{{ label }}</label>\n      }\n\n      <div class=\"ngxsmk-tel__wrap\" \n           [class.has-error]=\"showError()\"\n           [attr.aria-describedby]=\"getAriaDescribedBy()\">\n        <div class=\"ngxsmk-tel-input__wrapper\">\n          <input\n            #telInput\n            type=\"tel\"\n            class=\"ngxsmk-tel-input__control\"\n            [id]=\"resolvedId\"\n            [attr.name]=\"name || null\"\n            [attr.placeholder]=\"placeholder || null\"\n            [attr.autocomplete]=\"autocomplete\"\n            [attr.inputmode]=\"digitsOnly ? 'numeric' : 'tel'\"\n            [disabled]=\"disabledSignal() || disabled\"\n            [attr.aria-invalid]=\"showError() ? 'true' : 'false'\"\n            [attr.aria-required]=\"isRequired ? 'true' : null\"\n            [attr.aria-describedby]=\"getAriaDescribedBy()\"\n            [attr.aria-errormessage]=\"showError() && errorText ? resolvedId + '-error' : null\"\n            (blur)=\"onBlur()\"\n            (focus)=\"onFocus()\"\n          />\n        </div>\n\n        @if (showClear && (rawValue() || currentRaw())) {\n          <button type=\"button\"\n                  class=\"ngxsmk-tel__clear\"\n                  (click)=\"clearInput()\"\n                  [attr.aria-label]=\"clearAriaLabel\"\n                  [attr.aria-describedby]=\"resolvedId\">\n            ×\n          </button>\n        }\n      </div>\n\n      @if (hint && !showError()) {\n        <div class=\"ngxsmk-tel__hint\" [id]=\"resolvedId + '-hint'\">{{ hint }}</div>\n      }\n      @if (showError() && errorText) {\n        <div class=\"ngxsmk-tel__error\" \n             [id]=\"resolvedId + '-error'\"\n             role=\"alert\"\n             [attr.aria-live]=\"'polite'\">{{ errorText }}</div>\n      }\n      <div [id]=\"resolvedId + '-status'\" \n           class=\"sr-only\" \n           role=\"status\" \n           [attr.aria-live]=\"'polite'\"\n           [attr.aria-atomic]=\"true\">{{ getAriaStatusMessage() }}</div>\n    </div>\n  `,\n  styleUrls: ['./ngxsmk-tel-input.component.scss'],\n  providers: [\n    { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgxsmkTelInputComponent), multi: true },\n    { provide: NG_VALIDATORS, useExisting: forwardRef(() => NgxsmkTelInputComponent), multi: true }\n  ]\n})\nexport class NgxsmkTelInputComponent implements AfterViewInit, OnChanges, OnDestroy, ControlValueAccessor, Validator {\n  @ViewChild('telInput', { static: true }) inputRef!: ElementRef<HTMLInputElement>;\n\n  // ========== Signal-based API (Angular 17+) ==========\n\n  /** Signal-based input: Initial country to select. Use 'auto' for geo-location detection. */\n  initialCountrySignal = input<CountryCode | 'auto'>('US');\n\n  /** Signal-based input: Countries to show at the top of the dropdown list. */\n  preferredCountriesSignal = input<CountryCode[]>(['US', 'GB']);\n\n  /** Signal-based input: Restrict selectable countries to this list. */\n  onlyCountriesSignal = input<CountryCode[] | undefined>(undefined);\n\n  /** Signal-based input: When true, shows dial code outside the input field. */\n  separateDialCodeSignal = input<boolean>(true);\n\n  /** Signal-based input: Enable or disable the country dropdown. */\n  allowDropdownSignal = input<boolean>(true);\n\n  /** Signal-based input: Display format - 'formatted' => national with spaces; 'digits' => digits only */\n  nationalDisplaySignal = input<'formatted' | 'digits'>('formatted');\n\n  /** Signal-based input: Format timing - 'typing' (live), 'blur', or 'off' */\n  formatWhenValidSignal = input<'off' | 'blur' | 'typing'>('typing');\n\n  /** Signal-based input: Size variant */\n  sizeSignal = input<'sm' | 'md' | 'lg'>('md');\n\n  /** Signal-based input: Style variant */\n  variantSignal = input<'outline' | 'filled' | 'underline'>('outline');\n\n  /** Signal-based input: Theme preference */\n  themeSignal = input<'light' | 'dark' | 'auto'>('auto');\n\n  /** Signal-based input: Disabled state */\n  disabledSignal = input<boolean>(false);\n\n  /** Signal-based output: Emitted when country selection changes */\n  countryChangeSignal = output<{ iso2: CountryCode }>();\n\n  /** Signal-based output: Emitted when validity changes */\n  validityChangeSignal = output<boolean>();\n\n  /** Signal-based output: Emitted on every input change */\n  inputChangeSignal = output<{ raw: string; e164: string | null; iso2: CountryCode }>();\n\n  /** Internal state signal for reactive state management */\n  private stateSignal: WritableSignal<PhoneInputState> = createPhoneInputState();\n\n  /** Computed signal: Current phone input state */\n  readonly state = this.stateSignal.asReadonly();\n\n  /** Computed signal: Formatted display value */\n  readonly formattedValue = createFormattedValueSignal(this.stateSignal, this.nationalDisplaySignal);\n\n  /** Computed signal: Validation status */\n  readonly validationStatus = createValidationStatusSignal(this.stateSignal);\n\n  /** Computed signal: Phone number metadata */\n  readonly phoneMetadata = createPhoneMetadataSignal(this.stateSignal);\n\n  /** Computed signal: Whether the input is valid */\n  readonly isValid = computed(() => this.stateSignal().isValid);\n\n  /** Computed signal: Whether the input has errors */\n  readonly hasErrors = computed(() => {\n    const errors = this.stateSignal().errors;\n    return errors !== null && Object.keys(errors).length > 0;\n  });\n\n  /** Computed signal: Whether to show error message */\n  readonly showError = computed(() => {\n    if (this.isDestroyed) return false;\n    const state = this.stateSignal();\n    const hasErrors = state.errors !== null && Object.keys(state.errors).length > 0;\n    return this.showErrorWhenTouched ? (state.touched && hasErrors) : hasErrors;\n  });\n\n  /** Computed signal: Current E.164 value */\n  readonly e164Value = computed(() => this.stateSignal().e164);\n\n  /** Computed signal: Current raw input value */\n  readonly rawValue = computed(() => this.stateSignal().raw);\n\n  /** Computed signal: Current country ISO2 code */\n  readonly currentCountry = computed(() => this.stateSignal().iso2);\n\n  // ========== Traditional @Input/@Output API (backward compatibility) ==========\n\n  /** Initial country to select. Use 'auto' for geo-location detection (defaults to 'US'). */\n  @Input() initialCountry: CountryCode | 'auto' = 'US';\n  /** Countries to show at the top of the dropdown list. */\n  @Input() preferredCountries: CountryCode[] = ['US', 'GB'];\n  /** Restrict selectable countries to this list. If not provided, all countries are available. */\n  @Input() onlyCountries?: CountryCode[];\n  /** When true, shows dial code outside the input field (after the flag). */\n  @Input() separateDialCode: boolean = true;\n  /** Enable or disable the country dropdown. */\n  @Input() allowDropdown: boolean = true;\n\n  /** 'formatted' => national with spaces; 'digits' => digits only */\n  @Input() nationalDisplay: 'formatted' | 'digits' = 'formatted';\n  /** 'typing' (live), 'blur', or 'off' */\n  @Input() formatWhenValid: 'off' | 'blur' | 'typing' = 'typing';\n\n  @Input() placeholder?: string;\n  @Input() autocomplete = 'tel';\n  @Input() name?: string;\n  @Input() inputId?: string;\n  @Input() disabled: boolean = false;\n\n  @Input() label?: string;\n  @Input() hint?: string;\n  @Input() errorText?: string;\n  @Input() size: 'sm' | 'md' | 'lg' = 'md';\n  @Input() variant: 'outline' | 'filled' | 'underline' = 'outline';\n  @Input() showClear = true;\n  @Input() autoFocus = false;\n  @Input() selectOnFocus = false;\n  @Input() showErrorWhenTouched = true;\n\n  @Input() dropdownAttachToBody = true;\n  @Input() dropdownZIndex = 2000;\n\n  @Input('i18n') i18n?: IntlTelI18n;\n  @Input('telI18n') set telI18n(v: IntlTelI18n | undefined) { this.i18n = v; }\n  @Input('localizedCountries') localizedCountries?: CountryMap;\n  @Input('telLocalizedCountries') set telLocalizedCountries(v: CountryMap | undefined) { this.localizedCountries = v; }\n\n  @Input() clearAriaLabel = 'Clear phone number';\n  @Input() dir: 'ltr' | 'rtl' = 'ltr';\n\n  @Input() autoPlaceholder: 'off' | 'polite' | 'aggressive' = 'off';\n  @Input() utilsScript?: string;\n  @Input() customPlaceholder?: (example: string, country: unknown) => string;\n\n  @Input() digitsOnly = true;\n  @Input() lockWhenValid = true;\n\n  @Input() theme: 'light' | 'dark' | 'auto' = 'auto';\n\n  /**\n   * Custom colors for fine-grained theme control.\n   */\n  @Input() customColors?: {\n    light?: ColorPalette;\n    dark?: ColorPalette;\n  };\n\n  /** Enable carrier and number type detection */\n  @Input() enableIntelligence = false;\n\n  /** Enable format suggestions */\n  @Input() enableFormatSuggestions = false;\n\n  @Output() countryChange = new EventEmitter<{ iso2: CountryCode }>();\n  @Output() validityChange = new EventEmitter<boolean>();\n  @Output() inputChange = new EventEmitter<{ raw: string; e164: string | null; iso2: CountryCode }>();\n  @Output() intelligenceChange = new EventEmitter<CarrierInfo | null>();\n  @Output() formatSuggestion = new EventEmitter<FormatSuggestion | null>();\n\n  private iti: IntlTelInstance | null = null;\n  private onChange: (val: string | null) => void = () => { };\n  private onTouchedCb: () => void = () => { };\n  private validatorChange?: () => void;\n  private lastEmittedValid = false;\n  private pendingWrite: string | null = null;\n  private touched = false;\n  private isDestroyed = false;\n  private eventListeners: Array<{ element: HTMLElement; event: string; handler: (event: Event) => void }> = [];\n  private searchInputCleanupFunctions: Array<() => void> = [];\n\n  private allowDropdownWasTrue = false;\n  private suppressEvents = false;\n  private themeObserver: MutationObserver | null = null;\n  private globalThemeObserver: MutationObserver | null = null;\n\n  readonly resolvedId: string = this.inputId || ('tel-' + Math.random().toString(36).slice(2));\n  private readonly platformId = inject(PLATFORM_ID);\n  private currentTheme: 'light' | 'dark' = 'light';\n  private lastThemeConfig: 'light' | 'dark' | 'auto' | null = null;\n\n  isRequired = false;\n\n  private readonly intelligence: PhoneIntelligenceService | null = inject(PhoneIntelligenceService, { optional: true });\n\n  private readonly hostElementRef = inject(ElementRef);\n\n  constructor(\n    @Optional() private readonly zone: NgZone | null,\n    private readonly tel: NgxsmkTelInputService,\n    private readonly cdr: ChangeDetectorRef\n  ) {\n    // Watch for theme signal changes\n    effect(() => {\n      if (!isPlatformBrowser(this.platformId) || this.isDestroyed) return;\n      // Check both signal and traditional input\n      const theme = this.themeSignal() || this.theme;\n      if (theme !== undefined && theme !== this.lastThemeConfig) {\n        this.lastThemeConfig = theme;\n        // Apply theme immediately (works even before plugin is initialized)\n        this.detectAndApplyTheme();\n      }\n    });\n  }\n\n  /**\n   * Helper method to run code inside Angular zone if available, otherwise just run it.\n   * Works with both Zone.js and zoneless Angular.\n   */\n  private runInZone(fn: () => void): void {\n    if (this.zone) {\n      this.zone.run(fn);\n    } else {\n      fn();\n      this.cdr.markForCheck();\n    }\n  }\n\n  /**\n   * Helper method to run code outside Angular zone if available, otherwise just run it.\n   * Works with both Zone.js and zoneless Angular.\n   */\n  private runOutsideZone(fn: () => void): void {\n    if (this.zone) {\n      this.zone.runOutsideAngular(fn);\n    } else {\n      fn();\n    }\n  }\n\n  /**\n   * Helper method for requestAnimationFrame with fallback for older browsers.\n   */\n  private requestAnimationFrame(fn: () => void): void {\n    if (typeof window !== 'undefined') {\n      const raf = window.requestAnimationFrame ||\n        (window as any).webkitRequestAnimationFrame ||\n        (window as any).mozRequestAnimationFrame ||\n        (window as any).msRequestAnimationFrame ||\n        ((callback: () => void) => setTimeout(callback, 16));\n      raf(fn);\n    } else {\n      fn();\n    }\n  }\n\n  /**\n   * Determines if dropdown should be attached to body.\n   * On mobile screens (<=768px), returns false to show dropdown inline instead of as modal.\n   */\n  private shouldAttachToBody(): boolean {\n    if (!this.dropdownAttachToBody) return false;\n    if (typeof window === 'undefined') return false;\n    // On mobile, don't attach to body to avoid modal popup behavior\n    // Use fallback for older browsers\n    const width = window.innerWidth || (window as any).clientWidth || 1024;\n    return width > 768;\n  }\n\n  /**\n   * Angular lifecycle hook called after the view is initialized.\n   * Initializes the intl-tel-input plugin and sets up event listeners.\n   */\n  ngAfterViewInit(): void {\n    if (!isPlatformBrowser(this.platformId) || this.isDestroyed) return;\n    // Ensure theme is applied on initial render\n    // Use setTimeout to ensure host element is fully available\n    setTimeout(() => {\n      if (!this.isDestroyed) {\n        this.detectAndApplyTheme();\n      }\n    }, 0);\n    this.setupDropdownThemeObserver();\n    this.setupGlobalThemeObserver();\n    void this.initAndWire();\n  }\n\n  private async initAndWire(): Promise<void> {\n    if (this.isDestroyed) return;\n\n    await this.initIntlTelInput();\n    if (this.isDestroyed) return;\n\n    this.bindDomListeners();\n\n    if (this.pendingWrite !== null && !this.isDestroyed) {\n      const v = this.pendingWrite;\n      this.pendingWrite = null;\n      this.writeValue(v);\n    }\n\n    if (this.autoFocus && !this.isDestroyed) {\n      this.requestAnimationFrame(() => {\n        if (!this.isDestroyed) this.focus();\n      });\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (!isPlatformBrowser(this.platformId) || this.isDestroyed) return;\n\n    // Check for signal changes or traditional input changes\n    const configChanged = [\n      'initialCountry', 'preferredCountries', 'onlyCountries',\n      'separateDialCode', 'allowDropdown',\n      'i18n', 'localizedCountries', 'dir',\n      'autoPlaceholder', 'utilsScript', 'customPlaceholder'\n    ].some(k => k in changes && !changes[k]?.firstChange);\n\n    // Also check if any signal inputs have changed (signals trigger change detection automatically)\n    if (configChanged && this.iti && !this.isDestroyed) {\n      this.reinitPlugin();\n      this.validatorChange?.();\n    }\n\n    // Handle theme changes from traditional @Input\n    if ('theme' in changes && !changes['theme'].firstChange) {\n      const theme = this.theme;\n      if (theme !== this.lastThemeConfig) {\n        this.lastThemeConfig = theme;\n        this.detectAndApplyTheme();\n        // Mark for check to ensure view updates with OnPush\n        this.cdr.markForCheck();\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.isDestroyed = true;\n    this.destroyPlugin();\n    this.cleanupEventListeners();\n    this.cleanupSearchInputListeners();\n    if (this.themeObserver) {\n      this.themeObserver.disconnect();\n      this.themeObserver = null;\n    }\n    if (this.globalThemeObserver) {\n      this.globalThemeObserver.disconnect();\n      this.globalThemeObserver = null;\n    }\n  }\n\n  /**\n   * Writes a new value to the form control.\n   * Called by Angular Forms when the control value changes programmatically.\n   * @param val - The new value (E.164 format string or null)\n   */\n  writeValue(val: string | null): void {\n    if (!this.inputRef || this.isDestroyed) return;\n\n    if (!this.iti) {\n      this.pendingWrite = val ?? '';\n      return;\n    }\n\n    // Get current state for comparison (will be checked after setNumber with correct country)\n    const currentE164 = this.stateSignal().e164;\n\n    this.suppressEvents = true;\n    try {\n      // Call setNumber() FIRST to let intl-tel-input detect and set the correct country\n      // This is critical when the incoming value has a different country code\n      this.iti.setNumber(val || '');\n\n      // Now get the country code AFTER setNumber has potentially changed it\n      const iso2 = this.currentIso2();\n\n      // Parse with the correct country code\n      const parsed = this.tel.parseWithInvalidDetection(val ?? '', iso2);\n      const incomingE164 = parsed.e164;\n\n      // Avoid unnecessary updates if E.164 value hasn't changed\n      if (currentE164 === incomingE164) {\n        // Even if E.164 is the same, update if the display value would be different\n        // (e.g., user changed format settings or country changed)\n        const currentRaw = this.stateSignal().raw;\n        const currentIso2 = this.stateSignal().iso2;\n\n        // If country changed, we need to update\n        if (currentIso2 !== iso2) {\n          // Country changed, proceed with update\n        } else {\n          // Same country, check if display value is different\n          const nsn = incomingE164\n            ? this.nsnFromE164(incomingE164, iso2)\n            : this.stripLeadingZero(this.toNSN(parsed.national ?? (val ?? '')));\n          const display = this.displayValue(nsn, iso2);\n          if (currentRaw === display) {\n            return; // Nothing to update\n          }\n        }\n      }\n\n      const nsn = incomingE164\n        ? this.nsnFromE164(incomingE164, iso2)\n        : this.stripLeadingZero(this.toNSN(parsed.national ?? (val ?? '')));\n\n      const display = this.displayValue(nsn, iso2);\n      this.setInputValue(display);\n\n      // Update state signal without triggering Angular Forms onChange\n      // (writeValue is called BY Angular Forms, so we shouldn't notify it back)\n      this.stateSignal.update(state => ({\n        ...state,\n        raw: display,\n        e164: incomingE164,\n        iso2,\n        isValid: parsed.isValid && !parsed.isInvalidInternational,\n        errors: (parsed.isValid && !parsed.isInvalidInternational) ? null : (parsed.isInvalidInternational ? { phoneInvalidCountryCode: true, phoneInvalid: false } : { phoneInvalid: true, phoneInvalidCountryCode: false })\n      }));\n\n      // Emit inputChange for external listeners (but NOT onChange to avoid loop)\n      this.runInZone(() => {\n        this.inputChange.emit({ raw: display, e164: incomingE164, iso2 });\n        this.inputChangeSignal.emit({ raw: display, e164: incomingE164, iso2 });\n      });\n      // Mark for check to ensure view updates (works in both zone and zoneless)\n      this.cdr.markForCheck();\n    } finally {\n      this.suppressEvents = false;\n    }\n  }\n\n  /**\n   * Registers a callback function that is called when the control's value changes.\n   * @param fn - Callback function that receives the new value (string | null)\n   */\n  registerOnChange(fn: (val: string | null) => void): void { this.onChange = fn; }\n\n  /**\n   * Registers a callback function that is called when the control is touched.\n   * @param fn - Callback function to be called on touch\n   */\n  registerOnTouched(fn: () => void): void { this.onTouchedCb = fn; }\n\n  /**\n   * Sets the disabled state of the control.\n   * Called by Angular Forms when the control's disabled state changes.\n   * @param isDisabled - Whether the control should be disabled\n   */\n  setDisabledState(isDisabled: boolean): void {\n    if (this.isDestroyed) return;\n\n    this.disabled = isDisabled;\n\n    if (this.inputRef) this.inputRef.nativeElement.disabled = isDisabled;\n\n    if (this.iti) {\n      if (isDisabled && this.allowDropdown) {\n        this.allowDropdownWasTrue = true;\n        this.allowDropdown = false;\n        this.reinitPlugin(); // closes popup & removes handlers\n      } else if (!isDisabled && this.allowDropdownWasTrue) {\n        this.allowDropdown = true;\n        this.allowDropdownWasTrue = false;\n        this.reinitPlugin();\n      } else {\n        this.applyDisabledUi(isDisabled);\n      }\n    } else {\n      this.applyDisabledUi(isDisabled);\n    }\n  }\n\n  /**\n   * Validates the phone number input.\n   * Returns validation errors if the number is invalid, null if valid.\n   * @param _ - The form control (unused, but required by Validator interface)\n   * @returns ValidationErrors object with error keys, or null if valid\n   */\n  validate(control: AbstractControl): ValidationErrors | null {\n    if (this.isDestroyed) return null;\n\n    // Update isRequired based on control validators\n    // Check if control has required validator by testing with null value\n    try {\n      if (control.validator) {\n        const testControl = { value: null } as AbstractControl;\n        const errors = control.validator(testControl);\n        this.isRequired = !!(errors && errors['required']);\n      } else {\n        this.isRequired = false;\n      }\n    } catch (e) {\n      // Fallback to not required if validator check fails\n      this.isRequired = false;\n    }\n\n    const raw = this.currentRaw();\n    if (!raw) return null;\n\n    const parsed = this.tel.parseWithInvalidDetection(raw, this.currentIso2());\n    const valid = parsed.isValid && !parsed.isInvalidInternational;\n\n    if (valid !== this.lastEmittedValid) {\n      this.lastEmittedValid = valid;\n\n      // Update state signal\n      this.stateSignal.update(state => ({\n        ...state,\n        isValid: valid,\n        errors: valid ? null : (parsed.isInvalidInternational ? { phoneInvalidCountryCode: true, phoneInvalid: false } : { phoneInvalid: true, phoneInvalidCountryCode: false })\n      }));\n\n      // Emit both traditional and signal-based outputs\n      this.validityChange.emit(valid);\n      this.validityChangeSignal.emit(valid);\n\n      // Mark for check when validity changes\n      this.cdr.markForCheck();\n    }\n\n    if (!valid) {\n      if (parsed.isInvalidInternational) {\n        return { phoneInvalidCountryCode: true };\n      }\n      return { phoneInvalid: true };\n    }\n\n    return null;\n  }\n\n  /**\n   * Registers a callback function that is called when validator inputs change.\n   * @param fn - Callback function to be called when validation should be re-run\n   */\n  registerOnValidatorChange(fn: () => void): void { this.validatorChange = fn; }\n\n  /**\n   * Programmatically focuses the input field.\n   * If selectOnFocus is enabled, also selects all text.\n   */\n  focus(): void {\n    if (this.isDestroyed || !this.inputRef) return;\n\n    this.inputRef.nativeElement.focus();\n    if (this.selectOnFocus) {\n      const el = this.inputRef.nativeElement;\n      this.requestAnimationFrame(() => {\n        if (!this.isDestroyed) {\n          try {\n            el.setSelectionRange(0, el.value.length);\n          } catch (e) {\n            // Fallback for browsers that don't support setSelectionRange\n            if (el.select) {\n              el.select();\n            }\n          }\n        }\n      });\n    }\n  }\n\n  /**\n   * Programmatically selects a country.\n   * @param iso2 - ISO 3166-1 alpha-2 country code (e.g., 'US', 'GB')\n   */\n  selectCountry(iso2: CountryCode): void {\n    if (this.iti && !this.isDestroyed) {\n      this.iti.setCountry(iso2.toLowerCase());\n      this.handleInput();\n    }\n  }\n\n  /**\n   * Clears the input field and refocuses it.\n   */\n  clearInput(): void {\n    if (this.isDestroyed) return;\n\n    this.setInputValue('');\n    this.handleInput();\n    this.inputRef.nativeElement.focus();\n  }\n\n  private async initIntlTelInput() {\n    if (this.isDestroyed) return;\n\n    const [{ default: intlTelInput }] = await Promise.all([import('intl-tel-input')]);\n\n    const toLowerKeys = (m?: CountryMap) => {\n      if (!m) return undefined;\n      const out: Record<string, string> = {};\n      for (const k in m) if (Object.prototype.hasOwnProperty.call(m, k)) {\n        const v = (m as Record<string, string | undefined>)[k];\n        if (v != null) out[k.toLowerCase()] = v;\n      }\n      return out;\n    };\n\n    // Use signal values if available, fallback to traditional inputs\n    const initialCountry = this.initialCountrySignal() || this.initialCountry;\n    const preferredCountries = this.preferredCountriesSignal() || this.preferredCountries;\n    const onlyCountries = this.onlyCountriesSignal() ?? this.onlyCountries;\n    const allowDropdown = this.allowDropdownSignal() ?? this.allowDropdown;\n    const separateDialCode = this.separateDialCodeSignal() ?? this.separateDialCode;\n\n    const config: IntlTelInputConfig = {\n      initialCountry: initialCountry === 'auto' ? 'auto' : (initialCountry?.toLowerCase() || 'us'),\n      preferredCountries: (preferredCountries ?? []).map(c => c.toLowerCase()),\n      onlyCountries: (onlyCountries ?? []).map(c => c.toLowerCase()),\n      nationalMode: true,\n      allowDropdown,\n      separateDialCode,\n      geoIpLookup: (cb: (iso2: string) => void) => cb('us'),\n\n      autoPlaceholder: this.autoPlaceholder,\n      utilsScript: this.utilsScript,\n      customPlaceholder: this.customPlaceholder,\n\n      i18n: this.i18n,\n      localizedCountries: toLowerKeys(this.localizedCountries),\n      // On mobile, don't attach to body to avoid modal behavior\n      dropdownContainer: this.shouldAttachToBody() ? (typeof document !== 'undefined' ? document.body : undefined) : undefined\n    };\n\n    this.runOutsideZone(() => {\n      if (!this.isDestroyed) {\n        this.iti = intlTelInput(this.inputRef.nativeElement, config);\n      }\n    });\n\n    if (!this.isDestroyed) {\n      (this.inputRef.nativeElement as HTMLElement).style.setProperty('--tel-dd-z', String(this.dropdownZIndex));\n      this.applyDisabledUi(this.disabled);\n    }\n  }\n\n  private async reinitPlugin() {\n    if (this.isDestroyed) return;\n\n    const prevIso2 = (this.iti?.getSelectedCountryData?.().iso2 || this.initialCountry || 'US').toString().toLowerCase();\n    const prevValue = this.currentRaw();\n\n    this.destroyPlugin();\n    await this.initIntlTelInput();\n    this.bindDomListeners();\n\n    if (!this.isDestroyed) {\n      try {\n        this.iti?.setCountry(prevIso2);\n      } catch (e) {\n        // Ignore errors when setting country (e.g., invalid country code)\n      }\n      if (prevValue) {\n        this.setInputValue(prevValue);\n        this.handleInput();\n      }\n      this.applyDisabledUi(this.disabled);\n    }\n  }\n\n  private destroyPlugin() {\n    if (this.iti) {\n      this.iti.destroy();\n      this.iti = null;\n    }\n  }\n\n  // ---------- Input listeners ----------\n  private bindDomListeners() {\n    if (this.isDestroyed || !this.inputRef) return;\n\n    const el = this.inputRef.nativeElement;\n\n    this.runOutsideZone(() => {\n      const beforeInputHandler = (ev: Event) => {\n        if (this.isDestroyed || !this.digitsOnly) return;\n        const inputEvent = ev as BeforeInputEvent;\n        const data = inputEvent.data;\n\n        if (this.lockWhenValid && this.isCurrentlyValid()) {\n          const selStart = el.selectionStart ?? 0;\n          const selEnd = el.selectionEnd ?? 0;\n          const selCollapsed = selStart === selEnd;\n          const isDigit = !!data && inputEvent.inputType === 'insertText' && data >= '0' && data <= '9';\n          if (selCollapsed && isDigit) { ev.preventDefault(); return; }\n        }\n\n        if (!data || inputEvent.inputType !== 'insertText') return;\n        const isDigit = data >= '0' && data <= '9';\n        if (!isDigit) { ev.preventDefault(); return; }\n\n        const start = el.selectionStart ?? el.value.length;\n        const end = el.selectionEnd ?? el.value.length;\n        const prospective = el.value.slice(0, start) + data + el.value.slice(end);\n        const nsn = this.stripLeadingZero(this.toNSN(prospective));\n        const iso2 = this.currentIso2();\n\n        if (this.wouldExceedMax(nsn, iso2)) {\n          ev.preventDefault();\n          return;\n        }\n      };\n\n      const pasteHandler = (e: Event) => {\n        if (this.isDestroyed) return;\n\n        const clipboardEvent = e as ClipboardEventWithData;\n        // Support both standard ClipboardEvent and IE11 fallback\n        const clipboardData = clipboardEvent.clipboardData ||\n          ((window as Window & { clipboardData?: DataTransfer }).clipboardData) ||\n          null;\n        let text = '';\n        if (clipboardData) {\n          try {\n            text = clipboardData.getData('text') || '';\n          } catch (err) {\n            // Fallback for browsers without clipboardData support\n            text = '';\n          }\n        }\n        e.preventDefault();\n\n        const iso2 = this.currentIso2();\n        let digits = this.stripLeadingZero(this.toNSN(text));\n\n        while (this.wouldExceedMax(digits, iso2)) {\n          digits = digits.slice(0, -1);\n          if (!digits) break;\n        }\n\n        const start = el.selectionStart ?? el.value.length;\n        const end = el.selectionEnd ?? el.value.length;\n\n        // Use setRangeText with fallback for older browsers\n        if (el.setRangeText) {\n          try {\n            el.setRangeText(digits, start, end, 'end');\n          } catch (e) {\n            // Fallback for browsers without setRangeText support\n            el.value = el.value.substring(0, start) + digits + el.value.substring(end);\n          }\n        } else {\n          el.value = el.value.substring(0, start) + digits + el.value.substring(end);\n        }\n\n        this.requestAnimationFrame(() => {\n          if (!this.isDestroyed) this.handleInput();\n        });\n      };\n\n      const inputHandler = () => {\n        if (!this.isDestroyed) this.handleInput();\n      };\n\n      const countryChangeHandler = () => {\n        if (this.isDestroyed || this.suppressEvents) return;\n\n        const iso2 = this.currentIso2();\n\n        // Update state signal\n        this.stateSignal.update(state => ({\n          ...state,\n          iso2\n        }));\n\n        this.runInZone(() => {\n          const changeEvent = { iso2 };\n\n          // Emit both traditional and signal-based outputs\n          this.countryChange.emit(changeEvent);\n          this.countryChangeSignal.emit(changeEvent);\n\n          this.validatorChange?.();\n        });\n        this.handleInput();\n      };\n\n      const blurHandler = () => {\n        if (!this.isDestroyed) this.onBlur();\n      };\n\n      // Store listeners for cleanup\n      this.eventListeners = [\n        { element: el, event: 'beforeinput', handler: beforeInputHandler },\n        { element: el, event: 'paste', handler: pasteHandler },\n        { element: el, event: 'input', handler: inputHandler },\n        { element: el, event: 'countrychange', handler: countryChangeHandler },\n        { element: el, event: 'blur', handler: blurHandler }\n      ];\n\n      this.eventListeners.forEach(({ element, event, handler }) => {\n        element.addEventListener(event, handler);\n      });\n    });\n  }\n\n  onBlur() {\n    if (this.isDestroyed) return;\n\n    this.touched = true;\n\n    // Update state signal\n    this.stateSignal.update(state => ({\n      ...state,\n      touched: true\n    }));\n\n    this.runInZone(() => {\n      this.onTouchedCb();\n      // Trigger validation on blur\n      this.validatorChange?.();\n    });\n    // Mark for check to update view with OnPush (works in both zone and zoneless)\n    this.cdr.markForCheck();\n\n    const formatWhenValidBlur = this.formatWhenValidSignal() || this.formatWhenValid;\n    if (formatWhenValidBlur === 'off') return;\n\n    const iso2 = this.currentIso2();\n    const digits = this.stripLeadingZero(this.toNSN(this.currentRaw()));\n\n    const parsed = this.tel.parseWithInvalidDetection(digits, iso2);\n    if (!parsed.e164 && !parsed.isValid) return;\n\n    const nsn = parsed.e164 ? this.nsnFromE164(parsed.e164, iso2) : digits;\n    if (formatWhenValidBlur !== 'typing') {\n      this.setInputValue(this.displayValue(nsn, iso2));\n    }\n  }\n\n  onFocus() {\n    if (this.isDestroyed || !this.selectOnFocus || !this.inputRef) return;\n\n    const el = this.inputRef.nativeElement;\n    this.requestAnimationFrame(() => {\n      if (!this.isDestroyed) {\n        try {\n          if (el.setSelectionRange) {\n            el.setSelectionRange(0, el.value.length);\n          } else if (el.select) {\n            // Fallback for browsers that don't support setSelectionRange\n            el.select();\n          }\n        } catch (e) {\n          // Ignore errors in older browsers\n        }\n      }\n    });\n  }\n\n  private handleInput() {\n    if (this.suppressEvents || this.isDestroyed) return;\n\n    // Cache currentRaw() to avoid multiple DOM reads\n    const rawValue = this.currentRaw();\n    const iso2 = this.currentIso2();\n    const digits = this.stripLeadingZero(this.toNSN(rawValue));\n\n    const parsed = this.tel.parseWithInvalidDetection(digits, iso2);\n    const isValid = parsed.isValid && !parsed.isInvalidInternational;\n\n    // Batch state signal update\n    this.stateSignal.update(state => ({\n      ...state,\n      raw: rawValue,\n      e164: parsed.e164,\n      iso2,\n      isValid,\n      errors: isValid ? null : (parsed.isInvalidInternational ? { phoneInvalidCountryCode: true, phoneInvalid: false } : { phoneInvalid: true, phoneInvalidCountryCode: false })\n    }));\n\n    // Intelligence features\n    if (this.enableIntelligence && this.intelligence && parsed.e164) {\n      const carrierInfo = this.intelligence.detectCarrierAndType(parsed.e164, iso2);\n      if (carrierInfo) {\n        this.intelligenceChange.emit(carrierInfo);\n      }\n    }\n\n    // Format suggestions\n    if (this.enableFormatSuggestions && this.intelligence && !parsed.isValid) {\n      const suggestion = this.intelligence.suggestFormatCorrection(rawValue, iso2);\n      if (suggestion) {\n        this.formatSuggestion.emit(suggestion);\n      }\n    }\n\n    // Batch zone operations and emissions\n    this.runInZone(() => {\n      this.onChange(parsed.e164);\n\n      const changeEvent = { raw: rawValue, e164: parsed.e164, iso2 };\n\n      // Emit both traditional and signal-based outputs\n      this.inputChange.emit(changeEvent);\n      this.inputChangeSignal.emit(changeEvent);\n\n      // Trigger validation when input changes\n      this.validatorChange?.();\n    });\n    // Mark for check to update view with OnPush (works in both zone and zoneless)\n    this.cdr.markForCheck();\n\n    const nsn = parsed.e164 ? this.nsnFromE164(parsed.e164, iso2) : digits;\n    const formatWhenValid = this.formatWhenValidSignal() || this.formatWhenValid;\n    const display = formatWhenValid === 'typing' ? this.displayValue(nsn, iso2) : nsn;\n\n    if (display !== rawValue) this.setInputValue(display);\n  }\n  /** Convert any string to digits only (NSN basis). */\n  private toNSN(v: string | null | undefined): string {\n    return (v ?? '').replace(/\\D/g, '');\n  }\n\n  /** Strip exactly one leading trunk '0' from national input. */\n  private stripLeadingZero(nsn: string): string {\n    return nsn.replace(/^0/, '');\n  }\n\n  /** Current country calling code (e.g. \"44\", \"94\"). */\n  private currentDialCode(): string {\n    try {\n      return (this.iti?.getSelectedCountryData?.()?.dialCode ?? '').toString();\n    } catch (e) {\n      // Return empty string if country data is unavailable\n      return '';\n    }\n  }\n\n  /** Convert E.164 (+<cc><nsn>) to NSN (never includes trunk '0'). */\n  private nsnFromE164(e164: string, iso2: CountryCode): string {\n    const dial = this.currentDialCode();\n    if (!e164 || !dial) return this.toNSN(e164);\n    if (e164.startsWith('+' + dial)) return e164.slice(dial.length + 1);\n    return this.toNSN(e164);\n  }\n\n  /** Format NSN for a region (adds spaces but NEVER a trunk '0'). */\n  private formatNSN(nsn: string, iso2: CountryCode): string {\n    try {\n      const fmt = new AsYouType(iso2);\n      return fmt.input(nsn);\n    } catch (e) {\n      // Return unformatted NSN if formatting fails\n      return nsn;\n    }\n  }\n\n  /** Compose visible value based on settings. */\n  private displayValue(nsn: string, iso2: CountryCode): string {\n    const nationalDisplay = this.nationalDisplaySignal() || this.nationalDisplay;\n    return nationalDisplay === 'formatted' ? this.formatNSN(nsn, iso2) : nsn;\n  }\n\n  /**\n   * Gets the current raw input value (as displayed, with formatting).\n   * @returns The current input value as a string\n   */\n  currentRaw(): string {\n    return this.isDestroyed ? '' : (this.inputRef?.nativeElement.value ?? '').trim();\n  }\n\n  /**\n   * Gets the aria-describedby attribute value for accessibility.\n   * @returns Space-separated list of element IDs that describe this input\n   */\n  getAriaDescribedBy(): string | null {\n    const ids: string[] = [];\n    const hasError = this.showError();\n    if (this.hint && !hasError) {\n      ids.push(this.resolvedId + '-hint');\n    }\n    if (hasError && this.errorText) {\n      ids.push(this.resolvedId + '-error');\n    }\n    ids.push(this.resolvedId + '-status');\n    return ids.length > 0 ? ids.join(' ') : null;\n  }\n\n  /**\n   * Gets the ARIA status message for screen readers.\n   * @returns Status message describing the current state\n   */\n  getAriaStatusMessage(): string {\n    if (this.isDestroyed) return '';\n    const raw = this.currentRaw();\n    if (!raw) return '';\n\n    const iso2 = this.currentIso2();\n    const parsed = this.tel.parseWithInvalidDetection(raw, iso2);\n\n    if (parsed.isValid && parsed.e164) {\n      return `Valid phone number: ${parsed.e164}`;\n    } else if (parsed.isInvalidInternational) {\n      return 'Invalid country code';\n    } else {\n      return 'Invalid phone number';\n    }\n  }\n\n  private currentIso2(): CountryCode {\n    if (this.isDestroyed) return 'US';\n\n    try {\n      const iso2 = (this.iti?.getSelectedCountryData?.()?.iso2 ?? this.initialCountry ?? 'US')\n        .toString().toUpperCase();\n      return iso2 as CountryCode;\n    } catch (e) {\n      // Fallback to initial country or default if country data is unavailable\n      return (this.initialCountry ?? 'US') as CountryCode;\n    }\n  }\n\n  private setInputValue(v: string) {\n    if (!this.isDestroyed && this.inputRef) {\n      this.inputRef.nativeElement.value = v ?? '';\n    }\n  }\n\n\n  private isCurrentlyValid(): boolean {\n    return this.isDestroyed ? false : this.tel.isValid(this.currentRaw(), this.currentIso2());\n  }\n\n  /** Make flag/dropdown non-interactive when disabled */\n  private applyDisabledUi(disabled: boolean) {\n    if (this.isDestroyed) return;\n\n    const input = this.inputRef?.nativeElement;\n    if (!input) return;\n    const flag = input.parentElement?.querySelector('.iti__selected-flag') as HTMLElement | null;\n    if (flag) {\n      flag.tabIndex = disabled ? -1 : 0;\n      flag.setAttribute('aria-disabled', String(disabled));\n    }\n  }\n\n  /** Returns true if nsn would be TOO_LONG for the current country. */\n  private wouldExceedMax(nsn: string, iso2: CountryCode): boolean {\n    if (this.isDestroyed) return false;\n\n    try {\n      const res = validatePhoneNumberLength(nsn, iso2);\n      return res === 'TOO_LONG';\n    } catch (e) {\n      // Return false if validation fails (assume not too long)\n      return false;\n    }\n  }\n\n  /** Clean up event listeners to prevent memory leaks */\n  private cleanupEventListeners(): void {\n    this.eventListeners.forEach(({ element, event, handler }) => {\n      element.removeEventListener(event, handler);\n    });\n    this.eventListeners = [];\n  }\n\n  /** Detect and apply theme based on user preference and system settings */\n  private detectAndApplyTheme(): void {\n    if (!isPlatformBrowser(this.platformId)) return;\n\n    let detectedTheme: 'light' | 'dark' = 'light';\n\n    // Fix precedence: Check signal first, but if it's 'auto' (default), fallback to legacy input\n    // This allows [theme]=\"'light'\" to work even if signal defaults to 'auto'\n    const signalTheme = this.themeSignal();\n    const theme = signalTheme !== 'auto' ? signalTheme : this.theme;\n\n    if (theme === 'auto') {\n      // Check for matchMedia support (not available in older browsers)\n      try {\n        if (window.matchMedia?.('(prefers-color-scheme: dark)').matches) {\n          detectedTheme = 'dark';\n        }\n      } catch (e) {\n        // Fallback for browsers without matchMedia support\n      }\n\n      // Check for dark class on document element\n      if (document.documentElement?.classList?.contains('dark')) {\n        detectedTheme = 'dark';\n      }\n      // Check for data-theme attribute\n      else if (document.documentElement?.getAttribute('data-theme') === 'dark') {\n        detectedTheme = 'dark';\n      }\n    } else {\n      detectedTheme = theme;\n    }\n\n    // Always apply theme (even if same) to ensure it's set on the element\n    console.log(`[NgxsmkTelInput] Applying theme: ${detectedTheme} (Config: ${theme}, System Dark: ${typeof window !== 'undefined' && window.matchMedia?.('(prefers-color-scheme: dark)').matches})`);\n\n    this.currentTheme = detectedTheme;\n    this.applyTheme(detectedTheme);\n  }\n\n  /** Apply theme to the component */\n  private applyTheme(theme: 'light' | 'dark'): void {\n    if (!isPlatformBrowser(this.platformId)) return;\n\n    const hostElement = this.hostElementRef?.nativeElement as HTMLElement;\n    if (hostElement) {\n      // Set the theme attribute - this is the primary way CSS selects the theme\n      hostElement.setAttribute('data-theme', theme);\n\n      // Also add/remove dark class for additional CSS selector support\n      if (theme === 'dark') {\n        hostElement.classList.add('dark');\n        hostElement.classList.remove('light');\n      } else {\n        hostElement.classList.add('light');\n        hostElement.classList.remove('dark');\n      }\n\n      // Force style recalculation to ensure CSS is applied\n      void hostElement.offsetHeight; // Trigger reflow\n\n      // Mark for check to update view with OnPush strategy\n      this.cdr.markForCheck();\n    } else {\n      // Retry if host element not available yet\n      this.requestAnimationFrame(() => {\n        if (!this.isDestroyed) {\n          this.applyTheme(theme);\n        }\n      });\n      return;\n    }\n\n    this.applyCustomColors(theme);\n\n    this.applyThemeToDropdown(theme);\n  }\n\n  private applyCustomColors(theme: 'light' | 'dark') {\n    if (!this.customColors || !this.customColors[theme]) return;\n    const p = this.customColors[theme]!;\n    // Use hostElementRef since we used it above\n    const hostElement = this.hostElementRef?.nativeElement as HTMLElement;\n    if (!hostElement) return;\n\n    const style = hostElement.style;\n    const set = (k: string, v?: string) => { if (v) style.setProperty(k, v, 'important'); };\n\n    set('--tel-bg', p.background);\n    set('--tel-fg', p.foreground);\n    set('--tel-border', p.border);\n    set('--tel-border-hover', p.borderHover);\n    set('--tel-ring', p.ring);\n    set('--tel-placeholder', p.placeholder);\n  }\n\n  /** Apply theme to the dropdown if it exists */\n  private applyThemeToDropdown(theme: 'light' | 'dark'): void {\n    if (!isPlatformBrowser(this.platformId)) return;\n    if (typeof document === 'undefined' || !document.querySelector) return;\n\n    try {\n      const dropdown = document.querySelector('.iti__country-list') as HTMLElement;\n      if (dropdown && dropdown.setAttribute) {\n        dropdown.setAttribute('data-theme', theme);\n      }\n    } catch (e) {\n      // Fallback for browsers without querySelector support\n    }\n  }\n\n  /**\n   * Gets the current resolved theme (light or dark).\n   * @returns The current theme ('light' or 'dark')\n   */\n  getCurrentTheme(): 'light' | 'dark' {\n    return this.currentTheme;\n  }\n\n  /**\n   * Sets the theme programmatically.\n   * @param theme - Theme to apply ('light' or 'dark')\n   */\n  setTheme(theme: 'light' | 'dark'): void {\n    this.theme = theme;\n    this.detectAndApplyTheme();\n  }\n\n  /** Update dropdown theme when it's opened */\n  private updateDropdownTheme(): void {\n    if (!isPlatformBrowser(this.platformId)) return;\n\n    setTimeout(() => {\n      const dropdown = document.querySelector('.iti__country-list') as HTMLElement;\n      if (dropdown) {\n        dropdown.setAttribute('data-theme', this.currentTheme);\n\n        if (this.currentTheme === 'dark') {\n          dropdown.classList.add('dark-theme');\n          document.documentElement.classList.add('dark');\n          document.body.classList.add('dark');\n        } else {\n          dropdown.classList.remove('dark-theme');\n          document.documentElement.classList.remove('dark');\n          document.body.classList.remove('dark');\n        }\n\n        const searchInput = dropdown.querySelector('.iti__search-input') as HTMLInputElement;\n        if (searchInput) {\n          searchInput.setAttribute('data-theme', this.currentTheme);\n          if (this.currentTheme === 'dark') {\n            searchInput.classList.add('dark-theme');\n          } else {\n            searchInput.classList.remove('dark-theme');\n          }\n\n          searchInput.style.pointerEvents = 'auto';\n          searchInput.style.opacity = '1';\n          searchInput.disabled = false;\n\n          // Add clear button functionality\n          this.setupSearchInputClearButton(searchInput);\n        }\n      }\n    }, 10);\n  }\n\n  /** Setup clear button for search input */\n  private setupSearchInputClearButton(searchInput: HTMLInputElement): void {\n    if (!isPlatformBrowser(this.platformId)) return;\n\n    // Clean up any existing listeners first\n    this.cleanupSearchInputListeners();\n\n    // Find the search container (could be parent or a wrapper)\n    let searchContainer = searchInput.parentElement;\n    if (!searchContainer) return;\n\n    // Remove existing clear button if any\n    const existingClear = searchContainer.querySelector('.iti__search-clear');\n    if (existingClear) {\n      existingClear.remove();\n    }\n\n    // Create clear button\n    const clearButton = document.createElement('button');\n    clearButton.type = 'button';\n    clearButton.className = 'iti__search-clear';\n    clearButton.setAttribute('aria-label', 'Clear search');\n    clearButton.innerHTML = '×';\n    clearButton.setAttribute('tabindex', '-1');\n\n    // Make search input container relative if needed\n    const containerStyle = window.getComputedStyle(searchContainer);\n    if (containerStyle.position === 'static') {\n      searchContainer.style.position = 'relative';\n    }\n\n    // Append clear button to container\n    searchContainer.appendChild(clearButton);\n\n    // Show/hide clear button based on input value\n    const updateClearButton = () => {\n      if (searchInput.value && searchInput.value.trim()) {\n        clearButton.style.display = 'flex';\n      } else {\n        clearButton.style.display = 'none';\n      }\n    };\n\n    // Clear input when button is clicked\n    const handleClear = (e: Event) => {\n      e.preventDefault();\n      e.stopPropagation();\n      searchInput.value = '';\n      // Trigger input event to update the country list\n      searchInput.dispatchEvent(new Event('input', { bubbles: true }));\n      searchInput.dispatchEvent(new Event('keyup', { bubbles: true }));\n      searchInput.focus();\n      updateClearButton();\n    };\n\n    const handleMousedown = (e: Event) => e.preventDefault();\n    const handlePaste = () => {\n      setTimeout(updateClearButton, 0);\n    };\n\n    // Add event listeners and track cleanup functions\n    clearButton.addEventListener('click', handleClear);\n    this.searchInputCleanupFunctions.push(() => clearButton.removeEventListener('click', handleClear));\n\n    clearButton.addEventListener('mousedown', handleMousedown);\n    this.searchInputCleanupFunctions.push(() => clearButton.removeEventListener('mousedown', handleMousedown));\n\n    // Update button visibility on input\n    searchInput.addEventListener('input', updateClearButton);\n    this.searchInputCleanupFunctions.push(() => searchInput.removeEventListener('input', updateClearButton));\n\n    searchInput.addEventListener('keyup', updateClearButton);\n    this.searchInputCleanupFunctions.push(() => searchInput.removeEventListener('keyup', updateClearButton));\n\n    searchInput.addEventListener('focus', updateClearButton);\n    this.searchInputCleanupFunctions.push(() => searchInput.removeEventListener('focus', updateClearButton));\n\n    searchInput.addEventListener('paste', handlePaste);\n    this.searchInputCleanupFunctions.push(() => searchInput.removeEventListener('paste', handlePaste));\n\n    // Initial state\n    updateClearButton();\n  }\n\n  /** Clean up search input event listeners to prevent memory leaks */\n  private cleanupSearchInputListeners(): void {\n    this.searchInputCleanupFunctions.forEach(cleanup => cleanup());\n    this.searchInputCleanupFunctions = [];\n  }\n\n  /** Setup observer to watch for dropdown changes and apply theme */\n  private setupDropdownThemeObserver(): void {\n    if (!isPlatformBrowser(this.platformId)) return;\n    if (typeof window === 'undefined' || !window.MutationObserver) return;\n\n    // Only create observer if it doesn't already exist\n    if (this.themeObserver) return;\n\n    try {\n      this.themeObserver = new MutationObserver((mutations) => {\n        mutations.forEach((mutation) => {\n          if (mutation.type === 'childList' && mutation.addedNodes) {\n            mutation.addedNodes.forEach((node) => {\n              if (node.nodeType === Node.ELEMENT_NODE || node.nodeType === 1) {\n                const element = node as HTMLElement;\n                if (element.classList && element.classList.contains('iti__country-list')) {\n                  this.updateDropdownTheme();\n                }\n              }\n            });\n          }\n        });\n      });\n\n      if (this.themeObserver && document.body) {\n        this.themeObserver.observe(document.body, {\n          childList: true,\n          subtree: true\n        });\n      }\n    } catch (e) {\n      // Fallback for browsers without MutationObserver support\n      this.themeObserver = null;\n    }\n  }\n\n  /** Setup observer to watch for global theme changes on html/body */\n  private setupGlobalThemeObserver(): void {\n    if (!isPlatformBrowser(this.platformId)) return;\n\n    // Watch for class changes on document.documentElement (html tag)\n    // This supports Tailwind and other class-based theming systems\n    const target = document.documentElement;\n    if (!target || !window.MutationObserver) return;\n\n    this.globalThemeObserver = new MutationObserver((mutations) => {\n      // Only re-check if we are in auto mode\n      const themeConfig = this.themeSignal() || this.theme;\n      if (themeConfig === 'auto') {\n        this.detectAndApplyTheme();\n      }\n    });\n\n    this.globalThemeObserver.observe(target, {\n      attributes: true,\n      attributeFilter: ['class', 'data-theme']\n    });\n  }\n}\n","import { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\nexport type Theme = 'light' | 'dark' | 'auto';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ThemeService {\r\n  private readonly platformId = inject(PLATFORM_ID);\r\n  private readonly themeSubject = new BehaviorSubject<Theme>('auto');\r\n  private readonly currentThemeSubject = new BehaviorSubject<'light' | 'dark'>('light');\r\n  \r\n  public readonly theme$ = this.themeSubject.asObservable();\r\n  public readonly currentTheme$ = this.currentThemeSubject.asObservable();\r\n\r\n  constructor() {\r\n    if (isPlatformBrowser(this.platformId)) {\r\n      this.initializeTheme();\r\n      this.setupSystemThemeListener();\r\n    }\r\n  }\r\n\r\n  /** Get current theme preference */\r\n  getTheme(): Theme {\r\n    return this.themeSubject.value;\r\n  }\r\n\r\n  /** Get current resolved theme (light or dark) */\r\n  getCurrentTheme(): 'light' | 'dark' {\r\n    return this.currentThemeSubject.value;\r\n  }\r\n\r\n  /** Set theme preference */\r\n  setTheme(theme: Theme): void {\r\n    if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n    this.themeSubject.next(theme);\r\n    this.applyTheme(theme);\r\n    this.saveThemePreference(theme);\r\n  }\r\n\r\n  /** Toggle between light and dark themes */\r\n  toggleTheme(): void {\r\n    const current = this.getCurrentTheme();\r\n    this.setTheme(current === 'light' ? 'dark' : 'light');\r\n  }\r\n\r\n  /** Initialize theme from saved preference or system */\r\n  private initializeTheme(): void {\r\n    const savedTheme = this.getSavedThemePreference();\r\n    const theme = savedTheme || 'auto';\r\n    this.setTheme(theme);\r\n  }\r\n\r\n  /** Apply theme to document and components */\r\n  private applyTheme(theme: Theme): void {\r\n    const resolvedTheme = this.resolveTheme(theme);\r\n    this.currentThemeSubject.next(resolvedTheme);\r\n\r\n    // Apply to document\r\n    document.documentElement.setAttribute('data-theme', resolvedTheme);\r\n    \r\n    if (resolvedTheme === 'dark') {\r\n      document.documentElement.classList.add('dark');\r\n    } else {\r\n      document.documentElement.classList.remove('dark');\r\n    }\r\n\r\n    // Update CSS custom properties\r\n    this.updateCSSVariables(resolvedTheme);\r\n\r\n    // Force update of all tel-input components\r\n    this.updateTelInputComponents(resolvedTheme);\r\n  }\r\n\r\n  /** Update all tel-input components with the new theme */\r\n  private updateTelInputComponents(theme: 'light' | 'dark'): void {\r\n    const telInputComponents = document.querySelectorAll('ngxsmk-tel-input');\r\n    telInputComponents.forEach(component => {\r\n      const element = component as HTMLElement;\r\n      element.setAttribute('data-theme', theme);\r\n    });\r\n  }\r\n\r\n  /** Resolve theme to light or dark */\r\n  private resolveTheme(theme: Theme): 'light' | 'dark' {\r\n    if (theme === 'auto') {\r\n      return this.detectSystemTheme();\r\n    }\r\n    return theme;\r\n  }\r\n\r\n  /** Detect system theme preference */\r\n  private detectSystemTheme(): 'light' | 'dark' {\r\n    if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\r\n      return 'dark';\r\n    }\r\n    return 'light';\r\n  }\r\n\r\n  /** Setup listener for system theme changes */\r\n  private setupSystemThemeListener(): void {\r\n    if (window.matchMedia) {\r\n      const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n      mediaQuery.addEventListener('change', () => {\r\n        if (this.getTheme() === 'auto') {\r\n          this.applyTheme('auto');\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  /** Update CSS custom properties for theme */\r\n  private updateCSSVariables(theme: 'light' | 'dark'): void {\r\n    const root = document.documentElement;\r\n    \r\n    if (theme === 'dark') {\r\n      root.style.setProperty('--tel-bg', '#212121');\r\n      root.style.setProperty('--tel-fg', '#ffffff');\r\n      root.style.setProperty('--tel-border', '#334155');\r\n      root.style.setProperty('--tel-border-hover', '#475569');\r\n      root.style.setProperty('--tel-ring', '#60a5fa');\r\n      root.style.setProperty('--tel-placeholder', '#ffffff');\r\n      root.style.setProperty('--tel-error', '#f87171');\r\n      root.style.setProperty('--tel-success', '#34d399');\r\n      root.style.setProperty('--tel-warning', '#fbbf24');\r\n      root.style.setProperty('--tel-dd-bg', '#212121');\r\n      root.style.setProperty('--tel-dd-border', '#324056');\r\n      root.style.setProperty('--tel-dd-shadow', '0 24px 60px rgba(0, 0, 0, .4)');\r\n      root.style.setProperty('--tel-dd-search-bg', 'rgba(148, 163, 184, .12)');\r\n    } else {\r\n      root.style.setProperty('--tel-bg', '#fff');\r\n      root.style.setProperty('--tel-fg', '#0f172a');\r\n      root.style.setProperty('--tel-border', '#c0c0c0');\r\n      root.style.setProperty('--tel-border-hover', '#9aa0a6');\r\n      root.style.setProperty('--tel-ring', '#2563eb');\r\n      root.style.setProperty('--tel-placeholder', '#9ca3af');\r\n      root.style.setProperty('--tel-error', '#ef4444');\r\n      root.style.setProperty('--tel-success', '#10b981');\r\n      root.style.setProperty('--tel-warning', '#f59e0b');\r\n      root.style.setProperty('--tel-dd-bg', '#fff');\r\n      root.style.setProperty('--tel-dd-border', '#c0c0c0');\r\n      root.style.setProperty('--tel-dd-shadow', '0 24px 60px rgba(0, 0, 0, .18)');\r\n      root.style.setProperty('--tel-dd-search-bg', 'rgba(148, 163, 184, .08)');\r\n    }\r\n  }\r\n\r\n  /** Save theme preference to localStorage */\r\n  private saveThemePreference(theme: Theme): void {\r\n    try {\r\n      localStorage.setItem('ngxsmk-tel-input-theme', theme);\r\n    } catch (error) {\r\n      console.warn('Failed to save theme preference:', error);\r\n    }\r\n  }\r\n\r\n  /** Get saved theme preference from localStorage */\r\n  private getSavedThemePreference(): Theme | null {\r\n    try {\r\n      const saved = localStorage.getItem('ngxsmk-tel-input-theme');\r\n      return saved as Theme | null;\r\n    } catch (error) {\r\n      console.warn('Failed to load theme preference:', error);\r\n      return null;\r\n    }\r\n  }\r\n\r\n  /** Check if dark theme is active */\r\n  isDarkTheme(): boolean {\r\n    return this.getCurrentTheme() === 'dark';\r\n  }\r\n\r\n  /** Check if light theme is active */\r\n  isLightTheme(): boolean {\r\n    return this.getCurrentTheme() === 'light';\r\n  }\r\n\r\n  /** Check if auto theme is set */\r\n  isAutoTheme(): boolean {\r\n    return this.getTheme() === 'auto';\r\n  }\r\n}\r\n","import { CountryCode } from 'libphonenumber-js';\r\n\r\n/**\r\n * Utility functions for phone number input optimization and performance.\r\n * Provides helper methods for common operations like debouncing, throttling, and DOM manipulation.\r\n */\r\nexport class PhoneInputUtils {\r\n  /**\r\n   * Converts any string to digits only (NSN - National Significant Number basis).\r\n   * Removes all non-digit characters.\r\n   * \r\n   * @param v - Input string that may contain formatting characters\r\n   * @returns String containing only digits\r\n   * \r\n   * @example\r\n   * ```typescript\r\n   * PhoneInputUtils.toNSN('(202) 555-1234'); // Returns '2025551234'\r\n   * PhoneInputUtils.toNSN('+1 202-555-1234'); // Returns '12025551234'\r\n   * ```\r\n   */\r\n  static toNSN(v: string | null | undefined): string {\r\n    return (v ?? '').replace(/\\D/g, '');\r\n  }\r\n\r\n  /**\r\n   * Strips exactly one leading trunk '0' from national input.\r\n   * Used for countries like Sri Lanka where national format includes a leading 0.\r\n   * \r\n   * @param nsn - National Significant Number string\r\n   * @returns NSN with leading zero removed (if present)\r\n   * \r\n   * @example\r\n   * ```typescript\r\n   * PhoneInputUtils.stripLeadingZero('0712345678'); // Returns '712345678'\r\n   * PhoneInputUtils.stripLeadingZero('712345678'); // Returns '712345678'\r\n   * ```\r\n   */\r\n  static stripLeadingZero(nsn: string): string {\r\n    return nsn.replace(/^0/, '');\r\n  }\r\n\r\n  /**\r\n   * Creates a cache key for phone number operations.\r\n   * Combines input and country code into a unique key string.\r\n   * \r\n   * @param input - Phone number input string\r\n   * @param iso2 - ISO 3166-1 alpha-2 country code\r\n   * @returns Cache key string in format \"input|iso2\"\r\n   * \r\n   * @example\r\n   * ```typescript\r\n   * PhoneInputUtils.createCacheKey('2025551234', 'US'); // Returns '2025551234|US'\r\n   * ```\r\n   */\r\n  static createCacheKey(input: string, iso2: CountryCode): string {\r\n    return `${input || ''}|${iso2}`;\r\n  }\r\n\r\n  /**\r\n   * Creates a debounced version of a function.\r\n   * The debounced function delays execution until after wait milliseconds have elapsed\r\n   * since the last time it was invoked.\r\n   * \r\n   * @param func - Function to debounce\r\n   * @param wait - Number of milliseconds to wait\r\n   * @returns Debounced function\r\n   * \r\n   * @example\r\n   * ```typescript\r\n   * const debouncedHandler = PhoneInputUtils.debounce((value: string) => {\r\n   *   console.log(value);\r\n   * }, 300);\r\n   * \r\n   * debouncedHandler('a'); // Waits 300ms\r\n   * debouncedHandler('ab'); // Cancels previous, waits 300ms\r\n   * debouncedHandler('abc'); // Cancels previous, waits 300ms, then logs 'abc'\r\n   * ```\r\n   */\r\n  static debounce<T extends (...args: unknown[]) => unknown>(\r\n    func: T,\r\n    wait: number\r\n  ): (...args: Parameters<T>) => void {\r\n    let timeout: ReturnType<typeof setTimeout> | null = null;\r\n    \r\n    return (...args: Parameters<T>) => {\r\n      if (timeout) clearTimeout(timeout);\r\n      timeout = setTimeout(() => func.apply(this, args), wait);\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Creates a throttled version of a function.\r\n   * The throttled function will only execute once per limit milliseconds.\r\n   * \r\n   * @param func - Function to throttle\r\n   * @param limit - Number of milliseconds between executions\r\n   * @returns Throttled function\r\n   * \r\n   * @example\r\n   * ```typescript\r\n   * const throttledHandler = PhoneInputUtils.throttle((value: string) => {\r\n   *   console.log(value);\r\n   * }, 100);\r\n   * \r\n   * throttledHandler('a'); // Executes immediately\r\n   * throttledHandler('b'); // Ignored (within 100ms)\r\n   * throttledHandler('c'); // Ignored (within 100ms)\r\n   * // After 100ms, next call will execute\r\n   * ```\r\n   */\r\n  static throttle<T extends (...args: unknown[]) => unknown>(\r\n    func: T,\r\n    limit: number\r\n  ): (...args: Parameters<T>) => void {\r\n    let inThrottle: boolean;\r\n    \r\n    return (...args: Parameters<T>) => {\r\n      if (!inThrottle) {\r\n        func.apply(this, args);\r\n        inThrottle = true;\r\n        setTimeout(() => inThrottle = false, limit);\r\n      }\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Checks if a string contains only digits.\r\n   * \r\n   * @param str - String to check\r\n   * @returns true if string contains only digits, false otherwise\r\n   * \r\n   * @example\r\n   * ```typescript\r\n   * PhoneInputUtils.isDigitsOnly('12345'); // Returns true\r\n   * PhoneInputUtils.isDigitsOnly('123-45'); // Returns false\r\n   * ```\r\n   */\r\n  static isDigitsOnly(str: string): boolean {\r\n    return /^\\d+$/.test(str);\r\n  }\r\n\r\n  /**\r\n   * Safely gets an element's value with fallback to empty string.\r\n   * \r\n   * @param element - HTML input element (may be null)\r\n   * @returns Element value or empty string if element is null/undefined\r\n   * \r\n   * @example\r\n   * ```typescript\r\n   * const value = PhoneInputUtils.getElementValue(inputElement); // Returns value or ''\r\n   * ```\r\n   */\r\n  static getElementValue(element: HTMLInputElement | null): string {\r\n    return element?.value?.trim() || '';\r\n  }\r\n\r\n  /**\r\n   * Checks if an element is currently visible in the viewport.\r\n   * Useful for performance optimization (e.g., lazy loading).\r\n   * \r\n   * @param element - HTML element to check\r\n   * @returns true if element is in viewport, false otherwise\r\n   */\r\n  static isInViewport(element: HTMLElement): boolean {\r\n    const rect = element.getBoundingClientRect();\r\n    return (\r\n      rect.top >= 0 &&\r\n      rect.left >= 0 &&\r\n      rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\r\n      rect.right <= (window.innerWidth || document.documentElement.clientWidth)\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Creates an optimized event listener with cleanup function.\r\n   * Returns a function that removes the event listener when called.\r\n   * \r\n   * @param element - HTML element to attach listener to\r\n   * @param event - Event name (e.g., 'click', 'input')\r\n   * @param handler - Event handler function\r\n   * @param options - Optional AddEventListenerOptions\r\n   * @returns Cleanup function that removes the event listener\r\n   * \r\n   * @example\r\n   * ```typescript\r\n   * const cleanup = PhoneInputUtils.addEventListener(element, 'click', handler);\r\n   * // Later...\r\n   * cleanup(); // Removes the event listener\r\n   * ```\r\n   */\r\n  static createEventListener(\r\n    element: HTMLElement,\r\n    event: string,\r\n    handler: EventListener,\r\n    options?: AddEventListenerOptions\r\n  ): () => void {\r\n    element.addEventListener(event, handler, options);\r\n    return () => element.removeEventListener(event, handler, options);\r\n  }\r\n\r\n  /**\r\n   * Batches DOM operations for better performance.\r\n   * Executes all operations in a single requestAnimationFrame callback.\r\n   * \r\n   * @param operations - Array of functions that perform DOM operations\r\n   * \r\n   * @example\r\n   * ```typescript\r\n   * PhoneInputUtils.batchDOMOperations([\r\n   *   () => element1.style.display = 'none',\r\n   *   () => element2.classList.add('active'),\r\n   *   () => element3.textContent = 'Updated'\r\n   * ]);\r\n   * ```\r\n   */\r\n  static batchDOMOperations(operations: (() => void)[]): void {\r\n    requestAnimationFrame(() => {\r\n      operations.forEach(op => op());\r\n    });\r\n  }\r\n}\r\n","/**\r\n * Angular Material theme configuration helper\r\n */\r\n\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport interface MaterialThemeConfig {\r\n  primaryColor?: string;\r\n  accentColor?: string;\r\n  warnColor?: string;\r\n  density?: 'comfortable' | 'compact' | 'cosy';\r\n}\r\n\r\nexport const MATERIAL_THEME_CONFIG = new InjectionToken<MaterialThemeConfig>(\r\n  'MATERIAL_THEME_CONFIG'\r\n);\r\n\r\n/**\r\n * Provides Material theme configuration\r\n */\r\nexport function provideMaterialTheme(config: MaterialThemeConfig = {}) {\r\n  return {\r\n    provide: MATERIAL_THEME_CONFIG,\r\n    useValue: {\r\n      primaryColor: '#3f51b5',\r\n      accentColor: '#ff4081',\r\n      warnColor: '#f44336',\r\n      density: 'comfortable',\r\n      ...config\r\n    }\r\n  };\r\n}\r\n\r\n","/**\r\n * PrimeNG theme configuration helper\r\n */\r\n\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport interface PrimeNGThemeConfig {\r\n  theme?: 'lara-light' | 'lara-dark' | 'aura-light' | 'aura-dark' | 'saga-blue' | 'vela-blue' | 'arya-blue';\r\n  ripple?: boolean;\r\n  inputStyle?: 'outlined' | 'filled';\r\n}\r\n\r\nexport const PRIMENG_THEME_CONFIG = new InjectionToken<PrimeNGThemeConfig>(\r\n  'PRIMENG_THEME_CONFIG'\r\n);\r\n\r\n/**\r\n * Provides PrimeNG theme configuration\r\n */\r\nexport function providePrimeNGTheme(config: PrimeNGThemeConfig = {}) {\r\n  return {\r\n    provide: PRIMENG_THEME_CONFIG,\r\n    useValue: {\r\n      theme: 'lara-light',\r\n      ripple: true,\r\n      inputStyle: 'outlined',\r\n      ...config\r\n    }\r\n  };\r\n}\r\n\r\n","/**\r\n * Mock phone service for testing\r\n */\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { CountryCode } from 'libphonenumber-js';\r\nimport { NgxsmkTelInputService, ParseResult, ParseWithInvalidResult } from '../ngxsmk-tel-input.service';\r\n\r\n/**\r\n * Mock implementation of NgxsmkTelInputService for testing\r\n */\r\n@Injectable()\r\nexport class MockNgxsmkTelInputService extends NgxsmkTelInputService {\r\n  private mockValidNumbers: Set<string> = new Set();\r\n  private mockInvalidNumbers: Set<string> = new Set();\r\n  private mockParseResults: Map<string, ParseResult> = new Map();\r\n  private shouldThrowError = false;\r\n  private errorMessage = 'Mock error';\r\n\r\n  /**\r\n   * Add a valid phone number for testing\r\n   */\r\n  addValidNumber(number: string, country: CountryCode = 'US'): void {\r\n    this.mockValidNumbers.add(`${number}|${country}`);\r\n  }\r\n\r\n  /**\r\n   * Add an invalid phone number for testing\r\n   */\r\n  addInvalidNumber(number: string, country: CountryCode = 'US'): void {\r\n    this.mockInvalidNumbers.add(`${number}|${country}`);\r\n  }\r\n\r\n  /**\r\n   * Set a custom parse result for a specific input\r\n   */\r\n  setParseResult(input: string, country: CountryCode, result: ParseResult): void {\r\n    const key = `${input}|${country}`;\r\n    this.mockParseResults.set(key, result);\r\n  }\r\n\r\n  /**\r\n   * Configure the service to throw an error\r\n   */\r\n  setShouldThrowError(shouldThrow: boolean, message: string = 'Mock error'): void {\r\n    this.shouldThrowError = shouldThrow;\r\n    this.errorMessage = message;\r\n  }\r\n\r\n  /**\r\n   * Clear all mock data\r\n   */\r\n  clearMocks(): void {\r\n    this.mockValidNumbers.clear();\r\n    this.mockInvalidNumbers.clear();\r\n    this.mockParseResults.clear();\r\n    this.shouldThrowError = false;\r\n    this.clearCache();\r\n  }\r\n\r\n  override parse(input: string, iso2: CountryCode): ParseResult {\r\n    if (this.shouldThrowError) {\r\n      throw new Error(this.errorMessage);\r\n    }\r\n\r\n    const key = `${input || ''}|${iso2}`;\r\n    \r\n    // Check for custom parse result\r\n    if (this.mockParseResults.has(key)) {\r\n      return this.mockParseResults.get(key)!;\r\n    }\r\n\r\n    // Check if it's a known valid/invalid number\r\n    const isValid = this.mockValidNumbers.has(key);\r\n    const isInvalid = this.mockInvalidNumbers.has(key);\r\n\r\n    if (isValid) {\r\n      return {\r\n        e164: input.startsWith('+') ? input : `+1${input}`,\r\n        national: input,\r\n        isValid: true\r\n      };\r\n    }\r\n\r\n    if (isInvalid) {\r\n      return {\r\n        e164: null,\r\n        national: null,\r\n        isValid: false\r\n      };\r\n    }\r\n\r\n    // Fallback to parent implementation\r\n    return super.parse(input, iso2);\r\n  }\r\n\r\n  override isValid(input: string, iso2: CountryCode): boolean {\r\n    if (this.shouldThrowError) {\r\n      throw new Error(this.errorMessage);\r\n    }\r\n\r\n    const key = `${input || ''}|${iso2}`;\r\n    \r\n    if (this.mockValidNumbers.has(key)) {\r\n      return true;\r\n    }\r\n\r\n    if (this.mockInvalidNumbers.has(key)) {\r\n      return false;\r\n    }\r\n\r\n    // Fallback to parent implementation\r\n    return super.isValid(input, iso2);\r\n  }\r\n\r\n  override parseWithInvalidDetection(input: string, iso2: CountryCode): ParseWithInvalidResult {\r\n    if (this.shouldThrowError) {\r\n      throw new Error(this.errorMessage);\r\n    }\r\n\r\n    const parseResult = this.parse(input, iso2);\r\n    \r\n    return {\r\n      ...parseResult,\r\n      isInvalidInternational: !parseResult.isValid && input.length > 3\r\n    };\r\n  }\r\n}\r\n\r\n","/**\r\n * Test fixtures for ngxsmk-tel-input\r\n */\r\n\r\nimport { ComponentFixture } from '@angular/core/testing';\r\nimport { CountryCode } from 'libphonenumber-js';\r\nimport { NgxsmkTelInputComponent } from '../ngxsmk-tel-input.component';\r\n\r\n/**\r\n * Test data fixtures\r\n */\r\nexport const TEST_PHONE_NUMBERS = {\r\n  valid: {\r\n    US: '+12025551234',\r\n    US_NATIONAL: '2025551234',\r\n    GB: '+442071234567',\r\n    GB_NATIONAL: '02071234567',\r\n    AU: '+61234567890',\r\n    AU_NATIONAL: '0234567890',\r\n    CA: '+14165551234',\r\n    CA_NATIONAL: '4165551234'\r\n  },\r\n  invalid: {\r\n    TOO_SHORT: '123',\r\n    TOO_LONG: '12345678901234567890',\r\n    INVALID_COUNTRY_CODE: '1123456789',\r\n    INVALID_FORMAT: 'abc123def'\r\n  }\r\n};\r\n\r\nexport const TEST_COUNTRIES: CountryCode[] = ['US', 'GB', 'AU', 'CA', 'DE', 'FR', 'JP', 'CN'];\r\n\r\n/**\r\n * Helper to create a test component fixture\r\n */\r\nexport function createTestComponentFixture<T>(\r\n  fixture: ComponentFixture<T>\r\n): ComponentFixture<T> {\r\n  fixture.detectChanges();\r\n  return fixture;\r\n}\r\n\r\n/**\r\n * Helper to get phone input component from fixture\r\n */\r\nexport function getPhoneInputComponent(\r\n  fixture: ComponentFixture<any>\r\n): NgxsmkTelInputComponent {\r\n  const component = fixture.componentInstance;\r\n  const phoneInput = component.phoneInput || component.telInput;\r\n  if (!phoneInput) {\r\n    throw new Error('Phone input component not found. Use ViewChild with reference name \"phoneInput\" or \"telInput\"');\r\n  }\r\n  return phoneInput;\r\n}\r\n\r\n/**\r\n * Helper to set phone input value\r\n */\r\nexport function setPhoneInputValue(\r\n  component: NgxsmkTelInputComponent,\r\n  value: string\r\n): void {\r\n  component.writeValue(value);\r\n}\r\n\r\n/**\r\n * Helper to select country\r\n */\r\nexport function selectCountry(\r\n  component: NgxsmkTelInputComponent,\r\n  country: CountryCode\r\n): void {\r\n  component.selectCountry(country);\r\n}\r\n\r\n/**\r\n * Helper to trigger input event\r\n */\r\nexport function triggerInputEvent(\r\n  fixture: ComponentFixture<any>,\r\n  value: string\r\n): void {\r\n  const input = fixture.nativeElement.querySelector('input[type=\"tel\"]');\r\n  if (input) {\r\n    input.value = value;\r\n    input.dispatchEvent(new Event('input'));\r\n    fixture.detectChanges();\r\n  }\r\n}\r\n\r\n/**\r\n * Helper to trigger blur event\r\n */\r\nexport function triggerBlurEvent(fixture: ComponentFixture<any>): void {\r\n  const input = fixture.nativeElement.querySelector('input[type=\"tel\"]');\r\n  if (input) {\r\n    input.dispatchEvent(new Event('blur'));\r\n    fixture.detectChanges();\r\n  }\r\n}\r\n\r\n/**\r\n * Helper to trigger focus event\r\n */\r\nexport function triggerFocusEvent(fixture: ComponentFixture<any>): void {\r\n  const input = fixture.nativeElement.querySelector('input[type=\"tel\"]');\r\n  if (input) {\r\n    input.dispatchEvent(new Event('focus'));\r\n    fixture.detectChanges();\r\n  }\r\n}\r\n\r\n/**\r\n * Helper to get current input value\r\n */\r\nexport function getInputValue(fixture: ComponentFixture<any>): string {\r\n  const input = fixture.nativeElement.querySelector('input[type=\"tel\"]');\r\n  return input ? input.value : '';\r\n}\r\n\r\n/**\r\n * Helper to check if input is valid\r\n */\r\nexport function isInputValid(component: NgxsmkTelInputComponent): boolean {\r\n  return component.isValid();\r\n}\r\n\r\n/**\r\n * Helper to check if input has errors\r\n */\r\nexport function hasInputErrors(component: NgxsmkTelInputComponent): boolean {\r\n  return component.hasErrors();\r\n}\r\n\r\n/**\r\n * Helper to get validation errors\r\n */\r\nexport function getValidationErrors(component: NgxsmkTelInputComponent): string[] {\r\n  return component.validationStatus().errorKeys;\r\n}\r\n\r\n/**\r\n * Helper to wait for async operations\r\n */\r\nexport function waitForAsync(fn: () => void): Promise<void> {\r\n  return new Promise((resolve) => {\r\n    setTimeout(() => {\r\n      fn();\r\n      resolve();\r\n    }, 0);\r\n  });\r\n}\r\n\r\n/**\r\n * Test form control interface\r\n */\r\nexport interface TestFormControl {\r\n  value: string | null;\r\n  setValue: (val: string | null) => void;\r\n  patchValue: (val: string | null) => void;\r\n  reset: (val?: string | null) => void;\r\n}\r\n\r\n/**\r\n * Helper to create test form control\r\n */\r\nexport function createTestFormControl(value: string | null = null): TestFormControl {\r\n  const control: TestFormControl = {\r\n    value,\r\n    setValue: function(val: string | null) {\r\n      control.value = val;\r\n    },\r\n    patchValue: function(val: string | null) {\r\n      control.value = val;\r\n    },\r\n    reset: function(val: string | null = null) {\r\n      control.value = val;\r\n    }\r\n  };\r\n  return control;\r\n}\r\n\r\n/**\r\n * Test scenarios\r\n */\r\nexport const TEST_SCENARIOS = {\r\n  validUSNumber: {\r\n    input: TEST_PHONE_NUMBERS.valid.US_NATIONAL,\r\n    country: 'US' as CountryCode,\r\n    expectedE164: TEST_PHONE_NUMBERS.valid.US,\r\n    expectedValid: true\r\n  },\r\n  validUKNumber: {\r\n    input: TEST_PHONE_NUMBERS.valid.GB_NATIONAL,\r\n    country: 'GB' as CountryCode,\r\n    expectedE164: TEST_PHONE_NUMBERS.valid.GB,\r\n    expectedValid: true\r\n  },\r\n  invalidNumber: {\r\n    input: TEST_PHONE_NUMBERS.invalid.TOO_SHORT,\r\n    country: 'US' as CountryCode,\r\n    expectedE164: null,\r\n    expectedValid: false\r\n  },\r\n  invalidCountryCode: {\r\n    input: TEST_PHONE_NUMBERS.invalid.INVALID_COUNTRY_CODE,\r\n    country: 'US' as CountryCode,\r\n    expectedE164: null,\r\n    expectedValid: false,\r\n    expectedError: 'phoneInvalidCountryCode'\r\n  }\r\n};\r\n\r\n","/**\r\n * E2E testing helpers for ngxsmk-tel-input\r\n */\r\n\r\n// Protractor types are optional - only needed for E2E tests\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ntype ElementFinder = any;\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst by = { css: (selector: string) => ({ selector }) } as any;\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst element = (selector: any) => selector as any;\r\n\r\n/**\r\n * E2E selectors\r\n */\r\nexport const E2E_SELECTORS = {\r\n  phoneInput: 'ngxsmk-tel-input input[type=\"tel\"]',\r\n  phoneInputWrapper: 'ngxsmk-tel-input',\r\n  countryDropdown: '.iti__selected-flag',\r\n  countryList: '.iti__country-list',\r\n  clearButton: '.ngxsmk-tel__clear',\r\n  errorMessage: '.ngxsmk-tel__error',\r\n  hint: '.ngxsmk-tel__hint',\r\n  label: '.ngxsmk-tel__label'\r\n};\r\n\r\n/**\r\n * Get phone input element\r\n */\r\nexport function getPhoneInput(): ElementFinder {\r\n  return element(by.css(E2E_SELECTORS.phoneInput));\r\n}\r\n\r\n/**\r\n * Get phone input wrapper\r\n */\r\nexport function getPhoneInputWrapper(): ElementFinder {\r\n  return element(by.css(E2E_SELECTORS.phoneInputWrapper));\r\n}\r\n\r\n/**\r\n * Type phone number\r\n */\r\nexport async function typePhoneNumber(value: string): Promise<void> {\r\n  const input = getPhoneInput();\r\n  await input.clear();\r\n  await input.sendKeys(value);\r\n}\r\n\r\n/**\r\n * Clear phone input\r\n */\r\nexport async function clearPhoneInput(): Promise<void> {\r\n  const input = getPhoneInput();\r\n  await input.clear();\r\n}\r\n\r\n/**\r\n * Get phone input value\r\n */\r\nexport async function getPhoneInputValue(): Promise<string> {\r\n  const input = getPhoneInput();\r\n  return await input.getAttribute('value');\r\n}\r\n\r\n/**\r\n * Click country dropdown\r\n */\r\nexport async function clickCountryDropdown(): Promise<void> {\r\n  const dropdown = element(by.css(E2E_SELECTORS.countryDropdown));\r\n  await dropdown.click();\r\n}\r\n\r\n/**\r\n * Select country from dropdown\r\n */\r\nexport async function selectCountryFromDropdown(countryCode: string): Promise<void> {\r\n  await clickCountryDropdown();\r\n  const countryItem = element(by.css(`.iti__country[data-country-code=\"${countryCode.toLowerCase()}\"]`));\r\n  await countryItem.click();\r\n}\r\n\r\n/**\r\n * Click clear button\r\n */\r\nexport async function clickClearButton(): Promise<void> {\r\n  const clearBtn = element(by.css(E2E_SELECTORS.clearButton));\r\n  if (await clearBtn.isPresent()) {\r\n    await clearBtn.click();\r\n  }\r\n}\r\n\r\n/**\r\n * Get error message\r\n */\r\nexport async function getErrorMessage(): Promise<string> {\r\n  const errorEl = element(by.css(E2E_SELECTORS.errorMessage));\r\n  if (await errorEl.isPresent()) {\r\n    return await errorEl.getText();\r\n  }\r\n  return '';\r\n}\r\n\r\n/**\r\n * Check if error is displayed\r\n */\r\nexport async function isErrorDisplayed(): Promise<boolean> {\r\n  const errorEl = element(by.css(E2E_SELECTORS.errorMessage));\r\n  return await errorEl.isPresent();\r\n}\r\n\r\n/**\r\n * Get hint text\r\n */\r\nexport async function getHintText(): Promise<string> {\r\n  const hintEl = element(by.css(E2E_SELECTORS.hint));\r\n  if (await hintEl.isPresent()) {\r\n    return await hintEl.getText();\r\n  }\r\n  return '';\r\n}\r\n\r\n/**\r\n * Get label text\r\n */\r\nexport async function getLabelText(): Promise<string> {\r\n  const labelEl = element(by.css(E2E_SELECTORS.label));\r\n  if (await labelEl.isPresent()) {\r\n    return await labelEl.getText();\r\n  }\r\n  return '';\r\n}\r\n\r\n/**\r\n * Check if input is disabled\r\n */\r\nexport async function isInputDisabled(): Promise<boolean> {\r\n  const input = getPhoneInput();\r\n  return await input.getAttribute('disabled').then(\r\n    (value: string | null) => value !== null,\r\n    () => false\r\n  );\r\n}\r\n\r\n/**\r\n * Focus phone input\r\n */\r\nexport async function focusPhoneInput(): Promise<void> {\r\n  const input = getPhoneInput();\r\n  await input.click();\r\n}\r\n\r\n/**\r\n * Blur phone input\r\n */\r\nexport async function blurPhoneInput(): Promise<void> {\r\n  // Click outside the input\r\n  const body = element(by.tagName('body'));\r\n  await body.click();\r\n}\r\n\r\n/**\r\n * Wait for validation\r\n */\r\nexport async function waitForValidation(timeout: number = 1000): Promise<void> {\r\n  await new Promise(resolve => setTimeout(resolve, timeout));\r\n}\r\n\r\n/**\r\n * Check if country dropdown is open\r\n */\r\nexport async function isCountryDropdownOpen(): Promise<boolean> {\r\n  const countryList = element(by.css(E2E_SELECTORS.countryList));\r\n  return await countryList.isPresent() && await countryList.isDisplayed();\r\n}\r\n\r\n/**\r\n * Search for country in dropdown\r\n */\r\nexport async function searchCountryInDropdown(searchTerm: string): Promise<void> {\r\n  await clickCountryDropdown();\r\n  const searchInput = element(by.css('.iti__search-input'));\r\n  if (await searchInput.isPresent()) {\r\n    await searchInput.clear();\r\n    await searchInput.sendKeys(searchTerm);\r\n  }\r\n}\r\n\r\n/**\r\n * Get selected country code\r\n */\r\nexport async function getSelectedCountryCode(): Promise<string> {\r\n  const flag = element(by.css(E2E_SELECTORS.countryDropdown));\r\n  if (await flag.isPresent()) {\r\n    const countryCode = await flag.getAttribute('data-country-code');\r\n    return countryCode ? countryCode.toUpperCase() : '';\r\n  }\r\n  return '';\r\n}\r\n\r\n/**\r\n * E2E test scenarios\r\n */\r\nexport const E2E_SCENARIOS = {\r\n  /**\r\n   * Test valid phone number input\r\n   */\r\n  async testValidPhoneInput(phoneNumber: string, countryCode: string = 'US'): Promise<void> {\r\n    await selectCountryFromDropdown(countryCode);\r\n    await typePhoneNumber(phoneNumber);\r\n    await waitForValidation();\r\n    const errorDisplayed = await isErrorDisplayed();\r\n    if (errorDisplayed) {\r\n      throw new Error(`Expected valid input but error was displayed: ${await getErrorMessage()}`);\r\n    }\r\n  },\r\n\r\n  /**\r\n   * Test invalid phone number input\r\n   */\r\n  async testInvalidPhoneInput(phoneNumber: string, countryCode: string = 'US'): Promise<void> {\r\n    await selectCountryFromDropdown(countryCode);\r\n    await typePhoneNumber(phoneNumber);\r\n    await waitForValidation();\r\n    const errorDisplayed = await isErrorDisplayed();\r\n    if (!errorDisplayed) {\r\n      throw new Error('Expected error to be displayed for invalid input');\r\n    }\r\n  },\r\n\r\n  /**\r\n   * Test country selection\r\n   */\r\n  async testCountrySelection(countryCode: string): Promise<void> {\r\n    await selectCountryFromDropdown(countryCode);\r\n    await waitForValidation();\r\n    const selectedCode = await getSelectedCountryCode();\r\n    if (selectedCode !== countryCode.toUpperCase()) {\r\n      throw new Error(`Expected country ${countryCode} but got ${selectedCode}`);\r\n    }\r\n  },\r\n\r\n  /**\r\n   * Test clear button\r\n   */\r\n  async testClearButton(): Promise<void> {\r\n    await typePhoneNumber('1234567890');\r\n    await clickClearButton();\r\n    await waitForValidation();\r\n    const value = await getPhoneInputValue();\r\n    if (value !== '') {\r\n      throw new Error(`Expected empty value after clear but got: ${value}`);\r\n    }\r\n  }\r\n};\r\n\r\n","/**\r\n * Testing module for ngxsmk-tel-input\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { NgxsmkTelInputService } from '../ngxsmk-tel-input.service';\r\nimport { MockNgxsmkTelInputService } from './mock-phone-service';\r\n\r\n/**\r\n * Testing module that provides mock services\r\n * Note: NgxsmkTelInputComponent is standalone and should be imported directly in test components\r\n */\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [],\r\n  exports: [],\r\n  providers: [\r\n    {\r\n      provide: NgxsmkTelInputService,\r\n      useClass: MockNgxsmkTelInputService\r\n    }\r\n  ]\r\n})\r\nexport class NgxsmkTelInputTestingModule {}\r\n\r\n","/**\r\n * Base verification service interface\r\n */\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { CountryCode } from 'libphonenumber-js';\r\n\r\nexport interface VerificationRequest {\r\n  phoneNumber: string;\r\n  country: CountryCode;\r\n  method: 'sms' | 'voice' | 'whatsapp';\r\n}\r\n\r\nexport interface VerificationResponse {\r\n  success: boolean;\r\n  sid?: string;\r\n  error?: string;\r\n  expiresAt?: Date;\r\n}\r\n\r\nexport interface VerificationCheck {\r\n  code: string;\r\n  sid: string;\r\n}\r\n\r\nexport interface VerificationCheckResponse {\r\n  success: boolean;\r\n  verified: boolean;\r\n  error?: string;\r\n}\r\n\r\nexport abstract class VerificationService {\r\n  abstract verify(request: VerificationRequest): Observable<VerificationResponse>;\r\n  abstract check(request: VerificationCheck): Observable<VerificationCheckResponse>;\r\n}\r\n\r\n","/**\r\n * Twilio verification service integration\r\n */\r\n\r\nimport { Injectable, Inject, Optional } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable, from } from 'rxjs';\r\nimport { map, catchError } from 'rxjs/operators';\r\nimport { VerificationService, VerificationRequest, VerificationResponse, VerificationCheck, VerificationCheckResponse } from './verification.service';\r\n\r\nexport interface TwilioConfig {\r\n  accountSid: string;\r\n  authToken: string;\r\n  serviceSid?: string;\r\n  apiUrl?: string;\r\n}\r\n\r\nexport const TWILIO_CONFIG = 'TWILIO_CONFIG';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class TwilioVerificationService extends VerificationService {\r\n  private readonly apiUrl = 'https://verify.twilio.com/v2/Services';\r\n  private config: TwilioConfig | null = null;\r\n\r\n  constructor(\r\n    private http: HttpClient,\r\n    @Optional() @Inject(TWILIO_CONFIG) config?: TwilioConfig\r\n  ) {\r\n    super();\r\n    this.config = config || null;\r\n  }\r\n\r\n  setConfig(config: TwilioConfig): void {\r\n    this.config = config;\r\n  }\r\n\r\n  verify(request: VerificationRequest): Observable<VerificationResponse> {\r\n    if (!this.config) {\r\n      throw new Error('Twilio configuration not provided');\r\n    }\r\n\r\n    const serviceSid = this.config.serviceSid;\r\n    if (!serviceSid) {\r\n      throw new Error('Twilio Service SID not configured');\r\n    }\r\n\r\n    const url = `${this.apiUrl}/${serviceSid}/Verifications`;\r\n    const headers = this.getAuthHeaders();\r\n    const body = {\r\n      To: request.phoneNumber,\r\n      Channel: request.method === 'whatsapp' ? 'whatsapp' : request.method\r\n    };\r\n\r\n    return this.http.post<any>(url, body, { headers }).pipe(\r\n      map(response => ({\r\n        success: true,\r\n        sid: response.sid,\r\n        expiresAt: new Date(Date.now() + 600000) // 10 minutes default\r\n      })),\r\n      catchError(error => {\r\n        return from([{\r\n          success: false,\r\n          error: error.error?.message || 'Verification failed'\r\n        }]);\r\n      })\r\n    );\r\n  }\r\n\r\n  check(request: VerificationCheck): Observable<VerificationCheckResponse> {\r\n    if (!this.config) {\r\n      throw new Error('Twilio configuration not provided');\r\n    }\r\n\r\n    const serviceSid = this.config.serviceSid;\r\n    if (!serviceSid) {\r\n      throw new Error('Twilio Service SID not configured');\r\n    }\r\n\r\n    const url = `${this.apiUrl}/${serviceSid}/VerificationCheck`;\r\n    const headers = this.getAuthHeaders();\r\n    const body = {\r\n      To: request.code,\r\n      Code: request.code\r\n    };\r\n\r\n    return this.http.post<any>(url, body, { headers }).pipe(\r\n      map(response => ({\r\n        success: true,\r\n        verified: response.status === 'approved'\r\n      })),\r\n      catchError(error => {\r\n        return from([{\r\n          success: false,\r\n          verified: false,\r\n          error: error.error?.message || 'Verification check failed'\r\n        }]);\r\n      })\r\n    );\r\n  }\r\n\r\n  private getAuthHeaders(): HttpHeaders {\r\n    if (!this.config) {\r\n      throw new Error('Twilio configuration not provided');\r\n    }\r\n\r\n    const auth = btoa(`${this.config.accountSid}:${this.config.authToken}`);\r\n    return new HttpHeaders({\r\n      'Authorization': `Basic ${auth}`,\r\n      'Content-Type': 'application/x-www-form-urlencoded'\r\n    });\r\n  }\r\n}\r\n\r\n/**\r\n * Provide Twilio verification service\r\n */\r\nexport function provideTwilioVerification(config: TwilioConfig) {\r\n  return [\r\n    TwilioVerificationService,\r\n    {\r\n      provide: TWILIO_CONFIG,\r\n      useValue: config\r\n    }\r\n  ];\r\n}\r\n\r\n","/**\r\n * Vonage (Nexmo) verification service integration\r\n */\r\n\r\nimport { Injectable, Inject, Optional } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable, from } from 'rxjs';\r\nimport { map, catchError } from 'rxjs/operators';\r\nimport { VerificationService, VerificationRequest, VerificationResponse, VerificationCheck, VerificationCheckResponse } from './verification.service';\r\n\r\nexport interface VonageConfig {\r\n  apiKey: string;\r\n  apiSecret: string;\r\n  brand?: string;\r\n  apiUrl?: string;\r\n}\r\n\r\nexport const VONAGE_CONFIG = 'VONAGE_CONFIG';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class VonageVerificationService extends VerificationService {\r\n  private readonly apiUrl = 'https://api.nexmo.com/verify';\r\n  private config: VonageConfig | null = null;\r\n\r\n  constructor(\r\n    private http: HttpClient,\r\n    @Optional() @Inject(VONAGE_CONFIG) config?: VonageConfig\r\n  ) {\r\n    super();\r\n    this.config = config || null;\r\n  }\r\n\r\n  setConfig(config: VonageConfig): void {\r\n    this.config = config;\r\n  }\r\n\r\n  verify(request: VerificationRequest): Observable<VerificationResponse> {\r\n    if (!this.config) {\r\n      throw new Error('Vonage configuration not provided');\r\n    }\r\n\r\n    const url = `${this.apiUrl}/json`;\r\n    const body = new URLSearchParams({\r\n      api_key: this.config.apiKey,\r\n      api_secret: this.config.apiSecret,\r\n      number: request.phoneNumber,\r\n      brand: this.config.brand || 'App',\r\n      workflow_id: request.method === 'voice' ? '6' : '1'\r\n    });\r\n\r\n    const headers = new HttpHeaders({\r\n      'Content-Type': 'application/x-www-form-urlencoded'\r\n    });\r\n\r\n    return this.http.post<any>(url, body.toString(), { headers }).pipe(\r\n      map(response => {\r\n        if (response.status === '0') {\r\n          return {\r\n            success: true,\r\n            sid: response.request_id,\r\n            expiresAt: new Date(Date.now() + 300000) // 5 minutes default\r\n          };\r\n        } else {\r\n          return {\r\n            success: false,\r\n            error: response.error_text || 'Verification failed'\r\n          };\r\n        }\r\n      }),\r\n      catchError(error => {\r\n        return from([{\r\n          success: false,\r\n          error: error.error?.message || 'Verification failed'\r\n        }]);\r\n      })\r\n    );\r\n  }\r\n\r\n  check(request: VerificationCheck): Observable<VerificationCheckResponse> {\r\n    if (!this.config) {\r\n      throw new Error('Vonage configuration not provided');\r\n    }\r\n\r\n    const url = `${this.apiUrl}/check/json`;\r\n    const body = new URLSearchParams({\r\n      api_key: this.config.apiKey,\r\n      api_secret: this.config.apiSecret,\r\n      request_id: request.sid,\r\n      code: request.code\r\n    });\r\n\r\n    const headers = new HttpHeaders({\r\n      'Content-Type': 'application/x-www-form-urlencoded'\r\n    });\r\n\r\n    return this.http.post<any>(url, body.toString(), { headers }).pipe(\r\n      map(response => {\r\n        if (response.status === '0') {\r\n          return {\r\n            success: true,\r\n            verified: true\r\n          };\r\n        } else {\r\n          return {\r\n            success: false,\r\n            verified: false,\r\n            error: response.error_text || 'Verification check failed'\r\n          };\r\n        }\r\n      }),\r\n      catchError(error => {\r\n        return from([{\r\n          success: false,\r\n          verified: false,\r\n          error: error.error?.message || 'Verification check failed'\r\n        }]);\r\n      })\r\n    );\r\n  }\r\n}\r\n\r\n/**\r\n * Provide Vonage verification service\r\n */\r\nexport function provideVonageVerification(config: VonageConfig) {\r\n  return [\r\n    VonageVerificationService,\r\n    {\r\n      provide: VONAGE_CONFIG,\r\n      useValue: config\r\n    }\r\n  ];\r\n}\r\n\r\n","/**\r\n * AWS SNS verification service integration\r\n */\r\n\r\nimport { Injectable, Inject, Optional } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable, from } from 'rxjs';\r\nimport { map, catchError } from 'rxjs/operators';\r\nimport { VerificationService, VerificationRequest, VerificationResponse, VerificationCheck, VerificationCheckResponse } from './verification.service';\r\n\r\nexport interface AwsSnsConfig {\r\n  accessKeyId: string;\r\n  secretAccessKey: string;\r\n  region: string;\r\n  apiUrl?: string;\r\n}\r\n\r\nexport const AWS_SNS_CONFIG = 'AWS_SNS_CONFIG';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AwsSnsVerificationService extends VerificationService {\r\n  private config: AwsSnsConfig | null = null;\r\n\r\n  constructor(\r\n    private http: HttpClient,\r\n    @Optional() @Inject(AWS_SNS_CONFIG) config?: AwsSnsConfig\r\n  ) {\r\n    super();\r\n    this.config = config || null;\r\n  }\r\n\r\n  setConfig(config: AwsSnsConfig): void {\r\n    this.config = config;\r\n  }\r\n\r\n  verify(request: VerificationRequest): Observable<VerificationResponse> {\r\n    if (!this.config) {\r\n      throw new Error('AWS SNS configuration not provided');\r\n    }\r\n\r\n    // Generate OTP code (6 digits)\r\n    const code = Math.floor(100000 + Math.random() * 900000).toString();\r\n    \r\n    // In a real implementation, you would:\r\n    // 1. Store the code in a database/cache with the phone number\r\n    // 2. Send SMS via AWS SNS\r\n    // 3. Return the verification ID\r\n\r\n    // For now, we'll simulate the API call\r\n    const message = `Your verification code is: ${code}`;\r\n    \r\n    // Note: Actual AWS SNS integration requires AWS SDK and proper authentication\r\n    // This is a simplified example\r\n    return from(this.sendSmsViaSns(request.phoneNumber, message)).pipe(\r\n      map(() => ({\r\n        success: true,\r\n        sid: `aws-sns-${Date.now()}`,\r\n        expiresAt: new Date(Date.now() + 600000) // 10 minutes\r\n      })),\r\n      catchError(error => {\r\n        return from([{\r\n          success: false,\r\n          error: error.message || 'SMS sending failed'\r\n        }]);\r\n      })\r\n    );\r\n  }\r\n\r\n  check(request: VerificationCheck): Observable<VerificationCheckResponse> {\r\n    // In a real implementation, you would:\r\n    // 1. Retrieve the stored code for the verification ID\r\n    // 2. Compare with the provided code\r\n    // 3. Return verification result\r\n\r\n    // This is a simplified example\r\n    return from([{\r\n      success: true,\r\n      verified: true // In real implementation, check against stored code\r\n    }]);\r\n  }\r\n\r\n  private async sendSmsViaSns(phoneNumber: string, message: string): Promise<void> {\r\n    // Actual AWS SNS implementation would use AWS SDK\r\n    // This is a placeholder\r\n    if (!this.config) {\r\n      throw new Error('AWS SNS configuration not provided');\r\n    }\r\n\r\n    // Example AWS SNS API call (simplified)\r\n    // const sns = new AWS.SNS({\r\n    //   accessKeyId: this.config.accessKeyId,\r\n    //   secretAccessKey: this.config.secretAccessKey,\r\n    //   region: this.config.region\r\n    // });\r\n    // \r\n    // await sns.publish({\r\n    //   PhoneNumber: phoneNumber,\r\n    //   Message: message\r\n    // }).promise();\r\n\r\n    // For now, just simulate success\r\n    return Promise.resolve();\r\n  }\r\n}\r\n\r\n/**\r\n * Provide AWS SNS verification service\r\n */\r\nexport function provideAwsSnsVerification(config: AwsSnsConfig) {\r\n  return [\r\n    AwsSnsVerificationService,\r\n    {\r\n      provide: AWS_SNS_CONFIG,\r\n      useValue: config\r\n    }\r\n  ];\r\n}\r\n\r\n","/**\r\n * Enhanced TypeScript types and type guards for ngxsmk-tel-input\r\n */\r\n\r\nimport { CountryCode } from 'libphonenumber-js';\r\nimport { ParseResult, ParseWithInvalidResult } from './ngxsmk-tel-input.service';\r\nimport { CarrierInfo, FormatSuggestion } from './phone-intelligence.service';\r\n\r\n/**\r\n * Type guard to check if a value is a valid CountryCode\r\n */\r\nexport function isCountryCode(value: unknown): value is CountryCode {\r\n  if (typeof value !== 'string') {\r\n    return false;\r\n  }\r\n  \r\n  // Basic validation - ISO 3166-1 alpha-2 codes are 2 uppercase letters\r\n  return /^[A-Z]{2}$/.test(value);\r\n}\r\n\r\n/**\r\n * Type guard to check if a value is a valid phone number string\r\n */\r\nexport function isPhoneNumberString(value: unknown): value is string {\r\n  if (typeof value !== 'string') {\r\n    return false;\r\n  }\r\n  \r\n  // Basic validation - contains digits and optionally + or spaces/dashes\r\n  return /^[\\d\\s\\-+()]+$/.test(value) && value.replace(/\\D/g, '').length >= 3;\r\n}\r\n\r\n/**\r\n * Type guard to check if ParseResult is valid\r\n */\r\nexport function isValidParseResult(result: ParseResult | ParseWithInvalidResult): result is ParseResult & { e164: string } {\r\n  return result.isValid === true && result.e164 !== null;\r\n}\r\n\r\n/**\r\n * Type guard to check if value is E.164 format\r\n */\r\nexport function isE164Format(value: unknown): value is string {\r\n  if (typeof value !== 'string') {\r\n    return false;\r\n  }\r\n  \r\n  // E.164 format: + followed by 1-15 digits\r\n  return /^\\+[1-9]\\d{1,14}$/.test(value);\r\n}\r\n\r\n/**\r\n * Type guard to check if CarrierInfo is complete\r\n */\r\nexport function isCompleteCarrierInfo(info: CarrierInfo | null): info is CarrierInfo {\r\n  return info !== null && info.type !== 'UNKNOWN';\r\n}\r\n\r\n/**\r\n * Type guard to check if FormatSuggestion has high confidence\r\n */\r\nexport function isHighConfidenceSuggestion(suggestion: FormatSuggestion | null): suggestion is FormatSuggestion {\r\n  return suggestion !== null && suggestion.confidence >= 0.7;\r\n}\r\n\r\n/**\r\n * Strict type for phone input configuration\r\n */\r\nexport interface StrictPhoneInputConfig {\r\n  readonly initialCountry: CountryCode | 'auto';\r\n  readonly preferredCountries: readonly CountryCode[];\r\n  readonly onlyCountries?: readonly CountryCode[];\r\n  readonly separateDialCode: boolean;\r\n  readonly allowDropdown: boolean;\r\n  readonly nationalDisplay: 'formatted' | 'digits';\r\n  readonly formatWhenValid: 'off' | 'blur' | 'typing';\r\n  readonly size: 'sm' | 'md' | 'lg';\r\n  readonly variant: 'outline' | 'filled' | 'underline';\r\n  readonly theme: 'light' | 'dark' | 'auto';\r\n  readonly disabled: boolean;\r\n  readonly enableIntelligence: boolean;\r\n  readonly enableFormatSuggestions: boolean;\r\n}\r\n\r\n/**\r\n * Type-safe phone input event\r\n */\r\nexport interface PhoneInputEvent {\r\n  readonly raw: string;\r\n  readonly e164: string | null;\r\n  readonly iso2: CountryCode;\r\n  readonly isValid: boolean;\r\n  readonly timestamp: number;\r\n}\r\n\r\n/**\r\n * Type-safe country change event\r\n */\r\nexport interface CountryChangeEvent {\r\n  readonly iso2: CountryCode;\r\n  readonly previousIso2?: CountryCode;\r\n  readonly timestamp: number;\r\n}\r\n\r\n/**\r\n * Type-safe validation event\r\n */\r\nexport interface ValidationEvent {\r\n  readonly isValid: boolean;\r\n  readonly errors: readonly string[];\r\n  readonly timestamp: number;\r\n}\r\n\r\n/**\r\n * Utility type to extract input signal types\r\n */\r\nexport type InputSignalType<T> = T extends import('@angular/core').InputSignal<infer U> ? U : never;\r\n\r\n/**\r\n * Utility type to extract output signal types\r\n */\r\nexport type OutputSignalType<T> = T extends import('@angular/core').OutputEmitterRef<infer U> ? U : never;\r\n\r\n/**\r\n * Branded type for E.164 phone numbers\r\n */\r\nexport type E164PhoneNumber = string & { readonly __brand: 'E164PhoneNumber' };\r\n\r\n/**\r\n * Create a branded E.164 phone number\r\n */\r\nexport function createE164PhoneNumber(value: string): E164PhoneNumber | null {\r\n  if (isE164Format(value)) {\r\n    return value as E164PhoneNumber;\r\n  }\r\n  return null;\r\n}\r\n\r\n/**\r\n * Branded type for national phone numbers\r\n */\r\nexport type NationalPhoneNumber = string & { readonly __brand: 'NationalPhoneNumber' };\r\n\r\n/**\r\n * Create a branded national phone number\r\n */\r\nexport function createNationalPhoneNumber(value: string, country: CountryCode): NationalPhoneNumber | null {\r\n  if (isPhoneNumberString(value)) {\r\n    return value as NationalPhoneNumber;\r\n  }\r\n  return null;\r\n}\r\n\r\n/**\r\n * Type-safe phone number validation result\r\n */\r\nexport interface TypedValidationResult {\r\n  readonly isValid: boolean;\r\n  readonly e164: E164PhoneNumber | null;\r\n  readonly national: NationalPhoneNumber | null;\r\n  readonly country: CountryCode;\r\n  readonly errors: readonly ValidationError[];\r\n}\r\n\r\n/**\r\n * Validation error with type information\r\n */\r\nexport interface ValidationError {\r\n  readonly code: 'REQUIRED' | 'INVALID' | 'INVALID_COUNTRY_CODE' | 'TOO_SHORT' | 'TOO_LONG';\r\n  readonly message: string;\r\n  readonly field?: string;\r\n}\r\n\r\n/**\r\n * Create a typed validation result\r\n */\r\nexport function createTypedValidationResult(\r\n  parseResult: ParseResult,\r\n  country: CountryCode\r\n): TypedValidationResult {\r\n  const errors: ValidationError[] = [];\r\n  \r\n  if (!parseResult.isValid) {\r\n    if (parseResult.e164 === null) {\r\n      errors.push({\r\n        code: 'INVALID',\r\n        message: 'Invalid phone number format'\r\n      });\r\n    }\r\n  }\r\n\r\n  return {\r\n    isValid: parseResult.isValid,\r\n    e164: parseResult.e164 ? (parseResult.e164 as E164PhoneNumber) : null,\r\n    national: parseResult.national ? (parseResult.national as NationalPhoneNumber) : null,\r\n    country,\r\n    errors: errors as readonly ValidationError[]\r\n  };\r\n}\r\n\r\n/**\r\n * Assert that a value is a CountryCode (throws if not)\r\n */\r\nexport function assertCountryCode(value: unknown): asserts value is CountryCode {\r\n  if (!isCountryCode(value)) {\r\n    throw new TypeError(`Expected CountryCode, got ${typeof value}: ${value}`);\r\n  }\r\n}\r\n\r\n/**\r\n * Assert that a value is E.164 format (throws if not)\r\n */\r\nexport function assertE164Format(value: unknown): asserts value is E164PhoneNumber {\r\n  if (!isE164Format(value)) {\r\n    throw new TypeError(`Expected E.164 format phone number, got: ${value}`);\r\n  }\r\n}\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxsmkTelInputService"],"mappings":";;;;;;;;;;AAAA;;;AAGG;AAwBH;;AAEG;SACa,qBAAqB,GAAA;AACnC,IAAA,OAAO,MAAM,CAAkB;AAC7B,QAAA,GAAG,EAAE,EAAE;AACP,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,IAAmB;AACzB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,MAAM,EAAE;AACT,KAAA,CAAC;AACJ;AAEA;;AAEG;AACa,SAAA,0BAA0B,CACxC,KAA8B,EAC9B,eAA+C,EAAA;IAE/C,OAAO,QAAQ,CAAC,MAAK;AACnB,QAAA,MAAM,OAAO,GAAG,KAAK,EAAE;QACvB,IAAI,CAAC,OAAO,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;QAE3B,IAAI,eAAe,EAAE,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE;;YAErD,OAAO,OAAO,CAAC,GAAG;;QAGpB,OAAO,OAAO,CAAC,GAAG;AACpB,KAAC,CAAC;AACJ;AAEA;;AAEG;AACG,SAAU,4BAA4B,CAC1C,KAA8B,EAAA;IAO9B,OAAO,QAAQ,CAAC,MAAK;AACnB,QAAA,MAAM,OAAO,GAAG,KAAK,EAAE;AACvB,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE;QACnC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QAErC,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;AAC9C,YAAA,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC;YAC/B;SACD;AACH,KAAC,CAAC;AACJ;AAEA;;AAEG;AACG,SAAU,yBAAyB,CACvC,KAA8B,EAAA;IAO9B,OAAO,QAAQ,CAAC,MAAK;AACnB,QAAA,MAAM,OAAO,GAAG,KAAK,EAAE;AAEvB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YACjB,OAAO;gBACL,WAAW,EAAE,OAAO,CAAC,IAAI;AACzB,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,cAAc,EAAE,IAAI;AACpB,gBAAA,mBAAmB,EAAE;aACtB;;;QAIH,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;AACtD,QAAA,MAAM,QAAQ,GAAG,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;QAEjE,OAAO;YACL,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,QAAQ;YACR,cAAc,EAAE,OAAO,CAAC,GAAG;YAC3B,mBAAmB,EAAE,OAAO,CAAC;SAC9B;AACH,KAAC,CAAC;AACJ;;ACxHA;;;AAGG;MAwBU,wBAAwB,CAAA;AACnC;;AAEG;IACH,oBAAoB,CAAC,WAAmB,EAAE,OAAoB,EAAA;AAC5D,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,EAAE,OAAO,CAAC;YAC/D,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;AAChC,gBAAA,OAAO,IAAI;;;;YAKb,MAAM,UAAU,GAAG,aAAa,CAAC,MAAa,CAAC,IAAI,SAAS;YAE5D,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,OAAsB;AACtC,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,QAAQ,EAAE,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,sBAAsB;AAC1E,gBAAA,UAAU,EAAE,UAAU,KAAK,YAAY,IAAI,UAAU,KAAK,sBAAsB;gBAChF,UAAU,EAAE,UAAU,KAAK,WAAW;gBACtC,aAAa,EAAE,UAAU,KAAK,cAAc;gBAC5C,MAAM,EAAE,UAAU,KAAK;aACxB;;AACD,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;;;AAIf;;AAEG;AACH,IAAA,wBAAwB,CAAC,IAA4B,EAAA;AACnD,QAAA,MAAM,YAAY,GAA2B;AAC3C,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,YAAY,EAAE,UAAU;AACxB,YAAA,sBAAsB,EAAE,oBAAoB;AAC5C,YAAA,WAAW,EAAE,kBAAkB;AAC/B,YAAA,cAAc,EAAE,qBAAqB;AACrC,YAAA,MAAM,EAAE,aAAa;AACrB,YAAA,SAAS,EAAE;SACZ;AAED,QAAA,OAAO,YAAY,CAAC,IAAc,CAAC,IAAI,SAAS;;AAGlD;;AAEG;IACH,uBAAuB,CAAC,KAAa,EAAE,OAAoB,EAAA;QACzD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,YAAA,OAAO,IAAI;;QAGb,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AACvC,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACrB,YAAA,OAAO,IAAI;;AAGb,QAAA,IAAI;;YAEF,IAAI,MAAM,GAAG,0BAA0B,CAAC,KAAK,EAAE,OAAO,CAAC;AAEvD,YAAA,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE;gBAC9B,OAAO,IAAI,CAAC;;;YAId,MAAM,WAAW,GAAuB,EAAE;;AAG1C,YAAA,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/C,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBACvC,MAAM,UAAU,GAAG,0BAA0B,CAAC,WAAW,EAAE,OAAO,CAAC;AACnE,gBAAA,IAAI,UAAU,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE;oBACtC,WAAW,CAAC,IAAI,CAAC;AACf,wBAAA,QAAQ,EAAE,KAAK;AACf,wBAAA,SAAS,EAAE,UAAU,CAAC,cAAc,EAAE;AACtC,wBAAA,UAAU,EAAE,GAAG;AACf,wBAAA,MAAM,EAAE;AACT,qBAAA,CAAC;;;;AAKN,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACrD,gBAAA,MAAM,QAAQ,GAAG,CAAI,CAAA,EAAA,MAAM,EAAE;AAC7B,gBAAA,MAAM,UAAU,GAAG,0BAA0B,CAAC,QAAQ,CAAC;AACvD,gBAAA,IAAI,UAAU,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE;oBACtC,WAAW,CAAC,IAAI,CAAC;AACf,wBAAA,QAAQ,EAAE,KAAK;AACf,wBAAA,SAAS,EAAE,UAAU,CAAC,cAAc,EAAE;AACtC,wBAAA,UAAU,EAAE,GAAG;AACf,wBAAA,MAAM,EAAE;AACT,qBAAA,CAAC;;;;YAKN,MAAM,SAAS,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,OAAO,CAAC;AAChE,YAAA,IAAI,SAAS,IAAI,SAAS,KAAK,KAAK,EAAE;gBACpC,MAAM,UAAU,GAAG,0BAA0B,CAAC,SAAS,EAAE,OAAO,CAAC;AACjE,gBAAA,IAAI,UAAU,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE;oBACtC,WAAW,CAAC,IAAI,CAAC;AACf,wBAAA,QAAQ,EAAE,KAAK;AACf,wBAAA,SAAS,EAAE,UAAU,CAAC,cAAc,EAAE;AACtC,wBAAA,UAAU,EAAE,GAAG;AACf,wBAAA,MAAM,EAAE;AACT,qBAAA,CAAC;;;;AAKN,YAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;AAGnE,YAAA,OAAO,IAAI;;AACX,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;;;AAIf;;AAEG;IACK,yBAAyB,CAAC,KAAa,EAAE,OAAoB,EAAA;QACnE,IAAI,KAAK,GAAG,KAAK;;QAGjB,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;;AAGpC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;YACjD,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;;;AAIxC,QAAA,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACzB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9B,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,gBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC9C,gBAAA,KAAK,GAAG,GAAG,GAAG,UAAU;;;AAI5B,QAAA,OAAO,KAAK;;AAGd;;AAEG;IACH,WAAW,CAAC,WAAmB,EAAE,OAAoB,EAAA;AACnD,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,EAAE,OAAO,CAAC;YAC/D,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,OAAO,IAAI;;;AAIb,YAAA,MAAM,WAAW,GAA2B;AAC1C,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,IAAI,EAAE,eAAe;AACrB,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,IAAI,EAAE,eAAe;AACrB,gBAAA,IAAI,EAAE,cAAc;AACpB,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,IAAI,EAAE,eAAe;AACrB,gBAAA,IAAI,EAAE,cAAc;AACpB,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,IAAI,EAAE,qBAAqB;AAC3B,gBAAA,IAAI,EAAE;aACP;YAED,OAAO,WAAW,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,IAAI;;AACrD,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;;;AAIf;;AAEG;IACH,YAAY,CAAC,WAAmB,EAAE,OAAoB,EAAA;AACpD,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,EAAE,OAAO,CAAC;YAC/D,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,OAAO,KAAK;;AAGd,YAAA,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc;;AAG5C,YAAA,MAAM,kBAAkB,GAAG;AACzB,gBAAA,cAAc;AACd,gBAAA,YAAY;AACZ,gBAAA,YAAY;AACZ,gBAAA,UAAU;aACX;AAED,YAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;AACvE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;;;+GA3ML,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cADX,MAAM,EAAA,CAAA,CAAA;;4FACnB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACHlC;;;;;;;;;;;;;AAaG;MAEU,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,GAAG,EAAuB;AAC3C,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,GAAG,EAAkC;AACjE,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,GAAG,EAAmB;QACnC,IAAgB,CAAA,gBAAA,GAAG,IAAI;AA0MzC;AAxMC;;;;;;;;;;;;;;;AAeG;IACH,KAAK,CAAC,KAAa,EAAE,IAAiB,EAAA;QACpC,MAAM,QAAQ,GAAG,CAAG,EAAA,KAAK,IAAI,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;QAEzC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACjC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAE;;AAGvC,QAAA,IAAI;YACF,MAAM,KAAK,GAAG,0BAA0B,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC;YAC3D,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC7D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC;AACrD,gBAAA,OAAO,MAAM;;AAGf,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE;AAC/B,YAAA,MAAM,MAAM,GAAG;gBACb,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI;AACnC,gBAAA,QAAQ,EAAE,KAAK,CAAC,cAAc,EAAE;gBAChC;aACD;YAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC;AACrD,YAAA,OAAO,MAAM;;AACb,QAAA,MAAM;AACN,YAAA,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;YAC7D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC;AACrD,YAAA,OAAO,MAAM;;;AAIjB;;;;;;;;;;;;;AAaG;IACH,OAAO,CAAC,KAAa,EAAE,IAAiB,EAAA;QACtC,MAAM,QAAQ,GAAG,CAAG,EAAA,KAAK,IAAI,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;QAEzC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACtC,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAE;;AAG5C,QAAA,IAAI;YACF,MAAM,KAAK,GAAG,0BAA0B,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC;YAC3D,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE;YAEzC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC;AAC1D,YAAA,OAAO,MAAM;;AACb,QAAA,MAAM;YACN,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,KAAK,CAAC;AACzD,YAAA,OAAO,KAAK;;;AAIhB;;;;;AAKG;AACK,IAAA,aAAa,CAAI,KAAqB,EAAE,GAAW,EAAE,KAAQ,EAAA;QACnE,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK;AAC1C,YAAA,IAAI,QAAQ;AAAE,gBAAA,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;;AAEtC,QAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;;AAGvB;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE;AAClC,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;;AAG9B;;;;;;;AAOG;AACK,IAAA,4BAA4B,CAAC,KAAa,EAAA;AAChD,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,KAAK;QAE5C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AACvC,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,KAAK;AAEnC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjD,MAAM,oBAAoB,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;YACnD,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AAE3C,YAAA,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,EAAE;AAC/B,gBAAA,IAAI;AACF,oBAAA,MAAM,mBAAmB,GAAG,CAAA,CAAA,EAAI,oBAAoB,CAAG,EAAA,eAAe,EAAE;AACxE,oBAAA,MAAM,KAAK,GAAG,0BAA0B,CAAC,mBAAmB,CAAC;oBAE7D,IAAI,CAAC,KAAK,EAAE;wBACV,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,oBAAoB,CAAC,MAAM,IAAI,CAAC,IAAI,oBAAoB,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE;AACnG,4BAAA,OAAO,IAAI;;;;AAGf,gBAAA,MAAM;AACN,oBAAA,OAAO,IAAI;;;;AAKjB,QAAA,OAAO,KAAK;;AAGd;;;;;;;;;;;;;;;AAeG;IACH,yBAAyB,CAAC,KAAa,EAAE,IAAiB,EAAA;QACxD,MAAM,QAAQ,GAAG,CAAG,EAAA,KAAK,IAAI,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;QAEzC,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC5C,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAE;;AAGlD,QAAA,IAAI;YACF,MAAM,KAAK,GAAG,0BAA0B,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC;YAC3D,MAAM,sBAAsB,GAAG,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC;YAEvE,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,MAAM,MAAM,GAAG;AACb,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,OAAO,EAAE,KAAK;oBACd;iBACD;gBACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,EAAE,MAAM,CAAC;AAChE,gBAAA,OAAO,MAAM;;AAGf,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE;AAC/B,YAAA,MAAM,MAAM,GAAG;gBACb,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI;AACnC,gBAAA,QAAQ,EAAE,KAAK,CAAC,cAAc,EAAE;gBAChC,OAAO;gBACP;aACD;YAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,EAAE,MAAM,CAAC;AAChE,YAAA,OAAO,MAAM;;AACb,QAAA,MAAM;YACN,MAAM,sBAAsB,GAAG,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC;AACvE,YAAA,MAAM,MAAM,GAAG;AACb,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,OAAO,EAAE,KAAK;gBACd;aACD;YACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,EAAE,MAAM,CAAC;AAChE,YAAA,OAAO,MAAM;;;+GA3MN,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADR,MAAM,EAAA,CAAA,CAAA;;4FACnB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC8DlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;MAyEU,uBAAuB,CAAA;IA8HlC,IAAsB,OAAO,CAAC,CAA0B,EAAI,EAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IAE1E,IAAoC,qBAAqB,CAAC,CAAyB,EAAI,EAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;AA6DnH,IAAA,WAAA,CAC+B,IAAmB,EAC/B,GAA0B,EAC1B,GAAsB,EAAA;QAFV,IAAI,CAAA,IAAA,GAAJ,IAAI;QAChB,IAAG,CAAA,GAAA,GAAH,GAAG;QACH,IAAG,CAAA,GAAA,GAAH,GAAG;;;AA1LtB,QAAA,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAuB,IAAI,CAAC;;QAGxD,IAAwB,CAAA,wBAAA,GAAG,KAAK,CAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;AAG7D,QAAA,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAA4B,SAAS,CAAC;;AAGjE,QAAA,IAAA,CAAA,sBAAsB,GAAG,KAAK,CAAU,IAAI,CAAC;;AAG7C,QAAA,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAAU,IAAI,CAAC;;AAG1C,QAAA,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAAyB,WAAW,CAAC;;AAGlE,QAAA,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAA4B,QAAQ,CAAC;;AAGlE,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAqB,IAAI,CAAC;;AAG5C,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAqC,SAAS,CAAC;;AAGpE,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAA4B,MAAM,CAAC;;AAGtD,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAU,KAAK,CAAC;;QAGtC,IAAmB,CAAA,mBAAA,GAAG,MAAM,EAAyB;;QAGrD,IAAoB,CAAA,oBAAA,GAAG,MAAM,EAAW;;QAGxC,IAAiB,CAAA,iBAAA,GAAG,MAAM,EAA2D;;QAG7E,IAAW,CAAA,WAAA,GAAoC,qBAAqB,EAAE;;AAGrE,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;;QAGrC,IAAc,CAAA,cAAA,GAAG,0BAA0B,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,qBAAqB,CAAC;;AAGzF,QAAA,IAAA,CAAA,gBAAgB,GAAG,4BAA4B,CAAC,IAAI,CAAC,WAAW,CAAC;;AAGjE,QAAA,IAAA,CAAA,aAAa,GAAG,yBAAyB,CAAC,IAAI,CAAC,WAAW,CAAC;;AAG3D,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;;AAGpD,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM;AACxC,YAAA,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;AAC1D,SAAC,CAAC;;AAGO,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;YACjC,IAAI,IAAI,CAAC,WAAW;AAAE,gBAAA,OAAO,KAAK;AAClC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;YAChC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;AAC/E,YAAA,OAAO,IAAI,CAAC,oBAAoB,IAAI,KAAK,CAAC,OAAO,IAAI,SAAS,IAAI,SAAS;AAC7E,SAAC,CAAC;;AAGO,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC;;AAGnD,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC;;AAGjD,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC;;;QAKxD,IAAc,CAAA,cAAA,GAAyB,IAAI;;AAE3C,QAAA,IAAA,CAAA,kBAAkB,GAAkB,CAAC,IAAI,EAAE,IAAI,CAAC;;QAIhD,IAAgB,CAAA,gBAAA,GAAY,IAAI;;QAEhC,IAAa,CAAA,aAAA,GAAY,IAAI;;QAG7B,IAAe,CAAA,eAAA,GAA2B,WAAW;;QAErD,IAAe,CAAA,eAAA,GAA8B,QAAQ;QAGrD,IAAY,CAAA,YAAA,GAAG,KAAK;QAGpB,IAAQ,CAAA,QAAA,GAAY,KAAK;QAKzB,IAAI,CAAA,IAAA,GAAuB,IAAI;QAC/B,IAAO,CAAA,OAAA,GAAuC,SAAS;QACvD,IAAS,CAAA,SAAA,GAAG,IAAI;QAChB,IAAS,CAAA,SAAA,GAAG,KAAK;QACjB,IAAa,CAAA,aAAA,GAAG,KAAK;QACrB,IAAoB,CAAA,oBAAA,GAAG,IAAI;QAE3B,IAAoB,CAAA,oBAAA,GAAG,IAAI;QAC3B,IAAc,CAAA,cAAA,GAAG,IAAI;QAOrB,IAAc,CAAA,cAAA,GAAG,oBAAoB;QACrC,IAAG,CAAA,GAAA,GAAkB,KAAK;QAE1B,IAAe,CAAA,eAAA,GAAoC,KAAK;QAIxD,IAAU,CAAA,UAAA,GAAG,IAAI;QACjB,IAAa,CAAA,aAAA,GAAG,IAAI;QAEpB,IAAK,CAAA,KAAA,GAA8B,MAAM;;QAWzC,IAAkB,CAAA,kBAAA,GAAG,KAAK;;QAG1B,IAAuB,CAAA,uBAAA,GAAG,KAAK;AAE9B,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAyB;AACzD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAW;AAC5C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA2D;AACzF,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAsB;AAC3D,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAA2B;QAEhE,IAAG,CAAA,GAAA,GAA2B,IAAI;AAClC,QAAA,IAAA,CAAA,QAAQ,GAAiC,MAAK,GAAI;AAClD,QAAA,IAAA,CAAA,WAAW,GAAe,MAAK,GAAI;QAEnC,IAAgB,CAAA,gBAAA,GAAG,KAAK;QACxB,IAAY,CAAA,YAAA,GAAkB,IAAI;QAClC,IAAO,CAAA,OAAA,GAAG,KAAK;QACf,IAAW,CAAA,WAAA,GAAG,KAAK;QACnB,IAAc,CAAA,cAAA,GAAoF,EAAE;QACpG,IAA2B,CAAA,2BAAA,GAAsB,EAAE;QAEnD,IAAoB,CAAA,oBAAA,GAAG,KAAK;QAC5B,IAAc,CAAA,cAAA,GAAG,KAAK;QACtB,IAAa,CAAA,aAAA,GAA4B,IAAI;QAC7C,IAAmB,CAAA,mBAAA,GAA4B,IAAI;QAElD,IAAU,CAAA,UAAA,GAAW,IAAI,CAAC,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3E,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;QACzC,IAAY,CAAA,YAAA,GAAqB,OAAO;QACxC,IAAe,CAAA,eAAA,GAAqC,IAAI;QAEhE,IAAU,CAAA,UAAA,GAAG,KAAK;QAED,IAAY,CAAA,YAAA,GAAoC,MAAM,CAAC,wBAAwB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEpG,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC;;QAQlD,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,WAAW;gBAAE;;YAE7D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,KAAK;YAC9C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,EAAE;AACzD,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;;gBAE5B,IAAI,CAAC,mBAAmB,EAAE;;AAE9B,SAAC,CAAC;;AAGJ;;;AAGG;AACK,IAAA,SAAS,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;;aACZ;AACL,YAAA,EAAE,EAAE;AACJ,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;;AAI3B;;;AAGG;AACK,IAAA,cAAc,CAAC,EAAc,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;;aAC1B;AACL,YAAA,EAAE,EAAE;;;AAIR;;AAEG;AACK,IAAA,qBAAqB,CAAC,EAAc,EAAA;AAC1C,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB;AACrC,gBAAA,MAAc,CAAC,2BAA2B;AAC1C,gBAAA,MAAc,CAAC,wBAAwB;AACvC,gBAAA,MAAc,CAAC,uBAAuB;AACvC,iBAAC,CAAC,QAAoB,KAAK,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACtD,GAAG,CAAC,EAAE,CAAC;;aACF;AACL,YAAA,EAAE,EAAE;;;AAIR;;;AAGG;IACK,kBAAkB,GAAA;QACxB,IAAI,CAAC,IAAI,CAAC,oBAAoB;AAAE,YAAA,OAAO,KAAK;QAC5C,IAAI,OAAO,MAAM,KAAK,WAAW;AAAE,YAAA,OAAO,KAAK;;;QAG/C,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,IAAK,MAAc,CAAC,WAAW,IAAI,IAAI;QACtE,OAAO,KAAK,GAAG,GAAG;;AAGpB;;;AAGG;IACH,eAAe,GAAA;QACb,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,WAAW;YAAE;;;QAG7D,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACrB,IAAI,CAAC,mBAAmB,EAAE;;SAE7B,EAAE,CAAC,CAAC;QACL,IAAI,CAAC,0BAA0B,EAAE;QACjC,IAAI,CAAC,wBAAwB,EAAE;AAC/B,QAAA,KAAK,IAAI,CAAC,WAAW,EAAE;;AAGjB,IAAA,MAAM,WAAW,GAAA;QACvB,IAAI,IAAI,CAAC,WAAW;YAAE;AAEtB,QAAA,MAAM,IAAI,CAAC,gBAAgB,EAAE;QAC7B,IAAI,IAAI,CAAC,WAAW;YAAE;QAEtB,IAAI,CAAC,gBAAgB,EAAE;QAEvB,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnD,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY;AAC3B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;;QAGpB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACvC,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAK;gBAC9B,IAAI,CAAC,IAAI,CAAC,WAAW;oBAAE,IAAI,CAAC,KAAK,EAAE;AACrC,aAAC,CAAC;;;AAIN,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,WAAW;YAAE;;AAG7D,QAAA,MAAM,aAAa,GAAG;YACpB,gBAAgB,EAAE,oBAAoB,EAAE,eAAe;AACvD,YAAA,kBAAkB,EAAE,eAAe;YACnC,MAAM,EAAE,oBAAoB,EAAE,KAAK;YACnC,iBAAiB,EAAE,aAAa,EAAE;AACnC,SAAA,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;;QAGrD,IAAI,aAAa,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAClD,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,eAAe,IAAI;;;AAI1B,QAAA,IAAI,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE;AACvD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,EAAE;AAClC,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;gBAC5B,IAAI,CAAC,mBAAmB,EAAE;;AAE1B,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;;;IAK7B,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,2BAA2B,EAAE;AAClC,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;AAC/B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;AAE3B,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE;AACrC,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;;;AAInC;;;;AAIG;AACH,IAAA,UAAU,CAAC,GAAkB,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW;YAAE;AAExC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,YAAA,IAAI,CAAC,YAAY,GAAG,GAAG,IAAI,EAAE;YAC7B;;;QAIF,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI;AAE3C,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI;;;YAGF,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC;;AAG7B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;;AAG/B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC;AAClE,YAAA,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI;;AAGhC,YAAA,IAAI,WAAW,KAAK,YAAY,EAAE;;;gBAGhC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG;gBACzC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI;;AAG3C,gBAAA,IAAI,WAAW,KAAK,IAAI,EAAE;;;qBAEnB;;oBAEL,MAAM,GAAG,GAAG;0BACR,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI;0BACnC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;oBACrE,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC;AAC5C,oBAAA,IAAI,UAAU,KAAK,OAAO,EAAE;AAC1B,wBAAA,OAAO;;;;YAKb,MAAM,GAAG,GAAG;kBACR,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI;kBACnC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;YAErE,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC;AAC5C,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;;;YAI3B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,KAAK;AAChC,gBAAA,GAAG,KAAK;AACR,gBAAA,GAAG,EAAE,OAAO;AACZ,gBAAA,IAAI,EAAE,YAAY;gBAClB,IAAI;gBACJ,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,sBAAsB;gBACzD,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,sBAAsB,IAAI,IAAI,IAAI,MAAM,CAAC,sBAAsB,GAAG,EAAE,uBAAuB,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE;AACrN,aAAA,CAAC,CAAC;;AAGH,YAAA,IAAI,CAAC,SAAS,CAAC,MAAK;AAClB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACjE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACzE,aAAC,CAAC;;AAEF,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;gBACf;AACR,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;;;AAI/B;;;AAGG;IACH,gBAAgB,CAAC,EAAgC,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AAE9E;;;AAGG;IACH,iBAAiB,CAAC,EAAc,EAAA,EAAU,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAEhE;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;QAClC,IAAI,IAAI,CAAC,WAAW;YAAE;AAEtB,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;QAE1B,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,GAAG,UAAU;AAEpE,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,YAAA,IAAI,UAAU,IAAI,IAAI,CAAC,aAAa,EAAE;AACpC,gBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,YAAY,EAAE,CAAC;;AACf,iBAAA,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,oBAAoB,EAAE;AACnD,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,gBAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;gBACjC,IAAI,CAAC,YAAY,EAAE;;iBACd;AACL,gBAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;;;aAE7B;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;;;AAIpC;;;;;AAKG;AACH,IAAA,QAAQ,CAAC,OAAwB,EAAA;QAC/B,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,IAAI;;;AAIjC,QAAA,IAAI;AACF,YAAA,IAAI,OAAO,CAAC,SAAS,EAAE;AACrB,gBAAA,MAAM,WAAW,GAAG,EAAE,KAAK,EAAE,IAAI,EAAqB;gBACtD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC;AAC7C,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;;iBAC7C;AACL,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;;QAEzB,OAAO,CAAC,EAAE;;AAEV,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;AAGzB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI;AAErB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1E,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,sBAAsB;AAE9D,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,gBAAgB,EAAE;AACnC,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;YAG7B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,KAAK;AAChC,gBAAA,GAAG,KAAK;AACR,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,MAAM,EAAE,KAAK,GAAG,IAAI,IAAI,MAAM,CAAC,sBAAsB,GAAG,EAAE,uBAAuB,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE;AACxK,aAAA,CAAC,CAAC;;AAGH,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGrC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;QAGzB,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,MAAM,CAAC,sBAAsB,EAAE;AACjC,gBAAA,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE;;AAE1C,YAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE;;AAG/B,QAAA,OAAO,IAAI;;AAGb;;;AAGG;IACH,yBAAyB,CAAC,EAAc,EAAA,EAAU,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAE5E;;;AAGG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAExC,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE;AACnC,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;AACtC,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAK;AAC9B,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,oBAAA,IAAI;wBACF,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;;oBACxC,OAAO,CAAC,EAAE;;AAEV,wBAAA,IAAI,EAAE,CAAC,MAAM,EAAE;4BACb,EAAE,CAAC,MAAM,EAAE;;;;AAInB,aAAC,CAAC;;;AAIN;;;AAGG;AACH,IAAA,aAAa,CAAC,IAAiB,EAAA;QAC7B,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACjC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACvC,IAAI,CAAC,WAAW,EAAE;;;AAItB;;AAEG;IACH,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,WAAW;YAAE;AAEtB,QAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE;;AAG7B,IAAA,MAAM,gBAAgB,GAAA;QAC5B,IAAI,IAAI,CAAC,WAAW;YAAE;QAEtB,MAAM,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC;AAEjF,QAAA,MAAM,WAAW,GAAG,CAAC,CAAc,KAAI;AACrC,YAAA,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,SAAS;YACxB,MAAM,GAAG,GAA2B,EAAE;YACtC,KAAK,MAAM,CAAC,IAAI,CAAC;AAAE,gBAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AACjE,oBAAA,MAAM,CAAC,GAAI,CAAwC,CAAC,CAAC,CAAC;oBACtD,IAAI,CAAC,IAAI,IAAI;wBAAE,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC;;AAEzC,YAAA,OAAO,GAAG;AACZ,SAAC;;QAGD,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE,IAAI,IAAI,CAAC,cAAc;QACzE,MAAM,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,EAAE,IAAI,IAAI,CAAC,kBAAkB;QACrF,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,aAAa;QACtE,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,aAAa;QACtE,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,EAAE,IAAI,IAAI,CAAC,gBAAgB;AAE/E,QAAA,MAAM,MAAM,GAAuB;AACjC,YAAA,cAAc,EAAE,cAAc,KAAK,MAAM,GAAG,MAAM,IAAI,cAAc,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC;AAC5F,YAAA,kBAAkB,EAAE,CAAC,kBAAkB,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AACxE,YAAA,aAAa,EAAE,CAAC,aAAa,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAC9D,YAAA,YAAY,EAAE,IAAI;YAClB,aAAa;YACb,gBAAgB;YAChB,WAAW,EAAE,CAAC,EAA0B,KAAK,EAAE,CAAC,IAAI,CAAC;YAErD,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YAEzC,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,kBAAkB,EAAE,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC;;YAExD,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,OAAO,QAAQ,KAAK,WAAW,GAAG,QAAQ,CAAC,IAAI,GAAG,SAAS,IAAI;SAChH;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,MAAK;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,gBAAA,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;;AAEhE,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,aAA6B,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACzG,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;;;AAI/B,IAAA,MAAM,YAAY,GAAA;QACxB,IAAI,IAAI,CAAC,WAAW;YAAE;QAEtB,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE;AACpH,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE;QAEnC,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,MAAM,IAAI,CAAC,gBAAgB,EAAE;QAC7B,IAAI,CAAC,gBAAgB,EAAE;AAEvB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC;;YAC9B,OAAO,CAAC,EAAE;;;YAGZ,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;gBAC7B,IAAI,CAAC,WAAW,EAAE;;AAEpB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;;;IAI/B,aAAa,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;AAClB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;;;;IAKX,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAExC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;AAEtC,QAAA,IAAI,CAAC,cAAc,CAAC,MAAK;AACvB,YAAA,MAAM,kBAAkB,GAAG,CAAC,EAAS,KAAI;AACvC,gBAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU;oBAAE;gBAC1C,MAAM,UAAU,GAAG,EAAsB;AACzC,gBAAA,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI;gBAE5B,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AACjD,oBAAA,MAAM,QAAQ,GAAG,EAAE,CAAC,cAAc,IAAI,CAAC;AACvC,oBAAA,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,IAAI,CAAC;AACnC,oBAAA,MAAM,YAAY,GAAG,QAAQ,KAAK,MAAM;AACxC,oBAAA,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,SAAS,KAAK,YAAY,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG;AAC7F,oBAAA,IAAI,YAAY,IAAI,OAAO,EAAE;wBAAE,EAAE,CAAC,cAAc,EAAE;wBAAE;;;AAGtD,gBAAA,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,SAAS,KAAK,YAAY;oBAAE;gBACpD,MAAM,OAAO,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG;gBAC1C,IAAI,CAAC,OAAO,EAAE;oBAAE,EAAE,CAAC,cAAc,EAAE;oBAAE;;gBAErC,MAAM,KAAK,GAAG,EAAE,CAAC,cAAc,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM;gBAClD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM;gBAC9C,MAAM,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AACzE,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAC1D,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;gBAE/B,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;oBAClC,EAAE,CAAC,cAAc,EAAE;oBACnB;;AAEJ,aAAC;AAED,YAAA,MAAM,YAAY,GAAG,CAAC,CAAQ,KAAI;gBAChC,IAAI,IAAI,CAAC,WAAW;oBAAE;gBAEtB,MAAM,cAAc,GAAG,CAA2B;;AAElD,gBAAA,MAAM,aAAa,GAAG,cAAc,CAAC,aAAa;qBAC9C,MAAoD,CAAC,aAAa,CAAC;AACrE,oBAAA,IAAI;gBACN,IAAI,IAAI,GAAG,EAAE;gBACb,IAAI,aAAa,EAAE;AACjB,oBAAA,IAAI;wBACF,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;;oBAC1C,OAAO,GAAG,EAAE;;wBAEZ,IAAI,GAAG,EAAE;;;gBAGb,CAAC,CAAC,cAAc,EAAE;AAElB,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,gBAAA,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAEpD,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;oBACxC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5B,oBAAA,IAAI,CAAC,MAAM;wBAAE;;gBAGf,MAAM,KAAK,GAAG,EAAE,CAAC,cAAc,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM;gBAClD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM;;AAG9C,gBAAA,IAAI,EAAE,CAAC,YAAY,EAAE;AACnB,oBAAA,IAAI;wBACF,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC;;oBAC1C,OAAO,CAAC,EAAE;;wBAEV,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;;;qBAEvE;oBACL,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;;AAG5E,gBAAA,IAAI,CAAC,qBAAqB,CAAC,MAAK;oBAC9B,IAAI,CAAC,IAAI,CAAC,WAAW;wBAAE,IAAI,CAAC,WAAW,EAAE;AAC3C,iBAAC,CAAC;AACJ,aAAC;YAED,MAAM,YAAY,GAAG,MAAK;gBACxB,IAAI,CAAC,IAAI,CAAC,WAAW;oBAAE,IAAI,CAAC,WAAW,EAAE;AAC3C,aAAC;YAED,MAAM,oBAAoB,GAAG,MAAK;AAChC,gBAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc;oBAAE;AAE7C,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;;gBAG/B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,KAAK;AAChC,oBAAA,GAAG,KAAK;oBACR;AACD,iBAAA,CAAC,CAAC;AAEH,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAK;AAClB,oBAAA,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE;;AAG5B,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;AACpC,oBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC;AAE1C,oBAAA,IAAI,CAAC,eAAe,IAAI;AAC1B,iBAAC,CAAC;gBACF,IAAI,CAAC,WAAW,EAAE;AACpB,aAAC;YAED,MAAM,WAAW,GAAG,MAAK;gBACvB,IAAI,CAAC,IAAI,CAAC,WAAW;oBAAE,IAAI,CAAC,MAAM,EAAE;AACtC,aAAC;;YAGD,IAAI,CAAC,cAAc,GAAG;gBACpB,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,EAAE;gBAClE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE;gBACtD,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE;gBACtD,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,oBAAoB,EAAE;gBACtE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW;aACnD;AAED,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAI;AAC1D,gBAAA,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC;AAC1C,aAAC,CAAC;AACJ,SAAC,CAAC;;IAGJ,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,WAAW;YAAE;AAEtB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;;QAGnB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,KAAK;AAChC,YAAA,GAAG,KAAK;AACR,YAAA,OAAO,EAAE;AACV,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,SAAS,CAAC,MAAK;YAClB,IAAI,CAAC,WAAW,EAAE;;AAElB,YAAA,IAAI,CAAC,eAAe,IAAI;AAC1B,SAAC,CAAC;;AAEF,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAEvB,MAAM,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,EAAE,IAAI,IAAI,CAAC,eAAe;QAChF,IAAI,mBAAmB,KAAK,KAAK;YAAE;AAEnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AAEnE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE;QAErC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM;AACtE,QAAA,IAAI,mBAAmB,KAAK,QAAQ,EAAE;AACpC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;;;IAIpD,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAE/D,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;AACtC,QAAA,IAAI,CAAC,qBAAqB,CAAC,MAAK;AAC9B,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,gBAAA,IAAI;AACF,oBAAA,IAAI,EAAE,CAAC,iBAAiB,EAAE;wBACxB,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;;AACnC,yBAAA,IAAI,EAAE,CAAC,MAAM,EAAE;;wBAEpB,EAAE,CAAC,MAAM,EAAE;;;gBAEb,OAAO,CAAC,EAAE;;;;AAIhB,SAAC,CAAC;;IAGI,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,WAAW;YAAE;;AAG7C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE;AAClC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAE1D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC;QAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,sBAAsB;;QAGhE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,KAAK;AAChC,YAAA,GAAG,KAAK;AACR,YAAA,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI;YACJ,OAAO;AACP,YAAA,MAAM,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAAC,sBAAsB,GAAG,EAAE,uBAAuB,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE;AAC1K,SAAA,CAAC,CAAC;;AAGH,QAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,EAAE;AAC/D,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;YAC7E,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;;;;AAK7C,QAAA,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACxE,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,QAAQ,EAAE,IAAI,CAAC;YAC5E,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;;;;AAK1C,QAAA,IAAI,CAAC,SAAS,CAAC,MAAK;AAClB,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AAE1B,YAAA,MAAM,WAAW,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE;;AAG9D,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AAClC,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;;AAGxC,YAAA,IAAI,CAAC,eAAe,IAAI;AAC1B,SAAC,CAAC;;AAEF,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAEvB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM;QACtE,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,EAAE,IAAI,IAAI,CAAC,eAAe;QAC5E,MAAM,OAAO,GAAG,eAAe,KAAK,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG;QAEjF,IAAI,OAAO,KAAK,QAAQ;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;;;AAG/C,IAAA,KAAK,CAAC,CAA4B,EAAA;AACxC,QAAA,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;;;AAI7B,IAAA,gBAAgB,CAAC,GAAW,EAAA;QAClC,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;IAItB,eAAe,GAAA;AACrB,QAAA,IAAI;AACF,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAE,QAAQ,EAAE;;QACxE,OAAO,CAAC,EAAE;;AAEV,YAAA,OAAO,EAAE;;;;IAKL,WAAW,CAAC,IAAY,EAAE,IAAiB,EAAA;AACjD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE;AACnC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC3C,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACnE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;;;IAIjB,SAAS,CAAC,GAAW,EAAE,IAAiB,EAAA;AAC9C,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC;AAC/B,YAAA,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;;QACrB,OAAO,CAAC,EAAE;;AAEV,YAAA,OAAO,GAAG;;;;IAKN,YAAY,CAAC,GAAW,EAAE,IAAiB,EAAA;QACjD,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,EAAE,IAAI,IAAI,CAAC,eAAe;AAC5E,QAAA,OAAO,eAAe,KAAK,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG;;AAG1E;;;AAGG;IACH,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;;AAGlF;;;AAGG;IACH,kBAAkB,GAAA;QAChB,MAAM,GAAG,GAAa,EAAE;AACxB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE;AACjC,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC1B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;;AAErC,QAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;YAC9B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;;QAEtC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AACrC,QAAA,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;;AAG9C;;;AAGG;IACH,oBAAoB,GAAA;QAClB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,EAAE;AAC/B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;AAEnB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,GAAG,EAAE,IAAI,CAAC;QAE5D,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE;AACjC,YAAA,OAAO,CAAuB,oBAAA,EAAA,MAAM,CAAC,IAAI,EAAE;;AACtC,aAAA,IAAI,MAAM,CAAC,sBAAsB,EAAE;AACxC,YAAA,OAAO,sBAAsB;;aACxB;AACL,YAAA,OAAO,sBAAsB;;;IAIzB,WAAW,GAAA;QACjB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,IAAI;AAEjC,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI;AACpF,iBAAA,QAAQ,EAAE,CAAC,WAAW,EAAE;AAC3B,YAAA,OAAO,IAAmB;;QAC1B,OAAO,CAAC,EAAE;;AAEV,YAAA,QAAQ,IAAI,CAAC,cAAc,IAAI,IAAI;;;AAI/B,IAAA,aAAa,CAAC,CAAS,EAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE;YACtC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE;;;IAKvC,gBAAgB,GAAA;QACtB,OAAO,IAAI,CAAC,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;;;AAInF,IAAA,eAAe,CAAC,QAAiB,EAAA;QACvC,IAAI,IAAI,CAAC,WAAW;YAAE;AAEtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa;AAC1C,QAAA,IAAI,CAAC,KAAK;YAAE;QACZ,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC,qBAAqB,CAAuB;QAC5F,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC;YACjC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;;;;IAKhD,cAAc,CAAC,GAAW,EAAE,IAAiB,EAAA;QACnD,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,KAAK;AAElC,QAAA,IAAI;YACF,MAAM,GAAG,GAAG,yBAAyB,CAAC,GAAG,EAAE,IAAI,CAAC;YAChD,OAAO,GAAG,KAAK,UAAU;;QACzB,OAAO,CAAC,EAAE;;AAEV,YAAA,OAAO,KAAK;;;;IAKR,qBAAqB,GAAA;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAI;AAC1D,YAAA,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC;AAC7C,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;;;IAIlB,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;QAEzC,IAAI,aAAa,GAAqB,OAAO;;;AAI7C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,MAAM,KAAK,GAAG,WAAW,KAAK,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK;AAE/D,QAAA,IAAI,KAAK,KAAK,MAAM,EAAE;;AAEpB,YAAA,IAAI;gBACF,IAAI,MAAM,CAAC,UAAU,GAAG,8BAA8B,CAAC,CAAC,OAAO,EAAE;oBAC/D,aAAa,GAAG,MAAM;;;YAExB,OAAO,CAAC,EAAE;;;;YAKZ,IAAI,QAAQ,CAAC,eAAe,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;gBACzD,aAAa,GAAG,MAAM;;;iBAGnB,IAAI,QAAQ,CAAC,eAAe,EAAE,YAAY,CAAC,YAAY,CAAC,KAAK,MAAM,EAAE;gBACxE,aAAa,GAAG,MAAM;;;aAEnB;YACL,aAAa,GAAG,KAAK;;;QAIvB,OAAO,CAAC,GAAG,CAAC,CAAoC,iCAAA,EAAA,aAAa,aAAa,KAAK,CAAA,eAAA,EAAkB,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,GAAG,8BAA8B,CAAC,CAAC,OAAO,CAAG,CAAA,CAAA,CAAC;AAEjM,QAAA,IAAI,CAAC,YAAY,GAAG,aAAa;AACjC,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;;;AAIxB,IAAA,UAAU,CAAC,KAAuB,EAAA;AACxC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;AAEzC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,aAA4B;QACrE,IAAI,WAAW,EAAE;;AAEf,YAAA,WAAW,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC;;AAG7C,YAAA,IAAI,KAAK,KAAK,MAAM,EAAE;AACpB,gBAAA,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;AACjC,gBAAA,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;;iBAChC;AACL,gBAAA,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AAClC,gBAAA,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;;;AAItC,YAAA,KAAK,WAAW,CAAC,YAAY,CAAC;;AAG9B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;aAClB;;AAEL,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAK;AAC9B,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;;AAE1B,aAAC,CAAC;YACF;;AAGF,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAE7B,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;;AAG1B,IAAA,iBAAiB,CAAC,KAAuB,EAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAAE;QACrD,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAE;;AAEnC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,aAA4B;AACrE,QAAA,IAAI,CAAC,WAAW;YAAE;AAElB,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK;QAC/B,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,CAAU,KAAO,EAAA,IAAI,CAAC;AAAE,YAAA,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE;AAEvF,QAAA,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC;AAC7B,QAAA,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC;AAC7B,QAAA,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC;AAC7B,QAAA,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC,WAAW,CAAC;AACxC,QAAA,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC;AACzB,QAAA,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC,WAAW,CAAC;;;AAIjC,IAAA,oBAAoB,CAAC,KAAuB,EAAA;AAClD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;QACzC,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,CAAC,QAAQ,CAAC,aAAa;YAAE;AAEhE,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAgB;AAC5E,YAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,YAAY,EAAE;AACrC,gBAAA,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC;;;QAE5C,OAAO,CAAC,EAAE;;;;AAKd;;;AAGG;IACH,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;;AAG1B;;;AAGG;AACH,IAAA,QAAQ,CAAC,KAAuB,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,IAAI,CAAC,mBAAmB,EAAE;;;IAIpB,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;QAEzC,UAAU,CAAC,MAAK;YACd,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAgB;YAC5E,IAAI,QAAQ,EAAE;gBACZ,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC;AAEtD,gBAAA,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE;AAChC,oBAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;oBACpC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;oBAC9C,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;;qBAC9B;AACL,oBAAA,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC;oBACvC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;oBACjD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;;gBAGxC,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAqB;gBACpF,IAAI,WAAW,EAAE;oBACf,WAAW,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC;AACzD,oBAAA,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE;AAChC,wBAAA,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;;yBAClC;AACL,wBAAA,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC;;AAG5C,oBAAA,WAAW,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM;AACxC,oBAAA,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;AAC/B,oBAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;AAG5B,oBAAA,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC;;;SAGlD,EAAE,EAAE,CAAC;;;AAIA,IAAA,2BAA2B,CAAC,WAA6B,EAAA;AAC/D,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;;QAGzC,IAAI,CAAC,2BAA2B,EAAE;;AAGlC,QAAA,IAAI,eAAe,GAAG,WAAW,CAAC,aAAa;AAC/C,QAAA,IAAI,CAAC,eAAe;YAAE;;QAGtB,MAAM,aAAa,GAAG,eAAe,CAAC,aAAa,CAAC,oBAAoB,CAAC;QACzE,IAAI,aAAa,EAAE;YACjB,aAAa,CAAC,MAAM,EAAE;;;QAIxB,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACpD,QAAA,WAAW,CAAC,IAAI,GAAG,QAAQ;AAC3B,QAAA,WAAW,CAAC,SAAS,GAAG,mBAAmB;AAC3C,QAAA,WAAW,CAAC,YAAY,CAAC,YAAY,EAAE,cAAc,CAAC;AACtD,QAAA,WAAW,CAAC,SAAS,GAAG,GAAG;AAC3B,QAAA,WAAW,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;;QAG1C,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC;AAC/D,QAAA,IAAI,cAAc,CAAC,QAAQ,KAAK,QAAQ,EAAE;AACxC,YAAA,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;;;AAI7C,QAAA,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC;;QAGxC,MAAM,iBAAiB,GAAG,MAAK;YAC7B,IAAI,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;AACjD,gBAAA,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;;iBAC7B;AACL,gBAAA,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;;AAEtC,SAAC;;AAGD,QAAA,MAAM,WAAW,GAAG,CAAC,CAAQ,KAAI;YAC/B,CAAC,CAAC,cAAc,EAAE;YAClB,CAAC,CAAC,eAAe,EAAE;AACnB,YAAA,WAAW,CAAC,KAAK,GAAG,EAAE;;AAEtB,YAAA,WAAW,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAChE,YAAA,WAAW,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,WAAW,CAAC,KAAK,EAAE;AACnB,YAAA,iBAAiB,EAAE;AACrB,SAAC;QAED,MAAM,eAAe,GAAG,CAAC,CAAQ,KAAK,CAAC,CAAC,cAAc,EAAE;QACxD,MAAM,WAAW,GAAG,MAAK;AACvB,YAAA,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAClC,SAAC;;AAGD,QAAA,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC;AAClD,QAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAElG,QAAA,WAAW,CAAC,gBAAgB,CAAC,WAAW,EAAE,eAAe,CAAC;AAC1D,QAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,mBAAmB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;;AAG1G,QAAA,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,CAAC;AACxD,QAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAExG,QAAA,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,CAAC;AACxD,QAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAExG,QAAA,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,CAAC;AACxD,QAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAExG,QAAA,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC;AAClD,QAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;;AAGlG,QAAA,iBAAiB,EAAE;;;IAIb,2BAA2B,GAAA;AACjC,QAAA,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;AAC9D,QAAA,IAAI,CAAC,2BAA2B,GAAG,EAAE;;;IAI/B,0BAA0B,GAAA;AAChC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;QACzC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAAE;;QAG/D,IAAI,IAAI,CAAC,aAAa;YAAE;AAExB,QAAA,IAAI;YACF,IAAI,CAAC,aAAa,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,KAAI;AACtD,gBAAA,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;oBAC7B,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,UAAU,EAAE;wBACxD,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACnC,4BAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE;gCAC9D,MAAM,OAAO,GAAG,IAAmB;AACnC,gCAAA,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;oCACxE,IAAI,CAAC,mBAAmB,EAAE;;;AAGhC,yBAAC,CAAC;;AAEN,iBAAC,CAAC;AACJ,aAAC,CAAC;YAEF,IAAI,IAAI,CAAC,aAAa,IAAI,QAAQ,CAAC,IAAI,EAAE;gBACvC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;AACxC,oBAAA,SAAS,EAAE,IAAI;AACf,oBAAA,OAAO,EAAE;AACV,iBAAA,CAAC;;;QAEJ,OAAO,CAAC,EAAE;;AAEV,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;;;IAKrB,wBAAwB,GAAA;AAC9B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;;;AAIzC,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe;AACvC,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAAE;QAEzC,IAAI,CAAC,mBAAmB,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,KAAI;;YAE5D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,KAAK;AACpD,YAAA,IAAI,WAAW,KAAK,MAAM,EAAE;gBAC1B,IAAI,CAAC,mBAAmB,EAAE;;AAE9B,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,EAAE;AACvC,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,eAAe,EAAE,CAAC,OAAO,EAAE,YAAY;AACxC,SAAA,CAAC;;+GAr1CO,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EALvB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,wBAAA,EAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,UAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACnG,YAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC,EAAE,KAAK,EAAE,IAAI;SAC9F,EAjES,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8mtBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAOU,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAxEnC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EACP,OAAA,EAAA,EAAE,mBACM,uBAAuB,CAAC,MAAM,EACrC,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DT,EAEU,SAAA,EAAA;AACT,wBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACnG,wBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC,EAAE,KAAK,EAAE,IAAI;AAC9F,qBAAA,EAAA,MAAA,EAAA,CAAA,8mtBAAA,CAAA,EAAA;;0BAgME;0GA7LsC,QAAQ,EAAA,CAAA;sBAAhD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBA0F9B,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,kBAAkB,EAAA,CAAA;sBAA1B;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBAGQ,eAAe,EAAA,CAAA;sBAAvB;gBAEQ,eAAe,EAAA,CAAA;sBAAvB;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAEQ,oBAAoB,EAAA,CAAA;sBAA5B;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBAEc,IAAI,EAAA,CAAA;sBAAlB,KAAK;uBAAC,MAAM;gBACS,OAAO,EAAA,CAAA;sBAA5B,KAAK;uBAAC,SAAS;gBACa,kBAAkB,EAAA,CAAA;sBAA9C,KAAK;uBAAC,oBAAoB;gBACS,qBAAqB,EAAA,CAAA;sBAAxD,KAAK;uBAAC,uBAAuB;gBAErB,cAAc,EAAA,CAAA;sBAAtB;gBACQ,GAAG,EAAA,CAAA;sBAAX;gBAEQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAKQ,YAAY,EAAA,CAAA;sBAApB;gBAMQ,kBAAkB,EAAA,CAAA;sBAA1B;gBAGQ,uBAAuB,EAAA,CAAA;sBAA/B;gBAES,aAAa,EAAA,CAAA;sBAAtB;gBACS,cAAc,EAAA,CAAA;sBAAvB;gBACS,WAAW,EAAA,CAAA;sBAApB;gBACS,kBAAkB,EAAA,CAAA;sBAA3B;gBACS,gBAAgB,EAAA,CAAA;sBAAzB;;;MC/VU,YAAY,CAAA;AAQvB,IAAA,WAAA,GAAA;AAPiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAQ,MAAM,CAAC;AACjD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,eAAe,CAAmB,OAAO,CAAC;AAErE,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AACzC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;AAGrE,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACtC,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,wBAAwB,EAAE;;;;IAKnC,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK;;;IAIhC,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK;;;AAIvC,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;AAEzC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;;;IAIjC,WAAW,GAAA;AACT,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;AACtC,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;;;IAI/C,eAAe,GAAA;AACrB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,EAAE;AACjD,QAAA,MAAM,KAAK,GAAG,UAAU,IAAI,MAAM;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;;AAId,IAAA,UAAU,CAAC,KAAY,EAAA;QAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAC9C,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC;;QAG5C,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,EAAE,aAAa,CAAC;AAElE,QAAA,IAAI,aAAa,KAAK,MAAM,EAAE;YAC5B,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;;aACzC;YACL,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;;;AAInD,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC;;AAGtC,QAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC;;;AAItC,IAAA,wBAAwB,CAAC,KAAuB,EAAA;QACtD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,CAAC;AACxE,QAAA,kBAAkB,CAAC,OAAO,CAAC,SAAS,IAAG;YACrC,MAAM,OAAO,GAAG,SAAwB;AACxC,YAAA,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC;AAC3C,SAAC,CAAC;;;AAII,IAAA,YAAY,CAAC,KAAY,EAAA;AAC/B,QAAA,IAAI,KAAK,KAAK,MAAM,EAAE;AACpB,YAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;;AAEjC,QAAA,OAAO,KAAK;;;IAIN,iBAAiB,GAAA;AACvB,QAAA,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO,EAAE;AAClF,YAAA,OAAO,MAAM;;AAEf,QAAA,OAAO,OAAO;;;IAIR,wBAAwB,GAAA;AAC9B,QAAA,IAAI,MAAM,CAAC,UAAU,EAAE;YACrB,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC;AACpE,YAAA,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;AACzC,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,MAAM,EAAE;AAC9B,oBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;;AAE3B,aAAC,CAAC;;;;AAKE,IAAA,kBAAkB,CAAC,KAAuB,EAAA;AAChD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe;AAErC,QAAA,IAAI,KAAK,KAAK,MAAM,EAAE;YACpB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,EAAE,SAAS,CAAC;YACvD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,SAAS,CAAC;YACtD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,SAAS,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,SAAS,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,EAAE,SAAS,CAAC;YACpD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,EAAE,+BAA+B,CAAC;YAC1E,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,EAAE,0BAA0B,CAAC;;aACnE;YACL,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,EAAE,SAAS,CAAC;YACvD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,SAAS,CAAC;YACtD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,SAAS,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,SAAS,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,EAAE,SAAS,CAAC;YACpD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,EAAE,gCAAgC,CAAC;YAC3E,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,EAAE,0BAA0B,CAAC;;;;AAKpE,IAAA,mBAAmB,CAAC,KAAY,EAAA;AACtC,QAAA,IAAI;AACF,YAAA,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAAE,KAAK,CAAC;;QACrD,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,CAAC;;;;IAKnD,uBAAuB,GAAA;AAC7B,QAAA,IAAI;YACF,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,wBAAwB,CAAC;AAC5D,YAAA,OAAO,KAAqB;;QAC5B,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,CAAC;AACvD,YAAA,OAAO,IAAI;;;;IAKf,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,KAAK,MAAM;;;IAI1C,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,KAAK,OAAO;;;IAI3C,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,KAAK,MAAM;;+GA5KxB,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA;;4FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACND;;;AAGG;MACU,eAAe,CAAA;AAC1B;;;;;;;;;;;;AAYG;IACH,OAAO,KAAK,CAAC,CAA4B,EAAA;AACvC,QAAA,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;;AAGrC;;;;;;;;;;;;AAYG;IACH,OAAO,gBAAgB,CAAC,GAAW,EAAA;QACjC,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;AAG9B;;;;;;;;;;;;AAYG;AACH,IAAA,OAAO,cAAc,CAAC,KAAa,EAAE,IAAiB,EAAA;AACpD,QAAA,OAAO,GAAG,KAAK,IAAI,EAAE,CAAI,CAAA,EAAA,IAAI,EAAE;;AAGjC;;;;;;;;;;;;;;;;;;;AAmBG;AACH,IAAA,OAAO,QAAQ,CACb,IAAO,EACP,IAAY,EAAA;QAEZ,IAAI,OAAO,GAAyC,IAAI;AAExD,QAAA,OAAO,CAAC,GAAG,IAAmB,KAAI;AAChC,YAAA,IAAI,OAAO;gBAAE,YAAY,CAAC,OAAO,CAAC;AAClC,YAAA,OAAO,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAC1D,SAAC;;AAGH;;;;;;;;;;;;;;;;;;;AAmBG;AACH,IAAA,OAAO,QAAQ,CACb,IAAO,EACP,KAAa,EAAA;AAEb,QAAA,IAAI,UAAmB;AAEvB,QAAA,OAAO,CAAC,GAAG,IAAmB,KAAI;YAChC,IAAI,CAAC,UAAU,EAAE;AACf,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;gBACtB,UAAU,GAAG,IAAI;gBACjB,UAAU,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,KAAK,CAAC;;AAE/C,SAAC;;AAGH;;;;;;;;;;;AAWG;IACH,OAAO,YAAY,CAAC,GAAW,EAAA;AAC7B,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;;AAG1B;;;;;;;;;;AAUG;IACH,OAAO,eAAe,CAAC,OAAgC,EAAA;QACrD,OAAO,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;;AAGrC;;;;;;AAMG;IACH,OAAO,YAAY,CAAC,OAAoB,EAAA;AACtC,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;AAC5C,QAAA,QACE,IAAI,CAAC,GAAG,IAAI,CAAC;YACb,IAAI,CAAC,IAAI,IAAI,CAAC;AACd,YAAA,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC;AAC5E,YAAA,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC;;AAI7E;;;;;;;;;;;;;;;;AAgBG;IACH,OAAO,mBAAmB,CACxB,OAAoB,EACpB,KAAa,EACb,OAAsB,EACtB,OAAiC,EAAA;QAEjC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;AACjD,QAAA,OAAO,MAAM,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;;AAGnE;;;;;;;;;;;;;;AAcG;IACH,OAAO,kBAAkB,CAAC,UAA0B,EAAA;QAClD,qBAAqB,CAAC,MAAK;YACzB,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;AAChC,SAAC,CAAC;;AAEL;;AC5ND;;AAEG;MAWU,qBAAqB,GAAG,IAAI,cAAc,CACrD,uBAAuB;AAGzB;;AAEG;AACa,SAAA,oBAAoB,CAAC,MAAA,GAA8B,EAAE,EAAA;IACnE,OAAO;AACL,QAAA,OAAO,EAAE,qBAAqB;AAC9B,QAAA,QAAQ,EAAE;AACR,YAAA,YAAY,EAAE,SAAS;AACvB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,GAAG;AACJ;KACF;AACH;;AC/BA;;AAEG;MAUU,oBAAoB,GAAG,IAAI,cAAc,CACpD,sBAAsB;AAGxB;;AAEG;AACa,SAAA,mBAAmB,CAAC,MAAA,GAA6B,EAAE,EAAA;IACjE,OAAO;AACL,QAAA,OAAO,EAAE,oBAAoB;AAC7B,QAAA,QAAQ,EAAE;AACR,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,GAAG;AACJ;KACF;AACH;;AC7BA;;AAEG;AAMH;;AAEG;AAEG,MAAO,yBAA0B,SAAQ,qBAAqB,CAAA;AADpE,IAAA,WAAA,GAAA;;AAEU,QAAA,IAAA,CAAA,gBAAgB,GAAgB,IAAI,GAAG,EAAE;AACzC,QAAA,IAAA,CAAA,kBAAkB,GAAgB,IAAI,GAAG,EAAE;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAA6B,IAAI,GAAG,EAAE;QACtD,IAAgB,CAAA,gBAAA,GAAG,KAAK;QACxB,IAAY,CAAA,YAAA,GAAG,YAAY;AA8GpC;AA5GC;;AAEG;AACH,IAAA,cAAc,CAAC,MAAc,EAAE,OAAA,GAAuB,IAAI,EAAA;QACxD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAG,EAAA,MAAM,CAAI,CAAA,EAAA,OAAO,CAAE,CAAA,CAAC;;AAGnD;;AAEG;AACH,IAAA,gBAAgB,CAAC,MAAc,EAAE,OAAA,GAAuB,IAAI,EAAA;QAC1D,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAG,EAAA,MAAM,CAAI,CAAA,EAAA,OAAO,CAAE,CAAA,CAAC;;AAGrD;;AAEG;AACH,IAAA,cAAc,CAAC,KAAa,EAAE,OAAoB,EAAE,MAAmB,EAAA;AACrE,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,KAAK,CAAI,CAAA,EAAA,OAAO,EAAE;QACjC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;;AAGxC;;AAEG;AACH,IAAA,mBAAmB,CAAC,WAAoB,EAAE,OAAA,GAAkB,YAAY,EAAA;AACtE,QAAA,IAAI,CAAC,gBAAgB,GAAG,WAAW;AACnC,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO;;AAG7B;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;AAC/B,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QAC7B,IAAI,CAAC,UAAU,EAAE;;IAGV,KAAK,CAAC,KAAa,EAAE,IAAiB,EAAA;AAC7C,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;;QAGpC,MAAM,GAAG,GAAG,CAAG,EAAA,KAAK,IAAI,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;;QAGpC,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAClC,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAE;;;QAIxC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC;QAElD,IAAI,OAAO,EAAE;YACX,OAAO;AACL,gBAAA,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAA,EAAA,EAAK,KAAK,CAAE,CAAA;AAClD,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,OAAO,EAAE;aACV;;QAGH,IAAI,SAAS,EAAE;YACb,OAAO;AACL,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,OAAO,EAAE;aACV;;;QAIH,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;;IAGxB,OAAO,CAAC,KAAa,EAAE,IAAiB,EAAA;AAC/C,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;;QAGpC,MAAM,GAAG,GAAG,CAAG,EAAA,KAAK,IAAI,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;QAEpC,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAClC,YAAA,OAAO,IAAI;;QAGb,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACpC,YAAA,OAAO,KAAK;;;QAId,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;;IAG1B,yBAAyB,CAAC,KAAa,EAAE,IAAiB,EAAA;AACjE,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;;QAGpC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;QAE3C,OAAO;AACL,YAAA,GAAG,WAAW;YACd,sBAAsB,EAAE,CAAC,WAAW,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG;SAChE;;+GAjHQ,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAzB,yBAAyB,EAAA,CAAA,CAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC;;;ACXD;;AAEG;AAMH;;AAEG;AACU,MAAA,kBAAkB,GAAG;AAChC,IAAA,KAAK,EAAE;AACL,QAAA,EAAE,EAAE,cAAc;AAClB,QAAA,WAAW,EAAE,YAAY;AACzB,QAAA,EAAE,EAAE,eAAe;AACnB,QAAA,WAAW,EAAE,aAAa;AAC1B,QAAA,EAAE,EAAE,cAAc;AAClB,QAAA,WAAW,EAAE,YAAY;AACzB,QAAA,EAAE,EAAE,cAAc;AAClB,QAAA,WAAW,EAAE;AACd,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,QAAQ,EAAE,sBAAsB;AAChC,QAAA,oBAAoB,EAAE,YAAY;AAClC,QAAA,cAAc,EAAE;AACjB;;MAGU,cAAc,GAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAE5F;;AAEG;AACG,SAAU,0BAA0B,CACxC,OAA4B,EAAA;IAE5B,OAAO,CAAC,aAAa,EAAE;AACvB,IAAA,OAAO,OAAO;AAChB;AAEA;;AAEG;AACG,SAAU,sBAAsB,CACpC,OAA8B,EAAA;AAE9B,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,iBAAiB;IAC3C,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,QAAQ;IAC7D,IAAI,CAAC,UAAU,EAAE;AACf,QAAA,MAAM,IAAI,KAAK,CAAC,+FAA+F,CAAC;;AAElH,IAAA,OAAO,UAAU;AACnB;AAEA;;AAEG;AACa,SAAA,kBAAkB,CAChC,SAAkC,EAClC,KAAa,EAAA;AAEb,IAAA,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;AAC7B;AAEA;;AAEG;AACa,SAAA,aAAa,CAC3B,SAAkC,EAClC,OAAoB,EAAA;AAEpB,IAAA,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC;AAClC;AAEA;;AAEG;AACa,SAAA,iBAAiB,CAC/B,OAA8B,EAC9B,KAAa,EAAA;IAEb,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,mBAAmB,CAAC;IACtE,IAAI,KAAK,EAAE;AACT,QAAA,KAAK,CAAC,KAAK,GAAG,KAAK;QACnB,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,CAAC,aAAa,EAAE;;AAE3B;AAEA;;AAEG;AACG,SAAU,gBAAgB,CAAC,OAA8B,EAAA;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,mBAAmB,CAAC;IACtE,IAAI,KAAK,EAAE;QACT,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QACtC,OAAO,CAAC,aAAa,EAAE;;AAE3B;AAEA;;AAEG;AACG,SAAU,iBAAiB,CAAC,OAA8B,EAAA;IAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,mBAAmB,CAAC;IACtE,IAAI,KAAK,EAAE;QACT,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,CAAC,aAAa,EAAE;;AAE3B;AAEA;;AAEG;AACG,SAAU,aAAa,CAAC,OAA8B,EAAA;IAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,mBAAmB,CAAC;IACtE,OAAO,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE;AACjC;AAEA;;AAEG;AACG,SAAU,YAAY,CAAC,SAAkC,EAAA;AAC7D,IAAA,OAAO,SAAS,CAAC,OAAO,EAAE;AAC5B;AAEA;;AAEG;AACG,SAAU,cAAc,CAAC,SAAkC,EAAA;AAC/D,IAAA,OAAO,SAAS,CAAC,SAAS,EAAE;AAC9B;AAEA;;AAEG;AACG,SAAU,mBAAmB,CAAC,SAAkC,EAAA;AACpE,IAAA,OAAO,SAAS,CAAC,gBAAgB,EAAE,CAAC,SAAS;AAC/C;AAEA;;AAEG;AACG,SAAU,YAAY,CAAC,EAAc,EAAA;AACzC,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;QAC7B,UAAU,CAAC,MAAK;AACd,YAAA,EAAE,EAAE;AACJ,YAAA,OAAO,EAAE;SACV,EAAE,CAAC,CAAC;AACP,KAAC,CAAC;AACJ;AAYA;;AAEG;AACa,SAAA,qBAAqB,CAAC,KAAA,GAAuB,IAAI,EAAA;AAC/D,IAAA,MAAM,OAAO,GAAoB;QAC/B,KAAK;QACL,QAAQ,EAAE,UAAS,GAAkB,EAAA;AACnC,YAAA,OAAO,CAAC,KAAK,GAAG,GAAG;SACpB;QACD,UAAU,EAAE,UAAS,GAAkB,EAAA;AACrC,YAAA,OAAO,CAAC,KAAK,GAAG,GAAG;SACpB;QACD,KAAK,EAAE,UAAS,GAAA,GAAqB,IAAI,EAAA;AACvC,YAAA,OAAO,CAAC,KAAK,GAAG,GAAG;;KAEtB;AACD,IAAA,OAAO,OAAO;AAChB;AAEA;;AAEG;AACU,MAAA,cAAc,GAAG;AAC5B,IAAA,aAAa,EAAE;AACb,QAAA,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,WAAW;AAC3C,QAAA,OAAO,EAAE,IAAmB;AAC5B,QAAA,YAAY,EAAE,kBAAkB,CAAC,KAAK,CAAC,EAAE;AACzC,QAAA,aAAa,EAAE;AAChB,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,WAAW;AAC3C,QAAA,OAAO,EAAE,IAAmB;AAC5B,QAAA,YAAY,EAAE,kBAAkB,CAAC,KAAK,CAAC,EAAE;AACzC,QAAA,aAAa,EAAE;AAChB,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,SAAS;AAC3C,QAAA,OAAO,EAAE,IAAmB;AAC5B,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,aAAa,EAAE;AAChB,KAAA;AACD,IAAA,kBAAkB,EAAE;AAClB,QAAA,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,oBAAoB;AACtD,QAAA,OAAO,EAAE,IAAmB;AAC5B,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,aAAa,EAAE,KAAK;AACpB,QAAA,aAAa,EAAE;AAChB;;;ACnNH;;AAEG;AAKH;AACA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,QAAgB,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAS;AAC/D;AACA,MAAM,OAAO,GAAG,CAAC,QAAa,KAAK,QAAe;AAElD;;AAEG;AACU,MAAA,aAAa,GAAG;AAC3B,IAAA,UAAU,EAAE,oCAAoC;AAChD,IAAA,iBAAiB,EAAE,kBAAkB;AACrC,IAAA,eAAe,EAAE,qBAAqB;AACtC,IAAA,WAAW,EAAE,oBAAoB;AACjC,IAAA,WAAW,EAAE,oBAAoB;AACjC,IAAA,YAAY,EAAE,oBAAoB;AAClC,IAAA,IAAI,EAAE,mBAAmB;AACzB,IAAA,KAAK,EAAE;;AAGT;;AAEG;SACa,aAAa,GAAA;IAC3B,OAAO,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AAClD;AAEA;;AAEG;SACa,oBAAoB,GAAA;IAClC,OAAO,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;AACzD;AAEA;;AAEG;AACI,eAAe,eAAe,CAAC,KAAa,EAAA;AACjD,IAAA,MAAM,KAAK,GAAG,aAAa,EAAE;AAC7B,IAAA,MAAM,KAAK,CAAC,KAAK,EAAE;AACnB,IAAA,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC7B;AAEA;;AAEG;AACI,eAAe,eAAe,GAAA;AACnC,IAAA,MAAM,KAAK,GAAG,aAAa,EAAE;AAC7B,IAAA,MAAM,KAAK,CAAC,KAAK,EAAE;AACrB;AAEA;;AAEG;AACI,eAAe,kBAAkB,GAAA;AACtC,IAAA,MAAM,KAAK,GAAG,aAAa,EAAE;AAC7B,IAAA,OAAO,MAAM,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC;AAC1C;AAEA;;AAEG;AACI,eAAe,oBAAoB,GAAA;AACxC,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;AAC/D,IAAA,MAAM,QAAQ,CAAC,KAAK,EAAE;AACxB;AAEA;;AAEG;AACI,eAAe,yBAAyB,CAAC,WAAmB,EAAA;IACjE,MAAM,oBAAoB,EAAE;AAC5B,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAoC,iCAAA,EAAA,WAAW,CAAC,WAAW,EAAE,CAAI,EAAA,CAAA,CAAC,CAAC;AACtG,IAAA,MAAM,WAAW,CAAC,KAAK,EAAE;AAC3B;AAEA;;AAEG;AACI,eAAe,gBAAgB,GAAA;AACpC,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AAC3D,IAAA,IAAI,MAAM,QAAQ,CAAC,SAAS,EAAE,EAAE;AAC9B,QAAA,MAAM,QAAQ,CAAC,KAAK,EAAE;;AAE1B;AAEA;;AAEG;AACI,eAAe,eAAe,GAAA;AACnC,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AAC3D,IAAA,IAAI,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE;AAC7B,QAAA,OAAO,MAAM,OAAO,CAAC,OAAO,EAAE;;AAEhC,IAAA,OAAO,EAAE;AACX;AAEA;;AAEG;AACI,eAAe,gBAAgB,GAAA;AACpC,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AAC3D,IAAA,OAAO,MAAM,OAAO,CAAC,SAAS,EAAE;AAClC;AAEA;;AAEG;AACI,eAAe,WAAW,GAAA;AAC/B,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAClD,IAAA,IAAI,MAAM,MAAM,CAAC,SAAS,EAAE,EAAE;AAC5B,QAAA,OAAO,MAAM,MAAM,CAAC,OAAO,EAAE;;AAE/B,IAAA,OAAO,EAAE;AACX;AAEA;;AAEG;AACI,eAAe,YAAY,GAAA;AAChC,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACpD,IAAA,IAAI,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE;AAC7B,QAAA,OAAO,MAAM,OAAO,CAAC,OAAO,EAAE;;AAEhC,IAAA,OAAO,EAAE;AACX;AAEA;;AAEG;AACI,eAAe,eAAe,GAAA;AACnC,IAAA,MAAM,KAAK,GAAG,aAAa,EAAE;IAC7B,OAAO,MAAM,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,IAAI,CAC9C,CAAC,KAAoB,KAAK,KAAK,KAAK,IAAI,EACxC,MAAM,KAAK,CACZ;AACH;AAEA;;AAEG;AACI,eAAe,eAAe,GAAA;AACnC,IAAA,MAAM,KAAK,GAAG,aAAa,EAAE;AAC7B,IAAA,MAAM,KAAK,CAAC,KAAK,EAAE;AACrB;AAEA;;AAEG;AACI,eAAe,cAAc,GAAA;;IAElC,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxC,IAAA,MAAM,IAAI,CAAC,KAAK,EAAE;AACpB;AAEA;;AAEG;AACI,eAAe,iBAAiB,CAAC,UAAkB,IAAI,EAAA;AAC5D,IAAA,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5D;AAEA;;AAEG;AACI,eAAe,qBAAqB,GAAA;AACzC,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9D,OAAO,MAAM,WAAW,CAAC,SAAS,EAAE,IAAI,MAAM,WAAW,CAAC,WAAW,EAAE;AACzE;AAEA;;AAEG;AACI,eAAe,uBAAuB,CAAC,UAAkB,EAAA;IAC9D,MAAM,oBAAoB,EAAE;IAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACzD,IAAA,IAAI,MAAM,WAAW,CAAC,SAAS,EAAE,EAAE;AACjC,QAAA,MAAM,WAAW,CAAC,KAAK,EAAE;AACzB,QAAA,MAAM,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;;AAE1C;AAEA;;AAEG;AACI,eAAe,sBAAsB,GAAA;AAC1C,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;AAC3D,IAAA,IAAI,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE;QAC1B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC;AAChE,QAAA,OAAO,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,GAAG,EAAE;;AAErD,IAAA,OAAO,EAAE;AACX;AAEA;;AAEG;AACU,MAAA,aAAa,GAAG;AAC3B;;AAEG;AACH,IAAA,MAAM,mBAAmB,CAAC,WAAmB,EAAE,cAAsB,IAAI,EAAA;AACvE,QAAA,MAAM,yBAAyB,CAAC,WAAW,CAAC;AAC5C,QAAA,MAAM,eAAe,CAAC,WAAW,CAAC;QAClC,MAAM,iBAAiB,EAAE;AACzB,QAAA,MAAM,cAAc,GAAG,MAAM,gBAAgB,EAAE;QAC/C,IAAI,cAAc,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,CAAA,8CAAA,EAAiD,MAAM,eAAe,EAAE,CAAE,CAAA,CAAC;;KAE9F;AAED;;AAEG;AACH,IAAA,MAAM,qBAAqB,CAAC,WAAmB,EAAE,cAAsB,IAAI,EAAA;AACzE,QAAA,MAAM,yBAAyB,CAAC,WAAW,CAAC;AAC5C,QAAA,MAAM,eAAe,CAAC,WAAW,CAAC;QAClC,MAAM,iBAAiB,EAAE;AACzB,QAAA,MAAM,cAAc,GAAG,MAAM,gBAAgB,EAAE;QAC/C,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC;;KAEtE;AAED;;AAEG;IACH,MAAM,oBAAoB,CAAC,WAAmB,EAAA;AAC5C,QAAA,MAAM,yBAAyB,CAAC,WAAW,CAAC;QAC5C,MAAM,iBAAiB,EAAE;AACzB,QAAA,MAAM,YAAY,GAAG,MAAM,sBAAsB,EAAE;AACnD,QAAA,IAAI,YAAY,KAAK,WAAW,CAAC,WAAW,EAAE,EAAE;YAC9C,MAAM,IAAI,KAAK,CAAC,CAAA,iBAAA,EAAoB,WAAW,CAAY,SAAA,EAAA,YAAY,CAAE,CAAA,CAAC;;KAE7E;AAED;;AAEG;AACH,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,MAAM,eAAe,CAAC,YAAY,CAAC;QACnC,MAAM,gBAAgB,EAAE;QACxB,MAAM,iBAAiB,EAAE;AACzB,QAAA,MAAM,KAAK,GAAG,MAAM,kBAAkB,EAAE;AACxC,QAAA,IAAI,KAAK,KAAK,EAAE,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,KAAK,CAAA,CAAE,CAAC;;;;;AC3P3E;;AAEG;AAMH;;;AAGG;MAYU,2BAA2B,CAAA;+GAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAA3B,2BAA2B,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,EAP3B,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA,EAAA,CAAA,CAAA;;4FAEU,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAXvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,QAAQ,EAAE;AACX;AACF;AACF,iBAAA;;;ACtBD;;AAEG;MA6BmB,mBAAmB,CAAA;AAGxC;;AClCD;;AAEG;AAeI,MAAM,aAAa,GAAG,eAAe;AAGtC,MAAO,yBAA0B,SAAQ,mBAAmB,CAAA;IAIhE,WACU,CAAA,IAAgB,EACW,MAAqB,EAAA;AAExD,QAAA,KAAK,EAAE;QAHC,IAAI,CAAA,IAAA,GAAJ,IAAI;QAJG,IAAM,CAAA,MAAA,GAAG,uCAAuC;QACzD,IAAM,CAAA,MAAA,GAAwB,IAAI;AAOxC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI;;AAG9B,IAAA,SAAS,CAAC,MAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;AAGtB,IAAA,MAAM,CAAC,OAA4B,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;;AAGtD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;QACzC,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;;QAGtD,MAAM,GAAG,GAAG,CAAG,EAAA,IAAI,CAAC,MAAM,CAAA,CAAA,EAAI,UAAU,CAAA,cAAA,CAAgB;AACxD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;AACrC,QAAA,MAAM,IAAI,GAAG;YACX,EAAE,EAAE,OAAO,CAAC,WAAW;AACvB,YAAA,OAAO,EAAE,OAAO,CAAC,MAAM,KAAK,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;SAC/D;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CACrD,GAAG,CAAC,QAAQ,KAAK;AACf,YAAA,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,QAAQ,CAAC,GAAG;AACjB,YAAA,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;AACzC,SAAA,CAAC,CAAC,EACH,UAAU,CAAC,KAAK,IAAG;YACjB,OAAO,IAAI,CAAC,CAAC;AACX,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI;AAChC,iBAAA,CAAC,CAAC;SACJ,CAAC,CACH;;AAGH,IAAA,KAAK,CAAC,OAA0B,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;;AAGtD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;QACzC,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;;QAGtD,MAAM,GAAG,GAAG,CAAG,EAAA,IAAI,CAAC,MAAM,CAAA,CAAA,EAAI,UAAU,CAAA,kBAAA,CAAoB;AAC5D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;AACrC,QAAA,MAAM,IAAI,GAAG;YACX,EAAE,EAAE,OAAO,CAAC,IAAI;YAChB,IAAI,EAAE,OAAO,CAAC;SACf;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CACrD,GAAG,CAAC,QAAQ,KAAK;AACf,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,QAAQ,CAAC,MAAM,KAAK;AAC/B,SAAA,CAAC,CAAC,EACH,UAAU,CAAC,KAAK,IAAG;YACjB,OAAO,IAAI,CAAC,CAAC;AACX,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI;AAChC,iBAAA,CAAC,CAAC;SACJ,CAAC,CACH;;IAGK,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;;AAGtD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,CAAG,EAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAA,CAAE,CAAC;QACvE,OAAO,IAAI,WAAW,CAAC;YACrB,eAAe,EAAE,CAAS,MAAA,EAAA,IAAI,CAAE,CAAA;AAChC,YAAA,cAAc,EAAE;AACjB,SAAA,CAAC;;AAzFO,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,4CAMd,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AANxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,MAAM,EAAA,CAAA,CAAA;;4FACnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BAO7B;;0BAAY,MAAM;2BAAC,aAAa;;AAuFrC;;AAEG;AACG,SAAU,yBAAyB,CAAC,MAAoB,EAAA;IAC5D,OAAO;QACL,yBAAyB;AACzB,QAAA;AACE,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,QAAQ,EAAE;AACX;KACF;AACH;;AC5HA;;AAEG;AAeI,MAAM,aAAa,GAAG,eAAe;AAGtC,MAAO,yBAA0B,SAAQ,mBAAmB,CAAA;IAIhE,WACU,CAAA,IAAgB,EACW,MAAqB,EAAA;AAExD,QAAA,KAAK,EAAE;QAHC,IAAI,CAAA,IAAA,GAAJ,IAAI;QAJG,IAAM,CAAA,MAAA,GAAG,8BAA8B;QAChD,IAAM,CAAA,MAAA,GAAwB,IAAI;AAOxC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI;;AAG9B,IAAA,SAAS,CAAC,MAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;AAGtB,IAAA,MAAM,CAAC,OAA4B,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;;AAGtD,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,OAAO;AACjC,QAAA,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;AAC3B,YAAA,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YACjC,MAAM,EAAE,OAAO,CAAC,WAAW;AAC3B,YAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK;AACjC,YAAA,WAAW,EAAE,OAAO,CAAC,MAAM,KAAK,OAAO,GAAG,GAAG,GAAG;AACjD,SAAA,CAAC;AAEF,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;AAC9B,YAAA,cAAc,EAAE;AACjB,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAChE,GAAG,CAAC,QAAQ,IAAG;AACb,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC3B,OAAO;AACL,oBAAA,OAAO,EAAE,IAAI;oBACb,GAAG,EAAE,QAAQ,CAAC,UAAU;AACxB,oBAAA,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;iBACzC;;iBACI;gBACL,OAAO;AACL,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,KAAK,EAAE,QAAQ,CAAC,UAAU,IAAI;iBAC/B;;AAEL,SAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;YACjB,OAAO,IAAI,CAAC,CAAC;AACX,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI;AAChC,iBAAA,CAAC,CAAC;SACJ,CAAC,CACH;;AAGH,IAAA,KAAK,CAAC,OAA0B,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;;AAGtD,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,aAAa;AACvC,QAAA,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;AAC3B,YAAA,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YACjC,UAAU,EAAE,OAAO,CAAC,GAAG;YACvB,IAAI,EAAE,OAAO,CAAC;AACf,SAAA,CAAC;AAEF,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;AAC9B,YAAA,cAAc,EAAE;AACjB,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAChE,GAAG,CAAC,QAAQ,IAAG;AACb,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC3B,OAAO;AACL,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,QAAQ,EAAE;iBACX;;iBACI;gBACL,OAAO;AACL,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,KAAK,EAAE,QAAQ,CAAC,UAAU,IAAI;iBAC/B;;AAEL,SAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;YACjB,OAAO,IAAI,CAAC,CAAC;AACX,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI;AAChC,iBAAA,CAAC,CAAC;SACJ,CAAC,CACH;;AAjGQ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,4CAMd,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AANxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,MAAM,EAAA,CAAA,CAAA;;4FACnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BAO7B;;0BAAY,MAAM;2BAAC,aAAa;;AA+FrC;;AAEG;AACG,SAAU,yBAAyB,CAAC,MAAoB,EAAA;IAC5D,OAAO;QACL,yBAAyB;AACzB,QAAA;AACE,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,QAAQ,EAAE;AACX;KACF;AACH;;ACpIA;;AAEG;AAeI,MAAM,cAAc,GAAG,gBAAgB;AAGxC,MAAO,yBAA0B,SAAQ,mBAAmB,CAAA;IAGhE,WACU,CAAA,IAAgB,EACY,MAAqB,EAAA;AAEzD,QAAA,KAAK,EAAE;QAHC,IAAI,CAAA,IAAA,GAAJ,IAAI;QAHN,IAAM,CAAA,MAAA,GAAwB,IAAI;AAOxC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI;;AAG9B,IAAA,SAAS,CAAC,MAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;AAGtB,IAAA,MAAM,CAAC,OAA4B,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC;;;AAIvD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,QAAQ,EAAE;;;;;;AAQnE,QAAA,MAAM,OAAO,GAAG,CAA8B,2BAAA,EAAA,IAAI,EAAE;;;QAIpD,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAChE,GAAG,CAAC,OAAO;AACT,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,GAAG,EAAE,CAAW,QAAA,EAAA,IAAI,CAAC,GAAG,EAAE,CAAE,CAAA;AAC5B,YAAA,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;AACzC,SAAA,CAAC,CAAC,EACH,UAAU,CAAC,KAAK,IAAG;YACjB,OAAO,IAAI,CAAC,CAAC;AACX,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI;AACzB,iBAAA,CAAC,CAAC;SACJ,CAAC,CACH;;AAGH,IAAA,KAAK,CAAC,OAA0B,EAAA;;;;;;QAO9B,OAAO,IAAI,CAAC,CAAC;AACX,gBAAA,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;AACf,aAAA,CAAC,CAAC;;AAGG,IAAA,MAAM,aAAa,CAAC,WAAmB,EAAE,OAAe,EAAA;;;AAG9D,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC;;;;;;;;;;;;;;AAgBvD,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE;;AAjFf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,4CAKd,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AALzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,MAAM,EAAA,CAAA,CAAA;;4FACnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BAM7B;;0BAAY,MAAM;2BAAC,cAAc;;AAgFtC;;AAEG;AACG,SAAU,yBAAyB,CAAC,MAAoB,EAAA;IAC5D,OAAO;QACL,yBAAyB;AACzB,QAAA;AACE,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,QAAQ,EAAE;AACX;KACF;AACH;;ACpHA;;AAEG;AAMH;;AAEG;AACG,SAAU,aAAa,CAAC,KAAc,EAAA;AAC1C,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,KAAK;;;AAId,IAAA,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC;AAEA;;AAEG;AACG,SAAU,mBAAmB,CAAC,KAAc,EAAA;AAChD,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,KAAK;;;AAId,IAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC;AAC7E;AAEA;;AAEG;AACG,SAAU,kBAAkB,CAAC,MAA4C,EAAA;IAC7E,OAAO,MAAM,CAAC,OAAO,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;AACxD;AAEA;;AAEG;AACG,SAAU,YAAY,CAAC,KAAc,EAAA;AACzC,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,KAAK;;;AAId,IAAA,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;AACxC;AAEA;;AAEG;AACG,SAAU,qBAAqB,CAAC,IAAwB,EAAA;IAC5D,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AACjD;AAEA;;AAEG;AACG,SAAU,0BAA0B,CAAC,UAAmC,EAAA;IAC5E,OAAO,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,UAAU,IAAI,GAAG;AAC5D;AAiEA;;AAEG;AACG,SAAU,qBAAqB,CAAC,KAAa,EAAA;AACjD,IAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;AACvB,QAAA,OAAO,KAAwB;;AAEjC,IAAA,OAAO,IAAI;AACb;AAOA;;AAEG;AACa,SAAA,yBAAyB,CAAC,KAAa,EAAE,OAAoB,EAAA;AAC3E,IAAA,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE;AAC9B,QAAA,OAAO,KAA4B;;AAErC,IAAA,OAAO,IAAI;AACb;AAsBA;;AAEG;AACa,SAAA,2BAA2B,CACzC,WAAwB,EACxB,OAAoB,EAAA;IAEpB,MAAM,MAAM,GAAsB,EAAE;AAEpC,IAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AACxB,QAAA,IAAI,WAAW,CAAC,IAAI,KAAK,IAAI,EAAE;YAC7B,MAAM,CAAC,IAAI,CAAC;AACV,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;;;IAIN,OAAO;QACL,OAAO,EAAE,WAAW,CAAC,OAAO;AAC5B,QAAA,IAAI,EAAE,WAAW,CAAC,IAAI,GAAI,WAAW,CAAC,IAAwB,GAAG,IAAI;AACrE,QAAA,QAAQ,EAAE,WAAW,CAAC,QAAQ,GAAI,WAAW,CAAC,QAAgC,GAAG,IAAI;QACrF,OAAO;AACP,QAAA,MAAM,EAAE;KACT;AACH;AAEA;;AAEG;AACG,SAAU,iBAAiB,CAAC,KAAc,EAAA;AAC9C,IAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;QACzB,MAAM,IAAI,SAAS,CAAC,CAA6B,0BAAA,EAAA,OAAO,KAAK,CAAK,EAAA,EAAA,KAAK,CAAE,CAAA,CAAC;;AAE9E;AAEA;;AAEG;AACG,SAAU,gBAAgB,CAAC,KAAc,EAAA;AAC7C,IAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AACxB,QAAA,MAAM,IAAI,SAAS,CAAC,4CAA4C,KAAK,CAAA,CAAE,CAAC;;AAE5E;;ACxNA;;AAEG;;;;"}