{"version":3,"file":"maptiler-client.mjs","sources":["../src/config.ts","../src/language.ts","../src/callFetch.ts","../src/defaults.ts","../src/services/ServiceError.ts","../src/services/geocoding.ts","../src/services/geolocation.ts","../src/services/coordinates.ts","../src/services/data.ts","../src/mapstyle.ts","../src/misc.ts","../src/services/staticMaps.ts","../src/services/math.ts","../src/tiledecoding.ts","../src/services/elevation.ts"],"sourcesContent":["import { BufferToPixelDataFunction } from \"./tiledecoding\";\n\nexport type FetchFunction = (\n  input: RequestInfo | URL,\n  init?: RequestInit,\n) => Promise<Response>;\n\nfunction tryGettingFetch() {\n  // this is browser, fetch exists\n  if (typeof self !== \"undefined\") {\n    return fetch.bind(self);\n  }\n\n  if (typeof global !== \"undefined\" && global.fetch) {\n    return global.fetch;\n  }\n\n  return null;\n}\n\n/**\n * The configuration object definition\n */\nclass ClientConfig {\n  /**\n   * MapTiler Cloud API key\n   */\n  private _apiKey = \"\";\n\n  /**\n   * The fetch function. To be set if in Node < 18, otherwise\n   * will be automatically resolved.\n   */\n  private _fetch: FetchFunction | null = tryGettingFetch();\n\n  /**\n   * Number of tiles to keep in cache\n   */\n  public tileCacheSize: number = 200;\n\n  public bufferToPixelData?: BufferToPixelDataFunction | null;\n\n  /**\n   * Set the MapTiler Cloud API key\n   */\n  set apiKey(k: string) {\n    this._apiKey = k;\n  }\n\n  /**\n   * Get the MapTiler Cloud API key\n   */\n  get apiKey(): string {\n    return this._apiKey;\n  }\n\n  /**\n   * Set a the custom fetch function to replace the default one\n   */\n  set fetch(f: FetchFunction) {\n    this._fetch = f;\n  }\n\n  /**\n   * Get the fetch fucntion\n   */\n  get fetch(): FetchFunction | null {\n    return this._fetch;\n  }\n}\n\n/**\n * Configuration object\n */\nconst config = new ClientConfig();\n\nexport { ClientConfig, config };\n","export type LanguageInfo = {\n  /**\n   * Two-letter ISO code, such as `\"en\"` for English language.\n   * Can be `null` if the language is a flag to be evaluated at runtime,\n   * as it is the case for some \"modes\".\n   */\n  code: string | null;\n\n  /**\n   * The full OSM language flag, such as `\"name:en\"` for the English language.\n   * Can also be a non-OSM flag if the language needs to be evaluated at runtime, such as `\"auto\"`,\n   * as it is the case for some \"modes\".\n   */\n  flag: string;\n\n  /**\n   * English name of the language.\n   */\n  name: string;\n\n  /**\n   * Whether the language leverages only the latin charsets.\n   */\n  latin: boolean;\n\n  /**\n   * Some language descriptions corresponds to \"modes\" rather than to actual languages.\n   * For instance the \"visitor\" mode consists in displaying bilingual labels.\n   */\n  isMode: boolean;\n\n  /**\n   * Whether the language is compatible with the geocoding API\n   */\n  geocoding: boolean;\n};\n\n/**\n * List of \"non-ISO specific\" languages.\n */\nexport const NonISOLanguage = {\n  /**\n   * Language mode to display the labels in the end user's device language.\n   */\n  AUTO: {\n    code: null,\n    flag: \"auto\",\n    name: \"Auto\",\n    latin: false,\n    isMode: true,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * The OSM language using latin script. MapTiler discourages its use as a primary language setting due to the lack of actual linguistic specificity,\n   * though it can be an handy fallback. This is not to be confused with the \"Classical Latin\" language, which is available under the tag `.CLASSICAL_LATIN`.\n   */\n  LATIN: {\n    code: \"latin\",\n    flag: \"name:latin\",\n    name: \"Latin\",\n    latin: true,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * The OSM language using non-latin script. MapTiler discourages its use as a primary language setting due to the lack of actual linguistic specificity,\n   * though it can be an handy fallback.\n   */\n  NON_LATIN: {\n    code: \"nonlatin\",\n    flag: \"name:nonlatin\",\n    name: \"Non Latin\",\n    latin: false,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Using the local language generaly (but not always) means that every labels of a given region will use the dominant local language.\n   */\n  LOCAL: {\n    code: null,\n    flag: \"name\",\n    name: \"Local\",\n    latin: true,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n} as const;\n\n/**\n * List of \"country specific\" languages.\n */\nexport const ISOLanguage = {\n  /**\n   * Albanian language\n   */\n  ALBANIAN: {\n    code: \"sq\",\n    flag: \"name:sq\",\n    name: \"Albanian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Amharic language\n   */\n  AMHARIC: {\n    code: \"am\",\n    flag: \"name:am\",\n    name: \"Amharic\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Arabic language (right-to-left script)\n   */\n  ARABIC: {\n    code: \"ar\",\n    flag: \"name:ar\",\n    name: \"Arabic\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Armenian language\n   */\n  ARMENIAN: {\n    code: \"hy\",\n    flag: \"name:hy\",\n    name: \"Armenian\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Azerbaijani language\n   */\n  AZERBAIJANI: {\n    code: \"az\",\n    flag: \"name:az\",\n    name: \"Azerbaijani\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Basque language\n   */\n  BASQUE: {\n    code: \"eu\",\n    flag: \"name:eu\",\n    name: \"Basque\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Belarusian langauge\n   */\n  BELARUSIAN: {\n    code: \"be\",\n    flag: \"name:be\",\n    name: \"Belarusian\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Bengali language\n   */\n  BENGALI: {\n    code: \"bn\",\n    flag: \"name:bn\",\n    name: \"Bengali\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Bosnian language\n   */\n  BOSNIAN: {\n    code: \"bs\",\n    flag: \"name:bs\",\n    name: \"Bosnian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Breton language\n   */\n  BRETON: {\n    code: \"br\",\n    flag: \"name:br\",\n    name: \"Breton\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Bulgarian language\n   */\n  BULGARIAN: {\n    code: \"bg\",\n    flag: \"bg\",\n    name: \"Bulgarian\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Catalan language\n   */\n  CATALAN: {\n    code: \"ca\",\n    flag: \"name:ca\",\n    name: \"Catalan\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Chinese language\n   */\n  CHINESE: {\n    code: \"zh\",\n    flag: \"name:zh\",\n    name: \"Chinese\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Traditional Chinese language\n   */\n  TRADITIONAL_CHINESE: {\n    code: \"zh-Hant\",\n    flag: \"name:zh-Hant\",\n    name: \"Chinese (traditional)\",\n    latin: false,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Simplified Chinese language\n   */\n  SIMPLIFIED_CHINESE: {\n    code: \"zh-Hans\",\n    flag: \"name:zh-Hans\",\n    name: \"Chinese (simplified)\",\n    latin: false,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Corsican language\n   */\n  CORSICAN: {\n    code: \"co\",\n    flag: \"name:co\",\n    name: \"Corsican\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Croatian language\n   */\n  CROATIAN: {\n    code: \"hr\",\n    flag: \"name:hr\",\n    name: \"Croatian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Czech language\n   */\n  CZECH: {\n    code: \"cs\",\n    flag: \"name:cs\",\n    name: \"Czech\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Danish language\n   */\n  DANISH: {\n    code: \"da\",\n    flag: \"name:da\",\n    name: \"Danish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Dutch language\n   */\n  DUTCH: {\n    code: \"nl\",\n    flag: \"name:nl\",\n    name: \"Dutch\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * German language\n   */\n  GERMAN: {\n    code: \"de\",\n    flag: \"name:de\",\n    name: \"German\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Greek language\n   */\n  GREEK: {\n    code: \"el\",\n    flag: \"name:el\",\n    name: \"Greek\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * English language\n   */\n  ENGLISH: {\n    code: \"en\",\n    flag: \"name:en\",\n    name: \"English\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Esperanto language\n   */\n  ESPERANTO: {\n    code: \"eo\",\n    flag: \"name:eo\",\n    name: \"Esperanto\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Estonian language\n   */\n  ESTONIAN: {\n    code: \"et\",\n    flag: \"name:et\",\n    name: \"Estonian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Finnish language\n   */\n  FINNISH: {\n    code: \"fi\",\n    flag: \"name:fi\",\n    name: \"Finnish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * French language\n   */\n  FRENCH: {\n    code: \"fr\",\n    flag: \"name:fr\",\n    name: \"French\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Frisian language\n   */\n  FRISIAN: {\n    code: \"fy\",\n    flag: \"name:fy\",\n    name: \"Frisian (West)\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Georgian language\n   */\n  GEORGIAN: {\n    code: \"ka\",\n    flag: \"name:ka\",\n    name: \"Georgian\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Hebrew language (right-to-left non-latin script)\n   */\n  HEBREW: {\n    code: \"he\",\n    flag: \"name:he\",\n    name: \"Hebrew\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Hindi language\n   */\n  HINDI: {\n    code: \"hi\",\n    flag: \"name:hi\",\n    name: \"Hindi\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Hungarian language\n   */\n  HUNGARIAN: {\n    code: \"hu\",\n    flag: \"name:hu\",\n    name: \"Hungarian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Icelandic language\n   */\n  ICELANDIC: {\n    code: \"is\",\n    flag: \"name:is\",\n    name: \"Icelandic\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Indonesian language\n   */\n  INDONESIAN: {\n    code: \"id\",\n    flag: \"name:id\",\n    name: \"Indonesian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Irish language\n   */\n  IRISH: {\n    code: \"ga\",\n    flag: \"name:ga\",\n    name: \"Irish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Italian language\n   */\n  ITALIAN: {\n    code: \"it\",\n    flag: \"name:it\",\n    name: \"Italian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Japanese language\n   */\n  JAPANESE: {\n    code: \"ja\",\n    flag: \"name:ja\",\n    name: \"Japanese\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Japanese language in Hiragana form\n   */\n  JAPANESE_HIRAGANA: {\n    code: \"ja-Hira\",\n    flag: \"name:ja-Hira\",\n    name: \"Japanese Hiragana form\",\n    latin: false,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Japanese language (latin script)\n   */\n  JAPANESE_2018: {\n    code: \"ja-Latn\",\n    flag: \"name:ja-Latn\",\n    name: \"Japanese (Latin 2018)\",\n    latin: true,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Japanese language in Kana form (non-latin script)\n   */\n  JAPANESE_KANA: {\n    code: \"ja_kana\",\n    flag: \"name:ja_kana\",\n    name: \"Japanese (Kana)\",\n    latin: false,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Japanse language, romanized (latin script)\n   */\n  JAPANESE_LATIN: {\n    code: \"ja_rm\",\n    flag: \"name:ja_rm\",\n    name: \"Japanese (Latin script)\",\n    latin: true,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Kannada language\n   */\n  KANNADA: {\n    code: \"kn\",\n    flag: \"name:kn\",\n    name: \"Kannada\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Kazakh language\n   */\n  KAZAKH: {\n    code: \"kk\",\n    flag: \"name:kk\",\n    name: \"Kazakh\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Korean language\n   */\n  KOREAN: {\n    code: \"ko\",\n    flag: \"name:ko\",\n    name: \"Korean\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Korean language (latin script)\n   */\n  KOREAN_LATIN: {\n    code: \"ko-Latn\",\n    flag: \"name:ko-Latn\",\n    name: \"Korean (Latin script)\",\n    latin: true,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Kurdish language\n   */\n  KURDISH: {\n    code: \"ku\",\n    flag: \"name:ku\",\n    name: \"Kurdish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Classical Latin language\n   */\n  CLASSICAL_LATIN: {\n    code: \"la\",\n    flag: \"name:la\",\n    name: \"Latin\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Latvian language\n   */\n  LATVIAN: {\n    code: \"lv\",\n    flag: \"name:lv\",\n    name: \"Latvian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Lithuanian language\n   */\n  LITHUANIAN: {\n    code: \"lt\",\n    flag: \"name:lt\",\n    name: \"Lithuanian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Luxembourgish language\n   */\n  LUXEMBOURGISH: {\n    code: \"lb\",\n    flag: \"name:lb\",\n    name: \"Luxembourgish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Macedonian language\n   */\n  MACEDONIAN: {\n    code: \"mk\",\n    flag: \"name:mk\",\n    name: \"Macedonian\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Malayalm language\n   */\n  MALAYALAM: {\n    code: \"ml\",\n    flag: \"name:ml\",\n    name: \"Malayalam\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Maltese language\n   */\n  MALTESE: {\n    code: \"mt\",\n    flag: \"name:mt\",\n    name: \"Maltese\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Norwegian language\n   */\n  NORWEGIAN: {\n    code: \"no\",\n    flag: \"name:no\",\n    name: \"Norwegian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Occitan language\n   */\n  OCCITAN: {\n    code: \"oc\",\n    flag: \"name:oc\",\n    name: \"Occitan\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Persian language\n   */\n  PERSIAN: {\n    code: \"fa\",\n    flag: \"name:fa\",\n    name: \"Persian\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Polish language\n   */\n  POLISH: {\n    code: \"pl\",\n    flag: \"name:pl\",\n    name: \"Polish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Portuguese language\n   */\n  PORTUGUESE: {\n    code: \"pt\",\n    flag: \"name:pt\",\n    name: \"Portuguese\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Punjabi language\n   */\n  PUNJABI: {\n    code: \"pa\",\n    flag: \"name:pa\",\n    name: \"Punjabi\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Western Punjabi language\n   */\n  WESTERN_PUNJABI: {\n    code: \"pnb\",\n    flag: \"name:pnb\",\n    name: \"Western Punjabi\",\n    latin: false,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Romanian language\n   */\n  ROMANIAN: {\n    code: \"ro\",\n    flag: \"name:ro\",\n    name: \"Romanian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Romansh language\n   */\n  ROMANSH: {\n    code: \"rm\",\n    flag: \"name:rm\",\n    name: \"Romansh\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Russian language\n   */\n  RUSSIAN: {\n    code: \"ru\",\n    flag: \"name:ru\",\n    name: \"Russian\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Serbian language (cyrillic script)\n   */\n  SERBIAN_CYRILLIC: {\n    code: \"sr\",\n    flag: \"name:sr\",\n    name: \"Serbian (Cyrillic script)\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Serbian language (latin script)\n   */\n  SERBIAN_LATIN: {\n    code: \"sr-Latn\",\n    flag: \"name:sr-Latn\",\n    name: \"Serbian (Latin script)\",\n    latin: true,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Scottish Gaelic language\n   */\n  SCOTTISH_GAELIC: {\n    code: \"gd\",\n    flag: \"name:gd\",\n    name: \"Scottish Gaelic\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Slovak language\n   */\n  SLOVAK: {\n    code: \"sk\",\n    flag: \"name:sk\",\n    name: \"Slovak\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Slovene language\n   */\n  SLOVENE: {\n    code: \"sl\",\n    flag: \"name:sl\",\n    name: \"Slovene\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Spanish language\n   */\n  SPANISH: {\n    code: \"es\",\n    flag: \"name:es\",\n    name: \"Spanish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Swedish language\n   */\n  SWEDISH: {\n    code: \"sv\",\n    flag: \"name:sv\",\n    name: \"Swedish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Tamil language\n   */\n  TAMIL: {\n    code: \"ta\",\n    flag: \"name:ta\",\n    name: \"Tamil\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Telugu language\n   */\n  TELUGU: {\n    code: \"te\",\n    flag: \"name:te\",\n    name: \"Telugu\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Thai language\n   */\n  THAI: {\n    code: \"th\",\n    flag: \"name:th\",\n    name: \"Thai\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Turkish language\n   */\n  TURKISH: {\n    code: \"tr\",\n    flag: \"name:tr\",\n    name: \"Turkish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Ukrainian language\n   */\n  UKRAINIAN: {\n    code: \"uk\",\n    flag: \"name:uk\",\n    name: \"Ukrainian\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Vietnamese language (latin script)\n   */\n  VIETNAMESE: {\n    code: \"vi\",\n    flag: \"name:vi\",\n    name: \"Vietnamese (Latin script)\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Welsh language\n   */\n  WELSH: {\n    code: \"cy\",\n    flag: \"name:cy\",\n    name: \"Welsh\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n} as const;\n\n/**\n * The complete list of languages\n */\nexport const Language = {\n  ...NonISOLanguage,\n  ...ISOLanguage,\n} as const;\n\n/**\n * Get language infos from a provided language key, the key being the no-whitespace capital name.\n * By default, the language dictionary to look into is the one defined in this library, but another one could be provided\n * Returns `null` if not found.\n */\nexport function getLanguageInfoFromKey(\n  languageKey: string,\n  languageDictionary: { [k: string]: LanguageInfo } = Language,\n): LanguageInfo | null {\n  if (languageKey in languageDictionary) {\n    return languageDictionary[languageKey];\n  }\n  return null;\n}\n\n/**\n * Get the language info from a provided 2-character iso code.\n * By default, the language dictionary to look into is the one defined in this library, but another one could be provided\n * Returns `null` if not found.\n */\nexport function getLanguageInfoFromCode(\n  languageCode: string,\n  languageDictionary: { [k: string]: LanguageInfo } = Language,\n): LanguageInfo | null {\n  for (const lang of Object.values(languageDictionary)) {\n    if (lang.code === languageCode) {\n      return lang;\n    }\n  }\n  return null;\n}\n\n/**\n * Get the language info from a language flag (e.g. `\"name:en\"`).\n * This is also handy to check is a given language flag is a supported language.\n * By default, the language dictionary to look into is the one defined in this library, but another one could be provided\n * Returns `null` if not found.\n */\nexport function getLanguageInfoFromFlag(\n  languageFlag: string,\n  languageDictionary: { [k: string]: LanguageInfo } = Language,\n): LanguageInfo | null {\n  for (const lang of Object.values(languageDictionary)) {\n    if (lang.flag === languageFlag) {\n      return lang;\n    }\n  }\n  return null;\n}\n\n/**\n * Get the default language of the device, as a LanguageInfo object.\n */\nexport function getAutoLanguage(): LanguageInfo {\n  if (typeof navigator === \"undefined\") {\n    const code = Intl.DateTimeFormat().resolvedOptions().locale.split(\"-\")[0];\n    const langInfo = getLanguageInfoFromCode(code);\n    return langInfo ?? Language.ENGLISH;\n  }\n\n  const canditatelangs = Array.from(\n    new Set(navigator.languages.map((l) => l.split(\"-\")[0])),\n  )\n    .map((code) => getLanguageInfoFromCode(code))\n    .filter((li) => li);\n\n  return canditatelangs[0] ?? Language.ENGLISH;\n}\n\nexport function isLanguageInfo(obj: unknown): obj is LanguageInfo {\n  return (\n    obj !== null &&\n    typeof obj === \"object\" &&\n    \"code\" in obj &&\n    \"flag\" in obj &&\n    \"name\" in obj &&\n    \"latin\" in obj &&\n    \"isMode\" in obj &&\n    \"geocoding\" in obj &&\n    (typeof obj.code === \"string\" || obj.code === null) &&\n    typeof obj.flag === \"string\" &&\n    typeof obj.name === \"string\" &&\n    typeof obj.latin === \"boolean\" &&\n    typeof obj.isMode === \"boolean\" &&\n    typeof obj.geocoding === \"boolean\"\n  );\n}\n\n/**\n * By default, the language dictionary to look into is the one defined in this library, but another one could be provided\n */\nexport function toLanguageInfo(\n  lang: LanguageInfo | string,\n  languageDictionary: { [k: string]: LanguageInfo } = Language,\n): LanguageInfo | null {\n  // Could be directly an object of type LanguageInfo\n  if (isLanguageInfo(lang)) {\n    // Yet we want to make sure the provided languageInfo obj is not corrupted or incomplete,\n    // so we ask for the equivalent original:\n    return getLanguageInfoFromFlag(lang.flag, languageDictionary); // possibly returns null, which is fine.\n  }\n\n  // If it's not even a string, then it does not represent a language\n  if (typeof lang !== \"string\") {\n    return null;\n  }\n\n  return (\n    getLanguageInfoFromKey(lang, languageDictionary) ||\n    getLanguageInfoFromCode(lang, languageDictionary) ||\n    getLanguageInfoFromFlag(lang, languageDictionary) ||\n    null\n  );\n}\n\n/**\n * Tells if two languages are the same, even though possibly provided under different forms.\n * Note: this is not comparing object references, but values.\n */\nexport function areSameLanguages(\n  langA: string | LanguageInfo,\n  langB: string | LanguageInfo,\n  languageDictionary: { [k: string]: LanguageInfo } = Language,\n): boolean {\n  const langAObj = toLanguageInfo(langA, languageDictionary);\n  const langBObj = toLanguageInfo(langB, languageDictionary);\n\n  return (\n    langAObj !== null && langBObj !== null && langAObj.flag === langBObj.flag\n  );\n}\n","import { config } from \"./config\";\n\nexport async function callFetch(resource, options = {}) {\n  if (config.fetch === null) {\n    throw new Error(\n      \"The fetch function was not found. If on NodeJS < 18 please specify the fetch function with config.fetch\",\n    );\n  }\n\n  //  Control if URL contains the api key\n  if (new URL(resource).searchParams.get(\"key\").trim() === \"\") {\n    throw new Error(\n      \"The MapTiler Cloud API key is missing. Set it in `config.apiKey` or get one for free at https://maptiler.com\",\n    );\n  }\n\n  return config.fetch(resource, options);\n}\n","/**\n * Some default settings for the SDK\n */\nconst defaults = {\n  maptilerApiURL: \"https://api.maptiler.com/\",\n  mapStyle: \"streets-v2\",\n};\n\nObject.freeze(defaults);\n\nexport { defaults };\n","/**\n * A ServiceError is an Error that includes the HTTP response details\n */\nexport class ServiceError extends Error {\n  constructor(\n    public res: Response,\n    customMessage = \"\",\n  ) {\n    super(\n      `Call to enpoint ${res.url} failed with the status code ${res.status}. ${customMessage}`,\n    );\n  }\n}\n","import type { BBox, Feature, Geometry, Position } from \"geojson\";\nimport { callFetch } from \"../callFetch\";\nimport { config } from \"../config\";\nimport { defaults } from \"../defaults\";\n\nimport {\n  type LanguageInfo,\n  getAutoLanguage,\n  getLanguageInfoFromCode,\n  isLanguageInfo,\n  Language,\n  getLanguageInfoFromFlag,\n} from \"../language\";\n\nimport { ServiceError } from \"./ServiceError\";\n\nconst customMessages = {\n  400: \"Query too long / Invalid parameters\",\n  403: \"Key is missing, invalid or restricted\",\n};\n\nexport type LanguageGeocodingOptions = {\n  /**\n   * Prefer results in specific language. It’s possible to specify multiple values.\n   */\n  language?: string | Array<string> | LanguageInfo | Array<LanguageInfo>;\n};\n\nexport type BaseGeocodingOptions = LanguageGeocodingOptions & {\n  /**\n   * Custom MapTiler Cloud API key to use instead of the one in global `config`.\n   */\n  apiKey?: string;\n\n  /**\n   * Callback function to adjust the target URL search params before fetching.\n   * @param searchParams [URLSearchParams](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) object that can be modified in place.\n   */\n  adjustSearchParams?: (searchParams: URLSearchParams) => void;\n};\n\nexport type GeocodingPlaceType =\n  | \"continental_marine\"\n  | \"country\"\n  | \"major_landform\"\n  | \"region\"\n  | \"subregion\"\n  | \"county\"\n  | \"joint_municipality\"\n  | \"joint_submunicipality\"\n  | \"municipality\"\n  | \"municipal_district\"\n  | \"locality\"\n  | \"neighbourhood\"\n  | \"place\"\n  | \"postal_code\"\n  | \"address\"\n  | \"road\"\n  | \"poi\";\n\nexport type CommonForwardAndReverseGeocodingOptions = BaseGeocodingOptions & {\n  /**\n   * Maximum number of results to show. Must be between 1 and 10.\n   * For reverse geocoding with multiple `types` this must not be set or must be set to 1.\n   * Default is 5 for forward and 1 for reverse geocoding.\n   */\n  limit?: number;\n\n  /**\n   * Features of specified types to query.\n   * If not specified, default configuration of API is used (see https://docs.maptiler.com/cloud/api/geocoding/#PlaceTypeValues for the list).\n   * In case of reverse geocoding if just a single type is specified, then multiple nearby features of the single type can be returned,\n   * otherwise single feature for every specified type (or default types) can be returned.\n   */\n  types?: GeocodingPlaceType[];\n\n  /**\n   * Set to `true` to use all available feature types except those mentioned in `types`. Default value is `false` if `types` is specified.\n   */\n  excludeTypes?: boolean;\n};\n\nexport type GeocodingOptions = CommonForwardAndReverseGeocodingOptions & {\n  /**\n   * Only search for results in the specified area.\n   */\n  bbox?: BBox;\n\n  /**\n   * Prefer results close to a specific location.\n   */\n  proximity?: Position | \"ip\";\n\n  /**\n   * Limit search to specific country/countries specified as list of Alpha-2 ISO 3166-1 codes.\n   */\n  country?: string[];\n\n  /**\n   * Set to `false` to disable fuzzy (typo-tolerant) search. Default is `true`.\n   */\n  fuzzyMatch?: boolean;\n\n  /**\n   * Set to `true` to use autocomplete, `false` to disable it. Default is `true`.\n   */\n  autocomplete?: boolean;\n};\n\nexport type ReverseGeocodingOptions = CommonForwardAndReverseGeocodingOptions;\n\nexport type ByIdGeocodingOptions = BaseGeocodingOptions;\n\nexport type Coordinates = Position;\n\ntype FeatureProperties = {\n  /**\n   * External reference of the feature used for debugging purposes\n   */\n  ref: string;\n\n  /**\n   * ISO 3166-1 alpha-2 country code of the feature\n   */\n  country_code: string;\n\n  /**\n   * (experimental) Kind of the feature\n   */\n  kind?:\n    | \"road\"\n    | \"road_relation\"\n    | \"admin_area\"\n    | \"place\"\n    | \"street\"\n    | \"virtual_street\";\n\n  /**\n   * (experimental) Value of place=* tag from OpenStreetMap feature if kind=place\n   */\n  \"osm:place_type\"?: string;\n\n  /**\n   * (experimental) Feature tags from OpenStreetMap. Only available for `poi` type.\n   */\n  \"osm:tags\"?: Record<string, string>;\n\n  /**\n   * Array of POI categories. Only available for `poi` type.\n   */\n  categories?: string[];\n\n  /**\n   * Wikidata identifier.\n   */\n  wikidata?: string;\n};\n\ntype FeatureBase = {\n  /**\n   * Unique feature ID\n   */\n  id: string;\n\n  /**\n   * Localized feature name\n   */\n  text: string;\n\n  /**\n   * Query's primary ISO 639-1 language code\n   */\n  language?: string;\n\n  /**\n   * A string analogous to the `text` field that matches the query in the requested language.\n   * This field is only returned when multiple languages are requested using the `language` parameter, and will be present for each requested language.\n   */\n  [text: `text_${string}`]: string;\n\n  /**\n   * A ISO 639-1 query's fallback language code.\n   * This field is only returned when multiple languages are requested using the `language` parameter, and will be present for each requested language.\n   */\n  [language: `language_${string}`]: string;\n};\n\nexport type FeatureHierarchy = FeatureProperties & FeatureBase;\n\nexport type GeocodingFeature = Feature<Geometry, FeatureProperties> &\n  FeatureBase & {\n    /**\n     * Bounding box of the original feature as [w, s, e, n] array\n     */\n    bbox: BBox;\n\n    /**\n     * A [lon, lat] array of the original feature centeroid\n     */\n    center: Coordinates;\n\n    /**\n     * Formatted (including the hierarchy) and localized feature full name\n     */\n    place_name: string;\n\n    /**\n     * A string analogous to the `place_name` field that matches the query in the requested language.\n     * This field is only returned when multiple languages are requested using the `language` parameter, and will be present for each requested language.\n     */\n    [key: `place_name_${string}`]: string;\n\n    /**\n     * An array of feature types describing the feature.\n     * Currently each feature has only single type but this may change in the future.\n     */\n    place_type: GeocodingPlaceType[];\n\n    /**\n     * Localized type of the place name, matches `place_type` property\n     */\n    place_type_name: string[];\n\n    /**\n     * Feature hierarchy\n     */\n    context?: Array<FeatureHierarchy>;\n\n    /**\n     * Address number, if applicable\n     */\n    address?: string;\n\n    /**\n     * Indicates how well the returned feature matches the user's query on a scale from 0 to 1.\n     * 0 means the result does not match the query text at all, while 1 means the result fully matches the query text.\n     * You can use the relevance property to remove results that don't fully match the query.\n     */\n    relevance: number;\n\n    /**\n     * A string analogous to the `text` field that more closely matches the query than results in the specified language.\n     * For example, querying _Praha, Czechia_ with language set to English (`en`) might return a feature with the `text` _Prague_ and the `matching_text` _Praha_.\n     */\n    matching_text?: string;\n\n    /**\n     * A string analogous to the `place_name` field that more closely matches the query than results in the specified language.\n     * For example, querying _Praha, Czechia_ with language set to English (`en`) might return a feature with the `place_name` _Prague, Czechia_ and a `matching_place_name` of _Praha, Czechia_.\n     */\n    matching_place_name?: string;\n  };\n\nexport type GeocodingSearchResult = {\n  type: \"FeatureCollection\";\n\n  /**\n   * Array of features found\n   */\n  features: Array<GeocodingFeature>;\n\n  /**\n   * Tokenized search query\n   */\n  query: Array<string>;\n\n  /**\n   * Attribution of the result\n   */\n  attribution: string;\n};\n\nfunction addBaseGeocodingOptions(\n  searchParams: URLSearchParams,\n  options: BaseGeocodingOptions,\n) {\n  const { adjustSearchParams, apiKey } = options;\n\n  if (typeof adjustSearchParams === \"function\") {\n    adjustSearchParams(searchParams);\n  }\n\n  searchParams.set(\"key\", apiKey ?? config.apiKey);\n}\n\nfunction addLanguageGeocodingOptions(\n  searchParams: URLSearchParams,\n  options: LanguageGeocodingOptions,\n) {\n  const { language } = options;\n\n  if (language === undefined) {\n    return;\n  }\n\n  // Making it an array of language codes\n  const languageCodes = (Array.isArray(language) ? language : [language])\n    .map((elem) => toValidGeocodingLanguageCode(elem))\n    .filter((elem) => elem); // removing the nulls\n\n  const languages = Array.from(new Set(languageCodes)).join(\",\");\n\n  searchParams.set(\"language\", languages);\n}\n\nfunction toValidGeocodingLanguageCode(\n  lang: string | LanguageInfo,\n): string | null {\n  const langInfo =\n    lang === Language.AUTO.flag\n      ? getAutoLanguage()\n      : typeof lang === \"string\"\n      ? getLanguageInfoFromCode(lang)\n      : isLanguageInfo(lang)\n      ? lang.flag === Language.AUTO.flag\n        ? getAutoLanguage()\n        : getLanguageInfoFromFlag(lang.flag)\n      : null;\n\n  return langInfo?.geocoding ? langInfo.code : null;\n}\n\nfunction addCommonForwardAndReverseGeocodingOptions(\n  searchParams: URLSearchParams,\n  options: CommonForwardAndReverseGeocodingOptions,\n) {\n  const { limit, types, excludeTypes } = options;\n\n  if (limit !== undefined) {\n    searchParams.set(\"limit\", String(limit));\n  }\n\n  if (types !== undefined) {\n    searchParams.set(\"types\", types.join(\",\"));\n  }\n\n  if (excludeTypes !== undefined) {\n    searchParams.set(\"excludeTypes\", String(excludeTypes));\n  }\n}\n\nfunction addForwardGeocodingOptions(\n  searchParams: URLSearchParams,\n  options: GeocodingOptions,\n) {\n  const { bbox, proximity, country, fuzzyMatch, autocomplete } = options;\n\n  if (bbox !== undefined) {\n    searchParams.set(\"bbox\", bbox.join(\",\"));\n  }\n\n  if (proximity !== undefined) {\n    searchParams.set(\n      \"proximity\",\n      proximity === \"ip\" ? proximity : proximity.join(\",\"),\n    );\n  }\n\n  if (country !== undefined) {\n    searchParams.set(\"country\", country.join(\",\"));\n  }\n\n  if (fuzzyMatch !== undefined) {\n    searchParams.set(\"fuzzyMatch\", fuzzyMatch ? \"true\" : \"false\");\n  }\n\n  if (autocomplete !== undefined) {\n    searchParams.set(\"autocomplete\", autocomplete ? \"true\" : \"false\");\n  }\n}\n\n/**\n * Performs a forward geocoding query to MapTiler API.\n * Providing a human readable place name (of a city, country, street, etc.), the function returns\n * a list of candidate locations including longitude and latitude.\n *\n * Learn more on the MapTiler API reference page: https://docs.maptiler.com/cloud/api/geocoding/#search-by-name-forward\n *\n * @param query\n * @param options\n * @returns\n */\nasync function forward(\n  query: string,\n  options: GeocodingOptions = {},\n): Promise<GeocodingSearchResult> {\n  if (typeof query !== \"string\" || query.trim().length === 0) {\n    throw new Error(\"The query must be a non-empty string\");\n  }\n\n  const endpoint = new URL(\n    `geocoding/${encodeURIComponent(query)}.json`,\n    defaults.maptilerApiURL,\n  );\n\n  addBaseGeocodingOptions(endpoint.searchParams, options);\n  addLanguageGeocodingOptions(endpoint.searchParams, options);\n  addCommonForwardAndReverseGeocodingOptions(endpoint.searchParams, options);\n  addForwardGeocodingOptions(endpoint.searchParams, options);\n\n  const res = await callFetch(endpoint.toString());\n\n  if (!res.ok) {\n    throw new ServiceError(res, customMessages[res.status] ?? \"\");\n  }\n\n  return await res.json();\n}\n\n/**\n * Perform a reverse geocoding query to MapTiler API.\n * Providing a longitude and latitude, this function returns a set of human readable information about this place (country, city, street, etc.)\n *\n * Learn more on the MapTiler API reference page: https://docs.maptiler.com/cloud/api/geocoding/#search-by-coordinates-reverse\n *\n * @param position\n * @param options\n * @returns\n */\nasync function reverse(\n  position: Position,\n  options: ReverseGeocodingOptions = {},\n): Promise<GeocodingSearchResult> {\n  if (!Array.isArray(position) || position.length < 2) {\n    throw new Error(\"The position must be an array of form [lng, lat].\");\n  }\n\n  const endpoint = new URL(\n    `geocoding/${position[0]},${position[1]}.json`,\n    defaults.maptilerApiURL,\n  );\n\n  addBaseGeocodingOptions(endpoint.searchParams, options);\n  addLanguageGeocodingOptions(endpoint.searchParams, options);\n  addCommonForwardAndReverseGeocodingOptions(endpoint.searchParams, options);\n\n  const res = await callFetch(endpoint.toString());\n\n  if (!res.ok) {\n    throw new ServiceError(res, customMessages[res.status] ?? \"\");\n  }\n\n  return await res.json();\n}\n\n/**\n * Perform a geocoding query to MapTiler API to obtain fature by its ID.\n * Providing a feature ID, this function returns a feature which includes its full geometry.\n * Note that the feature ID is not stable and it changes when the database is re-indexed.\n *\n * Learn more on the MapTiler API reference page: https://docs.maptiler.com/cloud/api/geocoding/#search-by-feature-id\n *\n * @param id\n * @param options\n * @returns\n */\nasync function byId(\n  id: string,\n  options: ByIdGeocodingOptions = {},\n): Promise<GeocodingSearchResult> {\n  const endpoint = new URL(`geocoding/${id}.json`, defaults.maptilerApiURL);\n\n  addBaseGeocodingOptions(endpoint.searchParams, options);\n  addLanguageGeocodingOptions(endpoint.searchParams, options);\n\n  const res = await callFetch(endpoint.toString());\n\n  if (!res.ok) {\n    throw new ServiceError(res, customMessages[res.status] ?? \"\");\n  }\n\n  return await res.json();\n}\n\n/**\n * Perform a batch geocoding query to MapTiler API.\n * Provide multiple queries in the array. Each query can be forward, reverse or by feature ID.\n *\n * Learn more on the MapTiler API reference page: https://docs.maptiler.com/cloud/api/geocoding/#batch-geocoding\n *\n * @param queries\n * @param options\n * @returns\n */\nasync function batch(\n  queries: string[],\n  options: GeocodingOptions = {},\n): Promise<GeocodingSearchResult[]> {\n  if (!queries.length) {\n    return [];\n  }\n\n  const joinedQuery = queries\n    .map((query) => encodeURIComponent(query))\n    .join(\";\");\n\n  const endpoint = new URL(\n    `geocoding/${joinedQuery}.json`,\n    defaults.maptilerApiURL,\n  );\n\n  addBaseGeocodingOptions(endpoint.searchParams, options);\n  addLanguageGeocodingOptions(endpoint.searchParams, options);\n  addCommonForwardAndReverseGeocodingOptions(endpoint.searchParams, options);\n  addForwardGeocodingOptions(endpoint.searchParams, options);\n\n  const res = await callFetch(endpoint.toString());\n\n  if (!res.ok) {\n    throw new ServiceError(res, customMessages[res.status] ?? \"\");\n  }\n\n  const obj = await res.json();\n\n  return queries.length === 1 ? [obj] : obj;\n}\n\n/**\n * The **geocoding** namespace contains asynchronous functions to call the [MapTiler Geocoding API](https://docs.maptiler.com/cloud/api/geocoding/).\n * The **Geocoding API** provides ways to get geographic coordinates from a human-readable search query of a place (forward geocoding)\n * and to get the location details (country, city, street, etc.) from a geographic coordinate (reverse geocoding);\n */\nconst geocoding = {\n  forward,\n  reverse,\n  byId,\n  batch,\n};\n\nexport { geocoding };\n","import { BBox } from \"geojson\";\nimport { callFetch } from \"../callFetch\";\nimport { config } from \"../config\";\nimport { defaults } from \"../defaults\";\nimport { ServiceError } from \"./ServiceError\";\n\nconst customMessages = {\n  403: \"Key is missing, invalid or restricted\",\n};\n\n/**\n * Options that can be provided to get user data.\n */\nexport type GeolocationInfoOptions = {\n  /**\n   * Custom MapTiler Cloud API key to use instead of the one in global `config`\n   */\n  apiKey?: string;\n\n  /**\n   * Include elevation (in meters) in the results.\n   * Default: `false`\n   */\n  elevation?: boolean;\n};\n\nexport type GeolocationResult = {\n  /**\n   * Name of the country\n   * Example: Switzerland\n   */\n  country?: string;\n\n  /**\n   * Two-letter code of the country ISO 3166-1 alpha-2 codes\n   * Example: CH\n   */\n  country_code?: string;\n\n  /**\n   * Bounds of the country in WGS84 degrees [west, south, east, north].\n   * Example: [5.95538,45.818852,10.490936,47.809357]\n   */\n  country_bounds?: BBox;\n\n  /**\n   * Official country languages in ISO 639-1 format. ISO 639-1 codes\n   * Example: [\"de\",\"fr\",\"it\"]\n   */\n  country_languages?: Array<string>;\n\n  /**\n   * Name of the continent\n   * Example: Europe\n   */\n  continent?: string;\n\n  /**\n   * Two-letter code of the continent\n   * Example: EU\n   */\n  continent_code?: string;\n\n  /**\n   * Indicated whether the country is part of the European Union.\n   */\n  eu?: boolean;\n\n  /**\n   * Name of the city\n   * Example: Zurich\n   */\n  city?: string;\n\n  /**\n   * Latitude of the location\n   * Example: 47.36667\n   */\n  latitude?: number;\n\n  /**\n   * Longitude of the location\n   * Example: 8.55\n   */\n  longitude?: number;\n\n  /**\n   * Postal code\n   * Example: 8000\n   */\n  postal?: string;\n\n  /**\n   * If known, the ISO 3166-2 name for the first level region. ISO 3166-2 codes\n   * Example: Zurich\n   */\n  region?: string;\n\n  /**\n   * If known, the ISO 3166-2 code for the first level region. ISO 3166-2 codes\n   * Example: ZH\n   */\n  region_code?: string;\n\n  /**\n   * Name of the timezone\n   * Example: Europe/Zurich\n   */\n  timezone?: string;\n\n  /**\n   * Elevation of the location in meters\n   * Example: 433\n   */\n  elevation?: number;\n};\n\n/**\n * Looks up geolocation details from IP address using MapTiler API.\n * Learn more on the MapTiler API reference page: https://docs.maptiler.com/cloud/api/geolocation/#ip-geolocation\n * @returns\n */\nasync function info(\n  options: GeolocationInfoOptions = {},\n): Promise<GeolocationResult> {\n  const endpoint = new URL(`geolocation/ip.json`, defaults.maptilerApiURL);\n  endpoint.searchParams.set(\"key\", options.apiKey ?? config.apiKey);\n\n  if (\"elevation\" in options) {\n    endpoint.searchParams.set(\n      \"elevation\",\n      options.elevation ? \"true\" : \"false\",\n    );\n  }\n\n  const urlWithParams = endpoint.toString();\n\n  const res = await callFetch(urlWithParams);\n\n  if (!res.ok) {\n    throw new ServiceError(\n      res,\n      res.status in customMessages ? customMessages[res.status] : \"\",\n    );\n  }\n\n  const obj = await res.json();\n  return obj as GeolocationResult;\n}\n\n/**\n * The **geolocation** namespace contains an asynchronous function to call the [MapTiler Geolocation API](https://docs.maptiler.com/cloud/api/geolocation/).\n * The **Geolocation API** provides a way to retrieve the IP address as well as geographic informations of a machine performing the query (most likely: a user)\n */\nconst geolocation = {\n  info,\n};\n\nexport { geolocation };\n","import { BBox, Position } from \"geojson\";\nimport { callFetch } from \"../callFetch\";\nimport { config } from \"../config\";\nimport { defaults } from \"../defaults\";\nimport { ServiceError } from \"./ServiceError\";\n\nconst customMessages = {\n  403: \"Key is missing, invalid or restricted\",\n};\n\nexport type CoordinatesSearchOptions = {\n  /**\n   * Custom MapTiler Cloud API key to use instead of the one in global `config`\n   */\n  apiKey?: string;\n\n  /**\n   * Maximum number of results returned (default: 10)\n   */\n  limit?: number;\n\n  /**\n   *  Show detailed transformations for each CRS (default: false)\n   */\n  transformations?: boolean;\n\n  /**\n   * Show exports in WKT and Proj4 notations (default: false)\n   */\n  exports?: boolean;\n};\n\nexport type CoordinateId = {\n  authority: string;\n  code: BigInteger;\n};\n\nexport type CoordinateExport = {\n  proj4: string;\n  wkt: string;\n};\n\nexport type CoordinateGrid = {\n  path: string;\n};\n\nexport type CoordinateTransformation = {\n  id: CoordinateId;\n  name: string;\n  reversible: boolean;\n  usable: boolean;\n  deprecated: boolean;\n  grids: Array<CoordinateGrid>;\n  accuracy?: number;\n  area?: string;\n  bbox?: BBox;\n  target_crs?: CoordinateId;\n  unit?: string;\n};\n\nexport type CoordinateSearch = {\n  id: CoordinateId;\n\n  name: string;\n\n  kind: string;\n\n  deprecated: boolean;\n\n  transformations?: Array<CoordinateTransformation | number>;\n\n  accuracy?: number;\n\n  unit?: string;\n\n  area?: string;\n\n  /**\n   * Bounding box of the resource in [min_lon, min_lat, max_lon, max_lat] order.\n   */\n  bbox?: BBox;\n\n  /**\n   * Most suitable transformation for this CRS.\n   */\n  default_transformation?: DefaultTransformation;\n\n  exports: CoordinateExport;\n};\n\nexport type DefaultTransformation = {\n  authority: string;\n  code: number;\n};\n\nexport type CoordinateSearchResult = {\n  /**\n   * The coordinate search results\n   */\n  results: Array<CoordinateSearch>;\n\n  /**\n   * The number of results\n   */\n  total: number;\n};\n\n/**\n * Search information about coordinate systems using MapTiler API.\n * Learn more on the MapTiler API reference page: https://docs.maptiler.com/cloud/api/coordinates/#search-coordinate-systems\n * @param query Can be any kind of CRS by name or code\n * @param options\n * @returns\n */\nasync function search(\n  query: string,\n  options: CoordinatesSearchOptions = {},\n): Promise<CoordinateSearchResult> {\n  if (typeof query !== \"string\" || query.trim().length === 0) {\n    throw new Error(\"The query must be a non-empty string\");\n  }\n\n  const endpoint = new URL(\n    `coordinates/search/${query}.json`,\n    defaults.maptilerApiURL,\n  );\n  endpoint.searchParams.set(\"key\", options.apiKey ?? config.apiKey);\n\n  if (\"limit\" in options) {\n    endpoint.searchParams.set(\"limit\", options.limit.toString());\n  }\n\n  if (\"transformations\" in options) {\n    endpoint.searchParams.set(\n      \"transformations\",\n      options.transformations.toString(),\n    );\n  }\n\n  if (\"exports\" in options) {\n    endpoint.searchParams.set(\"exports\", options.exports.toString());\n  }\n\n  const urlWithParams = endpoint.toString();\n  const res = await callFetch(urlWithParams);\n\n  if (!res.ok) {\n    throw new ServiceError(\n      res,\n      res.status in customMessages ? customMessages[res.status] : \"\",\n    );\n  }\n\n  const obj = await res.json();\n  return obj as CoordinateSearchResult;\n}\n\nexport type XYZ = {\n  x?: number;\n  y?: number;\n  z?: number;\n};\n\nexport type CoordinateTransformResult = {\n  results: Array<XYZ>;\n\n  /**\n   * Transformations are selected using given ops parameter.\n   * If no parameter is given, auto strategy is used.\n   * If given, it may try to use a listed transformation,\n   * then fallback to towgs84 patching, and finally boundcrs.\n   */\n  transformer_selection_strategy: string;\n};\n\n/**\n * Options that can be provided when transforming a coordinate from one CRS to another.\n */\nexport type CoordinatesTransformOptions = {\n  /**\n   * Custom MapTiler Cloud API key to use instead of the one in global `config`\n   */\n  apiKey?: string;\n\n  /**\n   * Source coordinate reference system (default: 4326)\n   */\n  sourceCrs?: number;\n\n  /**\n   * Target coordinate reference system (default: 4326)\n   */\n  targetCrs?: number;\n\n  /**\n   * List of codes of operations\n   */\n  operations?: number | Array<number>;\n};\n\n/**\n * Transforms coordinates from a source reference system to a target reference system using MapTiler API.\n * Learn more on the MapTiler API reference page: https://docs.maptiler.com/cloud/api/coordinates/#transform-coordinates\n * @param positions\n * @param options\n * @returns\n */\nasync function transform(\n  positions: Position | Array<Position>,\n  options: CoordinatesTransformOptions = {},\n): Promise<CoordinateTransformResult> {\n  const coordinatesStr = (Array.isArray(positions[0]) ? positions : [positions])\n    .map((coord) => `${coord[0]},${coord[1]}`)\n    .join(\";\");\n\n  const endpoint = new URL(\n    `coordinates/transform/${coordinatesStr}.json`,\n    defaults.maptilerApiURL,\n  );\n  endpoint.searchParams.set(\"key\", options.apiKey ?? config.apiKey);\n\n  if (\"sourceCrs\" in options) {\n    endpoint.searchParams.set(\"s_srs\", options.sourceCrs.toString());\n  }\n\n  if (\"targetCrs\" in options) {\n    endpoint.searchParams.set(\"t_srs\", options.targetCrs.toString());\n  }\n\n  if (\"operations\" in options) {\n    endpoint.searchParams.set(\n      \"ops\",\n      (Array.isArray(options.operations)\n        ? options.operations\n        : [options.operations]\n      ).join(\"|\"),\n    );\n  }\n\n  const urlWithParams = endpoint.toString();\n  const res = await callFetch(urlWithParams);\n\n  if (!res.ok) {\n    throw new ServiceError(\n      res,\n      res.status in customMessages ? customMessages[res.status] : \"\",\n    );\n  }\n\n  const obj = await res.json();\n  return obj as CoordinateTransformResult;\n}\n\n/**\n * The **coordinate** namespace contains asynchronous functions to call the [MapTiler Coordinate API](https://docs.maptiler.com/cloud/api/coordinates/).\n * The goal of the **Coordinate API* is query information about spatial coordinate reference system (CRS) as well as to transform coordinates from one CRS to another.\n */\nconst coordinates = {\n  search,\n  transform,\n};\n\nexport { coordinates };\n","import { FeatureCollection } from \"geojson\";\nimport { callFetch } from \"../callFetch\";\nimport { config } from \"../config\";\nimport { defaults } from \"../defaults\";\nimport { ServiceError } from \"./ServiceError\";\n\nconst customMessages = {\n  403: \"Key is missing, invalid or restricted\",\n};\n\n/**\n * Options that can be provided to get user data.\n */\nexport type GetDataOptions = {\n  /**\n   * Custom MapTiler Cloud API key to use instead of the one in global `config`\n   */\n  apiKey?: string;\n};\n\n/**\n * Get user data and returns it as GeoJSON using the MapTiler API.\n * Learn more on the MapTiler API reference page: https://docs.maptiler.com/cloud/api/data/#geojson\n * @param dataId\n * @returns\n */\nasync function get(\n  dataId: string,\n  options: GetDataOptions = {},\n): Promise<FeatureCollection> {\n  if (typeof dataId !== \"string\" || dataId.trim().length === 0) {\n    throw new Error(\"The data ID must be a non-empty string\");\n  }\n\n  const endpoint = new URL(\n    `data/${encodeURIComponent(dataId)}/features.json`,\n    defaults.maptilerApiURL,\n  );\n  endpoint.searchParams.set(\"key\", options.apiKey ?? config.apiKey);\n  const urlWithParams = endpoint.toString();\n\n  const res = await callFetch(urlWithParams);\n\n  if (!res.ok) {\n    throw new ServiceError(\n      res,\n      res.status in customMessages ? customMessages[res.status] : \"\",\n    );\n  }\n\n  const obj = await res.json();\n  return obj;\n}\n\n/**\n * The **data** namespace contains an asynchronous function to call the [MapTiler Data API](https://docs.maptiler.com/cloud/api/data/).\n * The **Data API** provides a way to retrieve user data in GeoJSON format.\n */\nconst data = {\n  get,\n};\n\nexport { data };\n","/**\n * Expand the map style provided as argument of the Map constructor\n * @param style\n * @returns\n */\nexport function expandMapStyle(style): string {\n  // testing if the style provided is of form \"maptiler://some-style\"\n  const maptilerDomainRegex = /^maptiler:\\/\\/(.*)/;\n  let match;\n  const trimmed = style.trim();\n  let expandedStyle;\n\n  // The style was possibly already given as expanded URL\n  if (trimmed.startsWith(\"http://\") || trimmed.startsWith(\"https://\")) {\n    expandedStyle = trimmed;\n  } else if ((match = maptilerDomainRegex.exec(trimmed)) !== null) {\n    expandedStyle = `https://api.maptiler.com/maps/${match[1]}/style.json`;\n  } else {\n    // The style could also possibly just be the name of the style without any URI style\n    expandedStyle = `https://api.maptiler.com/maps/${trimmed}/style.json`;\n  }\n\n  return expandedStyle;\n}\n\n/**\n * Type for object containing style details\n */\nexport type MapStylePreset = {\n  readonly referenceStyleID: string;\n  readonly name: string;\n  readonly description: string;\n  readonly variants: ReadonlyArray<{\n    readonly id: string;\n    readonly name: string;\n    readonly variantType: string;\n    readonly description: string;\n    readonly imageURL: string;\n    readonly deprecated?: boolean;\n    readonly deprecationMessage?: string;\n  }>;\n};\n\n/**\n * An instance of MapStyleVariant contains information about a style to use that belong to a reference style\n */\nexport class MapStyleVariant {\n  constructor(\n    /**\n     * Human-friendly name\n     */\n    private name: string,\n\n    /**\n     * Variant name the variant is addressed to from its reference style: `MapStyle.REFERNCE_STYLE_NAME.VARIANT_TYPE`\n     */\n    private variantType: string,\n\n    /**\n     * MapTiler Cloud id\n     */\n    private id: string,\n\n    /**\n     * Reference map style, used to retrieve sibling variants\n     */\n    private referenceStyle: ReferenceMapStyle,\n\n    /**\n     * Human-friendly description\n     */\n    private description: string,\n\n    /**\n     * URL to an image describing the style variant\n     */\n    private imageURL: string,\n\n    /**\n     * Whether this variant is deprecated or not\n     */\n    public deprecated: boolean = false,\n\n    /**\n     * Message to display when the variant is deprecated\n     */\n    public deprecationMessage?: string,\n  ) {}\n\n  /**\n   * Get the human-friendly name\n   * @returns\n   */\n  getName(): string {\n    return this.name;\n  }\n\n  getFullName(): string {\n    return `${this.referenceStyle.getName()} ${this.name}`;\n  }\n\n  /**\n   * Get the variant type (eg. \"DEFAULT\", \"DARK\", \"PASTEL\", etc.)\n   * @returns\n   */\n  getType(): string {\n    return this.variantType;\n  }\n\n  /**\n   * Get the MapTiler Cloud id\n   * @returns\n   */\n  getId(): string {\n    return this.id;\n  }\n\n  /**\n   * Get the human-friendly description\n   */\n  getDescription(): string {\n    return this.description;\n  }\n\n  /**\n   * Get the reference style this variant belongs to\n   * @returns\n   */\n  getReferenceStyle(): ReferenceMapStyle {\n    return this.referenceStyle;\n  }\n\n  /**\n   * Check if a variant of a given type exists for _this_ variants\n   * (eg. if this is a \"DARK\", then we can check if there is a \"LIGHT\" variant of it)\n   * @param variantType\n   * @returns\n   */\n  hasVariant(variantType: string): boolean {\n    return this.referenceStyle.hasVariant(variantType);\n  }\n\n  /**\n   * Retrieve the variant of a given type. If not found, will return the \"DEFAULT\" variant.\n   * (eg. _this_ \"DARK\" variant does not have any \"PASTEL\" variant, then the \"DEFAULT\" is returned)\n   * @param variantType\n   * @returns\n   */\n  getVariant(variantType: string): MapStyleVariant {\n    const variant = this.referenceStyle.getVariant(variantType);\n    this.warnIfDeprecated(variant);\n    return variant;\n  }\n\n  /**\n   * Get all the variants for _this_ variants, except _this_ current one\n   * @returns\n   */\n  getVariants(): Array<MapStyleVariant> {\n    return this.referenceStyle\n      .getVariants()\n      .filter((v) => v !== this)\n      .map((v) => {\n        this.warnIfDeprecated(v);\n        return v;\n      });\n  }\n\n  /**\n   * Get the image URL that represent _this_ variant\n   * @returns\n   */\n  getImageURL(): string {\n    return this.imageURL;\n  }\n\n  /**\n   * Get the style as usable by MapLibre, a string (URL) or a plain style description (StyleSpecification)\n   * @returns\n   */\n  getExpandedStyleURL(): string {\n    return expandMapStyle(this.getId());\n  }\n\n  warnIfDeprecated(variant: MapStyleVariant = this): MapStyleVariant {\n    if (!variant.deprecated) return variant;\n\n    if (variant.deprecationMessage) {\n      console.warn(variant.deprecationMessage);\n    } else {\n      const name = variant.getFullName();\n      console.warn(\n        `Style \"${name}\" is deprecated and will be removed in a future version.`,\n      );\n    }\n\n    return variant;\n  }\n}\n\n/**\n * An instance of reference style contains a list of StyleVariants ordered by relevance\n */\nexport class ReferenceMapStyle {\n  /**\n   * Variants that belong to this reference style, key being the reference type\n   */\n  private variants: { [key: string]: MapStyleVariant } = {};\n\n  /**\n   * Variants that belong to this reference style, ordered by relevance\n   */\n  private orderedVariants: Array<MapStyleVariant> = [];\n\n  constructor(\n    /**\n     * Human-friendly name of this reference style\n     */\n    private name: string,\n\n    /**\n     * ID of this reference style\n     */\n    private id: string,\n  ) {}\n\n  /**\n   * Get the human-friendly name of this reference style\n   * @returns\n   */\n  getName(): string {\n    return this.name;\n  }\n\n  /**\n   * Get the id of _this_ reference style\n   * @returns\n   */\n  getId(): string {\n    return this.id;\n  }\n\n  /**\n   * Add a variant to _this_ reference style\n   * @param v\n   */\n  addVariant(v: MapStyleVariant) {\n    this.variants[v.getType()] = v;\n    this.orderedVariants.push(v);\n  }\n\n  /**\n   * Check if a given variant type exists for this reference style\n   * @param variantType\n   * @returns\n   */\n  hasVariant(variantType: string): boolean {\n    return variantType in this.variants;\n  }\n\n  /**\n   * Get a given variant. If the given type of variant does not exist for this reference style,\n   * then the most relevant default variant is returned instead\n   * @param variantType\n   * @returns\n   */\n  getVariant(variantType: string): MapStyleVariant {\n    return variantType in this.variants\n      ? this.variants[variantType]\n      : this.orderedVariants[0];\n  }\n\n  /**\n   * Get the list of variants for this reference style\n   * @returns\n   */\n  getVariants(): Array<MapStyleVariant> {\n    return Object.values(this.variants);\n  }\n\n  /**\n   * Get the defualt variant for this reference style\n   * @returns\n   */\n  getDefaultVariant(): MapStyleVariant {\n    return this.orderedVariants[0].warnIfDeprecated();\n  }\n}\n\nconst MAP_STYLE_CONFIG = [\n  {\n    referenceStyleID: \"STREETS_V2\",\n    name: \"Streets\",\n    description: \"\",\n    variants: [\n      {\n        id: \"streets-v2\",\n        name: \"Default v2\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"streets-v2\" is deprecated, use \"streets-v4\" instead`,\n      },\n      {\n        id: \"streets-v2-dark\",\n        name: \"Dark v2\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"streets-v2-dark\" is deprecated, use \"streets-v4-dark\" instead`,\n      },\n      {\n        id: \"streets-v2-light\",\n        name: \"Light v2\",\n        variantType: \"LIGHT\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"streets-v2-light\" is deprecated, use \"streets-v4-light\" instead`,\n      },\n      {\n        id: \"streets-v2-night\",\n        name: \"Night v2\",\n        variantType: \"NIGHT\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"streets-v2-night\" is deprecated, use \"streets-v4-night\" instead`,\n      },\n      {\n        id: \"streets-v2-pastel\",\n        name: \"Pastel v2\",\n        variantType: \"PASTEL\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"streets-v2-pastel\" is deprecated, use \"streets-v4-pastel\" instead`,\n      },\n    ],\n  },\n  {\n    referenceStyleID: \"STREETS_V4\",\n    name: \"Streets\",\n    description: \"\",\n    variants: [\n      {\n        id: \"streets-v4\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"streets-v4-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"streets-v4-pastel\",\n        name: \"Pastel\",\n        variantType: \"PASTEL\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n  {\n    referenceStyleID: \"BASE_V4\",\n    name: \"Base\",\n    description: \"\",\n    variants: [\n      {\n        id: \"base-v4\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"base-v4-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"base-v4-light\",\n        name: \"Light\",\n        variantType: \"LIGHT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"base-v4-ai\",\n        name: \"Base AI\",\n        variantType: \"AI\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"OUTDOOR\",\n    name: \"Outdoor\",\n    description: \"\",\n    variants: [\n      {\n        id: \"outdoor-v2\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"outdoor-v2\" is deprecated, use \"outdoor-v4\" instead`,\n      },\n      {\n        id: \"outdoor-v2-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"outdoor-v2-dark\" is deprecated, use \"outdoor-v4-dark\" instead`,\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"WINTER_V2\",\n    name: \"Winter\",\n    description: \"\",\n    variants: [\n      {\n        id: \"winter-v2\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n        // this is not deprecated yet...\n        // deprecated: true,\n        // deprecationMessage: `\"winter-v2\" is deprecated, use \"winter-v4\" instead`,\n      },\n      {\n        id: \"winter-v2-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n        // this is not deprecated yet...\n        // deprecated: true,\n        // deprecationMessage: `\"winter-v2-dark\" is deprecated, use \"winter-v4-dark\" instead`,\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"WINTER_V4\",\n    name: \"Winter\",\n    description: \"\",\n    variants: [\n      {\n        id: \"winter-v4\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"winter-v4-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"SATELLITE_V2\",\n    name: \"Satellite\",\n    description: \"\",\n    variants: [\n      {\n        id: \"satellite\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"satellite\" is deprecated, use \"satellite-v4\" instead`,\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"HYBRID_V2\",\n    name: \"Hybrid\",\n    description: \"\",\n    variants: [\n      {\n        id: \"hybrid\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"HYBRID_V4\",\n    name: \"Hybrid\",\n    description: \"\",\n    variants: [\n      {\n        id: \"hybrid-v4\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        imageURL: \"\",\n      },\n      {\n        id: \"hybrid-v4-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"BASIC_V2\",\n    name: \"Basic\",\n    description: \"\",\n    variants: [\n      {\n        id: \"basic-v2\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"basic-v2\" is deprecated, use \"base-v4\" instead`,\n      },\n      {\n        id: \"basic-v2-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n        deprecationMessage: `\"basic-v2\" is deprecated, use \"base-v4\" instead`,\n      },\n      {\n        id: \"basic-v2-light\",\n        name: \"Light\",\n        variantType: \"LIGHT\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"basic-v2\" is deprecated, use \"base-v4\" instead`,\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"BRIGHT\",\n    name: \"Bright\",\n    description: \"\",\n    variants: [\n      {\n        id: \"bright-v2\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"bright-v2-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"bright-v2-light\",\n        name: \"Light\",\n        variantType: \"LIGHT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"bright-v2-pastel\",\n        name: \"Pastel\",\n        variantType: \"PASTEL\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"OPENSTREETMAP_V2\",\n    name: \"OpenStreetMap\",\n    description: \"\",\n    variants: [\n      {\n        id: \"openstreetmap\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"openstreetmap-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n  {\n    referenceStyleID: \"TOPO_V2\",\n    name: \"Topo\",\n    description: \"\",\n    variants: [\n      {\n        id: \"topo-v2\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"topo-v2\" is deprecated, use \"topo-v4\" instead`,\n      },\n      {\n        id: \"topo-v2-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"topo-v2-dark\" is deprecated, use \"topo-v4-dark\" instead`,\n      },\n      {\n        id: \"topo-v2-shiny\",\n        name: \"Shiny\",\n        variantType: \"SHINY\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n      },\n      {\n        id: \"topo-v2-pastel\",\n        name: \"Pastel\",\n        variantType: \"PASTEL\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"topo-v2-pastel\" is deprecated, use \"topo-v4-pastel\" instead`,\n      },\n      {\n        id: \"topo-v2-topographique\",\n        name: \"Topographique\",\n        variantType: \"TOPOGRAPHIQUE\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"topo-v2-topographique\" is deprecated, use \"topo-v4-topographique\" instead`,\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"VOYAGER_V2\",\n    name: \"Voyager\",\n    description: \"\",\n    variants: [\n      {\n        id: \"voyager-v2\",\n        name: \"Default\",\n        deprecated: true,\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"voyager-v2-darkmatter\",\n        name: \"Darkmatter\",\n        deprecated: true,\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"voyager-v2-positron\",\n        name: \"Positron\",\n        deprecated: true,\n        variantType: \"LIGHT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"voyager-v2-vintage\",\n        name: \"Vintage\",\n        deprecated: true,\n        variantType: \"VINTAGE\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"TONER_V2\",\n    name: \"Toner\",\n    description: \"\",\n    deprecated: true,\n    deprecationMessage: `\"toner-v2\" is deprecated, and will be no longer be a default style in the future`,\n    variants: [\n      {\n        id: \"toner-v2\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"toner-v2\" is deprecated, and may be removed in future versions.`,\n      },\n      {\n        id: \"toner-v2-background\",\n        name: \"Background\",\n        variantType: \"BACKGROUND\",\n        deprecated: true,\n        description: \"\",\n        imageURL: \"\",\n        deprecationMessage: `\"toner-v2-background\" is deprecated, and may be removed in future versions.`,\n      },\n      {\n        id: \"toner-v2-lite\",\n        name: \"Lite\",\n        variantType: \"LITE\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"toner-v2-lite\" is deprecated, and may be removed in future versions.`,\n      },\n      {\n        id: \"toner-v2-lines\",\n        name: \"Lines\",\n        variantType: \"LINES\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"toner-v2-lines\" is deprecated, and may be removed in future versions.`,\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"DATAVIZ_V2\",\n    name: \"Dataviz\",\n    description: \"\",\n    variants: [\n      {\n        id: \"dataviz\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"dataviz\" is deprecated, use \"dataviz-v4\" instead`,\n      },\n      {\n        id: \"dataviz-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"dataviz-dark\" is deprecated, use \"dataviz-v4-dark\" instead`,\n      },\n      {\n        id: \"dataviz-light\",\n        name: \"Light\",\n        variantType: \"LIGHT\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"dataviz-light\" is deprecated, use \"dataviz-v4-light\" instead`,\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"BACKDROP_V2\",\n    name: \"Backdrop\",\n    description: \"\",\n    variants: [\n      {\n        id: \"backdrop\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"backdrop\" is deprecated, use \"backdrop-v4\" instead`,\n      },\n      {\n        id: \"backdrop-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"backdrop-dark\" is deprecated, use \"backdrop-v4-dark\" instead`,\n      },\n      {\n        id: \"backdrop-light\",\n        name: \"Light\",\n        variantType: \"LIGHT\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"backdrop-light\" is deprecated, use \"backdrop-v4-light\" instead`,\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"OCEAN_V2\",\n    name: \"Ocean\",\n    description: \"\",\n    variants: [\n      {\n        id: \"ocean\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"ocean\" is deprecated, use \"ocean-v4\" instead`,\n      },\n    ],\n  },\n  {\n    referenceStyleID: \"AQUARELLE_V2\",\n    name: \"Aquarelle\",\n    description: \"Watercolor map for creative use\",\n    variants: [\n      {\n        id: \"aquarelle\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"aquarelle\" is deprecated, use \"aquarelle-v4\" instead`,\n      },\n      {\n        id: \"aquarelle-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"aquarelle-dark\" is deprecated, use \"aquarelle-v4-dark\" instead`,\n      },\n      {\n        id: \"aquarelle-vivid\",\n        name: \"Vivid\",\n        variantType: \"VIVID\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"aquarelle-vivid\" is deprecated, use \"aquarelle-v4-vivid\" instead`,\n      },\n    ],\n  },\n  {\n    referenceStyleID: \"LANDSCAPE_V2\",\n    name: \"Landscape\",\n    description: \"Terrain map for data overlays and visualisations\",\n    variants: [\n      {\n        id: \"landscape\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"landscape\" is deprecated, use \"landscape-v4\" instead`,\n      },\n      {\n        id: \"landscape-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"landscape-dark\" is deprecated, use \"landscape-v4-dark\" instead`,\n      },\n      {\n        id: \"landscape-vivid\",\n        name: \"Vivid\",\n        variantType: \"VIVID\",\n        description: \"\",\n        imageURL: \"\",\n        deprecated: true,\n        deprecationMessage: `\"landscape-vivid\" is deprecated, use \"landscape-v4-vivid\" instead`,\n      },\n    ],\n  },\n  {\n    referenceStyleID: \"LANDSCAPE_V4\",\n    name: \"Landscape\",\n    description: \"Terrain map for data overlays and visualisations\",\n    variants: [\n      {\n        id: \"landscape-v4\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"landscape-v4-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"landscape-v4-vivid\",\n        name: \"Vivid\",\n        variantType: \"VIVID\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n  {\n    referenceStyleID: \"SATELLITE_V4\",\n    name: \"Satellite v4\",\n    description: \"\",\n    variants: [\n      {\n        id: \"satellite-v4\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"satellite-v4-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n  {\n    referenceStyleID: \"DATAVIZ_V4\",\n    name: \"Dataviz\",\n    description: \"\",\n    variants: [\n      {\n        id: \"dataviz-v4\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"dataviz-v4-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"dataviz-v4-light\",\n        name: \"Light\",\n        variantType: \"LIGHT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n  {\n    referenceStyleID: \"OUTDOOR_V4\",\n    name: \"Outdoor\",\n    description: \"\",\n    variants: [\n      {\n        id: \"outdoor-v4\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"outdoor-v4-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n  {\n    referenceStyleID: \"BACKDROP_V4\",\n    name: \"Backdrop\",\n    description: \"\",\n    variants: [\n      {\n        id: \"backdrop-v4\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"backdrop-v4-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"backdrop-v4-light\",\n        name: \"Light\",\n        variantType: \"LIGHT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n  {\n    referenceStyleID: \"AQUARELLE_V4\",\n    name: \"Aquarelle\",\n    description: \"Watercolor map for creative use\",\n    variants: [\n      {\n        id: \"aquarelle-v4\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"aquarelle-v4-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"aquarelle-v4-vivid\",\n        name: \"Vivid\",\n        variantType: \"VIVID\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n  {\n    referenceStyleID: \"OCEAN_V4\",\n    name: \"Ocean\",\n    description: \"\",\n    variants: [\n      {\n        id: \"ocean-v4\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"ocean-v4-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n  {\n    referenceStyleID: \"TOPO_V4\",\n    name: \"Topo\",\n    description: \"\",\n    variants: [\n      {\n        id: \"topo-v4\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"topo-v4-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"topo-v4-pastel\",\n        name: \"Pastel\",\n        variantType: \"PASTEL\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"topo-v4-topographique\",\n        name: \"Topographique\",\n        variantType: \"TOPOGRAPHIQUE\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n] as const;\n\n/**\n * Map of default reference styles to their versioned counterparts.\n * This is make it easier to version the default reference styles.\n * Note: the type definition `MapStyleType` will need to be updated to reflect this.\n */\nexport const defaultReferenceStyleMap = {\n  STREETS: \"STREETS_V4\",\n  BASIC: \"BASIC_V2\",\n  BASE: \"BASE_V4\",\n  LANDSCAPE: \"LANDSCAPE_V4\",\n  AQUARELLE: \"AQUARELLE_V4\",\n  SATELLITE: \"SATELLITE_V4\",\n  WINTER: \"WINTER_V4\",\n  HYBRID: \"HYBRID_V4\",\n  OCEAN: \"OCEAN_V4\",\n  TONER: \"TONER_V2\",\n  TOPO: \"TOPO_V4\",\n  OPENSTREETMAP: \"OPENSTREETMAP_V2\",\n  DATAVIZ: \"DATAVIZ_V4\",\n  BACKDROP: \"BACKDROP_V4\",\n  VOYAGER: \"VOYAGER_V2\",\n} as const;\n\n// Helper types to build the MapStyleType, this is to avoid having to manually define the MapStyleType\n\n// get the ID of the config eg. STREETS_V2, STREETS_V4, etc.\ntype ConfigID = (typeof MAP_STYLE_CONFIG)[number][\"referenceStyleID\"];\n\n// filter the config to only get the variants for the given referenceStyleID\ntype ConfigVariant<T extends ConfigID> = Extract<\n  (typeof MAP_STYLE_CONFIG)[number],\n  { referenceStyleID: T }\n>[\"variants\"][number][\"variantType\"];\n\n// build it together to get the type of the MapStyleType\ntype BaseMapStyleType = {\n  [K in ConfigID]: ReferenceMapStyle & {\n    [V in ConfigVariant<K>]: MapStyleVariant;\n  };\n};\n\n// map the default reference styles in defaultReferenceStyleMap to the MapStyleType\nexport type MapStyleType = BaseMapStyleType & {\n  [K in keyof typeof defaultReferenceStyleMap]: BaseMapStyleType[(typeof defaultReferenceStyleMap)[K] &\n    ConfigID];\n};\n\n// cast to a mutable array for the runtime logic\nexport const mapStylePresetList: MapStylePreset[] = [\n  ...MAP_STYLE_CONFIG,\n] as unknown as MapStylePreset[];\n\n// predecate to map the namespaced styles to the default reference style map\nfunction applyVersionToDefaultReferenceStyle(\n  defaultKey: string,\n  referenceKey: string,\n) {\n  if (\n    mapStylePresetList.find((style) => style.referenceStyleID === defaultKey)\n  ) {\n    console.warn(\n      `Default reference style ${defaultKey} already exists, it will be overwritten...`,\n    );\n  }\n\n  const versionedMapStyle = mapStylePresetList.find(\n    (style) => style.referenceStyleID === referenceKey,\n  );\n  if (!versionedMapStyle) {\n    throw new Error(\n      `Versioned map style not found for reference style: ${referenceKey}`,\n    );\n  }\n  const defaultStyle = {\n    ...versionedMapStyle,\n    referenceStyleID: defaultKey,\n  };\n  mapStylePresetList.push(defaultStyle);\n}\n\n// use the predecate...\nObject.entries(defaultReferenceStyleMap).forEach(\n  ([defaultKey, referenceKey]) => {\n    applyVersionToDefaultReferenceStyle(defaultKey, referenceKey);\n  },\n);\n\nfunction makeReferenceStyleProxy(referenceStyle: ReferenceMapStyle) {\n  return new Proxy(referenceStyle, {\n    get(target, prop, receiver) {\n      if (target.hasVariant(prop as string)) {\n        return target.getVariant(prop as string);\n      }\n\n      // This variant does not exist for this style, but since it's full uppercase\n      // we guess that the dev tries to access a style variant. So instead of\n      // returning the default (STREETS.DEFAULT), we return the non-variant of the current style\n      if (prop.toString().toUpperCase() === (prop as string)) {\n        return referenceStyle.getDefaultVariant();\n      }\n\n      const style = Reflect.get(target, prop, receiver);\n\n      return style;\n    },\n  });\n}\n\nfunction buildMapStyles(): MapStyleType {\n  const mapStyle = {};\n\n  for (let i = 0; i < mapStylePresetList.length; i += 1) {\n    const refStyleInfo = mapStylePresetList[i];\n\n    const refStyle = makeReferenceStyleProxy(\n      new ReferenceMapStyle(refStyleInfo.name, refStyleInfo.referenceStyleID),\n    );\n\n    for (let j = 0; j < refStyleInfo.variants.length; j += 1) {\n      const variantInfo = refStyleInfo.variants[j];\n      const variant = new MapStyleVariant(\n        variantInfo.name, // name\n        variantInfo.variantType, // variantType\n        variantInfo.id, // id\n        refStyle, // referenceStyle\n        variantInfo.description,\n        variantInfo.imageURL, // imageURL\n        variantInfo.deprecated, // deprecated\n      );\n\n      refStyle.addVariant(variant);\n    }\n    mapStyle[refStyleInfo.referenceStyleID] = refStyle;\n  }\n  return mapStyle as MapStyleType;\n}\n\nexport function styleToStyle(\n  style: string | ReferenceMapStyle | MapStyleVariant | null | undefined,\n): string {\n  if (!style) {\n    return MapStyle[mapStylePresetList[0].referenceStyleID]\n      .getDefaultVariant()\n      .getId();\n  }\n\n  // If the provided style is a shorthand (eg. \"streets-v2\") then we make sure it's trimmed and lowercase\n  if (typeof style === \"string\" || style instanceof String) {\n    return style.trim().toLowerCase();\n  }\n\n  if (style instanceof MapStyleVariant) {\n    return style.getId();\n  }\n\n  if (style instanceof ReferenceMapStyle) {\n    return style.getDefaultVariant().getId();\n  }\n}\n\n/**\n * Contains all the reference map style created by MapTiler team as well as all the variants.\n * For example, `MapStyle.STREETS` and the variants:\n * - `MapStyle.STREETS.DARK`\n * - `MapStyle.STREETS.LIGHT`\n * - `MapStyle.STREETS.PASTEL`\n *\n */\nexport const MapStyle: MapStyleType = buildMapStyles();\n","import {\n  GeoJsonObject,\n  GeometryObject,\n  LineString,\n  MultiLineString,\n  Feature,\n  FeatureCollection,\n  Position,\n} from \"geojson\";\n\n/**\n * From a generic GeoJSON object extract thepossibly nested LineString and MultiLineString features\n * it contains. The result is a flat array made of LineString and MultiLineString.\n */\nfunction extractLineStrings(\n  geoJson: GeoJsonObject,\n): Array<LineString | MultiLineString> {\n  const lineStrings: Array<LineString | MultiLineString> = [];\n\n  function extractFromGeometry(geometry: GeometryObject) {\n    if (geometry.type === \"LineString\" || geometry.type === \"MultiLineString\") {\n      lineStrings.push(geometry as LineString | MultiLineString);\n    }\n  }\n\n  function extractFromFeature(feature: Feature) {\n    if (feature.geometry) {\n      extractFromGeometry(feature.geometry);\n    }\n  }\n\n  function extractFromFeatureCollection(collection: FeatureCollection) {\n    for (const feature of collection.features) {\n      if (feature.type === \"Feature\") {\n        extractFromFeature(feature);\n      } else if (feature.type === \"FeatureCollection\") {\n        extractFromFeatureCollection(feature as unknown as FeatureCollection); // had to add unknown\n      }\n    }\n  }\n\n  if (geoJson.type === \"Feature\") {\n    extractFromFeature(geoJson as Feature);\n  } else if (geoJson.type === \"FeatureCollection\") {\n    extractFromFeatureCollection(geoJson as FeatureCollection);\n  } else {\n    // It's a single geometry\n    extractFromGeometry(geoJson as GeometryObject);\n  }\n\n  return lineStrings;\n}\n\n// square distance from a point to a segment\nfunction getSqSegDist(p: Position, p1: Position, p2: Position): number {\n  let x = p1[0],\n    y = p1[1],\n    dx = p2[0] - x,\n    dy = p2[1] - y;\n\n  if (dx !== 0 || dy !== 0) {\n    const t = ((p[0] - x) * dx + (p[1] - y) * dy) / (dx * dx + dy * dy);\n\n    if (t > 1) {\n      x = p2[0];\n      y = p2[1];\n    } else if (t > 0) {\n      x += dx * t;\n      y += dy * t;\n    }\n  }\n\n  dx = p[0] - x;\n  dy = p[1] - y;\n\n  return dx * dx + dy * dy;\n}\n\nfunction simplifyDPStep(\n  points: Array<Position>,\n  first: number,\n  last: number,\n  sqTolerance: number,\n  simplified: Array<Position>,\n) {\n  let maxSqDist = sqTolerance,\n    index;\n\n  for (let i = first + 1; i < last; i++) {\n    const sqDist = getSqSegDist(points[i], points[first], points[last]);\n\n    if (sqDist > maxSqDist) {\n      index = i;\n      maxSqDist = sqDist;\n    }\n  }\n\n  if (maxSqDist > sqTolerance) {\n    if (index - first > 1) {\n      simplifyDPStep(points, first, index, sqTolerance, simplified);\n    }\n    simplified.push(points[index]);\n\n    if (last - index > 1) {\n      simplifyDPStep(points, index, last, sqTolerance, simplified);\n    }\n  }\n}\n\n// simplification using Ramer-Douglas-Peucker algorithm\nfunction simplifyDouglasPeucker(\n  points: Array<Position>,\n  sqTolerance: number,\n): Array<Position> {\n  const last = points.length - 1;\n  const simplified = [points[0]];\n  simplifyDPStep(points, 0, last, sqTolerance, simplified);\n  simplified.push(points[last]);\n  return simplified;\n}\n\n/**\n * Simplify a path made of a list of GeoJSON Positions, with a tolerance.\n */\nfunction simplify(points: Array<Position>, tolerance: number): Array<Position> {\n  if (points.length <= 2) {\n    return points;\n  }\n\n  const sqTolerance = tolerance !== undefined ? tolerance * tolerance : 1;\n  const simplePoints = simplifyDouglasPeucker(points, sqTolerance);\n  return simplePoints;\n}\n\nexport const misc = {\n  extractLineStrings,\n  simplify,\n};\n","import { BBox, Position } from \"geojson\";\nimport { config } from \"../config\";\nimport { defaults } from \"../defaults\";\nimport { MapStyleVariant, ReferenceMapStyle, styleToStyle } from \"../mapstyle\";\nimport { misc } from \"../misc\";\n\n/**\n * Base set of options that can be provided to all the types of static maps\n */\nexport type StaticMapBaseOptions = {\n  /**\n   * Custom MapTiler Cloud API key to use instead of the one in global `config`\n   */\n  apiKey?: string;\n\n  /**\n   * Style of the map (not full style URL). Example: \"winter\", \"streets-v2\".\n   * Default: `\"streets-v2\"`\n   */\n  style?: string | ReferenceMapStyle | MapStyleVariant;\n\n  /**\n   * Double the size of the static map image to support hiDPI/Retina monitors.\n   * Default: `false`\n   */\n  hiDPI?: boolean;\n\n  /**\n   * Image format.\n   * Default: `\"png\"`\n   */\n  format?: \"png\" | \"jpg\" | \"webp\";\n\n  /**\n   * Width of the output image. Maximum value: `2048`.\n   * Default: `1024`\n   */\n  width?: number;\n\n  /**\n   * Height of the output image. Maximum value: `2048`.\n   * Default: `1024`\n   */\n  height?: number;\n\n  /**\n   * Placement of the attribution. Can also be set to `false` to not show attribution.\n   * Default: `\"bottomright\"`\n   */\n  attribution?: \"bottomright\" | \"bottomleft\" | \"topleft\" | \"topright\" | false;\n\n  /**\n   * A marker or list of markers to show on the map\n   * Default: none provided\n   */\n  markers?: StaticMapMarker | Array<StaticMapMarker>;\n\n  /**\n   * URL of the marker image. Applies only if one or multiple markers positions are provided.\n   * Default: none provided\n   */\n  markerIcon?: string;\n\n  /**\n   * Position of the marker regarding its coordinates. Applies only:\n   * - with a custom icon provided with `markerIcon`\n   * - if one or multiple markers positions are provided.\n   * Default: `\"bottom\"`\n   */\n  markerAnchor?:\n    | \"top\"\n    | \"left\"\n    | \"bottom\"\n    | \"right\"\n    | \"center\"\n    | \"topleft\"\n    | \"bottomleft\"\n    | \"topright\"\n    | \"bottomright\";\n\n  /**\n   * Draw a path or polygon on top of the map. If the path is too long it will be simplified, yet remaining accurate.\n   * Default: none provided\n   */\n  path?: Array<Position>;\n\n  /**\n   * Color of the path line. The color must be CSS compatible.\n   * Examples:\n   * - long form hex without transparency `\"#FF0000\"` (red)\n   * - short form hex without transparency `\"#F00\"` (red)\n   * - long form hex with transparency `\"#FF000008\"` (red, half opacity)\n   * - short form hex with transparency `\"#F008\"` (red, half opacity)\n   * - CSS color shorthands: `\"red\"`, `\"chartreuse\"`, etc.\n   * - decimal RGB values without transparency: `\"rgb(128, 100, 255)\"`\n   * - decimal RGB values with transparency: `\"rgb(128, 100, 255, 0.5)\"`\n   * Default: `\"blue\"`\n   */\n  pathStrokeColor?: string;\n\n  /**\n   * Color of the filling, also works if the polygon is not closed. The color must be CSS compatible.\n   * Examples:\n   * - long form hex without transparency `\"#FF0000\"` (red)\n   * - short form hex without transparency `\"#F00\"` (red)\n   * - long form hex with transparency `\"#FF000008\"` (red, half opacity)\n   * - short form hex with transparency `\"#F008\"` (red, half opacity)\n   * - CSS color shorthands: `\"red\"`, `\"chartreuse\"`, etc.\n   * - decimal RGB values without transparency: `\"rgb(128, 100, 255)\"`\n   * - decimal RGB values with transparency: `\"rgb(128, 100, 255, 0.5)\"`\n   * Default: none (transparent filling)\n   */\n  pathFillColor?: string;\n\n  /**\n   * Width of the path line in pixel. It can be floating point precision (ex: `0.5`)\n   * Default: `1` if `hiDPI` is `false` and `2` if `hiDPI` is `true`.\n   */\n  pathWidth?: number;\n};\n\n/**\n * Options that can be provided to centered static maps\n */\nexport type CenteredStaticMapOptions = StaticMapBaseOptions;\n\n/**\n * Options that can be provided to bounded static maps\n */\nexport type BoundedStaticMapOptions = StaticMapBaseOptions & {\n  /**\n   * Extra space added around the regio of interest, in percentage.\n   * Default: `0.1` (for 10%)\n   */\n  padding?: number;\n};\n\n/**\n * Options that can be provided to automatic static maps\n */\nexport type AutomaticStaticMapOptions = BoundedStaticMapOptions;\n\n/**\n * Definition of a maker to show on a static map\n */\nexport type StaticMapMarker = [\n  /**\n   * Longitude of the marker\n   */\n  number,\n  /**\n   * latitude of the marker\n   */\n  number,\n  /**\n   * Color of the marker with CSS syntax. Applies only if a custom `markerIcon` is not provided.\n   */\n  string,\n];\n\nfunction staticMapMarkerToString(\n  marker: StaticMapMarker,\n  includeColor = true,\n): string {\n  let str = `${marker[0]},${marker[1]}`;\n\n  if (marker.length === 3 && includeColor) {\n    str += `,${marker[2]}`;\n  }\n\n  return str;\n}\n\nfunction simplifyAndStringify(path: Array<Position>, maxNbChar = 3000): string {\n  let str = path.map((point) => point.join(\",\")).join(\"|\");\n  let tolerance = 0.000005;\n  const toleranceStep = 0.00001;\n\n  while (str.length > maxNbChar) {\n    const simplerPath = misc.simplify(path, tolerance);\n    // str = simplerPath.map(point => point.join(',')).join('|');\n    str = simplerPath.map((point) => `${point[0]},${point[1]}`).join(\"|\");\n    tolerance += toleranceStep;\n  }\n\n  return str;\n}\n\n/**\n * Construct the URL for a static map centered on one point.\n * Note: this function does not fetch the binary content of the image since\n * the purpose of a static map is generally to have its URL as a `src` property of a <img/> element.\n * If a path is provided and is too long, it will be simplified in an accurate way.\n * @param center\n * @param zoom\n * @param options\n * @returns\n */\nfunction centered(\n  center: Position,\n  zoom: number,\n  options: CenteredStaticMapOptions = {},\n): string {\n  const style = styleToStyle(options.style);\n  const scale = options.hiDPI ? \"@2x\" : \"\";\n  const format = options.format ?? \"png\";\n  let width = ~~(options.width ?? 1024);\n  let height = ~~(options.height ?? 1024);\n\n  if (options.hiDPI) {\n    width = ~~(width / 2);\n    height = ~~(height / 2);\n  }\n\n  const endpoint = new URL(\n    `maps/${encodeURIComponent(style)}/static/${center[0]},${\n      center[1]\n    },${zoom}/${width}x${height}${scale}.${format}`,\n    defaults.maptilerApiURL,\n  );\n\n  if (\"attribution\" in options) {\n    endpoint.searchParams.set(\"attribution\", options.attribution.toString());\n  }\n\n  if (\"markers\" in options) {\n    let markerStr = \"\";\n\n    const hasIcon = \"markerIcon\" in options;\n\n    if (hasIcon) {\n      markerStr += `icon:${options.markerIcon}|`;\n    }\n\n    if (hasIcon && \"markerAnchor\" in options) {\n      markerStr += `anchor:${options.markerAnchor}|`;\n    }\n\n    if (hasIcon && options.hiDPI) {\n      markerStr += `scale:2|`;\n    }\n\n    const markerList = Array.isArray(options.markers[0])\n      ? options.markers\n      : [options.markers];\n    markerStr += markerList\n      .map((m) => staticMapMarkerToString(m, !hasIcon))\n      .join(\"|\");\n    endpoint.searchParams.set(\"markers\", markerStr);\n  }\n\n  if (\"path\" in options) {\n    let pathStr = \"\";\n\n    pathStr += `fill:${options.pathFillColor ?? \"none\"}|`;\n\n    if (\"pathStrokeColor\" in options) {\n      pathStr += `stroke:${options.pathStrokeColor}|`;\n    }\n\n    if (\"pathWidth\" in options) {\n      const pathWidth = options.pathWidth / (options.hiDPI ? 2 : 1);\n      pathStr += `width:${pathWidth.toString()}|`;\n    }\n\n    pathStr += simplifyAndStringify(options.path);\n    endpoint.searchParams.set(\"path\", pathStr);\n  }\n\n  endpoint.searchParams.set(\"key\", options.apiKey ?? config.apiKey);\n\n  return endpoint.toString();\n}\n\n/**\n * Construct the URL for a static map using a bounding box\n * Note: this function does not fetch the binary content of the image since\n * the purpose of a static map is generally to have its URL as a `src` property of a <img/> element.\n * If a path is provided and is too long, it will be simplified in an accurate way.\n * @param boundingBox\n * @param options\n * @returns\n */\nfunction bounded(\n  boundingBox: BBox,\n  options: BoundedStaticMapOptions = {},\n): string {\n  const style = styleToStyle(options.style);\n  const scale = options.hiDPI ? \"@2x\" : \"\";\n  const format = options.format ?? \"png\";\n  let width = ~~(options.width ?? 1024);\n  let height = ~~(options.height ?? 1024);\n\n  if (options.hiDPI) {\n    width = ~~(width / 2);\n    height = ~~(height / 2);\n  }\n\n  const endpoint = new URL(\n    `maps/${encodeURIComponent(style)}/static/${boundingBox[0]},${\n      boundingBox[1]\n    },${boundingBox[2]},${boundingBox[3]}/${width}x${height}${scale}.${format}`,\n    defaults.maptilerApiURL,\n  );\n\n  if (\"attribution\" in options) {\n    endpoint.searchParams.set(\"attribution\", options.attribution.toString());\n  }\n\n  if (\"padding\" in options) {\n    endpoint.searchParams.set(\"padding\", options.padding.toString());\n  }\n\n  if (\"markers\" in options) {\n    let markerStr = \"\";\n\n    const hasIcon = \"markerIcon\" in options;\n\n    if (hasIcon) {\n      markerStr += `icon:${options.markerIcon}|`;\n    }\n\n    if (hasIcon && \"markerAnchor\" in options) {\n      markerStr += `anchor:${options.markerAnchor}|`;\n    }\n\n    if (hasIcon && options.hiDPI) {\n      markerStr += `scale:2|`;\n    }\n\n    const markerList = Array.isArray(options.markers[0])\n      ? options.markers\n      : [options.markers];\n    markerStr += markerList\n      .map((m) => staticMapMarkerToString(m, !hasIcon))\n      .join(\"|\");\n    endpoint.searchParams.set(\"markers\", markerStr);\n  }\n\n  if (\"path\" in options) {\n    let pathStr = \"\";\n\n    pathStr += `fill:${options.pathFillColor ?? \"none\"}|`;\n\n    if (\"pathStrokeColor\" in options) {\n      pathStr += `stroke:${options.pathStrokeColor}|`;\n    }\n\n    if (\"pathWidth\" in options) {\n      const pathWidth = options.pathWidth / (options.hiDPI ? 2 : 1);\n      pathStr += `width:${pathWidth.toString()}|`;\n    }\n\n    pathStr += simplifyAndStringify(options.path);\n    endpoint.searchParams.set(\"path\", pathStr);\n  }\n\n  endpoint.searchParams.set(\"key\", options.apiKey ?? config.apiKey);\n\n  return endpoint.toString();\n}\n\n/**\n * Construct the URL for a static map automatically fitted around the provided path or markers.\n * Note: this function does not fetch the binary content of the image since\n * the purpose of a static map is generally to have its URL as a `src` property of a <img/> element.\n * If a path is provided and is too long, it will be simplified in an accurate way.\n * @param options\n * @returns\n */\nfunction automatic(options: AutomaticStaticMapOptions = {}): string {\n  if (!(\"markers\" in options) && !(\"path\" in options)) {\n    throw new Error(\n      \"Automatic static maps require markers and/or path to be created.\",\n    );\n  }\n\n  const style = styleToStyle(options.style);\n  const scale = options.hiDPI ? \"@2x\" : \"\";\n  const format = options.format ?? \"png\";\n  let width = ~~(options.width ?? 1024);\n  let height = ~~(options.height ?? 1024);\n\n  if (options.hiDPI) {\n    width = ~~(width / 2);\n    height = ~~(height / 2);\n  }\n\n  const endpoint = new URL(\n    `maps/${encodeURIComponent(\n      style,\n    )}/static/auto/${width}x${height}${scale}.${format}`,\n    defaults.maptilerApiURL,\n  );\n\n  if (\"attribution\" in options) {\n    endpoint.searchParams.set(\"attribution\", options.attribution.toString());\n  }\n\n  if (\"padding\" in options) {\n    endpoint.searchParams.set(\"padding\", options.padding.toString());\n  }\n\n  if (\"markers\" in options) {\n    let markerStr = \"\";\n\n    const hasIcon = \"markerIcon\" in options;\n\n    if (hasIcon) {\n      markerStr += `icon:${options.markerIcon}|`;\n    }\n\n    if (hasIcon && \"markerAnchor\" in options) {\n      markerStr += `anchor:${options.markerAnchor}|`;\n    }\n\n    if (hasIcon && options.hiDPI) {\n      markerStr += `scale:2|`;\n    }\n\n    const markerList = Array.isArray(options.markers[0])\n      ? options.markers\n      : [options.markers];\n    markerStr += markerList\n      .map((m) => staticMapMarkerToString(m, !hasIcon))\n      .join(\"|\");\n    endpoint.searchParams.set(\"markers\", markerStr);\n  }\n\n  if (\"path\" in options) {\n    let pathStr = \"\";\n\n    pathStr += `fill:${options.pathFillColor ?? \"none\"}|`;\n\n    if (\"pathStrokeColor\" in options) {\n      pathStr += `stroke:${options.pathStrokeColor}|`;\n    }\n\n    if (\"pathWidth\" in options) {\n      const pathWidth = options.pathWidth / (options.hiDPI ? 2 : 1);\n      pathStr += `width:${pathWidth.toString()}|`;\n    }\n\n    pathStr += simplifyAndStringify(options.path);\n    endpoint.searchParams.set(\"path\", pathStr);\n  }\n\n  endpoint.searchParams.set(\"key\", options.apiKey ?? config.apiKey);\n\n  return endpoint.toString();\n}\n\n/**\n * The **staticMaps** namespace contains an synchronous function build image URL of static map, as specified by the [MapTiler Static Map API](https://docs.maptiler.com/cloud/api/static-maps/).\n * The URL of static maps can then be used within a `<img />` markup element, as the `src` property value.\n */\nconst staticMaps = {\n  centered,\n  bounded,\n  automatic,\n};\n\nexport { staticMaps };\n","import { Position } from \"geojson\";\n\n/**\n * Average radius of Earth in meters\n */\nconst EARTH_RADIUS = 6371008.8;\n\n/**\n * Average circumfrence of Earth in meters\n */\nconst EARTH_CIRCUMFERENCE = 2 * Math.PI * EARTH_RADIUS;\n\n/**\n * Max latitude valid in Web Mercator\n */\nconst MAX_VALID_LATITUDE = 85.0511287;\n\n/**\n * Convert a wgs84 longitude to web Mercator X (west-east axis), where westmost X is 0 and eastmost X is 1.\n */\nfunction longitudeToMercatorX(lng: number): number {\n  return (180 + lng) / 360;\n}\n\n/**\n * Convert a wgs84 latitude to web Mercator Y (north-south axis), where northmost Y is 0 and southmost Y is 1.\n */\nfunction latitudeToMercatorY(lat: number): number {\n  lat = Math.max(Math.min(lat, MAX_VALID_LATITUDE), -MAX_VALID_LATITUDE);\n  return (\n    (180 -\n      (180 / Math.PI) *\n        Math.log(Math.tan(Math.PI / 4 + (lat * Math.PI) / 360))) /\n    360\n  );\n}\n\n/**\n * Convert a wgs84 position into a web Mercator position where north-west is [0, 0] and south-east is [1, 1]\n */\nfunction wgs84ToMercator(position: Position): Position {\n  const wrappedPos = wrapWgs84(position);\n  return [\n    longitudeToMercatorX(wrappedPos[0]),\n    latitudeToMercatorY(wrappedPos[1]),\n  ];\n}\n\n/**\n * Converts a mercator X (west-east axis in [0, 1]) to wgs84 longitude\n */\nfunction mercatorXToLongitude(x: number): number {\n  return x * 360 - 180;\n}\n\n/**\n * Converts a mercator Y (north-south axis in [0, 1]) to wgs84 latitude\n */\nfunction mercatorYToLatitude(y: number): number {\n  const y2 = 180 - y * 360;\n  return (360 / Math.PI) * Math.atan(Math.exp((y2 * Math.PI) / 180)) - 90;\n}\n\n/**\n * Converts a web Mercator position where north-west is [0, 0] and south-east is [1, 1] into a wgs84\n */\nfunction mercatorToWgs84(position: Position): Position {\n  return [mercatorXToLongitude(position[0]), mercatorYToLatitude(position[1])];\n}\n\n/**\n * Gives the distance in meters between two positions using the Haversine Formula.\n */\nfunction haversineDistanceWgs84(from: Position, to: Position): number {\n  const rad = Math.PI / 180;\n  const lat1 = from[1] * rad;\n  const lat2 = to[1] * rad;\n  const a =\n    Math.sin(lat1) * Math.sin(lat2) +\n    Math.cos(lat1) * Math.cos(lat2) * Math.cos((to[0] - from[0]) * rad);\n\n  const maxMeters = EARTH_RADIUS * Math.acos(Math.min(a, 1));\n  return maxMeters;\n}\n\n/**\n * Compute the cumulated distance for each position of an array of positions.\n * For I positions, there are I-1 distance, hence the distance at i corresponds\n * to the distance from the (i-1)th position to ith\n */\nfunction haversineCumulatedDistanceWgs84(positions: Position[]): number[] {\n  const cumulatedDistance = Array(positions.length);\n  cumulatedDistance[0] = 0;\n  const l = cumulatedDistance.length;\n\n  for (let i = 1; i < l; i++) {\n    cumulatedDistance[i] =\n      haversineDistanceWgs84(positions[i - 1], positions[i]) +\n      cumulatedDistance[i - 1];\n  }\n  return cumulatedDistance;\n}\n\n/**\n * Returns a position that has longitude in [-180, 180]\n */\nfunction wrapWgs84(position: Position): Position {\n  const lng = position[0];\n  const lat = position[1];\n\n  const d = 360;\n  const w = ((((lng + 180) % d) + d) % d) - 180;\n  const wrapLong = w === -180 ? 180 : w;\n\n  return [wrapLong, lat];\n}\n\n/*\n * The circumference at a line of latitude in meters.\n */\nexport function circumferenceAtLatitude(latitude: number) {\n  return EARTH_CIRCUMFERENCE * Math.cos((latitude * Math.PI) / 180);\n}\n\n/**\n * From a given mercator coordinate and a zoom level, computes the tile index\n */\nfunction mercatorToTileIndex(\n  /**\n   * Mercator coordinates (north-west is [0, 0], sourth-east is [1, 1])\n   */\n  position: Position,\n  /**\n   * Zoom level\n   */\n  zoom: number,\n  /**\n   * Returns integer tile indices if `true` or floating-point values if `false`\n   */\n  strict: boolean = true,\n): Position {\n  const numberOfTilePerAxis = 2 ** zoom;\n\n  const fIndex: Position = [\n    position[0] * numberOfTilePerAxis,\n    position[1] * numberOfTilePerAxis,\n  ];\n\n  return strict ? [~~fIndex[0], ~~fIndex[1]] : fIndex;\n}\n\n/**\n * From a given wgs84 coordinate and a zoom level, computes the tile index\n */\nfunction wgs84ToTileIndex(\n  /**\n   * Wgs84 coordinates\n   */\n  position: Position,\n  /**\n   * Zoom level\n   */\n  zoom: number,\n  /**\n   * Returns integer tile indices if `true` or floating-point values if `false`\n   */\n  strict: boolean = true,\n): Position {\n  const merc = wgs84ToMercator(position);\n  return mercatorToTileIndex(merc, zoom, strict);\n}\n\n/**\n * Converts a degree angle into a radian angle\n */\nfunction toRadians(degrees: number): number {\n  return (degrees * Math.PI) / 180;\n}\n\n/**\n * Converts a radian angle to a degree angle\n */\nfunction toDegrees(radians: number): number {\n  return (radians * 180) / Math.PI;\n}\n\n/**\n * Compute an intermediate point between two reference points using the Haversine formula.\n * If ratio is `0`, the returned position is pos1.\n * If ratio is `1`, the returned position is pos2.\n * If ratio is `0.5`, the returned position is halfway pos1 pos2 in distance.\n */\nfunction haversineIntermediateWgs84(\n  pos1: Position,\n  pos2: Position,\n  ratio: number,\n): Position {\n  const d = haversineDistanceWgs84(pos1, pos2);\n  const λ1 = toRadians(pos1[0]);\n  const φ1 = toRadians(pos1[1]);\n  const λ2 = toRadians(pos2[0]);\n  const φ2 = toRadians(pos2[1]);\n\n  const δ = d / EARTH_RADIUS; // Angular distance in radians\n  const a = Math.sin((1 - ratio) * δ) / Math.sin(δ);\n  const b = Math.sin(ratio * δ) / Math.sin(δ);\n  const x = a * Math.cos(φ1) * Math.cos(λ1) + b * Math.cos(φ2) * Math.cos(λ2);\n  const y = a * Math.cos(φ1) * Math.sin(λ1) + b * Math.cos(φ2) * Math.sin(λ2);\n  const z = a * Math.sin(φ1) + b * Math.sin(φ2);\n\n  const φ3 = Math.atan2(z, Math.sqrt(x * x + y * y));\n  const λ3 = Math.atan2(y, x);\n\n  return [toDegrees(λ3), toDegrees(φ3)];\n}\n\nexport const math = {\n  EARTH_RADIUS,\n  EARTH_CIRCUMFERENCE,\n  longitudeToMercatorX,\n  latitudeToMercatorY,\n  wgs84ToMercator,\n  mercatorXToLongitude,\n  mercatorYToLatitude,\n  mercatorToWgs84,\n  haversineDistanceWgs84,\n  wrapWgs84,\n  circumferenceAtLatitude,\n  mercatorToTileIndex,\n  wgs84ToTileIndex,\n  toRadians,\n  toDegrees,\n  haversineIntermediateWgs84,\n  haversineCumulatedDistanceWgs84,\n};\n","import QuickLRU from \"quick-lru\";\nimport { config } from \"./config\";\n\n/**\n * Informations about an image\n */\nexport type PixelData = {\n  /**\n   * The array of pixels as RGBRGB or RGBARGBA in a row-major order\n   */\n  pixels: Uint8ClampedArray | Uint8Array;\n  /**\n   * Width of the image in number of pixels\n   */\n  width: number;\n  /**\n   * Height of the image in number of pixels\n   */\n  height: number;\n  /**\n   * Number of components per pixel (3 if image is RGB, 4 if image is RGBA)\n   */\n  components: number;\n};\n\n/**\n * Type for the function that decodes an image file ArrayBuffer into valid pixel data\n */\nexport type BufferToPixelDataFunction = (ArrayBuffer) => Promise<PixelData>;\n\n/**\n * Main properties necessary from a TileJSON\n */\nexport type TileJSON = {\n  scale: string;\n  format: string;\n  maxzoom: number;\n  minzoom: number;\n  profile: string;\n  description: string;\n  attribution: string;\n  bounds: [number, number, number, number];\n  center: [number, number, number];\n\n  /**\n   * TileJSON version\n   */\n  tilejson: string;\n  name: string;\n  crs: string;\n  crs_wkt: string;\n  extent: [number, number, number, number];\n  tiles: string[];\n};\n\n// The LRU cache for storing tile PixelData\nlet tileCache = null;\n\n/**\n * Singleton-like function to access the tile cache\n */\nexport function getTileCache(): QuickLRU<string, PixelData> {\n  if (!tileCache) {\n    tileCache = new QuickLRU({ maxSize: config.tileCacheSize });\n  }\n  return tileCache;\n}\n\n/**\n * Browser function to decode an image file buffer into valid pixel data\n */\nexport async function bufferToPixelDataBrowser(\n  buff: ArrayBuffer,\n): Promise<PixelData> {\n  const blob = new Blob([buff]);\n  const imageBitmap = await createImageBitmap(blob);\n\n  const canvas = document.createElement(\"canvas\");\n  const ctx = canvas.getContext(\"2d\");\n  canvas.width = imageBitmap.width;\n  canvas.height = imageBitmap.height;\n  ctx.drawImage(imageBitmap, 0, 0);\n\n  const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n  return {\n    pixels: imageData.data,\n    width: canvas.width,\n    height: canvas.height,\n    components: imageData.data.length / (canvas.width * canvas.height),\n  };\n}\n\nexport function getBufferToPixelDataParser(): BufferToPixelDataFunction {\n  if (config.bufferToPixelData) {\n    return config.bufferToPixelData;\n  }\n\n  if (typeof window !== \"undefined\") {\n    return bufferToPixelDataBrowser;\n  }\n\n  throw new Error(\n    \"An image file buffer to pixel data parser is necessary. Specify it in `config.bufferToPixelData`\",\n  );\n}\n\nexport function canParsePixelData(): boolean {\n  return !!config.bufferToPixelData || typeof window !== \"undefined\";\n}\n","import { LineString, MultiLineString, Position } from \"geojson\";\n\nimport { callFetch } from \"../callFetch\";\nimport { config } from \"../config\";\nimport { defaults } from \"../defaults\";\nimport { ServiceError } from \"./ServiceError\";\nimport { math } from \"./math\";\nimport {\n  TileJSON,\n  canParsePixelData,\n  getBufferToPixelDataParser,\n  getTileCache,\n} from \"../tiledecoding\";\n\nconst TERRAIN_TILESET = \"terrain-rgb-v2\";\nconst API_BATCH_SIZE = 50;\nconst API_WARN_SIZE = 1000;\n\nlet terrainTileJson: TileJSON = null;\n\nexport type ElevationAtOptions = {\n  /**\n   * Custom MapTiler Cloud API key to use instead of the one in global `config`\n   */\n  apiKey?: string;\n\n  /**\n   * Zoom level to use for the terrain tileset in `client` mode.\n   * If not provided, the highest zoom level will be used.\n   */\n  zoom?: number;\n\n  /**\n   * If set to `client`, the elevation will be computed from the terrain tiles on the client side.\n   * If set to `server`, the elevation will be obtained from the MapTiler Elevation API.\n   * Defaults to `server` for `at`, `batch`, and `client` for `fromLineString`, `fromMultiLineString` (in browser envs).\n   */\n  computeOn?: \"client\" | \"server\";\n};\n\n/**\n * Options for batch elevation lookup\n */\nexport type ElevationBatchOptions = ElevationAtOptions & {\n  /**\n   * If provided, a median kernel of the given size will smooth the elevation\n   * to reduce very small local variations\n   */\n  smoothingKernelSize?: number;\n};\n\nconst customMessages = {\n  403: \"Key is missing, invalid or restricted\",\n};\n\nasync function computeOnServer(\n  positions: Position[],\n  apiKey: string,\n): Promise<Position[]> {\n  if (positions.length > API_WARN_SIZE) {\n    console.warn(\n      \"Computing elevation for complex geometries is discouraged - simplify the geometry before proceeding\",\n    );\n  }\n\n  const parts = Math.ceil(positions.length / API_BATCH_SIZE);\n  const respPromises = Array.from({ length: parts }, () => null).map(\n    (_, part) => {\n      const startPos = part * API_BATCH_SIZE;\n      const batch = positions.slice(startPos, startPos + API_BATCH_SIZE);\n      const batchEncoded = batch.map((pos) => pos.join(\",\")).join(\";\");\n      const endpoint = new URL(\n        `elevation/${batchEncoded}.json`,\n        defaults.maptilerApiURL,\n      );\n      endpoint.searchParams.set(\"key\", apiKey);\n      return callFetch(endpoint.toString());\n    },\n  );\n\n  const resps = await Promise.allSettled(respPromises);\n  const jsons = await Promise.all(\n    resps.map(async (resp) => {\n      if (resp.status === \"rejected\") {\n        throw new Error(\n          `Some segments could not be fetched, error: ${resp.reason}`,\n        );\n      }\n      if (!resp.value.ok) {\n        throw new Error(\n          `Some segments could not be fetched, response: ${\n            resp.value.status\n          } ${await resp.value.text()}, url: ${resp.value.url}`,\n        );\n      }\n      return resp.value.json();\n    }),\n  );\n\n  return jsons.flat();\n}\n\nasync function computeOnClient(\n  positions: Position[],\n  apiKey: string,\n  zoom?: number,\n): Promise<Position[]> {\n  // Fetch terrain TileJSON\n  if (!terrainTileJson) {\n    const endpoint = new URL(\n      `tiles/${TERRAIN_TILESET}/tiles.json`,\n      defaults.maptilerApiURL,\n    );\n    endpoint.searchParams.set(\"key\", apiKey);\n    const urlWithParams = endpoint.toString();\n    const res = await callFetch(urlWithParams);\n    if (res.ok) {\n      terrainTileJson = (await res.json()) as TileJSON;\n    } else {\n      throw new ServiceError(res, customMessages[res.status] ?? \"\");\n    }\n  }\n\n  // Better throw about not bein able to parse tiles before fetching them\n  const tileParser = getBufferToPixelDataParser();\n  const tileURLSchema = terrainTileJson.tiles[0];\n  const cache = getTileCache();\n\n  const maxZoom = terrainTileJson.maxzoom;\n  let usedZoom = ~~(zoom ?? maxZoom);\n  if (usedZoom > maxZoom || usedZoom < 0) {\n    usedZoom = maxZoom;\n  }\n  const tileIndicesFloats = positions.map((position) =>\n    math.wgs84ToTileIndex(position, usedZoom, false),\n  );\n  const tileIndicesInteger = tileIndicesFloats.map((index) => [\n    ~~index[0],\n    ~~index[1],\n  ]);\n  const tileIDs = tileIndicesInteger.map(\n    (index) =>\n      `terrain_${usedZoom.toString()}_${index[0].toString()}_${index[1].toString()}`,\n  );\n\n  // unique tiles to fetch (excluding those already in cache and the doublons)\n  const uniqueTilesToFetch = Array.from(\n    new Set(tileIDs.filter((tileID) => !cache.has(tileID))),\n  ).map((tileID) => tileID.split(\"_\").slice(1));\n  const tileURLs = uniqueTilesToFetch.map((zxy) =>\n    tileURLSchema\n      .replace(\"{x}\", zxy[1].toString())\n      .replace(\"{y}\", zxy[2].toString())\n      .replace(\"{z}\", zxy[0].toString()),\n  );\n  const promisesFetchTiles = tileURLs.map((url) => callFetch(url));\n  const resTiles = await Promise.allSettled(promisesFetchTiles);\n  const fulfilledRes = resTiles\n    .map((el: PromiseSettledResult<Response>) =>\n      el.status === \"fulfilled\" ? el.value : null,\n    )\n    .filter((res) => res);\n  const fulfilledRButNotOkRes = fulfilledRes.filter((res) => !res.ok);\n\n  if (fulfilledRes.length !== promisesFetchTiles.length) {\n    throw new Error(\"Some tiles could not be fetched.\");\n  }\n\n  if (fulfilledRButNotOkRes.length) {\n    throw new ServiceError(\n      fulfilledRButNotOkRes[0],\n      customMessages[fulfilledRButNotOkRes[0].status] ?? \"\",\n    );\n  }\n\n  const tileArrayBuffers = await Promise.all(\n    fulfilledRes.map((res) => res.arrayBuffer()),\n  );\n\n  // It is possible that the tile is missing\n  if (!tileArrayBuffers.every((buff) => buff.byteLength > 0)) {\n    throw new Error(\"Some tiles are not available.\");\n  }\n\n  const tilePixelDatas = await Promise.all(\n    tileArrayBuffers.map((buff) => tileParser(buff)),\n  );\n\n  // Adding to cache\n  tilePixelDatas.forEach((tilePixelData, i) => {\n    const zxy = uniqueTilesToFetch[i];\n    const tileID = `terrain_${zxy[0].toString()}_${zxy[1].toString()}_${zxy[2].toString()}`;\n    cache.set(tileID, tilePixelData);\n  });\n\n  const elevatedPositions = positions.map((position, i) => {\n    const tileID = tileIDs[i];\n    const tileIndexFloat = tileIndicesFloats[i];\n    const tilePixelData = cache.get(tileID);\n\n    // const pixelX = ~~(tilePixelData.width * (tileIndexFloat[0] % 1));\n    // const pixelY = ~~(tilePixelData.height * (tileIndexFloat[1] % 1));\n\n    const pixelX = Math.min(\n      Math.round(tilePixelData.width * (tileIndexFloat[0] % 1)),\n      tilePixelData.width - 1,\n    );\n    const pixelY = Math.min(\n      Math.round(tilePixelData.height * (tileIndexFloat[1] % 1)),\n      tilePixelData.height - 1,\n    );\n\n    const pixelDataIndex =\n      (pixelY * tilePixelData.width + pixelX) * tilePixelData.components;\n    const R = tilePixelData.pixels[pixelDataIndex];\n    const G = tilePixelData.pixels[pixelDataIndex + 1];\n    const B = tilePixelData.pixels[pixelDataIndex + 2];\n    const elevation = -10000 + (R * 256 * 256 + G * 256 + B) * 0.1;\n\n    return [position[0], position[1], ~~(elevation * 1000) / 1000];\n  });\n\n  return elevatedPositions;\n}\n\n/**\n * Get the elevation at a given position.\n * The returned position is of form [longitude, latitude, altitude]\n */\nasync function at(\n  /**\n   * Wgs84 position as [longitude, latitude]\n   */\n  position: Position,\n  /**\n   * Options\n   */\n  options: ElevationAtOptions = {},\n): Promise<Position> {\n  const elevatedPositions = await batch([position], options);\n  return elevatedPositions[0];\n}\n\n/**\n * Perform a batch elevation request\n */\nasync function batch(\n  /**\n   * Wgs84 positions as [[lng0, lat0], [lng1, lat1], [lng2, lat2], ...]\n   */\n  positions: Position[],\n  /**\n   * Options\n   */\n  options: ElevationBatchOptions = {},\n): Promise<Position[]> {\n  if (positions.length === 0) return [];\n\n  const apiKey = options.apiKey ?? config.apiKey;\n\n  const elevatedPositions =\n    options.computeOn === \"client\"\n      ? await computeOnClient(positions, apiKey, options.zoom)\n      : await computeOnServer(positions, apiKey);\n\n  // Smoothing\n  if (options.smoothingKernelSize) {\n    // make sure the kernel is of an odd size\n    const kernelSize = ~~(options.smoothingKernelSize / 2) * 2 + 1;\n    const elevations: number[] = elevatedPositions.map((pos) => pos[2]);\n    const kernelSpan = ~~(kernelSize / 2);\n\n    for (let i = kernelSpan; i < elevations.length - kernelSpan; i += 1) {\n      let sum = 0;\n      for (let j = 0; j < kernelSize; j += 1) {\n        const elev = elevations[i - kernelSpan + j];\n        sum += elev;\n      }\n      sum /= kernelSize;\n      elevatedPositions[i][2] = sum;\n    }\n  }\n\n  return elevatedPositions;\n}\n\n/**\n * Creates a clone of a GeoJSON LineString (deep copy with structuredClone) that contains the computed elevation\n * as the third element of each position array ([lng, lat, alt])\n */\nasync function fromLineString(\n  /**\n   * A GeoJSON LineStriung feature\n   */\n  ls: LineString,\n  /**\n   * Options\n   */\n  options: ElevationBatchOptions = {},\n): Promise<LineString> {\n  if (ls.type !== \"LineString\") {\n    throw new Error(\"The provided object is not a GeoJSON LineString\");\n  }\n\n  options.computeOn ??= canParsePixelData() ? \"client\" : \"server\";\n  const clone = structuredClone(ls) as LineString;\n  const elevatedPositions = await batch(clone.coordinates, options);\n  clone.coordinates = elevatedPositions;\n\n  return clone;\n}\n\n/**\n * Creates a clone of a MultiLineString (deep copy with structuredClone) that contains the computed elevation\n * as the third element of each position array ([lng, lat, alt])\n */\nasync function fromMultiLineString(\n  /**\n   * A GeoJSON LineStriung feature\n   */\n  ls: MultiLineString,\n  /**\n   * Options\n   */\n  options: ElevationBatchOptions = {},\n): Promise<MultiLineString> {\n  if (ls.type !== \"MultiLineString\") {\n    throw new Error(\"The provided object is not a GeoJSON MultiLineString\");\n  }\n\n  options.computeOn ??= canParsePixelData() ? \"client\" : \"server\";\n  const clone = structuredClone(ls) as MultiLineString;\n  const multiLengths = clone.coordinates.map((poss) => poss.length);\n\n  // This is equivalent to a batch of batch, so we makes the multilinestring\n  // a unique line string to reduce number of requests\n  const flattenPositions = clone.coordinates.flat();\n  const flattenPositionsElevated = await batch(flattenPositions, options);\n\n  // And then chopping back into a multi line string\n  const result: Position[][] = [];\n  let index = 0;\n  for (const length of multiLengths) {\n    result.push(flattenPositionsElevated.slice(index, index + length));\n    index += length;\n  }\n\n  clone.coordinates = result;\n  return clone;\n}\n\nexport const elevation = {\n  at,\n  batch,\n  fromLineString,\n  fromMultiLineString,\n};\n"],"names":["customMessages","batch","elevation"],"mappings":";;AAOA,SAAS,eAAA,GAAkB;AAEzB,EAAA,IAAI,OAAO,SAAS,WAAA,EAAa;AAC/B,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAEA,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,MAAA,CAAO,KAAA,EAAO;AACjD,IAAA,OAAO,MAAA,CAAO,KAAA;AAAA,EAChB;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,MAAM,YAAA,CAAa;AAAA,EAAnB,WAAA,GAAA;AAIE;AAAA;AAAA;AAAA,IAAA,IAAA,CAAQ,OAAA,GAAU,EAAA;AAMlB;AAAA;AAAA;AAAA;AAAA,IAAA,IAAA,CAAQ,SAA+B,eAAA,EAAgB;AAKvD;AAAA;AAAA;AAAA,IAAA,IAAA,CAAO,aAAA,GAAwB,GAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAO/B,IAAI,OAAO,CAAA,EAAW;AACpB,IAAA,IAAA,CAAK,OAAA,GAAU,CAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAA,GAAiB;AACnB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAM,CAAA,EAAkB;AAC1B,IAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,KAAA,GAA8B;AAChC,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AACF;AAKA,MAAM,MAAA,GAAS,IAAI,YAAA;;AClCZ,MAAM,cAAA,GAAiB;AAAA;AAAA;AAAA;AAAA,EAI5B,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,IAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,UAAA;AAAA,IACN,IAAA,EAAM,eAAA;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA;AAEf;AAKO,MAAM,WAAA,GAAc;AAAA;AAAA;AAAA;AAAA,EAIzB,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,aAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,EAAqB;AAAA,IACnB,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,cAAA;AAAA,IACN,IAAA,EAAM,uBAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,cAAA;AAAA,IACN,IAAA,EAAM,sBAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,gBAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,cAAA;AAAA,IACN,IAAA,EAAM,wBAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,cAAA;AAAA,IACN,IAAA,EAAM,uBAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,cAAA;AAAA,IACN,IAAA,EAAM,iBAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,OAAA;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN,IAAA,EAAM,yBAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,cAAA;AAAA,IACN,IAAA,EAAM,uBAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,eAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,IAAA,EAAM,iBAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,2BAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,cAAA;AAAA,IACN,IAAA,EAAM,wBAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,iBAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,2BAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA;AAEf;AAKO,MAAM,QAAA,GAAW;AAAA,EACtB,GAAG,cAAA;AAAA,EACH,GAAG;AACL;AAOO,SAAS,sBAAA,CACd,WAAA,EACA,kBAAA,GAAoD,QAAA,EAC/B;AACrB,EAAA,IAAI,eAAe,kBAAA,EAAoB;AACrC,IAAA,OAAO,mBAAmB,WAAW,CAAA;AAAA,EACvC;AACA,EAAA,OAAO,IAAA;AACT;AAOO,SAAS,uBAAA,CACd,YAAA,EACA,kBAAA,GAAoD,QAAA,EAC/B;AACrB,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,MAAA,CAAO,kBAAkB,CAAA,EAAG;AACpD,IAAA,IAAI,IAAA,CAAK,SAAS,YAAA,EAAc;AAC9B,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAQO,SAAS,uBAAA,CACd,YAAA,EACA,kBAAA,GAAoD,QAAA,EAC/B;AACrB,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,MAAA,CAAO,kBAAkB,CAAA,EAAG;AACpD,IAAA,IAAI,IAAA,CAAK,SAAS,YAAA,EAAc;AAC9B,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,eAAA,GAAgC;AAC9C,EAAA,IAAI,OAAO,cAAc,WAAA,EAAa;AACpC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,cAAA,EAAe,CAAE,eAAA,GAAkB,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA;AACxE,IAAA,MAAM,QAAA,GAAW,wBAAwB,IAAI,CAAA;AAC7C,IAAA,OAAO,YAAY,QAAA,CAAS,OAAA;AAAA,EAC9B;AAEA,EAAA,MAAM,iBAAiB,KAAA,CAAM,IAAA;AAAA,IAC3B,IAAI,GAAA,CAAI,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAC;AAAA,GACzD,CACG,GAAA,CAAI,CAAC,IAAA,KAAS,uBAAA,CAAwB,IAAI,CAAC,CAAA,CAC3C,MAAA,CAAO,CAAC,EAAA,KAAO,EAAE,CAAA;AAEpB,EAAA,OAAO,cAAA,CAAe,CAAC,CAAA,IAAK,QAAA,CAAS,OAAA;AACvC;AAEO,SAAS,eAAe,GAAA,EAAmC;AAChE,EAAA,OACE,QAAQ,IAAA,IACR,OAAO,QAAQ,QAAA,IACf,MAAA,IAAU,OACV,MAAA,IAAU,GAAA,IACV,UAAU,GAAA,IACV,OAAA,IAAW,OACX,QAAA,IAAY,GAAA,IACZ,eAAe,GAAA,KACd,OAAO,IAAI,IAAA,KAAS,QAAA,IAAY,GAAA,CAAI,IAAA,KAAS,SAC9C,OAAO,GAAA,CAAI,SAAS,QAAA,IACpB,OAAO,IAAI,IAAA,KAAS,QAAA,IACpB,OAAO,GAAA,CAAI,KAAA,KAAU,aACrB,OAAO,GAAA,CAAI,WAAW,SAAA,IACtB,OAAO,IAAI,SAAA,KAAc,SAAA;AAE7B;AAKO,SAAS,cAAA,CACd,IAAA,EACA,kBAAA,GAAoD,QAAA,EAC/B;AAErB,EAAA,IAAI,cAAA,CAAe,IAAI,CAAA,EAAG;AAGxB,IAAA,OAAO,uBAAA,CAAwB,IAAA,CAAK,IAAA,EAAM,kBAAkB,CAAA;AAAA,EAC9D;AAGA,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OACE,sBAAA,CAAuB,IAAA,EAAM,kBAAkB,CAAA,IAC/C,uBAAA,CAAwB,IAAA,EAAM,kBAAkB,CAAA,IAChD,uBAAA,CAAwB,IAAA,EAAM,kBAAkB,CAAA,IAChD,IAAA;AAEJ;AAMO,SAAS,gBAAA,CACd,KAAA,EACA,KAAA,EACA,kBAAA,GAAoD,QAAA,EAC3C;AACT,EAAA,MAAM,QAAA,GAAW,cAAA,CAAe,KAAA,EAAO,kBAAkB,CAAA;AACzD,EAAA,MAAM,QAAA,GAAW,cAAA,CAAe,KAAA,EAAO,kBAAkB,CAAA;AAEzD,EAAA,OACE,aAAa,IAAA,IAAQ,QAAA,KAAa,IAAA,IAAQ,QAAA,CAAS,SAAS,QAAA,CAAS,IAAA;AAEzE;;ACroCA,eAAsB,SAAA,CAAU,QAAA,EAAU,OAAA,GAAU,EAAC,EAAG;AACtD,EAAA,IAAI,MAAA,CAAO,UAAU,IAAA,EAAM;AACzB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAGA,EAAA,IAAI,IAAI,GAAA,CAAI,QAAQ,CAAA,CAAE,YAAA,CAAa,IAAI,KAAK,CAAA,CAAE,IAAA,EAAK,KAAM,EAAA,EAAI;AAC3D,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,OAAO,CAAA;AACvC;;ACdA,MAAM,QAAA,GAAW;AAAA,EACf,cAAA,EAAgB,2BAAA;AAAA,EAChB,QAAA,EAAU;AACZ,CAAA;AAEA,MAAA,CAAO,OAAO,QAAQ,CAAA;;ACLf,MAAM,qBAAqB,KAAA,CAAM;AAAA,EACtC,WAAA,CACS,GAAA,EACP,aAAA,GAAgB,EAAA,EAChB;AACA,IAAA,KAAA;AAAA,MACE,mBAAmB,GAAA,CAAI,GAAG,gCAAgC,GAAA,CAAI,MAAM,KAAK,aAAa,CAAA;AAAA,KACxF;AALO,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAMT;AACF;;ACIA,MAAMA,gBAAA,GAAiB;AAAA,EACrB,GAAA,EAAK,qCAAA;AAAA,EACL,GAAA,EAAK;AACP,CAAA;AA6PA,SAAS,uBAAA,CACP,cACA,OAAA,EACA;AACA,EAAA,MAAM,EAAE,kBAAA,EAAoB,MAAA,EAAO,GAAI,OAAA;AAEvC,EAAA,IAAI,OAAO,uBAAuB,UAAA,EAAY;AAC5C,IAAA,kBAAA,CAAmB,YAAY,CAAA;AAAA,EACjC;AAEA,EAAA,YAAA,CAAa,GAAA,CAAI,KAAA,EAAO,MAAA,IAAU,MAAA,CAAO,MAAM,CAAA;AACjD;AAEA,SAAS,2BAAA,CACP,cACA,OAAA,EACA;AACA,EAAA,MAAM,EAAE,UAAS,GAAI,OAAA;AAErB,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA;AAAA,EACF;AAGA,EAAA,MAAM,iBAAiB,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GAAI,QAAA,GAAW,CAAC,QAAQ,CAAA,EAClE,IAAI,CAAC,IAAA,KAAS,6BAA6B,IAAI,CAAC,EAChD,MAAA,CAAO,CAAC,SAAS,IAAI,CAAA;AAExB,EAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,IAAI,IAAI,aAAa,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAE7D,EAAA,YAAA,CAAa,GAAA,CAAI,YAAY,SAAS,CAAA;AACxC;AAEA,SAAS,6BACP,IAAA,EACe;AACf,EAAA,MAAM,QAAA,GACJ,IAAA,KAAS,QAAA,CAAS,IAAA,CAAK,IAAA,GACnB,eAAA,EAAgB,GAChB,OAAO,IAAA,KAAS,QAAA,GAChB,uBAAA,CAAwB,IAAI,CAAA,GAC5B,eAAe,IAAI,CAAA,GACnB,IAAA,CAAK,IAAA,KAAS,QAAA,CAAS,IAAA,CAAK,IAAA,GAC1B,eAAA,EAAgB,GAChB,uBAAA,CAAwB,IAAA,CAAK,IAAI,CAAA,GACnC,IAAA;AAEN,EAAA,OAAO,QAAA,EAAU,SAAA,GAAY,QAAA,CAAS,IAAA,GAAO,IAAA;AAC/C;AAEA,SAAS,0CAAA,CACP,cACA,OAAA,EACA;AACA,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAO,YAAA,EAAa,GAAI,OAAA;AAEvC,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EACzC;AAEA,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EAC3C;AAEA,EAAA,IAAI,iBAAiB,MAAA,EAAW;AAC9B,IAAA,YAAA,CAAa,GAAA,CAAI,cAAA,EAAgB,MAAA,CAAO,YAAY,CAAC,CAAA;AAAA,EACvD;AACF;AAEA,SAAS,0BAAA,CACP,cACA,OAAA,EACA;AACA,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,UAAA,EAAY,cAAa,GAAI,OAAA;AAE/D,EAAA,IAAI,SAAS,MAAA,EAAW;AACtB,IAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EACzC;AAEA,EAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,IAAA,YAAA,CAAa,GAAA;AAAA,MACX,WAAA;AAAA,MACA,SAAA,KAAc,IAAA,GAAO,SAAA,GAAY,SAAA,CAAU,KAAK,GAAG;AAAA,KACrD;AAAA,EACF;AAEA,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EAC/C;AAEA,EAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,IAAA,YAAA,CAAa,GAAA,CAAI,YAAA,EAAc,UAAA,GAAa,MAAA,GAAS,OAAO,CAAA;AAAA,EAC9D;AAEA,EAAA,IAAI,iBAAiB,MAAA,EAAW;AAC9B,IAAA,YAAA,CAAa,GAAA,CAAI,cAAA,EAAgB,YAAA,GAAe,MAAA,GAAS,OAAO,CAAA;AAAA,EAClE;AACF;AAaA,eAAe,OAAA,CACb,KAAA,EACA,OAAA,GAA4B,EAAC,EACG;AAChC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AAC1D,IAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,EACxD;AAEA,EAAA,MAAM,WAAW,IAAI,GAAA;AAAA,IACnB,CAAA,UAAA,EAAa,kBAAA,CAAmB,KAAK,CAAC,CAAA,KAAA,CAAA;AAAA,IACtC,QAAA,CAAS;AAAA,GACX;AAEA,EAAA,uBAAA,CAAwB,QAAA,CAAS,cAAc,OAAO,CAAA;AACtD,EAAA,2BAAA,CAA4B,QAAA,CAAS,cAAc,OAAO,CAAA;AAC1D,EAAA,0CAAA,CAA2C,QAAA,CAAS,cAAc,OAAO,CAAA;AACzE,EAAA,0BAAA,CAA2B,QAAA,CAAS,cAAc,OAAO,CAAA;AAEzD,EAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,QAAA,CAAS,UAAU,CAAA;AAE/C,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,IAAA,MAAM,IAAI,YAAA,CAAa,GAAA,EAAKA,iBAAe,GAAA,CAAI,MAAM,KAAK,EAAE,CAAA;AAAA,EAC9D;AAEA,EAAA,OAAO,MAAM,IAAI,IAAA,EAAK;AACxB;AAYA,eAAe,OAAA,CACb,QAAA,EACA,OAAA,GAAmC,EAAC,EACJ;AAChC,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AACnD,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACrE;AAEA,EAAA,MAAM,WAAW,IAAI,GAAA;AAAA,IACnB,aAAa,QAAA,CAAS,CAAC,CAAC,CAAA,CAAA,EAAI,QAAA,CAAS,CAAC,CAAC,CAAA,KAAA,CAAA;AAAA,IACvC,QAAA,CAAS;AAAA,GACX;AAEA,EAAA,uBAAA,CAAwB,QAAA,CAAS,cAAc,OAAO,CAAA;AACtD,EAAA,2BAAA,CAA4B,QAAA,CAAS,cAAc,OAAO,CAAA;AAC1D,EAAA,0CAAA,CAA2C,QAAA,CAAS,cAAc,OAAO,CAAA;AAEzE,EAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,QAAA,CAAS,UAAU,CAAA;AAE/C,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,IAAA,MAAM,IAAI,YAAA,CAAa,GAAA,EAAKA,iBAAe,GAAA,CAAI,MAAM,KAAK,EAAE,CAAA;AAAA,EAC9D;AAEA,EAAA,OAAO,MAAM,IAAI,IAAA,EAAK;AACxB;AAaA,eAAe,IAAA,CACb,EAAA,EACA,OAAA,GAAgC,EAAC,EACD;AAChC,EAAA,MAAM,WAAW,IAAI,GAAA,CAAI,aAAa,EAAE,CAAA,KAAA,CAAA,EAAS,SAAS,cAAc,CAAA;AAExE,EAAA,uBAAA,CAAwB,QAAA,CAAS,cAAc,OAAO,CAAA;AACtD,EAAA,2BAAA,CAA4B,QAAA,CAAS,cAAc,OAAO,CAAA;AAE1D,EAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,QAAA,CAAS,UAAU,CAAA;AAE/C,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,IAAA,MAAM,IAAI,YAAA,CAAa,GAAA,EAAKA,iBAAe,GAAA,CAAI,MAAM,KAAK,EAAE,CAAA;AAAA,EAC9D;AAEA,EAAA,OAAO,MAAM,IAAI,IAAA,EAAK;AACxB;AAYA,eAAeC,OAAA,CACb,OAAA,EACA,OAAA,GAA4B,EAAC,EACK;AAClC,EAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,WAAA,GAAc,OAAA,CACjB,GAAA,CAAI,CAAC,KAAA,KAAU,mBAAmB,KAAK,CAAC,CAAA,CACxC,IAAA,CAAK,GAAG,CAAA;AAEX,EAAA,MAAM,WAAW,IAAI,GAAA;AAAA,IACnB,aAAa,WAAW,CAAA,KAAA,CAAA;AAAA,IACxB,QAAA,CAAS;AAAA,GACX;AAEA,EAAA,uBAAA,CAAwB,QAAA,CAAS,cAAc,OAAO,CAAA;AACtD,EAAA,2BAAA,CAA4B,QAAA,CAAS,cAAc,OAAO,CAAA;AAC1D,EAAA,0CAAA,CAA2C,QAAA,CAAS,cAAc,OAAO,CAAA;AACzE,EAAA,0BAAA,CAA2B,QAAA,CAAS,cAAc,OAAO,CAAA;AAEzD,EAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,QAAA,CAAS,UAAU,CAAA;AAE/C,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,IAAA,MAAM,IAAI,YAAA,CAAa,GAAA,EAAKD,iBAAe,GAAA,CAAI,MAAM,KAAK,EAAE,CAAA;AAAA,EAC9D;AAEA,EAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,IAAA,EAAK;AAE3B,EAAA,OAAO,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,CAAC,GAAG,CAAA,GAAI,GAAA;AACxC;AAOA,MAAM,SAAA,GAAY;AAAA,EAChB,OAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,SACAC;AACF;;ACzgBA,MAAMD,gBAAA,GAAiB;AAAA,EACrB,GAAA,EAAK;AACP,CAAA;AAkHA,eAAe,IAAA,CACb,OAAA,GAAkC,EAAC,EACP;AAC5B,EAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,CAAA,mBAAA,CAAA,EAAuB,SAAS,cAAc,CAAA;AACvE,EAAA,QAAA,CAAS,aAAa,GAAA,CAAI,KAAA,EAAO,OAAA,CAAQ,MAAA,IAAU,OAAO,MAAM,CAAA;AAEhE,EAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,IAAA,QAAA,CAAS,YAAA,CAAa,GAAA;AAAA,MACpB,WAAA;AAAA,MACA,OAAA,CAAQ,YAAY,MAAA,GAAS;AAAA,KAC/B;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,SAAS,QAAA,EAAS;AAExC,EAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,aAAa,CAAA;AAEzC,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,IAAA,MAAM,IAAI,YAAA;AAAA,MACR,GAAA;AAAA,MACA,IAAI,MAAA,IAAUA,gBAAA,GAAiBA,gBAAA,CAAe,GAAA,CAAI,MAAM,CAAA,GAAI;AAAA,KAC9D;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,IAAA,EAAK;AAC3B,EAAA,OAAO,GAAA;AACT;AAMA,MAAM,WAAA,GAAc;AAAA,EAClB;AACF;;ACtJA,MAAMA,gBAAA,GAAiB;AAAA,EACrB,GAAA,EAAK;AACP,CAAA;AA0GA,eAAe,MAAA,CACb,KAAA,EACA,OAAA,GAAoC,EAAC,EACJ;AACjC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AAC1D,IAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,EACxD;AAEA,EAAA,MAAM,WAAW,IAAI,GAAA;AAAA,IACnB,sBAAsB,KAAK,CAAA,KAAA,CAAA;AAAA,IAC3B,QAAA,CAAS;AAAA,GACX;AACA,EAAA,QAAA,CAAS,aAAa,GAAA,CAAI,KAAA,EAAO,OAAA,CAAQ,MAAA,IAAU,OAAO,MAAM,CAAA;AAEhE,EAAA,IAAI,WAAW,OAAA,EAAS;AACtB,IAAA,QAAA,CAAS,aAAa,GAAA,CAAI,OAAA,EAAS,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA;AAAA,EAC7D;AAEA,EAAA,IAAI,qBAAqB,OAAA,EAAS;AAChC,IAAA,QAAA,CAAS,YAAA,CAAa,GAAA;AAAA,MACpB,iBAAA;AAAA,MACA,OAAA,CAAQ,gBAAgB,QAAA;AAAS,KACnC;AAAA,EACF;AAEA,EAAA,IAAI,aAAa,OAAA,EAAS;AACxB,IAAA,QAAA,CAAS,aAAa,GAAA,CAAI,SAAA,EAAW,OAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,aAAA,GAAgB,SAAS,QAAA,EAAS;AACxC,EAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,aAAa,CAAA;AAEzC,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,IAAA,MAAM,IAAI,YAAA;AAAA,MACR,GAAA;AAAA,MACA,IAAI,MAAA,IAAUA,gBAAA,GAAiBA,gBAAA,CAAe,GAAA,CAAI,MAAM,CAAA,GAAI;AAAA,KAC9D;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,IAAA,EAAK;AAC3B,EAAA,OAAO,GAAA;AACT;AAoDA,eAAe,SAAA,CACb,SAAA,EACA,OAAA,GAAuC,EAAC,EACJ;AACpC,EAAA,MAAM,cAAA,GAAA,CAAkB,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,CAAC,CAAC,CAAA,GAAI,SAAA,GAAY,CAAC,SAAS,CAAA,EACzE,GAAA,CAAI,CAAC,KAAA,KAAU,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,CAAA,CACxC,IAAA,CAAK,GAAG,CAAA;AAEX,EAAA,MAAM,WAAW,IAAI,GAAA;AAAA,IACnB,yBAAyB,cAAc,CAAA,KAAA,CAAA;AAAA,IACvC,QAAA,CAAS;AAAA,GACX;AACA,EAAA,QAAA,CAAS,aAAa,GAAA,CAAI,KAAA,EAAO,OAAA,CAAQ,MAAA,IAAU,OAAO,MAAM,CAAA;AAEhE,EAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,IAAA,QAAA,CAAS,aAAa,GAAA,CAAI,OAAA,EAAS,OAAA,CAAQ,SAAA,CAAU,UAAU,CAAA;AAAA,EACjE;AAEA,EAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,IAAA,QAAA,CAAS,aAAa,GAAA,CAAI,OAAA,EAAS,OAAA,CAAQ,SAAA,CAAU,UAAU,CAAA;AAAA,EACjE;AAEA,EAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,IAAA,QAAA,CAAS,YAAA,CAAa,GAAA;AAAA,MACpB,KAAA;AAAA,MAAA,CACC,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA,GAC7B,OAAA,CAAQ,UAAA,GACR,CAAC,OAAA,CAAQ,UAAU,CAAA,EACrB,IAAA,CAAK,GAAG;AAAA,KACZ;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,SAAS,QAAA,EAAS;AACxC,EAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,aAAa,CAAA;AAEzC,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,IAAA,MAAM,IAAI,YAAA;AAAA,MACR,GAAA;AAAA,MACA,IAAI,MAAA,IAAUA,gBAAA,GAAiBA,gBAAA,CAAe,GAAA,CAAI,MAAM,CAAA,GAAI;AAAA,KAC9D;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,IAAA,EAAK;AAC3B,EAAA,OAAO,GAAA;AACT;AAMA,MAAM,WAAA,GAAc;AAAA,EAClB,MAAA;AAAA,EACA;AACF;;AC9PA,MAAMA,gBAAA,GAAiB;AAAA,EACrB,GAAA,EAAK;AACP,CAAA;AAkBA,eAAe,GAAA,CACb,MAAA,EACA,OAAA,GAA0B,EAAC,EACC;AAC5B,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AAC5D,IAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,EAC1D;AAEA,EAAA,MAAM,WAAW,IAAI,GAAA;AAAA,IACnB,CAAA,KAAA,EAAQ,kBAAA,CAAmB,MAAM,CAAC,CAAA,cAAA,CAAA;AAAA,IAClC,QAAA,CAAS;AAAA,GACX;AACA,EAAA,QAAA,CAAS,aAAa,GAAA,CAAI,KAAA,EAAO,OAAA,CAAQ,MAAA,IAAU,OAAO,MAAM,CAAA;AAChE,EAAA,MAAM,aAAA,GAAgB,SAAS,QAAA,EAAS;AAExC,EAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,aAAa,CAAA;AAEzC,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,IAAA,MAAM,IAAI,YAAA;AAAA,MACR,GAAA;AAAA,MACA,IAAI,MAAA,IAAUA,gBAAA,GAAiBA,gBAAA,CAAe,GAAA,CAAI,MAAM,CAAA,GAAI;AAAA,KAC9D;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,IAAA,EAAK;AAC3B,EAAA,OAAO,GAAA;AACT;AAMA,MAAM,IAAA,GAAO;AAAA,EACX;AACF;;ACvDO,SAAS,eAAe,KAAA,EAAe;AAE5C,EAAA,MAAM,mBAAA,GAAsB,oBAAA;AAC5B,EAAA,IAAI,KAAA;AACJ,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,aAAA;AAGJ,EAAA,IAAI,QAAQ,UAAA,CAAW,SAAS,KAAK,OAAA,CAAQ,UAAA,CAAW,UAAU,CAAA,EAAG;AACnE,IAAA,aAAA,GAAgB,OAAA;AAAA,EAClB,YAAY,KAAA,GAAQ,mBAAA,CAAoB,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AAC/D,IAAA,aAAA,GAAgB,CAAA,8BAAA,EAAiC,KAAA,CAAM,CAAC,CAAC,CAAA,WAAA,CAAA;AAAA,EAC3D,CAAA,MAAO;AAEL,IAAA,aAAA,GAAgB,iCAAiC,OAAO,CAAA,WAAA,CAAA;AAAA,EAC1D;AAEA,EAAA,OAAO,aAAA;AACT;AAuBO,MAAM,eAAA,CAAgB;AAAA,EAC3B,WAAA,CAIU,MAKA,WAAA,EAKA,EAAA,EAKA,gBAKA,WAAA,EAKA,QAAA,EAKD,UAAA,GAAsB,KAAA,EAKtB,kBAAA,EACP;AApCQ,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAKA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AAKA,IAAA,IAAA,CAAA,EAAA,GAAA,EAAA;AAKA,IAAA,IAAA,CAAA,cAAA,GAAA,cAAA;AAKA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AAKA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAKD,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAKA,IAAA,IAAA,CAAA,kBAAA,GAAA,kBAAA;AAAA,EACN;AAAA;AAAA;AAAA;AAAA;AAAA,EAMH,OAAA,GAAkB;AAChB,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EAEA,WAAA,GAAsB;AACpB,IAAA,OAAO,GAAG,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA,CAAA,EAAI,KAAK,IAAI,CAAA,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAA,GAAkB;AAChB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAA,GAAgB;AACd,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAAyB;AACvB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAA,GAAuC;AACrC,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW,WAAA,EAA8B;AACvC,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,UAAA,CAAW,WAAW,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW,WAAA,EAAsC;AAC/C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,UAAA,CAAW,WAAW,CAAA;AAC1D,IAAA,IAAA,CAAK,iBAAiB,OAAO,CAAA;AAC7B,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAA,GAAsC;AACpC,IAAA,OAAO,IAAA,CAAK,cAAA,CACT,WAAA,EAAY,CACZ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,IAAI,CAAA,CACxB,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,MAAA,IAAA,CAAK,iBAAiB,CAAC,CAAA;AACvB,MAAA,OAAO,CAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAA,GAAsB;AACpB,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAA,GAA8B;AAC5B,IAAA,OAAO,cAAA,CAAe,IAAA,CAAK,KAAA,EAAO,CAAA;AAAA,EACpC;AAAA,EAEA,gBAAA,CAAiB,UAA2B,IAAA,EAAuB;AACjE,IAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,EAAY,OAAO,OAAA;AAEhC,IAAA,IAAI,QAAQ,kBAAA,EAAoB;AAC9B,MAAA,OAAA,CAAQ,IAAA,CAAK,QAAQ,kBAAkB,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAA,MAAM,IAAA,GAAO,QAAQ,WAAA,EAAY;AACjC,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,UAAU,IAAI,CAAA,wDAAA;AAAA,OAChB;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AACF;AAKO,MAAM,iBAAA,CAAkB;AAAA,EAW7B,WAAA,CAIU,MAKA,EAAA,EACR;AANQ,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAKA,IAAA,IAAA,CAAA,EAAA,GAAA,EAAA;AAhBV;AAAA;AAAA;AAAA,IAAA,IAAA,CAAQ,WAA+C,EAAC;AAKxD;AAAA;AAAA;AAAA,IAAA,IAAA,CAAQ,kBAA0C,EAAC;AAAA,EAYhD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMH,OAAA,GAAkB;AAChB,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAA,GAAgB;AACd,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,CAAA,EAAoB;AAC7B,IAAA,IAAA,CAAK,QAAA,CAAS,CAAA,CAAE,OAAA,EAAS,CAAA,GAAI,CAAA;AAC7B,IAAA,IAAA,CAAK,eAAA,CAAgB,KAAK,CAAC,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,WAAA,EAA8B;AACvC,IAAA,OAAO,eAAe,IAAA,CAAK,QAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW,WAAA,EAAsC;AAC/C,IAAA,OAAO,WAAA,IAAe,KAAK,QAAA,GACvB,IAAA,CAAK,SAAS,WAAW,CAAA,GACzB,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAA,GAAsC;AACpC,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAA,GAAqC;AACnC,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAA,CAAE,gBAAA,EAAiB;AAAA,EAClD;AACF;AAEA,MAAM,gBAAA,GAAmB;AAAA,EACvB;AAAA,IACE,gBAAA,EAAkB,YAAA;AAAA,IAClB,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,YAAA;AAAA,QACJ,IAAA,EAAM,YAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,oDAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,iBAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,8DAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,kBAAA;AAAA,QACJ,IAAA,EAAM,UAAA;AAAA,QACN,WAAA,EAAa,OAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,gEAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,kBAAA;AAAA,QACJ,IAAA,EAAM,UAAA;AAAA,QACN,WAAA,EAAa,OAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,gEAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,mBAAA;AAAA,QACJ,IAAA,EAAM,WAAA;AAAA,QACN,WAAA,EAAa,QAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,kEAAA;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,gBAAA,EAAkB,YAAA;AAAA,IAClB,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,YAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,iBAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,mBAAA;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,QAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAAA,EACA;AAAA,IACE,gBAAA,EAAkB,SAAA;AAAA,IAClB,IAAA,EAAM,MAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,SAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,cAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,eAAA;AAAA,QACJ,IAAA,EAAM,OAAA;AAAA,QACN,WAAA,EAAa,OAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,YAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,IAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAAA,EAEA;AAAA,IACE,gBAAA,EAAkB,SAAA;AAAA,IAClB,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,YAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,oDAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,iBAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,8DAAA;AAAA;AACtB;AACF,GACF;AAAA,EAEA;AAAA,IACE,gBAAA,EAAkB,WAAA;AAAA,IAClB,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,WAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA;AAAA;AAAA;AAAA,OAIZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,gBAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA;AAAA;AAAA;AAAA;AAIZ;AACF,GACF;AAAA,EAEA;AAAA,IACE,gBAAA,EAAkB,WAAA;AAAA,IAClB,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,WAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,gBAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAAA,EAEA;AAAA,IACE,gBAAA,EAAkB,cAAA;AAAA,IAClB,IAAA,EAAM,WAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,WAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,qDAAA;AAAA;AACtB;AACF,GACF;AAAA,EAEA;AAAA,IACE,gBAAA,EAAkB,WAAA;AAAA,IAClB,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,QAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAAA,EAEA;AAAA,IACE,gBAAA,EAAkB,WAAA;AAAA,IAClB,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,WAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,gBAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAAA,EAEA;AAAA,IACE,gBAAA,EAAkB,UAAA;AAAA,IAClB,IAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,UAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,+CAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,eAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,kBAAA,EAAoB,CAAA,+CAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,gBAAA;AAAA,QACJ,IAAA,EAAM,OAAA;AAAA,QACN,WAAA,EAAa,OAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,+CAAA;AAAA;AACtB;AACF,GACF;AAAA,EAEA;AAAA,IACE,gBAAA,EAAkB,QAAA;AAAA,IAClB,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,WAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,gBAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,iBAAA;AAAA,QACJ,IAAA,EAAM,OAAA;AAAA,QACN,WAAA,EAAa,OAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,kBAAA;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,QAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAAA,EAEA;AAAA,IACE,gBAAA,EAAkB,kBAAA;AAAA,IAClB,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,eAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,oBAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAAA,EACA;AAAA,IACE,gBAAA,EAAkB,SAAA;AAAA,IAClB,IAAA,EAAM,MAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,SAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,8CAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,cAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,wDAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,eAAA;AAAA,QACJ,IAAA,EAAM,OAAA;AAAA,QACN,WAAA,EAAa,OAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY;AAAA,OACd;AAAA,MACA;AAAA,QACE,EAAA,EAAI,gBAAA;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,QAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,4DAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,uBAAA;AAAA,QACJ,IAAA,EAAM,eAAA;AAAA,QACN,WAAA,EAAa,eAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,0EAAA;AAAA;AACtB;AACF,GACF;AAAA,EAEA;AAAA,IACE,gBAAA,EAAkB,YAAA;AAAA,IAClB,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,YAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,UAAA,EAAY,IAAA;AAAA,QACZ,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,uBAAA;AAAA,QACJ,IAAA,EAAM,YAAA;AAAA,QACN,UAAA,EAAY,IAAA;AAAA,QACZ,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,qBAAA;AAAA,QACJ,IAAA,EAAM,UAAA;AAAA,QACN,UAAA,EAAY,IAAA;AAAA,QACZ,WAAA,EAAa,OAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,oBAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,UAAA,EAAY,IAAA;AAAA,QACZ,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAAA,EAEA;AAAA,IACE,gBAAA,EAAkB,UAAA;AAAA,IAClB,IAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,UAAA,EAAY,IAAA;AAAA,IACZ,kBAAA,EAAoB,CAAA,gFAAA,CAAA;AAAA,IACpB,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,UAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,gEAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,qBAAA;AAAA,QACJ,IAAA,EAAM,YAAA;AAAA,QACN,WAAA,EAAa,YAAA;AAAA,QACb,UAAA,EAAY,IAAA;AAAA,QACZ,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,kBAAA,EAAoB,CAAA,2EAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,eAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,qEAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,gBAAA;AAAA,QACJ,IAAA,EAAM,OAAA;AAAA,QACN,WAAA,EAAa,OAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,sEAAA;AAAA;AACtB;AACF,GACF;AAAA,EAEA;AAAA,IACE,gBAAA,EAAkB,YAAA;AAAA,IAClB,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,SAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,iDAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,cAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,2DAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,eAAA;AAAA,QACJ,IAAA,EAAM,OAAA;AAAA,QACN,WAAA,EAAa,OAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,6DAAA;AAAA;AACtB;AACF,GACF;AAAA,EAEA;AAAA,IACE,gBAAA,EAAkB,aAAA;AAAA,IAClB,IAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,UAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,mDAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,eAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,6DAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,gBAAA;AAAA,QACJ,IAAA,EAAM,OAAA;AAAA,QACN,WAAA,EAAa,OAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,+DAAA;AAAA;AACtB;AACF,GACF;AAAA,EAEA;AAAA,IACE,gBAAA,EAAkB,UAAA;AAAA,IAClB,IAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,OAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,6CAAA;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,gBAAA,EAAkB,cAAA;AAAA,IAClB,IAAA,EAAM,WAAA;AAAA,IACN,WAAA,EAAa,iCAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,WAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,qDAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,gBAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,+DAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,iBAAA;AAAA,QACJ,IAAA,EAAM,OAAA;AAAA,QACN,WAAA,EAAa,OAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,iEAAA;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,gBAAA,EAAkB,cAAA;AAAA,IAClB,IAAA,EAAM,WAAA;AAAA,IACN,WAAA,EAAa,kDAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,WAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,qDAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,gBAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,+DAAA;AAAA,OACtB;AAAA,MACA;AAAA,QACE,EAAA,EAAI,iBAAA;AAAA,QACJ,IAAA,EAAM,OAAA;AAAA,QACN,WAAA,EAAa,OAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,kBAAA,EAAoB,CAAA,iEAAA;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,gBAAA,EAAkB,cAAA;AAAA,IAClB,IAAA,EAAM,WAAA;AAAA,IACN,WAAA,EAAa,kDAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,cAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,mBAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,oBAAA;AAAA,QACJ,IAAA,EAAM,OAAA;AAAA,QACN,WAAA,EAAa,OAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAAA,EACA;AAAA,IACE,gBAAA,EAAkB,cAAA;AAAA,IAClB,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,cAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,mBAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAAA,EACA;AAAA,IACE,gBAAA,EAAkB,YAAA;AAAA,IAClB,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,YAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,iBAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,kBAAA;AAAA,QACJ,IAAA,EAAM,OAAA;AAAA,QACN,WAAA,EAAa,OAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAAA,EACA;AAAA,IACE,gBAAA,EAAkB,YAAA;AAAA,IAClB,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,YAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,iBAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAAA,EACA;AAAA,IACE,gBAAA,EAAkB,aAAA;AAAA,IAClB,IAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,aAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,kBAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,mBAAA;AAAA,QACJ,IAAA,EAAM,OAAA;AAAA,QACN,WAAA,EAAa,OAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAAA,EACA;AAAA,IACE,gBAAA,EAAkB,cAAA;AAAA,IAClB,IAAA,EAAM,WAAA;AAAA,IACN,WAAA,EAAa,iCAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,cAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,mBAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,oBAAA;AAAA,QACJ,IAAA,EAAM,OAAA;AAAA,QACN,WAAA,EAAa,OAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAAA,EACA;AAAA,IACE,gBAAA,EAAkB,UAAA;AAAA,IAClB,IAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,UAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,eAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAAA,EACA;AAAA,IACE,gBAAA,EAAkB,SAAA;AAAA,IAClB,IAAA,EAAM,MAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,SAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,cAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,gBAAA;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,QAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,EAAA,EAAI,uBAAA;AAAA,QACJ,IAAA,EAAM,eAAA;AAAA,QACN,WAAA,EAAa,eAAA;AAAA,QACb,WAAA,EAAa,EAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF;AAEJ,CAAA;AAOO,MAAM,wBAAA,GAA2B;AAAA,EACtC,OAAA,EAAS,YAAA;AAAA,EACT,KAAA,EAAO,UAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,SAAA,EAAW,cAAA;AAAA,EACX,SAAA,EAAW,cAAA;AAAA,EACX,SAAA,EAAW,cAAA;AAAA,EACX,MAAA,EAAQ,WAAA;AAAA,EACR,MAAA,EAAQ,WAAA;AAAA,EACR,KAAA,EAAO,UAAA;AAAA,EACP,KAAA,EAAO,UAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,aAAA,EAAe,kBAAA;AAAA,EACf,OAAA,EAAS,YAAA;AAAA,EACT,QAAA,EAAU,aAAA;AAAA,EACV,OAAA,EAAS;AACX;AA2BO,MAAM,kBAAA,GAAuC;AAAA,EAClD,GAAG;AACL;AAGA,SAAS,mCAAA,CACP,YACA,YAAA,EACA;AACA,EAAA,IACE,mBAAmB,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,gBAAA,KAAqB,UAAU,CAAA,EACxE;AACA,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,2BAA2B,UAAU,CAAA,0CAAA;AAAA,KACvC;AAAA,EACF;AAEA,EAAA,MAAM,oBAAoB,kBAAA,CAAmB,IAAA;AAAA,IAC3C,CAAC,KAAA,KAAU,KAAA,CAAM,gBAAA,KAAqB;AAAA,GACxC;AACA,EAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,sDAAsD,YAAY,CAAA;AAAA,KACpE;AAAA,EACF;AACA,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,GAAG,iBAAA;AAAA,IACH,gBAAA,EAAkB;AAAA,GACpB;AACA,EAAA,kBAAA,CAAmB,KAAK,YAAY,CAAA;AACtC;AAGA,MAAA,CAAO,OAAA,CAAQ,wBAAwB,CAAA,CAAE,OAAA;AAAA,EACvC,CAAC,CAAC,UAAA,EAAY,YAAY,CAAA,KAAM;AAC9B,IAAA,mCAAA,CAAoC,YAAY,YAAY,CAAA;AAAA,EAC9D;AACF,CAAA;AAEA,SAAS,wBAAwB,cAAA,EAAmC;AAClE,EAAA,OAAO,IAAI,MAAM,cAAA,EAAgB;AAAA,IAC/B,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,MAAA,IAAI,MAAA,CAAO,UAAA,CAAW,IAAc,CAAA,EAAG;AACrC,QAAA,OAAO,MAAA,CAAO,WAAW,IAAc,CAAA;AAAA,MACzC;AAKA,MAAA,IAAI,IAAA,CAAK,QAAA,EAAS,CAAE,WAAA,OAAmB,IAAA,EAAiB;AACtD,QAAA,OAAO,eAAe,iBAAA,EAAkB;AAAA,MAC1C;AAEA,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,MAAM,QAAQ,CAAA;AAEhD,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,GACD,CAAA;AACH;AAEA,SAAS,cAAA,GAA+B;AACtC,EAAA,MAAM,WAAW,EAAC;AAElB,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,kBAAA,CAAmB,MAAA,EAAQ,KAAK,CAAA,EAAG;AACrD,IAAA,MAAM,YAAA,GAAe,mBAAmB,CAAC,CAAA;AAEzC,IAAA,MAAM,QAAA,GAAW,uBAAA;AAAA,MACf,IAAI,iBAAA,CAAkB,YAAA,CAAa,IAAA,EAAM,aAAa,gBAAgB;AAAA,KACxE;AAEA,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,aAAa,QAAA,CAAS,MAAA,EAAQ,KAAK,CAAA,EAAG;AACxD,MAAA,MAAM,WAAA,GAAc,YAAA,CAAa,QAAA,CAAS,CAAC,CAAA;AAC3C,MAAA,MAAM,UAAU,IAAI,eAAA;AAAA,QAClB,WAAA,CAAY,IAAA;AAAA;AAAA,QACZ,WAAA,CAAY,WAAA;AAAA;AAAA,QACZ,WAAA,CAAY,EAAA;AAAA;AAAA,QACZ,QAAA;AAAA;AAAA,QACA,WAAA,CAAY,WAAA;AAAA,QACZ,WAAA,CAAY,QAAA;AAAA;AAAA,QACZ,WAAA,CAAY;AAAA;AAAA,OACd;AAEA,MAAA,QAAA,CAAS,WAAW,OAAO,CAAA;AAAA,IAC7B;AACA,IAAA,QAAA,CAAS,YAAA,CAAa,gBAAgB,CAAA,GAAI,QAAA;AAAA,EAC5C;AACA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,aACd,KAAA,EACQ;AACR,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,QAAA,CAAS,mBAAmB,CAAC,CAAA,CAAE,gBAAgB,CAAA,CACnD,iBAAA,GACA,KAAA,EAAM;AAAA,EACX;AAGA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,YAAiB,MAAA,EAAQ;AACxD,IAAA,OAAO,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AAAA,EAClC;AAEA,EAAA,IAAI,iBAAiB,eAAA,EAAiB;AACpC,IAAA,OAAO,MAAM,KAAA,EAAM;AAAA,EACrB;AAEA,EAAA,IAAI,iBAAiB,iBAAA,EAAmB;AACtC,IAAA,OAAO,KAAA,CAAM,iBAAA,EAAkB,CAAE,KAAA,EAAM;AAAA,EACzC;AACF;AAUO,MAAM,WAAyB,cAAA;;ACnwCtC,SAAS,mBACP,OAAA,EACqC;AACrC,EAAA,MAAM,cAAmD,EAAC;AAE1D,EAAA,SAAS,oBAAoB,QAAA,EAA0B;AACrD,IAAA,IAAI,QAAA,CAAS,IAAA,KAAS,YAAA,IAAgB,QAAA,CAAS,SAAS,iBAAA,EAAmB;AACzE,MAAA,WAAA,CAAY,KAAK,QAAwC,CAAA;AAAA,IAC3D;AAAA,EACF;AAEA,EAAA,SAAS,mBAAmB,OAAA,EAAkB;AAC5C,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,mBAAA,CAAoB,QAAQ,QAAQ,CAAA;AAAA,IACtC;AAAA,EACF;AAEA,EAAA,SAAS,6BAA6B,UAAA,EAA+B;AACnE,IAAA,KAAA,MAAW,OAAA,IAAW,WAAW,QAAA,EAAU;AACzC,MAAA,IAAI,OAAA,CAAQ,SAAS,SAAA,EAAW;AAC9B,QAAA,kBAAA,CAAmB,OAAO,CAAA;AAAA,MAC5B,CAAA,MAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,mBAAA,EAAqB;AAC/C,QAAA,4BAAA,CAA6B,OAAuC,CAAA;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,SAAS,SAAA,EAAW;AAC9B,IAAA,kBAAA,CAAmB,OAAkB,CAAA;AAAA,EACvC,CAAA,MAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,mBAAA,EAAqB;AAC/C,IAAA,4BAAA,CAA6B,OAA4B,CAAA;AAAA,EAC3D,CAAA,MAAO;AAEL,IAAA,mBAAA,CAAoB,OAAyB,CAAA;AAAA,EAC/C;AAEA,EAAA,OAAO,WAAA;AACT;AAGA,SAAS,YAAA,CAAa,CAAA,EAAa,EAAA,EAAc,EAAA,EAAsB;AACrE,EAAA,IAAI,IAAI,EAAA,CAAG,CAAC,CAAA,EACV,CAAA,GAAI,GAAG,CAAC,CAAA,EACR,EAAA,GAAK,EAAA,CAAG,CAAC,CAAA,GAAI,CAAA,EACb,EAAA,GAAK,EAAA,CAAG,CAAC,CAAA,GAAI,CAAA;AAEf,EAAA,IAAI,EAAA,KAAO,CAAA,IAAK,EAAA,KAAO,CAAA,EAAG;AACxB,IAAA,MAAM,CAAA,GAAA,CAAA,CAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,IAAK,EAAA,GAAA,CAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,IAAK,EAAA,KAAO,EAAA,GAAK,KAAK,EAAA,GAAK,EAAA,CAAA;AAEhE,IAAA,IAAI,IAAI,CAAA,EAAG;AACT,MAAA,CAAA,GAAI,GAAG,CAAC,CAAA;AACR,MAAA,CAAA,GAAI,GAAG,CAAC,CAAA;AAAA,IACV,CAAA,MAAA,IAAW,IAAI,CAAA,EAAG;AAChB,MAAA,CAAA,IAAK,EAAA,GAAK,CAAA;AACV,MAAA,CAAA,IAAK,EAAA,GAAK,CAAA;AAAA,IACZ;AAAA,EACF;AAEA,EAAA,EAAA,GAAK,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA;AACZ,EAAA,EAAA,GAAK,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA;AAEZ,EAAA,OAAO,EAAA,GAAK,KAAK,EAAA,GAAK,EAAA;AACxB;AAEA,SAAS,cAAA,CACP,MAAA,EACA,KAAA,EACA,IAAA,EACA,aACA,UAAA,EACA;AACA,EAAA,IAAI,YAAY,WAAA,EACd,KAAA;AAEF,EAAA,KAAA,IAAS,CAAA,GAAI,KAAA,GAAQ,CAAA,EAAG,CAAA,GAAI,MAAM,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA,EAAG,OAAO,KAAK,CAAA,EAAG,MAAA,CAAO,IAAI,CAAC,CAAA;AAElE,IAAA,IAAI,SAAS,SAAA,EAAW;AACtB,MAAA,KAAA,GAAQ,CAAA;AACR,MAAA,SAAA,GAAY,MAAA;AAAA,IACd;AAAA,EACF;AAEA,EAAA,IAAI,YAAY,WAAA,EAAa;AAC3B,IAAA,IAAI,KAAA,GAAQ,QAAQ,CAAA,EAAG;AACrB,MAAA,cAAA,CAAe,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAO,WAAA,EAAa,UAAU,CAAA;AAAA,IAC9D;AACA,IAAA,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAE7B,IAAA,IAAI,IAAA,GAAO,QAAQ,CAAA,EAAG;AACpB,MAAA,cAAA,CAAe,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,WAAA,EAAa,UAAU,CAAA;AAAA,IAC7D;AAAA,EACF;AACF;AAGA,SAAS,sBAAA,CACP,QACA,WAAA,EACiB;AACjB,EAAA,MAAM,IAAA,GAAO,OAAO,MAAA,GAAS,CAAA;AAC7B,EAAA,MAAM,UAAA,GAAa,CAAC,MAAA,CAAO,CAAC,CAAC,CAAA;AAC7B,EAAA,cAAA,CAAe,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,WAAA,EAAa,UAAU,CAAA;AACvD,EAAA,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA;AAC5B,EAAA,OAAO,UAAA;AACT;AAKA,SAAS,QAAA,CAAS,QAAyB,SAAA,EAAoC;AAC7E,EAAA,IAAI,MAAA,CAAO,UAAU,CAAA,EAAG;AACtB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAA,GAAc,SAAA,KAAc,MAAA,GAAY,SAAA,GAAY,SAAA,GAAY,CAAA;AACtE,EAAA,MAAM,YAAA,GAAe,sBAAA,CAAuB,MAAA,EAAQ,WAAW,CAAA;AAC/D,EAAA,OAAO,YAAA;AACT;AAEO,MAAM,IAAA,GAAO;AAAA,EAClB,kBAAA;AAAA,EACA;AACF;;ACuBA,SAAS,uBAAA,CACP,MAAA,EACA,YAAA,GAAe,IAAA,EACP;AACR,EAAA,IAAI,GAAA,GAAM,GAAG,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA;AAEnC,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,IAAK,YAAA,EAAc;AACvC,IAAA,GAAA,IAAO,CAAA,CAAA,EAAI,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA;AAAA,EACtB;AAEA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,oBAAA,CAAqB,IAAA,EAAuB,SAAA,GAAY,GAAA,EAAc;AAC7E,EAAA,IAAI,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACvD,EAAA,IAAI,SAAA,GAAY,IAAA;AAChB,EAAA,MAAM,aAAA,GAAgB,IAAA;AAEtB,EAAA,OAAO,GAAA,CAAI,SAAS,SAAA,EAAW;AAC7B,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,SAAS,CAAA;AAEjD,IAAA,GAAA,GAAM,WAAA,CAAY,GAAA,CAAI,CAAC,KAAA,KAAU,GAAG,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAA,CAAE,CAAA,CAAE,KAAK,GAAG,CAAA;AACpE,IAAA,SAAA,IAAa,aAAA;AAAA,EACf;AAEA,EAAA,OAAO,GAAA;AACT;AAYA,SAAS,QAAA,CACP,MAAA,EACA,IAAA,EACA,OAAA,GAAoC,EAAC,EAC7B;AACR,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AACxC,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,GAAQ,KAAA,GAAQ,EAAA;AACtC,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,KAAA;AACjC,EAAA,IAAI,KAAA,GAAQ,CAAC,EAAE,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAA;AAChC,EAAA,IAAI,MAAA,GAAS,CAAC,EAAE,OAAA,CAAQ,MAAA,IAAU,IAAA,CAAA;AAElC,EAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,IAAA,KAAA,GAAQ,CAAC,EAAE,KAAA,GAAQ,CAAA,CAAA;AACnB,IAAA,MAAA,GAAS,CAAC,EAAE,MAAA,GAAS,CAAA,CAAA;AAAA,EACvB;AAEA,EAAA,MAAM,WAAW,IAAI,GAAA;AAAA,IACnB,CAAA,KAAA,EAAQ,mBAAmB,KAAK,CAAC,WAAW,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,EACnD,MAAA,CAAO,CAAC,CACV,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,KAAK,IAAI,MAAM,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,IAC7C,QAAA,CAAS;AAAA,GACX;AAEA,EAAA,IAAI,iBAAiB,OAAA,EAAS;AAC5B,IAAA,QAAA,CAAS,aAAa,GAAA,CAAI,aAAA,EAAe,OAAA,CAAQ,WAAA,CAAY,UAAU,CAAA;AAAA,EACzE;AAEA,EAAA,IAAI,aAAa,OAAA,EAAS;AACxB,IAAA,IAAI,SAAA,GAAY,EAAA;AAEhB,IAAA,MAAM,UAAU,YAAA,IAAgB,OAAA;AAEhC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,SAAA,IAAa,CAAA,KAAA,EAAQ,QAAQ,UAAU,CAAA,CAAA,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,OAAA,IAAW,kBAAkB,OAAA,EAAS;AACxC,MAAA,SAAA,IAAa,CAAA,OAAA,EAAU,QAAQ,YAAY,CAAA,CAAA,CAAA;AAAA,IAC7C;AAEA,IAAA,IAAI,OAAA,IAAW,QAAQ,KAAA,EAAO;AAC5B,MAAA,SAAA,IAAa,CAAA,QAAA,CAAA;AAAA,IACf;AAEA,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA,GAC/C,OAAA,CAAQ,OAAA,GACR,CAAC,OAAA,CAAQ,OAAO,CAAA;AACpB,IAAA,SAAA,IAAa,UAAA,CACV,GAAA,CAAI,CAAC,CAAA,KAAM,uBAAA,CAAwB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA,CAC/C,IAAA,CAAK,GAAG,CAAA;AACX,IAAA,QAAA,CAAS,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,SAAS,CAAA;AAAA,EAChD;AAEA,EAAA,IAAI,UAAU,OAAA,EAAS;AACrB,IAAA,IAAI,OAAA,GAAU,EAAA;AAEd,IAAA,OAAA,IAAW,CAAA,KAAA,EAAQ,OAAA,CAAQ,aAAA,IAAiB,MAAM,CAAA,CAAA,CAAA;AAElD,IAAA,IAAI,qBAAqB,OAAA,EAAS;AAChC,MAAA,OAAA,IAAW,CAAA,OAAA,EAAU,QAAQ,eAAe,CAAA,CAAA,CAAA;AAAA,IAC9C;AAEA,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,QAAQ,CAAA,GAAI,CAAA,CAAA;AAC3D,MAAA,OAAA,IAAW,CAAA,MAAA,EAAS,SAAA,CAAU,QAAA,EAAU,CAAA,CAAA,CAAA;AAAA,IAC1C;AAEA,IAAA,OAAA,IAAW,oBAAA,CAAqB,QAAQ,IAAI,CAAA;AAC5C,IAAA,QAAA,CAAS,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,OAAO,CAAA;AAAA,EAC3C;AAEA,EAAA,QAAA,CAAS,aAAa,GAAA,CAAI,KAAA,EAAO,OAAA,CAAQ,MAAA,IAAU,OAAO,MAAM,CAAA;AAEhE,EAAA,OAAO,SAAS,QAAA,EAAS;AAC3B;AAWA,SAAS,OAAA,CACP,WAAA,EACA,OAAA,GAAmC,EAAC,EAC5B;AACR,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AACxC,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,GAAQ,KAAA,GAAQ,EAAA;AACtC,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,KAAA;AACjC,EAAA,IAAI,KAAA,GAAQ,CAAC,EAAE,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAA;AAChC,EAAA,IAAI,MAAA,GAAS,CAAC,EAAE,OAAA,CAAQ,MAAA,IAAU,IAAA,CAAA;AAElC,EAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,IAAA,KAAA,GAAQ,CAAC,EAAE,KAAA,GAAQ,CAAA,CAAA;AACnB,IAAA,MAAA,GAAS,CAAC,EAAE,MAAA,GAAS,CAAA,CAAA;AAAA,EACvB;AAEA,EAAA,MAAM,WAAW,IAAI,GAAA;AAAA,IACnB,CAAA,KAAA,EAAQ,kBAAA,CAAmB,KAAK,CAAC,CAAA,QAAA,EAAW,WAAA,CAAY,CAAC,CAAC,CAAA,CAAA,EACxD,WAAA,CAAY,CAAC,CACf,CAAA,CAAA,EAAI,WAAA,CAAY,CAAC,CAAC,CAAA,CAAA,EAAI,WAAA,CAAY,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,IACzE,QAAA,CAAS;AAAA,GACX;AAEA,EAAA,IAAI,iBAAiB,OAAA,EAAS;AAC5B,IAAA,QAAA,CAAS,aAAa,GAAA,CAAI,aAAA,EAAe,OAAA,CAAQ,WAAA,CAAY,UAAU,CAAA;AAAA,EACzE;AAEA,EAAA,IAAI,aAAa,OAAA,EAAS;AACxB,IAAA,QAAA,CAAS,aAAa,GAAA,CAAI,SAAA,EAAW,OAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA;AAAA,EACjE;AAEA,EAAA,IAAI,aAAa,OAAA,EAAS;AACxB,IAAA,IAAI,SAAA,GAAY,EAAA;AAEhB,IAAA,MAAM,UAAU,YAAA,IAAgB,OAAA;AAEhC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,SAAA,IAAa,CAAA,KAAA,EAAQ,QAAQ,UAAU,CAAA,CAAA,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,OAAA,IAAW,kBAAkB,OAAA,EAAS;AACxC,MAAA,SAAA,IAAa,CAAA,OAAA,EAAU,QAAQ,YAAY,CAAA,CAAA,CAAA;AAAA,IAC7C;AAEA,IAAA,IAAI,OAAA,IAAW,QAAQ,KAAA,EAAO;AAC5B,MAAA,SAAA,IAAa,CAAA,QAAA,CAAA;AAAA,IACf;AAEA,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA,GAC/C,OAAA,CAAQ,OAAA,GACR,CAAC,OAAA,CAAQ,OAAO,CAAA;AACpB,IAAA,SAAA,IAAa,UAAA,CACV,GAAA,CAAI,CAAC,CAAA,KAAM,uBAAA,CAAwB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA,CAC/C,IAAA,CAAK,GAAG,CAAA;AACX,IAAA,QAAA,CAAS,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,SAAS,CAAA;AAAA,EAChD;AAEA,EAAA,IAAI,UAAU,OAAA,EAAS;AACrB,IAAA,IAAI,OAAA,GAAU,EAAA;AAEd,IAAA,OAAA,IAAW,CAAA,KAAA,EAAQ,OAAA,CAAQ,aAAA,IAAiB,MAAM,CAAA,CAAA,CAAA;AAElD,IAAA,IAAI,qBAAqB,OAAA,EAAS;AAChC,MAAA,OAAA,IAAW,CAAA,OAAA,EAAU,QAAQ,eAAe,CAAA,CAAA,CAAA;AAAA,IAC9C;AAEA,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,QAAQ,CAAA,GAAI,CAAA,CAAA;AAC3D,MAAA,OAAA,IAAW,CAAA,MAAA,EAAS,SAAA,CAAU,QAAA,EAAU,CAAA,CAAA,CAAA;AAAA,IAC1C;AAEA,IAAA,OAAA,IAAW,oBAAA,CAAqB,QAAQ,IAAI,CAAA;AAC5C,IAAA,QAAA,CAAS,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,OAAO,CAAA;AAAA,EAC3C;AAEA,EAAA,QAAA,CAAS,aAAa,GAAA,CAAI,KAAA,EAAO,OAAA,CAAQ,MAAA,IAAU,OAAO,MAAM,CAAA;AAEhE,EAAA,OAAO,SAAS,QAAA,EAAS;AAC3B;AAUA,SAAS,SAAA,CAAU,OAAA,GAAqC,EAAC,EAAW;AAClE,EAAA,IAAI,EAAE,SAAA,IAAa,OAAA,CAAA,IAAY,EAAE,UAAU,OAAA,CAAA,EAAU;AACnD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AACxC,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,GAAQ,KAAA,GAAQ,EAAA;AACtC,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,KAAA;AACjC,EAAA,IAAI,KAAA,GAAQ,CAAC,EAAE,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAA;AAChC,EAAA,IAAI,MAAA,GAAS,CAAC,EAAE,OAAA,CAAQ,MAAA,IAAU,IAAA,CAAA;AAElC,EAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,IAAA,KAAA,GAAQ,CAAC,EAAE,KAAA,GAAQ,CAAA,CAAA;AACnB,IAAA,MAAA,GAAS,CAAC,EAAE,MAAA,GAAS,CAAA,CAAA;AAAA,EACvB;AAEA,EAAA,MAAM,WAAW,IAAI,GAAA;AAAA,IACnB,CAAA,KAAA,EAAQ,kBAAA;AAAA,MACN;AAAA,KACD,gBAAgB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,EAAG,KAAK,IAAI,MAAM,CAAA,CAAA;AAAA,IAClD,QAAA,CAAS;AAAA,GACX;AAEA,EAAA,IAAI,iBAAiB,OAAA,EAAS;AAC5B,IAAA,QAAA,CAAS,aAAa,GAAA,CAAI,aAAA,EAAe,OAAA,CAAQ,WAAA,CAAY,UAAU,CAAA;AAAA,EACzE;AAEA,EAAA,IAAI,aAAa,OAAA,EAAS;AACxB,IAAA,QAAA,CAAS,aAAa,GAAA,CAAI,SAAA,EAAW,OAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA;AAAA,EACjE;AAEA,EAAA,IAAI,aAAa,OAAA,EAAS;AACxB,IAAA,IAAI,SAAA,GAAY,EAAA;AAEhB,IAAA,MAAM,UAAU,YAAA,IAAgB,OAAA;AAEhC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,SAAA,IAAa,CAAA,KAAA,EAAQ,QAAQ,UAAU,CAAA,CAAA,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,OAAA,IAAW,kBAAkB,OAAA,EAAS;AACxC,MAAA,SAAA,IAAa,CAAA,OAAA,EAAU,QAAQ,YAAY,CAAA,CAAA,CAAA;AAAA,IAC7C;AAEA,IAAA,IAAI,OAAA,IAAW,QAAQ,KAAA,EAAO;AAC5B,MAAA,SAAA,IAAa,CAAA,QAAA,CAAA;AAAA,IACf;AAEA,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA,GAC/C,OAAA,CAAQ,OAAA,GACR,CAAC,OAAA,CAAQ,OAAO,CAAA;AACpB,IAAA,SAAA,IAAa,UAAA,CACV,GAAA,CAAI,CAAC,CAAA,KAAM,uBAAA,CAAwB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA,CAC/C,IAAA,CAAK,GAAG,CAAA;AACX,IAAA,QAAA,CAAS,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,SAAS,CAAA;AAAA,EAChD;AAEA,EAAA,IAAI,UAAU,OAAA,EAAS;AACrB,IAAA,IAAI,OAAA,GAAU,EAAA;AAEd,IAAA,OAAA,IAAW,CAAA,KAAA,EAAQ,OAAA,CAAQ,aAAA,IAAiB,MAAM,CAAA,CAAA,CAAA;AAElD,IAAA,IAAI,qBAAqB,OAAA,EAAS;AAChC,MAAA,OAAA,IAAW,CAAA,OAAA,EAAU,QAAQ,eAAe,CAAA,CAAA,CAAA;AAAA,IAC9C;AAEA,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,QAAQ,CAAA,GAAI,CAAA,CAAA;AAC3D,MAAA,OAAA,IAAW,CAAA,MAAA,EAAS,SAAA,CAAU,QAAA,EAAU,CAAA,CAAA,CAAA;AAAA,IAC1C;AAEA,IAAA,OAAA,IAAW,oBAAA,CAAqB,QAAQ,IAAI,CAAA;AAC5C,IAAA,QAAA,CAAS,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,OAAO,CAAA;AAAA,EAC3C;AAEA,EAAA,QAAA,CAAS,aAAa,GAAA,CAAI,KAAA,EAAO,OAAA,CAAQ,MAAA,IAAU,OAAO,MAAM,CAAA;AAEhE,EAAA,OAAO,SAAS,QAAA,EAAS;AAC3B;AAMA,MAAM,UAAA,GAAa;AAAA,EACjB,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF;;ACvcA,MAAM,YAAA,GAAe,WAAA;AAKrB,MAAM,mBAAA,GAAsB,CAAA,GAAI,IAAA,CAAK,EAAA,GAAK,YAAA;AAK1C,MAAM,kBAAA,GAAqB,UAAA;AAK3B,SAAS,qBAAqB,GAAA,EAAqB;AACjD,EAAA,OAAA,CAAQ,MAAM,GAAA,IAAO,GAAA;AACvB;AAKA,SAAS,oBAAoB,GAAA,EAAqB;AAChD,EAAA,GAAA,GAAM,IAAA,CAAK,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,kBAAkB,CAAA,EAAG,CAAC,kBAAkB,CAAA;AACrE,EAAA,OAAA,CACG,MACE,GAAA,GAAM,IAAA,CAAK,EAAA,GACV,IAAA,CAAK,IAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAA,GAAK,IAAK,GAAA,GAAM,IAAA,CAAK,EAAA,GAAM,GAAG,CAAC,CAAA,IAC1D,GAAA;AAEJ;AAKA,SAAS,gBAAgB,QAAA,EAA8B;AACrD,EAAA,MAAM,UAAA,GAAa,UAAU,QAAQ,CAAA;AACrC,EAAA,OAAO;AAAA,IACL,oBAAA,CAAqB,UAAA,CAAW,CAAC,CAAC,CAAA;AAAA,IAClC,mBAAA,CAAoB,UAAA,CAAW,CAAC,CAAC;AAAA,GACnC;AACF;AAKA,SAAS,qBAAqB,CAAA,EAAmB;AAC/C,EAAA,OAAO,IAAI,GAAA,GAAM,GAAA;AACnB;AAKA,SAAS,oBAAoB,CAAA,EAAmB;AAC9C,EAAA,MAAM,EAAA,GAAK,MAAM,CAAA,GAAI,GAAA;AACrB,EAAA,OAAQ,GAAA,GAAM,IAAA,CAAK,EAAA,GAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAA,CAAK,EAAA,GAAK,IAAA,CAAK,EAAA,GAAM,GAAG,CAAC,CAAA,GAAI,EAAA;AACvE;AAKA,SAAS,gBAAgB,QAAA,EAA8B;AACrD,EAAA,OAAO,CAAC,oBAAA,CAAqB,QAAA,CAAS,CAAC,CAAC,GAAG,mBAAA,CAAoB,QAAA,CAAS,CAAC,CAAC,CAAC,CAAA;AAC7E;AAKA,SAAS,sBAAA,CAAuB,MAAgB,EAAA,EAAsB;AACpE,EAAA,MAAM,GAAA,GAAM,KAAK,EAAA,GAAK,GAAA;AACtB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,CAAC,CAAA,GAAI,GAAA;AACvB,EAAA,MAAM,IAAA,GAAO,EAAA,CAAG,CAAC,CAAA,GAAI,GAAA;AACrB,EAAA,MAAM,CAAA,GACJ,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,GAAI,KAAK,GAAA,CAAI,IAAI,CAAA,GAC9B,IAAA,CAAK,GAAA,CAAI,IAAI,IAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAA,CAAK,EAAA,CAAG,CAAC,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA,IAAK,GAAG,CAAA;AAEpE,EAAA,MAAM,SAAA,GAAY,eAAe,IAAA,CAAK,IAAA,CAAK,KAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAC,CAAA;AACzD,EAAA,OAAO,SAAA;AACT;AAOA,SAAS,gCAAgC,SAAA,EAAiC;AACxE,EAAA,MAAM,iBAAA,GAAoB,KAAA,CAAM,SAAA,CAAU,MAAM,CAAA;AAChD,EAAA,iBAAA,CAAkB,CAAC,CAAA,GAAI,CAAA;AACvB,EAAA,MAAM,IAAI,iBAAA,CAAkB,MAAA;AAE5B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,iBAAA,CAAkB,CAAC,CAAA,GACjB,sBAAA,CAAuB,SAAA,CAAU,CAAA,GAAI,CAAC,CAAA,EAAG,SAAA,CAAU,CAAC,CAAC,CAAA,GACrD,iBAAA,CAAkB,IAAI,CAAC,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,iBAAA;AACT;AAKA,SAAS,UAAU,QAAA,EAA8B;AAC/C,EAAA,MAAM,GAAA,GAAM,SAAS,CAAC,CAAA;AACtB,EAAA,MAAM,GAAA,GAAM,SAAS,CAAC,CAAA;AAEtB,EAAA,MAAM,CAAA,GAAI,GAAA;AACV,EAAA,MAAM,CAAA,GAAA,CAAA,CAAQ,GAAA,GAAM,GAAA,IAAO,CAAA,GAAK,KAAK,CAAA,GAAK,GAAA;AAC1C,EAAA,MAAM,QAAA,GAAW,CAAA,KAAM,IAAA,GAAO,GAAA,GAAM,CAAA;AAEpC,EAAA,OAAO,CAAC,UAAU,GAAG,CAAA;AACvB;AAKO,SAAS,wBAAwB,QAAA,EAAkB;AACxD,EAAA,OAAO,sBAAsB,IAAA,CAAK,GAAA,CAAK,QAAA,GAAW,IAAA,CAAK,KAAM,GAAG,CAAA;AAClE;AAKA,SAAS,mBAAA,CAIP,QAAA,EAIA,IAAA,EAIA,MAAA,GAAkB,IAAA,EACR;AACV,EAAA,MAAM,sBAAsB,CAAA,IAAK,IAAA;AAEjC,EAAA,MAAM,MAAA,GAAmB;AAAA,IACvB,QAAA,CAAS,CAAC,CAAA,GAAI,mBAAA;AAAA,IACd,QAAA,CAAS,CAAC,CAAA,GAAI;AAAA,GAChB;AAEA,EAAA,OAAO,MAAA,GAAS,CAAC,CAAC,CAAC,MAAA,CAAO,CAAC,CAAA,EAAG,CAAC,CAAC,MAAA,CAAO,CAAC,CAAC,CAAA,GAAI,MAAA;AAC/C;AAKA,SAAS,gBAAA,CAIP,QAAA,EAIA,IAAA,EAIA,MAAA,GAAkB,IAAA,EACR;AACV,EAAA,MAAM,IAAA,GAAO,gBAAgB,QAAQ,CAAA;AACrC,EAAA,OAAO,mBAAA,CAAoB,IAAA,EAAM,IAAA,EAAM,MAAM,CAAA;AAC/C;AAKA,SAAS,UAAU,OAAA,EAAyB;AAC1C,EAAA,OAAQ,OAAA,GAAU,KAAK,EAAA,GAAM,GAAA;AAC/B;AAKA,SAAS,UAAU,OAAA,EAAyB;AAC1C,EAAA,OAAQ,OAAA,GAAU,MAAO,IAAA,CAAK,EAAA;AAChC;AAQA,SAAS,0BAAA,CACP,IAAA,EACA,IAAA,EACA,KAAA,EACU;AACV,EAAA,MAAM,CAAA,GAAI,sBAAA,CAAuB,IAAA,EAAM,IAAI,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAK,SAAA,CAAU,IAAA,CAAK,CAAC,CAAC,CAAA;AAC5B,EAAA,MAAM,OAAA,GAAK,SAAA,CAAU,IAAA,CAAK,CAAC,CAAC,CAAA;AAC5B,EAAA,MAAM,OAAA,GAAK,SAAA,CAAU,IAAA,CAAK,CAAC,CAAC,CAAA;AAC5B,EAAA,MAAM,OAAA,GAAK,SAAA,CAAU,IAAA,CAAK,CAAC,CAAC,CAAA;AAE5B,EAAA,MAAM,SAAI,CAAA,GAAI,YAAA;AACd,EAAA,MAAM,CAAA,GAAI,KAAK,GAAA,CAAA,CAAK,CAAA,GAAI,SAAS,MAAC,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,MAAC,CAAA;AAChD,EAAA,MAAM,CAAA,GAAI,KAAK,GAAA,CAAI,KAAA,GAAQ,MAAC,CAAA,GAAI,IAAA,CAAK,IAAI,MAAC,CAAA;AAC1C,EAAA,MAAM,IAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,OAAE,IAAI,IAAA,CAAK,GAAA,CAAI,OAAE,CAAA,GAAI,IAAI,IAAA,CAAK,GAAA,CAAI,OAAE,CAAA,GAAI,IAAA,CAAK,IAAI,OAAE,CAAA;AAC1E,EAAA,MAAM,IAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,OAAE,IAAI,IAAA,CAAK,GAAA,CAAI,OAAE,CAAA,GAAI,IAAI,IAAA,CAAK,GAAA,CAAI,OAAE,CAAA,GAAI,IAAA,CAAK,IAAI,OAAE,CAAA;AAC1E,EAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,GAAA,CAAI,OAAE,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,OAAE,CAAA;AAE5C,EAAA,MAAM,OAAA,GAAK,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAC,CAAC,CAAA;AACjD,EAAA,MAAM,OAAA,GAAK,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAE1B,EAAA,OAAO,CAAC,SAAA,CAAU,OAAE,CAAA,EAAG,SAAA,CAAU,OAAE,CAAC,CAAA;AACtC;AAEO,MAAM,IAAA,GAAO;AAAA,EAClB,YAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA,eAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA,eAAA;AAAA,EACA,sBAAA;AAAA,EACA,SAAA;AAAA,EACA,uBAAA;AAAA,EACA,mBAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,0BAAA;AAAA,EACA;AACF;;AClLA,IAAI,SAAA,GAAY,IAAA;AAKT,SAAS,YAAA,GAA4C;AAC1D,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,SAAA,GAAY,IAAI,QAAA,CAAS,EAAE,OAAA,EAAS,MAAA,CAAO,eAAe,CAAA;AAAA,EAC5D;AACA,EAAA,OAAO,SAAA;AACT;AAKA,eAAsB,yBACpB,IAAA,EACoB;AACpB,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,CAAC,IAAI,CAAC,CAAA;AAC5B,EAAA,MAAM,WAAA,GAAc,MAAM,iBAAA,CAAkB,IAAI,CAAA;AAEhD,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA;AAClC,EAAA,MAAA,CAAO,QAAQ,WAAA,CAAY,KAAA;AAC3B,EAAA,MAAA,CAAO,SAAS,WAAA,CAAY,MAAA;AAC5B,EAAA,GAAA,CAAI,SAAA,CAAU,WAAA,EAAa,CAAA,EAAG,CAAC,CAAA;AAE/B,EAAA,MAAM,SAAA,GAAY,IAAI,YAAA,CAAa,CAAA,EAAG,GAAG,MAAA,CAAO,KAAA,EAAO,OAAO,MAAM,CAAA;AACpE,EAAA,OAAO;AAAA,IACL,QAAQ,SAAA,CAAU,IAAA;AAAA,IAClB,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,YAAY,SAAA,CAAU,IAAA,CAAK,MAAA,IAAU,MAAA,CAAO,QAAQ,MAAA,CAAO,MAAA;AAAA,GAC7D;AACF;AAEO,SAAS,0BAAA,GAAwD;AACtE,EAAA,IAAI,OAAO,iBAAA,EAAmB;AAC5B,IAAA,OAAO,MAAA,CAAO,iBAAA;AAAA,EAChB;AAEA,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,OAAO,wBAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,GACF;AACF;AAEO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,OAAO,CAAC,CAAC,MAAA,CAAO,iBAAA,IAAqB,OAAO,MAAA,KAAW,WAAA;AACzD;;AC9FA,MAAM,eAAA,GAAkB,gBAAA;AACxB,MAAM,cAAA,GAAiB,EAAA;AACvB,MAAM,aAAA,GAAgB,GAAA;AAEtB,IAAI,eAAA,GAA4B,IAAA;AAiChC,MAAM,cAAA,GAAiB;AAAA,EACrB,GAAA,EAAK;AACP,CAAA;AAEA,eAAe,eAAA,CACb,WACA,MAAA,EACqB;AACrB,EAAA,IAAI,SAAA,CAAU,SAAS,aAAA,EAAe;AACpC,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,SAAS,cAAc,CAAA;AACzD,EAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,EAAE,QAAQ,KAAA,EAAM,EAAG,MAAM,IAAI,CAAA,CAAE,GAAA;AAAA,IAC7D,CAAC,GAAG,IAAA,KAAS;AACX,MAAA,MAAM,WAAW,IAAA,GAAO,cAAA;AACxB,MAAA,MAAMC,MAAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,QAAA,EAAU,WAAW,cAAc,CAAA;AACjE,MAAA,MAAM,YAAA,GAAeA,MAAAA,CAAM,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC/D,MAAA,MAAM,WAAW,IAAI,GAAA;AAAA,QACnB,aAAa,YAAY,CAAA,KAAA,CAAA;AAAA,QACzB,QAAA,CAAS;AAAA,OACX;AACA,MAAA,QAAA,CAAS,YAAA,CAAa,GAAA,CAAI,KAAA,EAAO,MAAM,CAAA;AACvC,MAAA,OAAO,SAAA,CAAU,QAAA,CAAS,QAAA,EAAU,CAAA;AAAA,IACtC;AAAA,GACF;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,UAAA,CAAW,YAAY,CAAA;AACnD,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,GAAA;AAAA,IAC1B,KAAA,CAAM,GAAA,CAAI,OAAO,IAAA,KAAS;AACxB,MAAA,IAAI,IAAA,CAAK,WAAW,UAAA,EAAY;AAC9B,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,2CAAA,EAA8C,KAAK,MAAM,CAAA;AAAA,SAC3D;AAAA,MACF;AACA,MAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,EAAA,EAAI;AAClB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,8CAAA,EACE,IAAA,CAAK,KAAA,CAAM,MACb,CAAA,CAAA,EAAI,MAAM,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,SACrD;AAAA,MACF;AACA,MAAA,OAAO,IAAA,CAAK,MAAM,IAAA,EAAK;AAAA,IACzB,CAAC;AAAA,GACH;AAEA,EAAA,OAAO,MAAM,IAAA,EAAK;AACpB;AAEA,eAAe,eAAA,CACb,SAAA,EACA,MAAA,EACA,IAAA,EACqB;AAErB,EAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,IAAA,MAAM,WAAW,IAAI,GAAA;AAAA,MACnB,SAAS,eAAe,CAAA,WAAA,CAAA;AAAA,MACxB,QAAA,CAAS;AAAA,KACX;AACA,IAAA,QAAA,CAAS,YAAA,CAAa,GAAA,CAAI,KAAA,EAAO,MAAM,CAAA;AACvC,IAAA,MAAM,aAAA,GAAgB,SAAS,QAAA,EAAS;AACxC,IAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,aAAa,CAAA;AACzC,IAAA,IAAI,IAAI,EAAA,EAAI;AACV,MAAA,eAAA,GAAmB,MAAM,IAAI,IAAA,EAAK;AAAA,IACpC,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,YAAA,CAAa,GAAA,EAAK,eAAe,GAAA,CAAI,MAAM,KAAK,EAAE,CAAA;AAAA,IAC9D;AAAA,EACF;AAGA,EAAA,MAAM,aAAa,0BAAA,EAA2B;AAC9C,EAAA,MAAM,aAAA,GAAgB,eAAA,CAAgB,KAAA,CAAM,CAAC,CAAA;AAC7C,EAAA,MAAM,QAAQ,YAAA,EAAa;AAE3B,EAAA,MAAM,UAAU,eAAA,CAAgB,OAAA;AAChC,EAAA,IAAI,QAAA,GAAW,CAAC,EAAE,IAAA,IAAQ,OAAA,CAAA;AAC1B,EAAA,IAAI,QAAA,GAAW,OAAA,IAAW,QAAA,GAAW,CAAA,EAAG;AACtC,IAAA,QAAA,GAAW,OAAA;AAAA,EACb;AACA,EAAA,MAAM,oBAAoB,SAAA,CAAU,GAAA;AAAA,IAAI,CAAC,QAAA,KACvC,IAAA,CAAK,gBAAA,CAAiB,QAAA,EAAU,UAAU,KAAK;AAAA,GACjD;AACA,EAAA,MAAM,kBAAA,GAAqB,iBAAA,CAAkB,GAAA,CAAI,CAAC,KAAA,KAAU;AAAA,IAC1D,CAAC,CAAC,KAAA,CAAM,CAAC,CAAA;AAAA,IACT,CAAC,CAAC,KAAA,CAAM,CAAC;AAAA,GACV,CAAA;AACD,EAAA,MAAM,UAAU,kBAAA,CAAmB,GAAA;AAAA,IACjC,CAAC,KAAA,KACC,CAAA,QAAA,EAAW,QAAA,CAAS,QAAA,EAAU,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAA,CAAE,UAAU,CAAA,CAAA,EAAI,MAAM,CAAC,CAAA,CAAE,UAAU,CAAA;AAAA,GAChF;AAGA,EAAA,MAAM,qBAAqB,KAAA,CAAM,IAAA;AAAA,IAC/B,IAAI,GAAA,CAAI,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAA,KAAW,CAAC,KAAA,CAAM,GAAA,CAAI,MAAM,CAAC,CAAC;AAAA,GACxD,CAAE,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,MAAM,GAAG,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA;AAC5C,EAAA,MAAM,WAAW,kBAAA,CAAmB,GAAA;AAAA,IAAI,CAAC,GAAA,KACvC,aAAA,CACG,OAAA,CAAQ,KAAA,EAAO,IAAI,CAAC,CAAA,CAAE,QAAA,EAAU,CAAA,CAChC,OAAA,CAAQ,OAAO,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAU,CAAA,CAChC,OAAA,CAAQ,KAAA,EAAO,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAU;AAAA,GACrC;AACA,EAAA,MAAM,qBAAqB,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,KAAQ,SAAA,CAAU,GAAG,CAAC,CAAA;AAC/D,EAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,UAAA,CAAW,kBAAkB,CAAA;AAC5D,EAAA,MAAM,eAAe,QAAA,CAClB,GAAA;AAAA,IAAI,CAAC,EAAA,KACJ,EAAA,CAAG,MAAA,KAAW,WAAA,GAAc,GAAG,KAAA,GAAQ;AAAA,GACzC,CACC,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAG,CAAA;AACtB,EAAA,MAAM,wBAAwB,YAAA,CAAa,MAAA,CAAO,CAAC,GAAA,KAAQ,CAAC,IAAI,EAAE,CAAA;AAElE,EAAA,IAAI,YAAA,CAAa,MAAA,KAAW,kBAAA,CAAmB,MAAA,EAAQ;AACrD,IAAA,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAAA,EACpD;AAEA,EAAA,IAAI,sBAAsB,MAAA,EAAQ;AAChC,IAAA,MAAM,IAAI,YAAA;AAAA,MACR,sBAAsB,CAAC,CAAA;AAAA,MACvB,cAAA,CAAe,qBAAA,CAAsB,CAAC,CAAA,CAAE,MAAM,CAAA,IAAK;AAAA,KACrD;AAAA,EACF;AAEA,EAAA,MAAM,gBAAA,GAAmB,MAAM,OAAA,CAAQ,GAAA;AAAA,IACrC,aAAa,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,aAAa;AAAA,GAC7C;AAGA,EAAA,IAAI,CAAC,iBAAiB,KAAA,CAAM,CAAC,SAAS,IAAA,CAAK,UAAA,GAAa,CAAC,CAAA,EAAG;AAC1D,IAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,EACjD;AAEA,EAAA,MAAM,cAAA,GAAiB,MAAM,OAAA,CAAQ,GAAA;AAAA,IACnC,iBAAiB,GAAA,CAAI,CAAC,IAAA,KAAS,UAAA,CAAW,IAAI,CAAC;AAAA,GACjD;AAGA,EAAA,cAAA,CAAe,OAAA,CAAQ,CAAC,aAAA,EAAe,CAAA,KAAM;AAC3C,IAAA,MAAM,GAAA,GAAM,mBAAmB,CAAC,CAAA;AAChC,IAAA,MAAM,SAAS,CAAA,QAAA,EAAW,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAU,CAAA,CAAA,EAAI,GAAA,CAAI,CAAC,CAAA,CAAE,UAAU,CAAA,CAAA,EAAI,IAAI,CAAC,CAAA,CAAE,UAAU,CAAA,CAAA;AACrF,IAAA,KAAA,CAAM,GAAA,CAAI,QAAQ,aAAa,CAAA;AAAA,EACjC,CAAC,CAAA;AAED,EAAA,MAAM,iBAAA,GAAoB,SAAA,CAAU,GAAA,CAAI,CAAC,UAAU,CAAA,KAAM;AACvD,IAAA,MAAM,MAAA,GAAS,QAAQ,CAAC,CAAA;AACxB,IAAA,MAAM,cAAA,GAAiB,kBAAkB,CAAC,CAAA;AAC1C,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA;AAKtC,IAAA,MAAM,SAAS,IAAA,CAAK,GAAA;AAAA,MAClB,KAAK,KAAA,CAAM,aAAA,CAAc,SAAS,cAAA,CAAe,CAAC,IAAI,CAAA,CAAE,CAAA;AAAA,MACxD,cAAc,KAAA,GAAQ;AAAA,KACxB;AACA,IAAA,MAAM,SAAS,IAAA,CAAK,GAAA;AAAA,MAClB,KAAK,KAAA,CAAM,aAAA,CAAc,UAAU,cAAA,CAAe,CAAC,IAAI,CAAA,CAAE,CAAA;AAAA,MACzD,cAAc,MAAA,GAAS;AAAA,KACzB;AAEA,IAAA,MAAM,cAAA,GAAA,CACH,MAAA,GAAS,aAAA,CAAc,KAAA,GAAQ,UAAU,aAAA,CAAc,UAAA;AAC1D,IAAA,MAAM,CAAA,GAAI,aAAA,CAAc,MAAA,CAAO,cAAc,CAAA;AAC7C,IAAA,MAAM,CAAA,GAAI,aAAA,CAAc,MAAA,CAAO,cAAA,GAAiB,CAAC,CAAA;AACjD,IAAA,MAAM,CAAA,GAAI,aAAA,CAAc,MAAA,CAAO,cAAA,GAAiB,CAAC,CAAA;AACjD,IAAA,MAAMC,aAAY,IAAA,GAAA,CAAU,CAAA,GAAI,MAAM,GAAA,GAAM,CAAA,GAAI,MAAM,CAAA,IAAK,GAAA;AAE3D,IAAA,OAAO,CAAC,QAAA,CAAS,CAAC,CAAA,EAAG,QAAA,CAAS,CAAC,CAAA,EAAG,CAAC,EAAEA,UAAAA,GAAY,GAAA,CAAA,GAAQ,GAAI,CAAA;AAAA,EAC/D,CAAC,CAAA;AAED,EAAA,OAAO,iBAAA;AACT;AAMA,eAAe,EAAA,CAIb,QAAA,EAIA,OAAA,GAA8B,EAAC,EACZ;AACnB,EAAA,MAAM,oBAAoB,MAAM,KAAA,CAAM,CAAC,QAAQ,GAAG,OAAO,CAAA;AACzD,EAAA,OAAO,kBAAkB,CAAC,CAAA;AAC5B;AAKA,eAAe,KAAA,CAIb,SAAA,EAIA,OAAA,GAAiC,EAAC,EACb;AACrB,EAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAEpC,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,IAAU,MAAA,CAAO,MAAA;AAExC,EAAA,MAAM,iBAAA,GACJ,OAAA,CAAQ,SAAA,KAAc,QAAA,GAClB,MAAM,eAAA,CAAgB,SAAA,EAAW,MAAA,EAAQ,OAAA,CAAQ,IAAI,CAAA,GACrD,MAAM,eAAA,CAAgB,WAAW,MAAM,CAAA;AAG7C,EAAA,IAAI,QAAQ,mBAAA,EAAqB;AAE/B,IAAA,MAAM,aAAa,CAAC,EAAE,OAAA,CAAQ,mBAAA,GAAsB,KAAK,CAAA,GAAI,CAAA;AAC7D,IAAA,MAAM,aAAuB,iBAAA,CAAkB,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,CAAC,CAAC,CAAA;AAClE,IAAA,MAAM,UAAA,GAAa,CAAC,EAAE,UAAA,GAAa,CAAA,CAAA;AAEnC,IAAA,KAAA,IAAS,IAAI,UAAA,EAAY,CAAA,GAAI,WAAW,MAAA,GAAS,UAAA,EAAY,KAAK,CAAA,EAAG;AACnE,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,EAAY,KAAK,CAAA,EAAG;AACtC,QAAA,MAAM,IAAA,GAAO,UAAA,CAAW,CAAA,GAAI,UAAA,GAAa,CAAC,CAAA;AAC1C,QAAA,GAAA,IAAO,IAAA;AAAA,MACT;AACA,MAAA,GAAA,IAAO,UAAA;AACP,MAAA,iBAAA,CAAkB,CAAC,CAAA,CAAE,CAAC,CAAA,GAAI,GAAA;AAAA,IAC5B;AAAA,EACF;AAEA,EAAA,OAAO,iBAAA;AACT;AAMA,eAAe,cAAA,CAIb,EAAA,EAIA,OAAA,GAAiC,EAAC,EACb;AACrB,EAAA,IAAI,EAAA,CAAG,SAAS,YAAA,EAAc;AAC5B,IAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,EACnE;AAEA,EAAA,OAAA,CAAQ,SAAA,KAAR,OAAA,CAAQ,SAAA,GAAc,iBAAA,KAAsB,QAAA,GAAW,QAAA,CAAA;AACvD,EAAA,MAAM,KAAA,GAAQ,gBAAgB,EAAE,CAAA;AAChC,EAAA,MAAM,iBAAA,GAAoB,MAAM,KAAA,CAAM,KAAA,CAAM,aAAa,OAAO,CAAA;AAChE,EAAA,KAAA,CAAM,WAAA,GAAc,iBAAA;AAEpB,EAAA,OAAO,KAAA;AACT;AAMA,eAAe,mBAAA,CAIb,EAAA,EAIA,OAAA,GAAiC,EAAC,EACR;AAC1B,EAAA,IAAI,EAAA,CAAG,SAAS,iBAAA,EAAmB;AACjC,IAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,EACxE;AAEA,EAAA,OAAA,CAAQ,SAAA,KAAR,OAAA,CAAQ,SAAA,GAAc,iBAAA,KAAsB,QAAA,GAAW,QAAA,CAAA;AACvD,EAAA,MAAM,KAAA,GAAQ,gBAAgB,EAAE,CAAA;AAChC,EAAA,MAAM,eAAe,KAAA,CAAM,WAAA,CAAY,IAAI,CAAC,IAAA,KAAS,KAAK,MAAM,CAAA;AAIhE,EAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,WAAA,CAAY,IAAA,EAAK;AAChD,EAAA,MAAM,wBAAA,GAA2B,MAAM,KAAA,CAAM,gBAAA,EAAkB,OAAO,CAAA;AAGtE,EAAA,MAAM,SAAuB,EAAC;AAC9B,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,KAAA,MAAW,UAAU,YAAA,EAAc;AACjC,IAAA,MAAA,CAAO,KAAK,wBAAA,CAAyB,KAAA,CAAM,KAAA,EAAO,KAAA,GAAQ,MAAM,CAAC,CAAA;AACjE,IAAA,KAAA,IAAS,MAAA;AAAA,EACX;AAEA,EAAA,KAAA,CAAM,WAAA,GAAc,MAAA;AACpB,EAAA,OAAO,KAAA;AACT;AAEO,MAAM,SAAA,GAAY;AAAA,EACvB,EAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF;;;;"}