UNPKG

@clerk/shared

Version:

Internal package utils used by the Clerk SDKs

1 lines • 28.4 kB
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/phone/countryCodeData.ts","../../src/phone/phoneUtils.ts"],"sourcesContent":["export type CountryCodeData = typeof data;\nexport type CountryName = CountryCodeData[number][0];\nexport type CountryIso = CountryCodeData[number][1];\nexport type DialingCode = CountryCodeData[number][2];\nexport type PhonePattern = CountryCodeData[number][3] | '';\n\nconst data = [\n ['United States', 'us', '1', '(...) ...-....', 100],\n ['United Kingdom', 'gb', '44', '.... ......', 100],\n ['India', 'in', '91', '.....-.....', 100],\n ['Canada', 'ca', '1', '(...) ...-....', 100],\n ['Germany', 'de', '49', '... .......', 100],\n ['France', 'fr', '33', '. .. .. .. ..', 100],\n ['Russia', 'ru', '7', '... ...-..-..', 100],\n ['Afghanistan', 'af', '93'],\n ['Åland Islands', 'ax', '358'],\n ['Albania', 'al', '355'],\n ['Algeria', 'dz', '213'],\n ['American Samoa', 'as', '1684'],\n ['Andorra', 'ad', '376'],\n ['Angola', 'ao', '244'],\n ['Anguilla', 'ai', '1264'],\n ['Antigua and Barbuda', 'ag', '1268'],\n ['Argentina', 'ar', '54'],\n ['Armenia', 'am', '374'],\n ['Aruba', 'aw', '297'],\n ['Ascension Island', 'ac', '247'],\n ['Australia', 'au', '61', '... ... ...'],\n ['Austria', 'at', '43'],\n ['Azerbaijan', 'az', '994'],\n ['Bahamas', 'bs', '1242'],\n ['Bahrain', 'bh', '973'],\n ['Bangladesh', 'bd', '880'],\n ['Barbados', 'bb', '1246'],\n ['Belarus', 'by', '375'],\n ['Belgium', 'be', '32', '... .. .. ..'],\n ['Belize', 'bz', '501'],\n ['Benin', 'bj', '229'],\n ['Bermuda', 'bm', '1441'],\n ['Bhutan', 'bt', '975'],\n ['Bolivia', 'bo', '591'],\n ['Bosnia and Herzegovina', 'ba', '387'],\n ['Botswana', 'bw', '267'],\n ['Brazil', 'br', '55'],\n ['British Indian Ocean Territory', 'io', '246'],\n ['British Virgin Islands', 'vg', '1284'],\n ['Brunei', 'bn', '673'],\n ['Bulgaria', 'bg', '359'],\n ['Burkina Faso', 'bf', '226'],\n ['Burundi', 'bi', '257'],\n ['Cambodia', 'kh', '855'],\n ['Cameroon', 'cm', '237'],\n ['Cape Verde', 'cv', '238'],\n ['Caribbean Netherlands', 'bq', '599'],\n ['Cayman Islands', 'ky', '1345'],\n ['Central African Republic', 'cf', '236'],\n ['Chad', 'td', '235'],\n ['Chile', 'cl', '56'],\n ['China', 'cn', '86', '...-....-....'],\n ['Colombia', 'co', '57'],\n ['Comoros', 'km', '269'],\n ['Democratic Republic of the Congo', 'cd', '243'],\n ['Republic of the Congo', 'cg', '242'],\n ['Cook Islands', 'ck', '682'],\n ['Costa Rica', 'cr', '506', '....-....'],\n ['Côte d’Ivoire', 'ci', '225'],\n ['Croatia', 'hr', '385'],\n ['Cuba', 'cu', '53'],\n ['Curaçao', 'cw', '599'],\n ['Cyprus', 'cy', '357'],\n ['Czech Republic', 'cz', '420'],\n ['Denmark', 'dk', '45', '.. .. .. ..'],\n ['Djibouti', 'dj', '253'],\n ['Dominica', 'dm', '1767'],\n ['Dominican Republic', 'do', '1'],\n ['Ecuador', 'ec', '593'],\n ['Egypt', 'eg', '20'],\n ['El Salvador', 'sv', '503', '....-....'],\n ['Equatorial Guinea', 'gq', '240'],\n ['Eritrea', 'er', '291'],\n ['Estonia', 'ee', '372'],\n ['Ethiopia', 'et', '251'],\n ['Falkland Islands', 'fk', '500'],\n ['Faroe Islands', 'fo', '298'],\n ['Fiji', 'fj', '679'],\n ['Finland', 'fi', '358', '.. ... .. ..'],\n ['French Guiana', 'gf', '594'],\n ['French Polynesia', 'pf', '689'],\n ['Gabon', 'ga', '241'],\n ['Gambia', 'gm', '220'],\n ['Georgia', 'ge', '995'],\n ['Ghana', 'gh', '233'],\n ['Gibraltar', 'gi', '350'],\n ['Greece', 'gr', '30', '... .......'],\n ['Greenland', 'gl', '299'],\n ['Grenada', 'gd', '1473'],\n ['Guadeloupe', 'gp', '590'],\n ['Guam', 'gu', '1671'],\n ['Guatemala', 'gt', '502', '....-....'],\n ['Guinea', 'gn', '224'],\n ['Guinea-Bissau', 'gw', '245'],\n ['Guyana', 'gy', '592'],\n ['Haiti', 'ht', '509', '....-....'],\n ['Honduras', 'hn', '504'],\n ['Hong Kong', 'hk', '852', '.... ....'],\n ['Hungary', 'hu', '36'],\n ['Iceland', 'is', '354', '... ....'],\n ['Indonesia', 'id', '62'],\n ['Iran', 'ir', '98'],\n ['Iraq', 'iq', '964'],\n ['Ireland', 'ie', '353', '.. .......'],\n ['Israel', 'il', '972'],\n ['Italy', 'it', '39', '... ......'],\n ['Jamaica', 'jm', '1876'],\n ['Japan', 'jp', '81', '... .. ....'],\n ['Jordan', 'jo', '962'],\n ['Kazakhstan', 'kz', '7', '... ...-..-..'],\n ['Kenya', 'ke', '254'],\n ['Kiribati', 'ki', '686'],\n ['Kosovo', 'xk', '383'],\n ['Kuwait', 'kw', '965'],\n ['Kyrgyzstan', 'kg', '996'],\n ['Laos', 'la', '856'],\n ['Latvia', 'lv', '371'],\n ['Lebanon', 'lb', '961'],\n ['Lesotho', 'ls', '266'],\n ['Liberia', 'lr', '231'],\n ['Libya', 'ly', '218'],\n ['Liechtenstein', 'li', '423'],\n ['Lithuania', 'lt', '370'],\n ['Luxembourg', 'lu', '352'],\n ['Macau', 'mo', '853'],\n ['Madagascar', 'mg', '261'],\n ['Malawi', 'mw', '265'],\n ['Malaysia', 'my', '60', '..-....-....'],\n ['Maldives', 'mv', '960'],\n ['Mali', 'ml', '223'],\n ['Malta', 'mt', '356'],\n ['Marshall Islands', 'mh', '692'],\n ['Martinique', 'mq', '596'],\n ['Mauritania', 'mr', '222'],\n ['Mauritius', 'mu', '230'],\n ['Mayotte', 'yt', '262'],\n ['Mexico', 'mx', '52'],\n ['Micronesia', 'fm', '691'],\n ['Moldova', 'md', '373'],\n ['Monaco', 'mc', '377'],\n ['Mongolia', 'mn', '976'],\n ['Montenegro', 'me', '382'],\n ['Montserrat', 'ms', '1664'],\n ['Morocco', 'ma', '212'],\n ['Mozambique', 'mz', '258'],\n ['Myanmar', 'mm', '95'],\n ['Namibia', 'na', '264'],\n ['Nauru', 'nr', '674'],\n ['Nepal', 'np', '977'],\n ['Netherlands', 'nl', '31', '.. ........'],\n ['New Caledonia', 'nc', '687'],\n ['New Zealand', 'nz', '64', '...-...-....'],\n ['Nicaragua', 'ni', '505'],\n ['Niger', 'ne', '227'],\n ['Nigeria', 'ng', '234'],\n ['Niue', 'nu', '683'],\n ['Norfolk Island', 'nf', '672'],\n ['North Korea', 'kp', '850'],\n ['North Macedonia', 'mk', '389'],\n ['Northern Mariana Islands', 'mp', '1670'],\n ['Norway', 'no', '47', '... .. ...'],\n ['Oman', 'om', '968'],\n ['Pakistan', 'pk', '92', '...-.......'],\n ['Palau', 'pw', '680'],\n ['Palestine', 'ps', '970'],\n ['Panama', 'pa', '507'],\n ['Papua New Guinea', 'pg', '675'],\n ['Paraguay', 'py', '595'],\n ['Peru', 'pe', '51'],\n ['Philippines', 'ph', '63', '... ....'],\n ['Poland', 'pl', '48', '...-...-...'],\n ['Portugal', 'pt', '351'],\n ['Puerto Rico', 'pr', '1'],\n ['Qatar', 'qa', '974'],\n ['Réunion', 're', '262'],\n ['Romania', 'ro', '40'],\n ['Rwanda', 'rw', '250'],\n ['Saint Barthélemy', 'bl', '590'],\n ['Saint Helena', 'sh', '290'],\n ['Saint Kitts and Nevis', 'kn', '1869'],\n ['Saint Lucia', 'lc', '1758'],\n ['Saint Martin', 'mf', '590'],\n ['Saint Pierre and Miquelon', 'pm', '508'],\n ['Saint Vincent and the Grenadines', 'vc', '1784'],\n ['Samoa', 'ws', '685'],\n ['San Marino', 'sm', '378'],\n ['São Tomé and Príncipe', 'st', '239'],\n ['Saudi Arabia', 'sa', '966'],\n ['Senegal', 'sn', '221'],\n ['Serbia', 'rs', '381'],\n ['Seychelles', 'sc', '248'],\n ['Sierra Leone', 'sl', '232'],\n ['Singapore', 'sg', '65', '....-....'],\n ['Sint Maarten', 'sx', '1721'],\n ['Slovakia', 'sk', '421'],\n ['Slovenia', 'si', '386'],\n ['Solomon Islands', 'sb', '677'],\n ['Somalia', 'so', '252'],\n ['South Africa', 'za', '27'],\n ['South Korea', 'kr', '82'],\n ['South Sudan', 'ss', '211'],\n ['Spain', 'es', '34', '... ... ...'],\n ['Sri Lanka', 'lk', '94'],\n ['Sudan', 'sd', '249'],\n ['Suriname', 'sr', '597'],\n ['Eswatini', 'sz', '268'],\n ['Sweden', 'se', '46', '.. ... .. ..'],\n ['Switzerland', 'ch', '41', '.. ... .. ..'],\n ['Syria', 'sy', '963'],\n ['Taiwan', 'tw', '886'],\n ['Tajikistan', 'tj', '992'],\n ['Tanzania', 'tz', '255'],\n ['Thailand', 'th', '66'],\n ['Timor-Leste', 'tl', '670'],\n ['Togo', 'tg', '228'],\n ['Tokelau', 'tk', '690'],\n ['Tonga', 'to', '676'],\n ['Trinidad and Tobago', 'tt', '1868'],\n ['Tunisia', 'tn', '216'],\n ['Turkey', 'tr', '90', '... ... .. ..'],\n ['Turkmenistan', 'tm', '993'],\n ['Turks and Caicos Islands', 'tc', '1649'],\n ['Tuvalu', 'tv', '688'],\n ['U.S. Virgin Islands', 'vi', '1340'],\n ['Uganda', 'ug', '256'],\n ['Ukraine', 'ua', '380'],\n ['United Arab Emirates', 'ae', '971'],\n ['Uruguay', 'uy', '598'],\n ['Uzbekistan', 'uz', '998'],\n ['Vanuatu', 'vu', '678'],\n ['Vatican City', 'va', '39', '.. .... ....'],\n ['Venezuela', 've', '58'],\n ['Vietnam', 'vn', '84'],\n ['Wallis and Futuna', 'wf', '681'],\n ['Western Sahara', 'eh', '212'],\n ['Yemen', 'ye', '967'],\n ['Zambia', 'zm', '260'],\n ['Zimbabwe', 'zw', '263'],\n] as const;\n\nconst UnitedStatesSubAreasSet: ReadonlySet<string> = new Set([\n '907',\n '205',\n '251',\n '256',\n '334',\n '479',\n '501',\n '870',\n '480',\n '520',\n '602',\n '623',\n '928',\n '209',\n '213',\n '310',\n '323',\n '408',\n '415',\n '510',\n '530',\n '559',\n '562',\n '619',\n '626',\n '650',\n '661',\n '707',\n '714',\n '760',\n '805',\n '818',\n '831',\n '858',\n '909',\n '916',\n '925',\n '949',\n '951',\n '303',\n '719',\n '970',\n '203',\n '860',\n '202',\n '302',\n '239',\n '305',\n '321',\n '352',\n '386',\n '407',\n '561',\n '727',\n '772',\n '813',\n '850',\n '863',\n '904',\n '941',\n '954',\n '229',\n '404',\n '478',\n '706',\n '770',\n '912',\n '808',\n '319',\n '515',\n '563',\n '641',\n '712',\n '208',\n '217',\n '309',\n '312',\n '618',\n '630',\n '708',\n '773',\n '815',\n '847',\n '219',\n '260',\n '317',\n '574',\n '765',\n '812',\n '316',\n '620',\n '785',\n '913',\n '270',\n '502',\n '606',\n '859',\n '225',\n '318',\n '337',\n '504',\n '985',\n '413',\n '508',\n '617',\n '781',\n '978',\n '301',\n '410',\n '207',\n '231',\n '248',\n '269',\n '313',\n '517',\n '586',\n '616',\n '734',\n '810',\n '906',\n '989',\n '218',\n '320',\n '507',\n '612',\n '651',\n '763',\n '952',\n '314',\n '417',\n '573',\n '636',\n '660',\n '816',\n '228',\n '601',\n '662',\n '406',\n '252',\n '336',\n '704',\n '828',\n '910',\n '919',\n '701',\n '308',\n '402',\n '603',\n '201',\n '609',\n '732',\n '856',\n '908',\n '973',\n '505',\n '575',\n '702',\n '775',\n '212',\n '315',\n '516',\n '518',\n '585',\n '607',\n '631',\n '716',\n '718',\n '845',\n '914',\n '216',\n '330',\n '419',\n '440',\n '513',\n '614',\n '740',\n '937',\n '405',\n '580',\n '918',\n '503',\n '541',\n '215',\n '412',\n '570',\n '610',\n '717',\n '724',\n '814',\n '401',\n '803',\n '843',\n '864',\n '605',\n '423',\n '615',\n '731',\n '865',\n '901',\n '931',\n '210',\n '214',\n '254',\n '281',\n '325',\n '361',\n '409',\n '432',\n '512',\n '713',\n '806',\n '817',\n '830',\n '903',\n '915',\n '936',\n '940',\n '956',\n '972',\n '979',\n '435',\n '801',\n '276',\n '434',\n '540',\n '703',\n '757',\n '804',\n '802',\n '206',\n '253',\n '360',\n '425',\n '509',\n '262',\n '414',\n '608',\n '715',\n '920',\n '304',\n '307',\n]);\n\nconst CanadaSubAreaSet: ReadonlySet<string> = new Set([\n '204',\n '226',\n '236',\n '249',\n '250',\n '289',\n '306',\n '343',\n '365',\n '387',\n '403',\n '416',\n '418',\n '431',\n '437',\n '438',\n '450',\n '506',\n '514',\n '519',\n '548',\n '579',\n '581',\n '587',\n '604',\n '613',\n '639',\n '647',\n '672',\n '705',\n '709',\n '742',\n '778',\n '780',\n '782',\n '807',\n '819',\n '825',\n '867',\n '873',\n '902',\n '905',\n]);\n\nexport const SubAreaCodeSets = {\n us: UnitedStatesSubAreasSet,\n ca: CanadaSubAreaSet,\n};\n\nexport interface CountryEntry {\n name: CountryName;\n iso: CountryIso;\n code: DialingCode;\n pattern: PhonePattern;\n priority: number;\n}\n\nconst createEntry = ([\n name,\n iso,\n code,\n pattern = '' as any,\n priority = 0 as any,\n]: CountryCodeData[number]): CountryEntry => ({\n name,\n iso,\n code,\n pattern,\n priority,\n});\n\nexport type IsoToCountryMapType = ReadonlyMap<CountryIso, CountryEntry>;\n\nexport const IsoToCountryMap: IsoToCountryMapType = data.reduce(\n (acc, cur) => acc.set(cur[1], createEntry(cur)),\n new Map<CountryIso, CountryEntry>(),\n);\n\nexport type CodeToCountryIsoMapType = ReadonlyMap<DialingCode, CountryEntry[]>;\n\nexport const CodeToCountriesMap: CodeToCountryIsoMapType = data.reduce((acc, cur) => {\n const code = cur[2];\n const country = createEntry(cur);\n if (acc.has(code)) {\n acc.get(code)?.push(country);\n } else {\n acc.set(code, [country]);\n }\n return acc;\n}, new Map<DialingCode, CountryEntry[]>());\n","import type { PhoneCodeChannel } from '../types';\nimport type { CountryEntry, CountryIso } from './countryCodeData';\nimport { CodeToCountriesMap, IsoToCountryMap, SubAreaCodeSets } from './countryCodeData';\n\n// offset between uppercase ascii and regional indicator symbols\nconst OFFSET = 127397;\nconst emojiCache = {} as Record<CountryIso, string>;\nexport function getFlagEmojiFromCountryIso(iso: CountryIso, fallbackIso = 'us'): string {\n iso = iso || fallbackIso;\n if (emojiCache[iso]) {\n return emojiCache[iso];\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const codePoints = [...iso.toUpperCase()].map(c => c.codePointAt(0)! + OFFSET);\n const res = String.fromCodePoint(...codePoints);\n emojiCache[iso] = res;\n return res;\n}\n\nexport function getCountryIsoFromFormattedNumber(formattedNumber: string, fallbackIso = 'us'): string {\n const number = extractDigits(formattedNumber);\n if (!number || number.length < 4) {\n return fallbackIso;\n }\n\n // Try to match US first based on subarea code\n if (number.startsWith('1') && phoneNumberBelongsTo('us', number)) {\n return 'us';\n }\n\n // Try to match CA first based on subarea code\n if (number.startsWith('1') && phoneNumberBelongsTo('ca', number)) {\n return 'ca';\n }\n\n // Otherwise, use the most specific code or fallback to US\n return getCountryFromPhoneString(number).country.iso;\n}\n\nexport function formatPhoneNumber(phoneNumber: string, pattern: string | undefined, countryCode?: string): string {\n if (!phoneNumber || !pattern) {\n return phoneNumber;\n }\n\n const digits = [...extractDigits(phoneNumber)].slice(0, maxE164CompliantLength(countryCode));\n\n if (digits.length <= 3) {\n return digits.join('');\n }\n\n let res = '';\n for (let i = 0; digits.length > 0; i++) {\n if (i > pattern.length - 1) {\n res += digits.shift();\n } else {\n res += pattern[i] === '.' ? digits.shift() : pattern[i];\n }\n }\n return res;\n}\n\nexport function extractDigits(formattedPhone: string): string {\n return (formattedPhone || '').replace(/[^\\d]/g, '');\n}\n\nfunction phoneNumberBelongsTo(iso: 'us' | 'ca', phoneWithCode: string) {\n if (!iso || !IsoToCountryMap.get(iso) || !phoneWithCode) {\n return false;\n }\n\n const code = phoneWithCode[0];\n const subArea = phoneWithCode.substring(1, 4);\n return (\n code === IsoToCountryMap.get(iso)?.code &&\n phoneWithCode.length - 1 === maxDigitCountForPattern(IsoToCountryMap.get(iso)?.pattern || '') &&\n SubAreaCodeSets[iso].has(subArea)\n );\n}\n\nfunction maxDigitCountForPattern(pattern: string) {\n return (pattern.match(/\\./g) || []).length;\n}\n\n// https://en.wikipedia.org/wiki/E.164\nconst MAX_PHONE_NUMBER_LENGTH = 15;\nfunction maxE164CompliantLength(countryCode?: string) {\n const usCountryCode = '1';\n countryCode = countryCode || usCountryCode;\n const codeWithPrefix = countryCode.includes('+') ? countryCode : '+' + countryCode;\n return MAX_PHONE_NUMBER_LENGTH - codeWithPrefix.length;\n}\n\nexport function parsePhoneString(str: string) {\n const digits = extractDigits(str);\n const iso = getCountryIsoFromFormattedNumber(digits) as CountryIso;\n const pattern = IsoToCountryMap.get(iso)?.pattern || '';\n const code = IsoToCountryMap.get(iso)?.code || '';\n const number = digits.slice(code.length);\n const formattedNumberWithCode = `+${code} ${formatPhoneNumber(number, pattern, code)}`;\n return { iso, pattern, code, number, formattedNumberWithCode };\n}\n\nexport function stringToFormattedPhoneString(str: string): string {\n const parsed = parsePhoneString(str);\n return `+${parsed.code} ${formatPhoneNumber(parsed.number, parsed.pattern, parsed.code)}`;\n}\n\nexport const byPriority = (a: CountryEntry, b: CountryEntry) => {\n return b.priority - a.priority;\n};\n\nexport function getCountryFromPhoneString(phone: string): { number: string; country: CountryEntry } {\n const phoneWithCode = extractDigits(phone);\n const matchingCountries: CountryEntry[] = [];\n\n // Max country code length is 4. Try to match more specific codes first\n for (const i of [4, 3, 2, 1]) {\n const potentialCode = phoneWithCode.substring(0, i);\n const countries = CodeToCountriesMap.get(potentialCode as any) || [];\n\n if (countries.length) {\n matchingCountries.push(...countries);\n }\n }\n\n const fallbackCountry = IsoToCountryMap.get('us');\n const country: CountryEntry = matchingCountries.sort(byPriority)[0] || fallbackCountry;\n const number = phoneWithCode.slice(country?.code.length || 0);\n\n return { number, country };\n}\n\nexport function getPreferredPhoneCodeChannelByCountry(\n phoneNumber: string,\n preferredChannels: Record<string, PhoneCodeChannel>,\n): PhoneCodeChannel | null {\n if (!preferredChannels) {\n return null;\n }\n const { country } = getCountryFromPhoneString(phoneNumber);\n return preferredChannels[country.iso.toUpperCase()] || null;\n}\n"],"mappings":"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EAAC;EAAgB;EAAM;CAAK;CAC5B;EAAC;EAA4B;EAAM;CAAM;CACzC;EAAC;EAAU;EAAM;CAAK;CACtB;EAAC;EAAuB;EAAM;CAAM;CACpC;EAAC;EAAU;EAAM;CAAK;CACtB;EAAC;EAAW;EAAM;CAAK;CACvB;EAAC;EAAwB;EAAM;CAAK;CACpC;EAAC;EAAW;EAAM;CAAK;CACvB;EAAC;EAAc;EAAM;CAAK;CAC1B;EAAC;EAAW;EAAM;CAAK;CACvB;EAAC;EAAgB;EAAM;EAAM;CAAc;CAC3C;EAAC;EAAa;EAAM;CAAI;CACxB;EAAC;EAAW;EAAM;CAAI;CACtB;EAAC;EAAqB;EAAM;CAAK;CACjC;EAAC;EAAkB;EAAM;CAAK;CAC9B;EAAC;EAAS;EAAM;CAAK;CACrB;EAAC;EAAU;EAAM;CAAK;CACtB;EAAC;EAAY;EAAM;CAAK;AAC1B;AAEA,MAAM,0BAA+C,IAAI,IAAI;CAC3D;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAM,mBAAwC,IAAI,IAAI;CACpD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAa,kBAAkB;CAC7B,IAAI;CACJ,IAAI;AACN;AAUA,MAAM,eAAe,CACnB,MACA,KACA,MACA,UAAU,IACV,WAAW,QACiC;CAC5C;CACA;CACA;CACA;CACA;AACF;AAIA,MAAa,kBAAuC,KAAK,QACtD,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAI,YAAY,GAAG,CAAC,mBAC9C,IAAI,IAA8B,CACpC;AAIA,MAAa,qBAA8C,KAAK,QAAQ,KAAK,QAAQ;CACnF,MAAM,OAAO,IAAI;CACjB,MAAM,UAAU,YAAY,GAAG;CAC/B,IAAI,IAAI,IAAI,IAAI,GACd,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO;MAE3B,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC;CAEzB,OAAO;AACT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"}