rondonjon-fintech-datatypes
Version:
A collection of TypeScript datatypes and typeguards for use in FinTech applications
1 lines • 16 kB
Source Map (JSON)
{"version":3,"sources":["../src/lists/assetTypes.ts","../src/typeguards/isAssetType.ts","../src/lists/iso-country-alpha2.generated.ts","../src/typeguards/isIsoCountryA2.ts","../src/typeguards/isIsin.ts","../src/lists/iso-currency-alpha3.generated.ts","../src/typeguards/isIsoCurrencyA3.ts","../src/typeguards/isAssetId.ts","../src/typeguards/isIsoDate.ts","../src/typeguards/isIsoTime.ts","../src/typeguards/isWkn.ts"],"sourcesContent":["/**\n * - \"M\" = Monetary / ISO currency\n * - \"S\" = Security / by ISIN\n * - \"C\" = Crypto\n */\nexport const assetTypes = [\"M\", \"S\", \"C\"] as const\n","import { assetTypes } from \"../lists/assetTypes\"\nimport { AssetType } from \"../types/AssetType\"\n\nexport const isAssetType = (s: string): s is AssetType => assetTypes.includes(s as AssetType)\n","export const codes = [\n \"AF\",\n \"AL\",\n \"DZ\",\n \"AS\",\n \"AD\",\n \"AO\",\n \"AI\",\n \"AQ\",\n \"AG\",\n \"AR\",\n \"AM\",\n \"AW\",\n \"AU\",\n \"AT\",\n \"AZ\",\n \"BS\",\n \"BH\",\n \"BD\",\n \"BB\",\n \"BY\",\n \"BE\",\n \"BZ\",\n \"BJ\",\n \"BM\",\n \"BT\",\n \"BO\",\n \"BA\",\n \"BW\",\n \"BV\",\n \"BR\",\n \"IO\",\n \"BN\",\n \"BG\",\n \"BF\",\n \"BI\",\n \"KH\",\n \"CM\",\n \"CA\",\n \"CV\",\n \"KY\",\n \"CF\",\n \"TD\",\n \"CL\",\n \"CN\",\n \"CX\",\n \"CC\",\n \"CO\",\n \"KM\",\n \"CG\",\n \"CD\",\n \"CK\",\n \"CR\",\n \"CI\",\n \"HR\",\n \"CU\",\n \"CY\",\n \"CZ\",\n \"DK\",\n \"DJ\",\n \"DM\",\n \"DO\",\n \"EC\",\n \"EG\",\n \"SV\",\n \"GQ\",\n \"ER\",\n \"EE\",\n \"ET\",\n \"FK\",\n \"FO\",\n \"FJ\",\n \"FI\",\n \"FR\",\n \"GF\",\n \"PF\",\n \"TF\",\n \"GA\",\n \"GM\",\n \"GE\",\n \"DE\",\n \"GH\",\n \"GI\",\n \"GR\",\n \"GL\",\n \"GD\",\n \"GP\",\n \"GU\",\n \"GT\",\n \"GN\",\n \"GW\",\n \"GY\",\n \"HT\",\n \"HM\",\n \"VA\",\n \"HN\",\n \"HK\",\n \"HU\",\n \"IS\",\n \"IN\",\n \"ID\",\n \"IR\",\n \"IQ\",\n \"IE\",\n \"IL\",\n \"IT\",\n \"JM\",\n \"JP\",\n \"JO\",\n \"KZ\",\n \"KE\",\n \"KI\",\n \"KP\",\n \"KR\",\n \"KW\",\n \"KG\",\n \"LA\",\n \"LV\",\n \"LB\",\n \"LS\",\n \"LR\",\n \"LY\",\n \"LI\",\n \"LT\",\n \"LU\",\n \"MO\",\n \"MG\",\n \"MW\",\n \"MY\",\n \"MV\",\n \"ML\",\n \"MT\",\n \"MH\",\n \"MQ\",\n \"MR\",\n \"MU\",\n \"YT\",\n \"MX\",\n \"FM\",\n \"MD\",\n \"MC\",\n \"MN\",\n \"MS\",\n \"MA\",\n \"MZ\",\n \"MM\",\n \"NA\",\n \"NR\",\n \"NP\",\n \"NL\",\n \"NC\",\n \"NZ\",\n \"NI\",\n \"NE\",\n \"NG\",\n \"NU\",\n \"NF\",\n \"MP\",\n \"MK\",\n \"NO\",\n \"OM\",\n \"PK\",\n \"PW\",\n \"PS\",\n \"PA\",\n \"PG\",\n \"PY\",\n \"PE\",\n \"PH\",\n \"PN\",\n \"PL\",\n \"PT\",\n \"PR\",\n \"QA\",\n \"RE\",\n \"RO\",\n \"RU\",\n \"RW\",\n \"SH\",\n \"KN\",\n \"LC\",\n \"PM\",\n \"VC\",\n \"WS\",\n \"SM\",\n \"ST\",\n \"SA\",\n \"SN\",\n \"SC\",\n \"SL\",\n \"SG\",\n \"SK\",\n \"SI\",\n \"SB\",\n \"SO\",\n \"ZA\",\n \"GS\",\n \"ES\",\n \"LK\",\n \"SD\",\n \"SR\",\n \"SJ\",\n \"SZ\",\n \"SE\",\n \"CH\",\n \"SY\",\n \"TW\",\n \"TJ\",\n \"TZ\",\n \"TH\",\n \"TL\",\n \"TG\",\n \"TK\",\n \"TO\",\n \"TT\",\n \"TN\",\n \"TR\",\n \"TM\",\n \"TC\",\n \"TV\",\n \"UG\",\n \"UA\",\n \"AE\",\n \"GB\",\n \"US\",\n \"UM\",\n \"UY\",\n \"UZ\",\n \"VU\",\n \"VE\",\n \"VN\",\n \"VG\",\n \"VI\",\n \"WF\",\n \"EH\",\n \"YE\",\n \"ZM\",\n \"ZW\",\n \"AX\",\n \"BQ\",\n \"CW\",\n \"GG\",\n \"IM\",\n \"JE\",\n \"ME\",\n \"BL\",\n \"MF\",\n \"RS\",\n \"SX\",\n \"SS\",\n \"XK\"\n] as const","import { codes } from \"../lists/iso-country-alpha2.generated\"\nimport { IsoCountryA2 } from \"../types/IsoCountryA2\"\n\nexport const isIsoCountryA2 = (s: string): s is IsoCountryA2 => codes.includes(s as IsoCountryA2)\n","import { ISIN } from \"../types/ISIN\"\nimport { isIsoCountryA2 } from \"./isIsoCountryA2\"\n\nexport const calculateCheckDigit = (isinCountryCode: string, nsin: string) => {\n const s = isinCountryCode + nsin\n const mapIsinDigits = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n let m: string = \"\"\n\n // Translate characters to numbers\n\n for (let i = 0; i < s.length; i++) {\n m += mapIsinDigits.indexOf(s[i])\n }\n\n // Set the parity mode\n\n const parity = m.length & 1\n\n // Weight the digits, based on parity, and concatenate the results\n\n let n: string = \"\"\n\n for (let i = 0; i < m.length; i++) {\n n += Number(m[i]) * ((i & 1) === parity ? 1 : 2)\n }\n\n // Compute the cross-sum\n\n let o = 0\n\n for (let i = 0; i < n.length; i++) {\n o += Number(n[i])\n }\n\n // Double Modulo 10\n\n return (10 - (o % 10)) % 10\n}\n\nexport const isIsin = (s: string): s is ISIN => {\n const parts = s?.match(/^([A-Z]{2})([0-9A-Z]{9})([0-9]{1})$/)\n\n if (!parts) {\n // Syntax error\n return false\n }\n\n const [, cc, nsin, cd] = parts\n const PSEUDO_COUNTRY_CODES = [\"XS\", \"XA\", \"XB\", \"XC\", \"XD\", \"XF\", \"QS\", \"QT\", \"QW\", \"EU\"]\n\n if (!isIsoCountryA2(cc) && !PSEUDO_COUNTRY_CODES.includes(cc)) {\n // Invalid country code\n return false\n }\n\n const ccd = calculateCheckDigit(cc, nsin)\n\n if (Number(cd) !== ccd) {\n // Invalid check digit\n return false\n }\n\n return true\n}\n","export const codes = [\n \"AED\",\n \"AFN\",\n \"ALL\",\n \"AMD\",\n \"ANG\",\n \"AOA\",\n \"ARS\",\n \"AUD\",\n \"AWG\",\n \"AZN\",\n \"BAM\",\n \"BBD\",\n \"BDT\",\n \"BGN\",\n \"BHD\",\n \"BIF\",\n \"BMD\",\n \"BND\",\n \"BOB\",\n \"BOV\",\n \"BRL\",\n \"BSD\",\n \"BTN\",\n \"BWP\",\n \"BYN\",\n \"BZD\",\n \"CAD\",\n \"CDF\",\n \"CHE\",\n \"CHF\",\n \"CHW\",\n \"CLF\",\n \"CLP\",\n \"CNY\",\n \"COP\",\n \"COU\",\n \"CRC\",\n \"CUC\",\n \"CUP\",\n \"CVE\",\n \"CZK\",\n \"DJF\",\n \"DKK\",\n \"DOP\",\n \"DZD\",\n \"EGP\",\n \"ERN\",\n \"ETB\",\n \"EUR\",\n \"FJD\",\n \"FKP\",\n \"GBP\",\n \"GEL\",\n \"GHS\",\n \"GIP\",\n \"GMD\",\n \"GNF\",\n \"GTQ\",\n \"GYD\",\n \"HKD\",\n \"HNL\",\n \"HRK\",\n \"HTG\",\n \"HUF\",\n \"IDR\",\n \"ILS\",\n \"INR\",\n \"IQD\",\n \"IRR\",\n \"ISK\",\n \"JMD\",\n \"JOD\",\n \"JPY\",\n \"KES\",\n \"KGS\",\n \"KHR\",\n \"KMF\",\n \"KPW\",\n \"KRW\",\n \"KWD\",\n \"KYD\",\n \"KZT\",\n \"LAK\",\n \"LBP\",\n \"LKR\",\n \"LRD\",\n \"LSL\",\n \"LYD\",\n \"MAD\",\n \"MDL\",\n \"MGA\",\n \"MKD\",\n \"MMK\",\n \"MNT\",\n \"MOP\",\n \"MRU\",\n \"MUR\",\n \"MVR\",\n \"MWK\",\n \"MXN\",\n \"MXV\",\n \"MYR\",\n \"MZN\",\n \"NAD\",\n \"NGN\",\n \"NIO\",\n \"NOK\",\n \"NPR\",\n \"NZD\",\n \"OMR\",\n \"PAB\",\n \"PEN\",\n \"PGK\",\n \"PHP\",\n \"PKR\",\n \"PLN\",\n \"PYG\",\n \"QAR\",\n \"RON\",\n \"RSD\",\n \"RUB\",\n \"RWF\",\n \"SAR\",\n \"SBD\",\n \"SCR\",\n \"SDG\",\n \"SEK\",\n \"SGD\",\n \"SHP\",\n \"SLL\",\n \"SOS\",\n \"SRD\",\n \"SSP\",\n \"STN\",\n \"SVC\",\n \"SYP\",\n \"SZL\",\n \"THB\",\n \"TJS\",\n \"TMT\",\n \"TND\",\n \"TOP\",\n \"TRY\",\n \"TTD\",\n \"TWD\",\n \"TZS\",\n \"UAH\",\n \"UGX\",\n \"USD\",\n \"USN\",\n \"UYI\",\n \"UYU\",\n \"UYW\",\n \"UZS\",\n \"VES\",\n \"VND\",\n \"VUV\",\n \"WST\",\n \"XAF\",\n \"XAG\",\n \"XAU\",\n \"XBA\",\n \"XBB\",\n \"XBC\",\n \"XBD\",\n \"XCD\",\n \"XDR\",\n \"XOF\",\n \"XPD\",\n \"XPF\",\n \"XPT\",\n \"XSU\",\n \"XTS\",\n \"XUA\",\n \"XXX\",\n \"YER\",\n \"ZAR\",\n \"ZMW\",\n \"ZWL\"\n] as const","import { codes } from \"../lists/iso-currency-alpha3.generated\"\nimport { IsoCurrencyA3 } from \"../types/IsoCurrencyA3\"\n\nexport const isIsoCurrencyA3 = (s: string): s is IsoCurrencyA3 => codes.includes(s as IsoCurrencyA3)\n","import { AssetId } from \"../types/AssetId\"\nimport { isAssetType } from \"./isAssetType\"\nimport { isIsin } from \"./isIsin\"\nimport { isIsoCurrencyA3 } from \"./isIsoCurrencyA3\"\n\nexport const isAssetId = (s: string): s is AssetId => {\n const type = s.charAt(0)\n\n if (!isAssetType(type)) {\n return false\n }\n\n const code = s.substring(2)\n\n if (type === \"M\") {\n return isIsoCurrencyA3(code)\n } else if (type === \"S\") {\n return isIsin(code)\n } else {\n return code.match(/^[A-Z]{1,5}$/) !== null\n }\n}\n","import { IsoDate } from \"../types/IsoDate\"\n\n/**\n * Tests if the given `string` matches the `YYYY-MM-DD` notation of the ISO<sup>TM</sup> 8601\n * specification and its value is within the permitted bounds.\n *\n * See https://www.iso.org/iso-8601-date-and-time-format.html\n */\nexport const isIsoDate = (s: string): s is IsoDate => {\n const match = s && s.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/)\n\n if (!match) {\n return false\n }\n\n const parsedDate = new Date(s)\n\n if (Number.isNaN(parsedDate.getTime())) {\n return false\n }\n\n const calendarDay = parsedDate.toISOString().substring(0, 10)\n\n if (calendarDay !== s) {\n // captures invalid calendar dates such as 2020-02-31\n return false\n }\n\n return true\n}\n","import { IsoTime } from \"../types/IsoTime\"\n\n/**\n * Tests if the given `string` matches the `HH:MM` notation of the ISO<sup>TM</sup> 8601\n * specification and its value is within the permitted bounds.\n *\n * See https://www.iso.org/iso-8601-date-and-time-format.html\n */\nexport const isIsoTime = (s: string): s is IsoTime => {\n const match = s.match(/^([0-2][0-9]):[0-5][0-9]$/)\n return match !== null && Number(match[1]) <= 23\n}\n","import { WKN } from \"../types/WKN\"\n\n/**\n * Tests if the given `string` represents a valid `WKN`.\n *\n * Note: the requirements for valid WKNs hav been relaxed several times, with the latest definition\n * being that [any composition of six digits and/or capital letters qualifies as WKN](https://en.wikipedia.org/wiki/Wertpapierkennnummer).\n */\nexport const isWkn = (s: string): s is WKN => s.match(/^[A-Z0-9]{6}$/) !== null\n"],"mappings":";AAKO,IAAM,aAAa,CAAC,KAAK,KAAK,GAAG;;;ACFjC,IAAM,cAAc,CAAC,MAA8B,WAAW,SAAS,CAAc;;;ACHrF,IAAM,QAAQ;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACxPO,IAAM,iBAAiB,CAAC,MAAiC,MAAM,SAAS,CAAiB;;;ACAzF,IAAM,sBAAsB,CAAC,iBAAyB,SAAiB;AAC5E,QAAM,IAAI,kBAAkB;AAC5B,QAAM,gBAAgB;AACtB,MAAI,IAAY;AAIhB,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,SAAK,cAAc,QAAQ,EAAE,EAAE;AAAA,EACjC;AAIA,QAAM,SAAS,EAAE,SAAS;AAI1B,MAAI,IAAY;AAEhB,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,SAAK,OAAO,EAAE,EAAE,IAAM,MAAI,OAAO,SAAS,IAAI;AAAA,EAChD;AAIA,MAAI,IAAI;AAER,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,SAAK,OAAO,EAAE,EAAE;AAAA,EAClB;AAIA,SAAQ,MAAM,IAAI,MAAO;AAC3B;AAEO,IAAM,SAAS,CAAC,MAAyB;AAC9C,QAAM,QAAQ,uBAAG,MAAM;AAEvB,MAAI,CAAC,OAAO;AAEV,WAAO;AAAA,EACT;AAEA,QAAM,CAAC,EAAE,IAAI,MAAM,MAAM;AACzB,QAAM,uBAAuB,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAExF,MAAI,CAAC,eAAe,EAAE,KAAK,CAAC,qBAAqB,SAAS,EAAE,GAAG;AAE7D,WAAO;AAAA,EACT;AAEA,QAAM,MAAM,oBAAoB,IAAI,IAAI;AAExC,MAAI,OAAO,EAAE,MAAM,KAAK;AAEtB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;AC/DO,IAAM,SAAQ;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACjLO,IAAM,kBAAkB,CAAC,MAAkC,OAAM,SAAS,CAAkB;;;ACE5F,IAAM,YAAY,CAAC,MAA4B;AACpD,QAAM,OAAO,EAAE,OAAO,CAAC;AAEvB,MAAI,CAAC,YAAY,IAAI,GAAG;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,EAAE,UAAU,CAAC;AAE1B,MAAI,SAAS,KAAK;AAChB,WAAO,gBAAgB,IAAI;AAAA,EAC7B,WAAW,SAAS,KAAK;AACvB,WAAO,OAAO,IAAI;AAAA,EACpB,OAAO;AACL,WAAO,KAAK,MAAM,cAAc,MAAM;AAAA,EACxC;AACF;;;ACbO,IAAM,YAAY,CAAC,MAA4B;AACpD,QAAM,QAAQ,KAAK,EAAE,MAAM,oCAAoC;AAE/D,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,IAAI,KAAK,CAAC;AAE7B,MAAI,OAAO,MAAM,WAAW,QAAQ,CAAC,GAAG;AACtC,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,WAAW,YAAY,EAAE,UAAU,GAAG,EAAE;AAE5D,MAAI,gBAAgB,GAAG;AAErB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;ACrBO,IAAM,YAAY,CAAC,MAA4B;AACpD,QAAM,QAAQ,EAAE,MAAM,2BAA2B;AACjD,SAAO,UAAU,QAAQ,OAAO,MAAM,EAAE,KAAK;AAC/C;;;ACHO,IAAM,QAAQ,CAAC,MAAwB,EAAE,MAAM,eAAe,MAAM;","names":[]}