{"version":3,"file":"validate-steuernummer.umd.cjs","sources":["../src/finanzamtnummern.ts","../src/index.ts"],"sourcesContent":["/**\n * List of all 610 (as of October 5th 2022) Finanzämter in Germany.\n *\n * Obtained from XML download of \"GemFA 2.0\" available at:\n * https://www.bzst.de/DE/Service/Behoerdenwegweiser/Finanzamtsuche/finanzamtsuche.html\n */\nexport const FinanzamtNummern = new Set([\n  '1010',\n  '1020',\n  '1030',\n  '1040',\n  '1055',\n  '1060',\n  '1075',\n  '1085',\n  '1113',\n  '1114',\n  '1116',\n  '1117',\n  '1118',\n  '1119',\n  '1120',\n  '1121',\n  '1123',\n  '1124',\n  '1125',\n  '1127',\n  '1129',\n  '1130',\n  '1131',\n  '1132',\n  '1133',\n  '1134',\n  '1135',\n  '1136',\n  '1137',\n  '1138',\n  '1191',\n  '2111',\n  '2113',\n  '2115',\n  '2116',\n  '2117',\n  '2118',\n  '2120',\n  '2122',\n  '2124',\n  '2125',\n  '2126',\n  '2127',\n  '2128',\n  '2129',\n  '2130',\n  '2131',\n  '2137',\n  '2201',\n  '2210',\n  '2216',\n  '2217',\n  '2220',\n  '2227',\n  '2228',\n  '2230',\n  '2235',\n  '2241',\n  '2242',\n  '2243',\n  '2244',\n  '2245',\n  '2246',\n  '2247',\n  '2248',\n  '2249',\n  '2250',\n  '2251',\n  '2313',\n  '2314',\n  '2315',\n  '2316',\n  '2317',\n  '2318',\n  '2319',\n  '2320',\n  '2321',\n  '2322',\n  '2323',\n  '2324',\n  '2325',\n  '2326',\n  '2327',\n  '2328',\n  '2330',\n  '2331',\n  '2333',\n  '2334',\n  '2335',\n  '2336',\n  '2338',\n  '2340',\n  '2341',\n  '2342',\n  '2343',\n  '2344',\n  '2345',\n  '2346',\n  '2347',\n  '2348',\n  '2349',\n  '2350',\n  '2351',\n  '2352',\n  '2353',\n  '2354',\n  '2355',\n  '2356',\n  '2357',\n  '2358',\n  '2360',\n  '2361',\n  '2363',\n  '2364',\n  '2365',\n  '2366',\n  '2367',\n  '2368',\n  '2369',\n  '2370',\n  '2380',\n  '2381',\n  '2382',\n  '2384',\n  '2385',\n  '2386',\n  '2390',\n  '2391',\n  '2392',\n  '2393',\n  '2457',\n  '2460',\n  '2471',\n  '2475',\n  '2477',\n  '2478',\n  '2601',\n  '2602',\n  '2603',\n  '2604',\n  '2605',\n  '2606',\n  '2607',\n  '2608',\n  '2609',\n  '2610',\n  '2611',\n  '2612',\n  '2613',\n  '2614',\n  '2615',\n  '2616',\n  '2617',\n  '2618',\n  '2619',\n  '2620',\n  '2621',\n  '2622',\n  '2623',\n  '2624',\n  '2625',\n  '2626',\n  '2627',\n  '2628',\n  '2629',\n  '2630',\n  '2631',\n  '2632',\n  '2633',\n  '2634',\n  '2635',\n  '2636',\n  '2637',\n  '2638',\n  '2639',\n  '2640',\n  '2641',\n  '2642',\n  '2643',\n  '2644',\n  '2645',\n  '2646',\n  '2647',\n  '2701',\n  '2702',\n  '2706',\n  '2708',\n  '2709',\n  '2710',\n  '2713',\n  '2719',\n  '2722',\n  '2723',\n  '2724',\n  '2726',\n  '2727',\n  '2729',\n  '2730',\n  '2731',\n  '2732',\n  '2734',\n  '2735',\n  '2740',\n  '2741',\n  '2742',\n  '2743',\n  '2744',\n  '2801',\n  '2804',\n  '2805',\n  '2806',\n  '2807',\n  '2808',\n  '2809',\n  '2810',\n  '2811',\n  '2812',\n  '2813',\n  '2814',\n  '2815',\n  '2816',\n  '2818',\n  '2819',\n  '2820',\n  '2821',\n  '2822',\n  '2823',\n  '2830',\n  '2831',\n  '2832',\n  '2833',\n  '2834',\n  '2835',\n  '2836',\n  '2837',\n  '2838',\n  '2839',\n  '2840',\n  '2841',\n  '2842',\n  '2843',\n  '2844',\n  '2845',\n  '2846',\n  '2847',\n  '2848',\n  '2849',\n  '2850',\n  '2851',\n  '2852',\n  '2853',\n  '2854',\n  '2855',\n  '2856',\n  '2857',\n  '2858',\n  '2859',\n  '2861',\n  '2862',\n  '2863',\n  '2864',\n  '2865',\n  '2869',\n  '2870',\n  '2871',\n  '2874',\n  '2876',\n  '2877',\n  '2878',\n  '2879',\n  '2880',\n  '2881',\n  '2882',\n  '2883',\n  '2884',\n  '2885',\n  '2886',\n  '2887',\n  '2888',\n  '2889',\n  '2890',\n  '2891',\n  '2892',\n  '2893',\n  '2895',\n  '2896',\n  '2897',\n  '2899',\n  '3046',\n  '3048',\n  '3049',\n  '3050',\n  '3051',\n  '3052',\n  '3053',\n  '3056',\n  '3057',\n  '3061',\n  '3062',\n  '3064',\n  '3065',\n  '3102',\n  '3103',\n  '3105',\n  '3106',\n  '3107',\n  '3108',\n  '3110',\n  '3112',\n  '3114',\n  '3115',\n  '3116',\n  '3117',\n  '3118',\n  '3119',\n  '3202',\n  '3203',\n  '3204',\n  '3207',\n  '3208',\n  '3209',\n  '3210',\n  '3213',\n  '3214',\n  '3215',\n  '3217',\n  '3218',\n  '3220',\n  '3222',\n  '3223',\n  '3224',\n  '3227',\n  '3228',\n  '3231',\n  '3232',\n  '3236',\n  '3237',\n  '3238',\n  '3239',\n  '4069',\n  '4070',\n  '4072',\n  '4075',\n  '4079',\n  '4080',\n  '4081',\n  '4082',\n  '4084',\n  '4086',\n  '4087',\n  '4090',\n  '4151',\n  '4154',\n  '4155',\n  '4156',\n  '4157',\n  '4159',\n  '4161',\n  '4162',\n  '4165',\n  '4166',\n  '4170',\n  '4171',\n  '5101',\n  '5102',\n  '5103',\n  '5105',\n  '5106',\n  '5107',\n  '5109',\n  '5111',\n  '5112',\n  '5113',\n  '5114',\n  '5115',\n  '5116',\n  '5117',\n  '5119',\n  '5120',\n  '5121',\n  '5122',\n  '5123',\n  '5124',\n  '5126',\n  '5128',\n  '5130',\n  '5131',\n  '5132',\n  '5133',\n  '5134',\n  '5135',\n  '5139',\n  '5147',\n  '5170',\n  '5171',\n  '5172',\n  '5173',\n  '5174',\n  '5176',\n  '5181',\n  '5182',\n  '5183',\n  '5201',\n  '5202',\n  '5203',\n  '5204',\n  '5205',\n  '5206',\n  '5207',\n  '5208',\n  '5209',\n  '5210',\n  '5211',\n  '5212',\n  '5213',\n  '5214',\n  '5215',\n  '5216',\n  '5217',\n  '5218',\n  '5219',\n  '5220',\n  '5221',\n  '5222',\n  '5223',\n  '5224',\n  '5230',\n  '5270',\n  '5271',\n  '5272',\n  '5281',\n  '5282',\n  '5283',\n  '5301',\n  '5302',\n  '5303',\n  '5304',\n  '5305',\n  '5306',\n  '5307',\n  '5308',\n  '5309',\n  '5310',\n  '5311',\n  '5312',\n  '5313',\n  '5314',\n  '5315',\n  '5316',\n  '5317',\n  '5319',\n  '5321',\n  '5322',\n  '5323',\n  '5324',\n  '5325',\n  '5326',\n  '5327',\n  '5328',\n  '5329',\n  '5330',\n  '5331',\n  '5332',\n  '5333',\n  '5334',\n  '5335',\n  '5336',\n  '5337',\n  '5338',\n  '5339',\n  '5340',\n  '5341',\n  '5342',\n  '5343',\n  '5345',\n  '5346',\n  '5347',\n  '5348',\n  '5349',\n  '5350',\n  '5351',\n  '5359',\n  '5371',\n  '5372',\n  '5373',\n  '5374',\n  '5375',\n  '5376',\n  '5381',\n  '5382',\n  '5383',\n  '5384',\n  '9101',\n  '9102',\n  '9103',\n  '9104',\n  '9105',\n  '9106',\n  '9107',\n  '9108',\n  '9109',\n  '9110',\n  '9111',\n  '9112',\n  '9113',\n  '9114',\n  '9115',\n  '9116',\n  '9117',\n  '9119',\n  '9121',\n  '9123',\n  '9124',\n  '9125',\n  '9126',\n  '9127',\n  '9131',\n  '9132',\n  '9134',\n  '9138',\n  '9139',\n  '9140',\n  '9141',\n  '9142',\n  '9143',\n  '9144',\n  '9145',\n  '9146',\n  '9147',\n  '9148',\n  '9149',\n  '9151',\n  '9152',\n  '9153',\n  '9154',\n  '9156',\n  '9157',\n  '9159',\n  '9161',\n  '9162',\n  '9163',\n  '9168',\n  '9169',\n  '9170',\n  '9171',\n  '9181',\n  '9182',\n  '9183',\n  '9184',\n  '9185',\n  '9187',\n  '9188',\n  '9189',\n  '9201',\n  '9202',\n  '9203',\n  '9204',\n  '9205',\n  '9206',\n  '9207',\n  '9208',\n  '9211',\n  '9212',\n  '9216',\n  '9217',\n  '9218',\n  '9220',\n  '9221',\n  '9222',\n  '9223',\n  '9227',\n  '9228',\n  '9229',\n  '9230',\n  '9231',\n  '9232',\n  '9235',\n  '9238',\n  '9240',\n  '9241',\n  '9244',\n  '9247',\n  '9248',\n  '9249',\n  '9252',\n  '9254',\n  '9255',\n  '9257',\n  '9258',\n  '9259',\n  '2171',\n  '2173',\n  '2175',\n  '2190',\n  '2184',\n  '2186',\n  '2189',\n  '2191',\n  '2187',\n  '2172',\n  '2183',\n  '2180',\n  '2188',\n  '2179',\n  '2182',\n  '2185',\n  '2176',\n  '2177',\n  '2178',\n  '2181',\n]);\n","import { FinanzamtNummern } from './finanzamtnummern';\n\nexport const defaultErrors = {\n  allowedCharactersError:\n    'Bitte nur Ziffern, \"-\", \"_\", \"/\" oder Leerzeichen verwenden',\n  tooShortError: 'Eine Steuernummer muss mindestens 10 Ziffern enthalten',\n  tooLongError: 'Eine Steuernummer darf maximal 13 Ziffern enthalten',\n  wrongLengthForState: 'Die Steuernummer hat die falsche Länge',\n  parseError: 'Die Steuernummer konnte nicht geparsed werden',\n  missingZeroError:\n    'Steuernummern zur elektronischen Übermittlung müssen an 5. Stelle eine \"0\" aufweisen',\n  unknownStatePrefixError:\n    'Die Steuernummer kann keinem Bundesland zugewiesen werden',\n  unknownFinanzamtError:\n    'Die Steuernummer kann keinem Finanzamt zugewiesen werden',\n  wrongStateError:\n    'Die Steuernummer entspricht nicht dem angegebenen Bundesland',\n  bezirksnummerError: 'Die Steuernummer enthält eine invalide Bezirksnummer',\n  pruefzifferError: 'Die Prüfziffer der Steuernummer stimmt nicht',\n  nwInternalConsistencyError:\n    'Die interne Konsistenz der Steuernummer ist nicht gegeben',\n  missingStateInformationError:\n    'Unzureichende Informationen über das zugehörige Bundesland',\n};\n\ntype ErrorMessages = typeof defaultErrors;\n\nexport type ISO3166_2Codes =\n  | 'DE-BW'\n  | 'DE-BY'\n  | 'DE-BE'\n  | 'DE-BB'\n  | 'DE-SN'\n  | 'DE-ST'\n  | 'DE-HB'\n  | 'DE-HH'\n  | 'DE-HE'\n  | 'DE-MV'\n  | 'DE-TH'\n  | 'DE-NI'\n  | 'DE-NW'\n  | 'DE-RP'\n  | 'DE-SL'\n  | 'DE-SH';\n\ntype ISO3166_2Codes_11erVerfahren =\n  | 'DE-BY'\n  | 'DE-BE-A'\n  | 'DE-BE-B'\n  | 'DE-BB'\n  | 'DE-HB'\n  | 'DE-HH'\n  | 'DE-MV'\n  | 'DE-NI'\n  | 'DE-NW'\n  | 'DE-SL'\n  | 'DE-SN'\n  | 'DE-ST'\n  | 'DE-TH';\n\nconst factors11erVerfahren: Record<ISO3166_2Codes_11erVerfahren, number[]> = {\n  'DE-BY': [0, 5, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n  'DE-BE-A': [0, 0, 0, 0, 0, 7, 6, 5, 8, 4, 3, 2],\n  'DE-BE-B': [0, 0, 2, 9, 0, 8, 7, 6, 5, 4, 3, 2],\n  'DE-BB': [0, 5, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n  'DE-HB': [0, 0, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n  'DE-HH': [0, 0, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n  'DE-MV': [0, 5, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n  'DE-NI': [0, 0, 2, 9, 0, 8, 7, 6, 5, 4, 3, 2],\n  'DE-NW': [0, 3, 2, 1, 0, 7, 6, 5, 4, 3, 2, 1],\n  'DE-SL': [0, 5, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n  'DE-SN': [0, 5, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n  'DE-ST': [0, 5, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n  'DE-TH': [0, 5, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n};\n\nconst factorsModified11erVerfahren = [0, 0, 1, 2, 0, 1, 2, 1, 2, 1, 2, 1];\n\nconst summands2erVerfahren = [0, 0, 9, 8, 0, 7, 6, 5, 4, 3, 2, 1];\n\nconst factors2erVerfahren = [0, 0, 512, 256, 0, 128, 64, 32, 16, 8, 4, 2];\n\n/**\n * List of Bezirksnummer values which are invalid, according to\n * https://download.elster.de/download/schnittstellen/Pruefung_der_Steuer_und_Steueridentifikatsnummer.pdf\n */\nconst forbiddenBezirksnummer = ['000', '998', '999', '0000', '0998', '0999'];\n\nexport type Options = {\n  bundesland?: ISO3166_2Codes;\n  errorMessages?: Partial<ErrorMessages>;\n};\n\ntype OptionsWithErrors = Options & { errorMessages: ErrorMessages };\n\n/**\n * Returns `undefined`, if the given `val` is a valid German Steuernummer. If\n * not, returns and error describing the first violated constraint met during\n * the validation process.\n *\n * Using the second options argument, a `bundesland` can be passed to explicitly\n * state the Bundesland the Steuernummer should belong to.\n *\n * This is what's being validated:\n *\n *  - The given string contains only digits, ' ', or '/'\n *  - The number of digits in the given string is between 10 and 13\n *  - The state (Bundesland) issuing the Steuernummer is known\n *    - Either, because the Steuernummer contains a state prefix (i.e., is of\n *      length >= 12)\n *    - Or, because the `bundesland` option was used to deliberately name the\n *      state (for example, when providing a Steuernummer using the common\n *      Standardschema der Länder)\n *  - The state information contained in the Steuernummer matches the\n *    `bundesland` option, if both are given\n *  - The Bundesfinanzamtsnummer part of the Steuernummer references a known\n *    Bundesfinanzamt. The list to check against is based on the \"GemFA 2.0\"\n *    (GEMeinden und FinanzAemter 2.0) data, which lists 610 Finanzämter as of\n *    October 5th 2022.\n *  - The Bezirksnummer part of the Steuernummer is valid (checking Bundesland-\n *    specific constraints)\n *  - The Unterscheidungsnummer and Prüfziffer fulfill requirements specific to\n *    Nordrhein-Westfalen\n *  - The Prüfziffer is valid. In the case of a Steuernummer from Berlin,\n *    validation passes if the Prüfziffer matches that calculated either for the\n *    Berlin-A _or_ the Berlin-B scheme.\n *\n * Cf. https://download.elster.de/download/schnittstellen/Pruefung_der_Steuer_und_Steueridentifikatsnummer.pdf\n *\n * Using the second options argument, all / individual error messages (default\n * to German) can be overwritten.\n */\nexport function validateSteuernummer(value: string, options?: Options) {\n  try {\n    const errorMessages = {\n      ...defaultErrors,\n      ...(typeof options?.errorMessages === 'object'\n        ? options.errorMessages\n        : {}),\n    };\n\n    // at this point, we know the bundesland of the Steuernummer - so we can\n    // obtain a \"normalized\" version, i.e., one following the \"Vereinheitlichtes\n    // Bundesschema zur elektronischen Übermittlung\" of length 13:\n    const {\n      bundesfinanzamtnummer,\n      bezirksnummer,\n      states,\n      unterscheidungsnummer,\n      pruefziffer,\n      normalizedSteuernummer,\n    } = parseSteuernummer(value, {\n      ...options,\n      errorMessages,\n    });\n\n    // validate that the \"Bundesfinanzamtsnummer\" (first 4 digits of normalized\n    // Steuernummer) reference one of the known Finanzämter in Germany:\n    if (!FinanzamtNummern.has(bundesfinanzamtnummer)) {\n      throw new Error(errorMessages.unknownFinanzamtError);\n    }\n\n    // validate that the Steuernummer does not use an explicitly forbidden\n    // Bezirksnummer:\n    if (forbiddenBezirksnummer.includes(bezirksnummer)) {\n      throw new Error(errorMessages.bezirksnummerError);\n    }\n\n    // validate that the Bezirksnummer does not violate constraints for states of\n    // the bayerischen Programmierverbundes:\n    const isBayerischerProgrammierVerbund =\n      getIsBayerischerProgrammierverbund(states);\n    if (isBayerischerProgrammierVerbund && parseInt(bezirksnummer) < 100) {\n      throw new Error(errorMessages.bezirksnummerError);\n    }\n\n    // validate that the \"Kombination aus Unterscheidungsnummer und Prüfziffer\n    // (UUUP) stets größer als 0009\" for a Steuernummer from\n    // Nordrhein-Westfalen:\n    if (\n      states.includes('DE-NW') &&\n      parseInt(unterscheidungsnummer + pruefziffer) < 9\n    ) {\n      throw new Error(errorMessages.nwInternalConsistencyError);\n    }\n\n    // validate the Prüfziffer:\n    const pruefziffern = getPruefziffern(normalizedSteuernummer, states);\n    if (\n      pruefziffern.length > 0 &&\n      !pruefziffern.includes(parseInt(pruefziffer))\n    ) {\n      throw new Error(errorMessages.pruefzifferError);\n    }\n\n    return undefined;\n  } catch (error: any) {\n    return error.message;\n  }\n}\n\nconst statesWith10Digits = new Set<ISO3166_2Codes>([\n  'DE-BW',\n  'DE-BE',\n  'DE-HB',\n  'DE-HH',\n  'DE-NI',\n  'DE-RP',\n  'DE-SH',\n]);\n\nconst statesWith11Digits = new Set<ISO3166_2Codes>([\n  'DE-BY',\n  'DE-BB',\n  'DE-HE',\n  'DE-MV',\n  'DE-NW',\n  'DE-SL',\n  'DE-SN',\n  'DE-ST',\n  'DE-TH',\n]);\n\nexport type ParsedSteuernummer = {\n  // Steuernummer w. 13 digits: `FFFF 0 BBB UUUU P` or `FFFF 0 BBBB UUU P`\n  normalizedSteuernummer: string;\n  states: ISO3166_2Codes | ISO3166_2Codes[];\n  statePrefix: string;\n  bundesfinanzamtnummer: string;\n  bezirksnummer: string;\n  unterscheidungsnummer: string;\n  pruefziffer: string;\n};\n\n/**\n * Parses the steuernummer contained in the given `value`, or throws an error if\n * parsing is not possible. `value` could contain a steuernummer in the:\n *  - \"Standardschema der Länder\"\n *  - \"Vereinheitlichtes Bundesschema\"\n *  - \"Vereinheitlichtes Bundesschema zur elektronischen Übermittlung\"\n */\nexport function parseSteuernummer(\n  value: string,\n  options: Options\n): ParsedSteuernummer {\n  const { errorMessages, ...rest } = options;\n  const combinedErrorMessages: ErrorMessages = {\n    ...defaultErrors,\n    ...(options.errorMessages || {}),\n  };\n  const optionsWithErrors: OptionsWithErrors = {\n    ...rest,\n    errorMessages: combinedErrorMessages,\n  };\n\n  // check whether only allowed characters are used:\n  if (!/^[0-9\\/\\s]*$/gm.test(value)) {\n    throw new Error(combinedErrorMessages.allowedCharactersError);\n  }\n\n  // extract digits:\n  const digits = value.replace(/[^0-9]/gi, '');\n\n  // validate length:\n  if (digits.length < 10) {\n    throw new Error(combinedErrorMessages.tooShortError);\n  }\n  if (digits.length > 13) {\n    throw new Error(combinedErrorMessages.tooLongError);\n  }\n\n  // parse depending on what schema the Steuernummer is (most likely) in:\n  if (digits.length === 13) {\n    return parseSteuernummerBundesschemaElectric(digits, optionsWithErrors);\n  } else if (digits.length === 12) {\n    return parseSteuernummerBundesschema(digits, optionsWithErrors);\n  } else {\n    return parseSteuernummerStandardschema(digits, optionsWithErrors);\n  }\n}\n\n/**\n * Parses the given `digits` with length 13, which represent a steuernummer in\n * the \"Vereinheitlichtes Bundesschema zur elektronischen Übermittlung\".\n */\nfunction parseSteuernummerBundesschemaElectric(\n  digits: string,\n  options: OptionsWithErrors\n): ParsedSteuernummer {\n  // determine the possible Bundesländer that issued this Steuernummer:\n  const states = getStates(digits);\n\n  // validate that a given `bundesland` matches the state(s) identified by the\n  // given digits:\n  if (\n    typeof options?.bundesland !== 'undefined' &&\n    !states.includes(options.bundesland)\n  ) {\n    throw new Error(options.errorMessages.wrongStateError);\n  }\n\n  // validate that the fifth digit is a `0`:\n  if (digits.charAt(4) !== '0') {\n    throw new Error(options.errorMessages.missingZeroError);\n  }\n\n  const matches = digits.match(\n    states.includes('DE-NW')\n      ? // Format: FFFF 0 BBBB UUU P:\n        /(?<bundesfinanzamtnummer>\\d{4})(?<z>0)(?<bezirksnummer>\\d{4})(?<unterscheidungsnummer>\\d{3})(?<pruefziffer>\\d{1})/\n      : // Format: FFFF 0 BBB UUUU P:\n        /(?<bundesfinanzamtnummer>\\d{4})(?<z>0)(?<bezirksnummer>\\d{3})(?<unterscheidungsnummer>\\d{4})(?<pruefziffer>\\d{1})/\n  );\n  if (!matches || !matches.groups) {\n    throw new Error(options.errorMessages.parseError);\n  }\n  const {\n    bundesfinanzamtnummer,\n    bezirksnummer,\n    unterscheidungsnummer,\n    pruefziffer,\n  } = matches.groups;\n  return {\n    bezirksnummer,\n    bundesfinanzamtnummer,\n    states: options.bundesland\n      ? options.bundesland\n      : states.length === 1\n      ? states[0]\n      : states,\n    statePrefix: getStatesPrefix(states, options.errorMessages),\n    normalizedSteuernummer: digits,\n    pruefziffer,\n    unterscheidungsnummer,\n  };\n}\n\n/**\n * Parses the given `digits` with length 12, which represent a steuernummer in\n * the \"Vereinheitlichtes Bundesschema\".\n */\nfunction parseSteuernummerBundesschema(\n  digits: string,\n  options: OptionsWithErrors\n): ParsedSteuernummer {\n  // determine the possible Bundesländer that issued this Steuernummer:\n  const states = getStates(digits);\n\n  // validate that a given `bundesland` matches the state(s) identified by the\n  // given digits:\n  if (\n    typeof options?.bundesland !== 'undefined' &&\n    !states.includes(options.bundesland)\n  ) {\n    throw new Error(options.errorMessages.wrongStateError);\n  }\n\n  const matches = digits.match(\n    states.includes('DE-NW')\n      ? // Format: FFFF BBBB UUU P:\n        /(?<bundesfinanzamtnummer>\\d{4})(?<bezirksnummer>\\d{4})(?<unterscheidungsnummer>\\d{3})(?<pruefziffer>\\d{1})/\n      : // Format: FFFF BBB UUUU P:\n        /(?<bundesfinanzamtnummer>\\d{4})(?<bezirksnummer>\\d{3})(?<unterscheidungsnummer>\\d{4})(?<pruefziffer>\\d{1})/\n  );\n  if (!matches || !matches.groups) {\n    throw new Error(options.errorMessages.parseError);\n  }\n  const {\n    bundesfinanzamtnummer,\n    bezirksnummer,\n    unterscheidungsnummer,\n    pruefziffer,\n  } = matches.groups;\n  return {\n    bezirksnummer,\n    bundesfinanzamtnummer,\n    states: options.bundesland\n      ? options.bundesland\n      : states.length === 1\n      ? states[0]\n      : states,\n    statePrefix: getStatesPrefix(states, options.errorMessages),\n    normalizedSteuernummer:\n      digits.substring(0, 4) + '0' + digits.substring(4, 12),\n    pruefziffer,\n    unterscheidungsnummer,\n  };\n}\n\n/**\n * Parses the given `digits` with length 10 or 11, which represent a\n * steuernummer in the \"Standardschema der Länder\". Requires a valid\n * `bundesland` option to be passed as well.\n */\nfunction parseSteuernummerStandardschema(\n  digits: string,\n  options: OptionsWithErrors\n): ParsedSteuernummer {\n  const bundesland = options?.bundesland;\n  if (typeof bundesland === 'undefined') {\n    throw new Error(options.errorMessages.missingStateInformationError);\n  }\n\n  if (digits.length !== 10 && statesWith10Digits.has(bundesland)) {\n    throw new Error(options.errorMessages.wrongLengthForState);\n  }\n\n  if (digits.length !== 11 && statesWith11Digits.has(bundesland)) {\n    throw new Error(options.errorMessages.wrongLengthForState);\n  }\n\n  // Parsing based on https://github.com/kontist/normalize-steuernummer\n  switch (bundesland) {\n    case 'DE-BW':\n    case 'DE-BE':\n    case 'DE-HB':\n    case 'DE-HH':\n    case 'DE-NI':\n    case 'DE-RP':\n    case 'DE-SH': {\n      // Format: FF/BBB/UUUUP.\n      const matches = digits.match(\n        /(?<ff>\\d{2})(?<bbb>\\d{3})(?<uuuu>\\d{4})(?<p>\\d{1})/\n      );\n      if (!matches || !matches.groups) {\n        throw new Error(options.errorMessages.parseError);\n      }\n      const { ff, bbb, uuuu, p } = matches.groups;\n      const statePrefix = getStatesPrefix([bundesland], options.errorMessages);\n      return {\n        bezirksnummer: bbb,\n        bundesfinanzamtnummer: statePrefix + ff,\n        normalizedSteuernummer: `${statePrefix}${ff}0${bbb}${uuuu}${p}`,\n        unterscheidungsnummer: uuuu,\n        pruefziffer: p,\n        statePrefix,\n        states: bundesland,\n      };\n    }\n    case 'DE-BY':\n    case 'DE-BB':\n    case 'DE-MV':\n    case 'DE-SL':\n    case 'DE-SN':\n    case 'DE-ST':\n    case 'DE-TH': {\n      // Format: FFF/BBB/UUUUP.\n      const matches = digits.match(\n        /(?<fff>\\d{3})(?<bbb>\\d{3})(?<uuuu>\\d{4})(?<p>\\d{1})/\n      );\n      if (!matches || !matches.groups) {\n        throw new Error(options.errorMessages.parseError);\n      }\n      const { fff, bbb, uuuu, p } = matches.groups;\n      const statePrefix = getStatesPrefix([bundesland], options.errorMessages);\n      return {\n        bezirksnummer: bbb,\n        bundesfinanzamtnummer: statePrefix + fff,\n        normalizedSteuernummer: `${statePrefix}${fff}0${bbb}${uuuu}${p}`,\n        unterscheidungsnummer: uuuu,\n        pruefziffer: p,\n        statePrefix,\n        states: bundesland,\n      };\n    }\n    case 'DE-HE': {\n      // Format: 0FF/BBB/UUUUP.\n      const matches = digits.match(\n        /0(?<ff>\\d{2})(?<bbb>\\d{3})(?<uuuu>\\d{4})(?<p>\\d{1})/\n      );\n      if (!matches || !matches.groups) {\n        throw new Error(options.errorMessages.parseError);\n      }\n      const { ff, bbb, uuuu, p } = matches.groups;\n      const statePrefix = getStatesPrefix([bundesland], options.errorMessages);\n      return {\n        bezirksnummer: bbb,\n        bundesfinanzamtnummer: statePrefix + ff,\n        normalizedSteuernummer: `${statePrefix}${ff}0${bbb}${uuuu}${p}`,\n        unterscheidungsnummer: uuuu,\n        pruefziffer: p,\n        statePrefix,\n        states: bundesland,\n      };\n    }\n    case 'DE-NW': {\n      // Format: FFF/BBBB/UUUP.\n      const matches = digits.match(\n        /(?<fff>\\d{3})(?<bbbb>\\d{4})(?<uuu>\\d{3})(?<p>\\d{1})/\n      );\n      if (!matches || !matches.groups) {\n        throw new Error(options.errorMessages.parseError);\n      }\n      const { fff, bbbb, uuu, p } = matches.groups;\n      const statePrefix = getStatesPrefix([bundesland], options.errorMessages);\n      return {\n        bezirksnummer: bbbb,\n        bundesfinanzamtnummer: statePrefix + fff,\n        normalizedSteuernummer: `${statePrefix}${fff}0${bbbb}${uuu}${p}`,\n        unterscheidungsnummer: uuu,\n        pruefziffer: p,\n        statePrefix,\n        states: bundesland,\n      };\n    }\n    default:\n      throw new Error('Das angegebene Bundesland ist ungültig');\n  }\n}\n\n/**\n * Returns the ISO 3166-2 codes of the states (Bundesländer) identified by the\n * first one or two digits of the given Steuernummer.\n *\n * Returns an empty array if the Steuernummer cannot be deduced.\n *\n * Returns possibly multiple codes, as the relation between digit prefix and\n * Länder is not one-to-one.\n */\nfunction getStates(digits: string): ISO3166_2Codes[] {\n  if (digits.length < 12) {\n    return [];\n  }\n  if (digits.startsWith('9')) {\n    return ['DE-BY'];\n  } else if (digits.startsWith('5')) {\n    return ['DE-NW'];\n  } else if (digits.startsWith('4')) {\n    return ['DE-TH', 'DE-MV'];\n  } else if (digits.startsWith('3')) {\n    return ['DE-BB', 'DE-SN', 'DE-ST'];\n  } else if (digits.startsWith('28')) {\n    return ['DE-BW'];\n  } else if (digits.startsWith('27')) {\n    return ['DE-RP'];\n  } else if (digits.startsWith('26')) {\n    return ['DE-HE'];\n  } else if (digits.startsWith('24')) {\n    return ['DE-HB'];\n  } else if (digits.startsWith('23')) {\n    return ['DE-NI'];\n  } else if (digits.startsWith('22')) {\n    return ['DE-HH'];\n  } else if (digits.startsWith('21')) {\n    return ['DE-SH'];\n  } else if (digits.startsWith('11')) {\n    return ['DE-BE'];\n  } else if (digits.startsWith('1')) {\n    return ['DE-SL'];\n  }\n  return [];\n}\n\n/**\n * Returns the numeric prefix used in federal Steuernummern to identify a\n * states (Bundesland) for the given `states`.\n */\nfunction getStatesPrefix(\n  states: ISO3166_2Codes[],\n  errorMessages: ErrorMessages\n) {\n  if (states.includes('DE-BW')) {\n    return '28';\n  } else if (states.includes('DE-BY')) {\n    return '9';\n  } else if (states.includes('DE-BE')) {\n    return '11';\n  } else if (\n    states.includes('DE-BB') ||\n    states.includes('DE-SN') ||\n    states.includes('DE-ST')\n  ) {\n    return '3';\n  } else if (states.includes('DE-HB')) {\n    return '24';\n  } else if (states.includes('DE-HH')) {\n    return '22';\n  } else if (states.includes('DE-HE')) {\n    return '26';\n  } else if (states.includes('DE-MV') || states.includes('DE-TH')) {\n    return '4';\n  } else if (states.includes('DE-NI')) {\n    return '23';\n  } else if (states.includes('DE-NW')) {\n    return '5';\n  } else if (states.includes('DE-RP')) {\n    return '27';\n  } else if (states.includes('DE-SL')) {\n    return '1';\n  } else if (states.includes('DE-SH')) {\n    return '21';\n  }\n  throw new Error(errorMessages.unknownStatePrefixError);\n}\n\n/**\n * Returns `true`, if any of the given `states` entries is one belonging to the\n * \"bayerischer Programmierverband\".\n */\nfunction getIsBayerischerProgrammierverbund(\n  states: ISO3166_2Codes | ISO3166_2Codes[]\n) {\n  const statesToCheck = Array.isArray(states) ? states : [states];\n  return (\n    statesToCheck.includes('DE-BY') ||\n    statesToCheck.includes('DE-BB') ||\n    statesToCheck.includes('DE-MV') ||\n    statesToCheck.includes('DE-SL') ||\n    statesToCheck.includes('DE-SN') ||\n    statesToCheck.includes('DE-ST') ||\n    statesToCheck.includes('DE-TH')\n  );\n}\n\n/**\n * Returns an array of Prüfziffern for the given `normalizedDigits` and\n * `states`.\n *\n * The array will contain two Prüfziffern in case of the Bundesland being\n * 'DE-BE', as Berlin uses two different mechanisms to determine the Prüfziffer.\n * Returning both deliberately trades off precision for reduced complexity and\n * fewer inputs required for this function.\n *\n * Note that `states` possibly contains multiple entries (e.g., when deduced\n * from a Steuernummer starting with `3`: `['DE-BB', 'DE-SN', 'DE-ST']`). This,\n * however, is not an issue as in all such cases, the calculation of the\n * Prüfziffer is exactly the same between these states (incl. w.r.t. the\n * calculation method and factors used in the calculation).\n */\nfunction getPruefziffern(\n  normalizedDigits: string,\n  states: ISO3166_2Codes | ISO3166_2Codes[]\n): number[] {\n  const statesToCheck = Array.isArray(states) ? states : [states];\n  // w.o. knowing the Bundesland, we cannot determine the Prüfziffer:\n  if (normalizedDigits.length !== 13 || states.length === 0) {\n    throw new Error(\n      `Cannot call getPruefziffern with a non-normalized Steuernummer or without providing states`\n    );\n  }\n\n  if (statesToCheck.includes('DE-RP')) {\n    return [getPruefzifferModified11er(normalizedDigits)];\n  } else if (\n    statesToCheck.includes('DE-BW') ||\n    statesToCheck.includes('DE-HE') ||\n    statesToCheck.includes('DE-SH')\n  ) {\n    return [getPruefziffer2er(normalizedDigits)];\n  } else if (statesToCheck.includes('DE-BE')) {\n    return [\n      getPruefziffer11er(normalizedDigits, 'DE-BE-A'),\n      getPruefziffer11er(normalizedDigits, 'DE-BE-B'),\n    ];\n  } else {\n    return [\n      getPruefziffer11er(\n        normalizedDigits,\n        statesToCheck[0] as ISO3166_2Codes_11erVerfahren\n      ),\n    ];\n  }\n}\n\n/**\n * Determines the Prüfziffer of the given `normalizedDigits` (string of digits\n * with length 12) using the 2er-Verfahren (used in DE-BW, DE-HE, and DE-SH).\n */\nexport function getPruefziffer2er(normalizedDigits: string) {\n  const sums = [];\n  for (let i = 0; i < 12; i++) {\n    sums.push(parseInt(normalizedDigits[i]) + summands2erVerfahren[i]);\n  }\n  const sumsSingleDigits = sums.map((p) => p % 10);\n  const products = sumsSingleDigits.map((s, i) => s * factors2erVerfahren[i]);\n\n  // repeatedly sum up the digits of items until they are all single-digit:\n  let digitSums = products.map(sumDigits);\n  while (digitSums.find((s) => s > 9)) {\n    digitSums = digitSums.map(sumDigits);\n  }\n\n  const sum = digitSums.reduce((sum, current) => (sum += current), 0);\n  if (sum % 10 === 0) {\n    return 0;\n  }\n  return 10 * Math.ceil(sum / 10) - sum;\n}\n\n/**\n * Determines the Prüfziffer of the given `normalizedDigits` (string of digits\n * with length 12) using the modified 11er Verfahren (used in DE-RP).\n */\nexport function getPruefzifferModified11er(normalizedDigits: string) {\n  const products = [];\n  for (let i = 0; i < 12; i++) {\n    products.push(\n      parseInt(normalizedDigits[i]) * factorsModified11erVerfahren[i]\n    );\n  }\n  const singleDigits = products.map((p) => (p > 9 ? (p % 10) + 1 : p));\n\n  const sum = singleDigits.reduce((sum, current) => (sum += current), 0);\n\n  return 10 * Math.ceil(sum / 10) - sum;\n}\n\n/**\n * Determines the Prüfziffer of the given `normalizedDigits` (string of digits\n * with length 12) using the 11er Verfahren (used in most Bundeslaender, where\n * not the 2er Verfahren or modified 11er Verfahren is used).\n */\nexport function getPruefziffer11er(\n  normalizedDigits: string,\n  land: ISO3166_2Codes_11erVerfahren\n) {\n  const products = [];\n  for (let i = 0; i < 12; i++) {\n    products.push(\n      parseInt(normalizedDigits[i]) * factors11erVerfahren[land][i]\n    );\n  }\n\n  const sum = products.reduce((sum, current) => (sum += current), 0);\n\n  if (land === 'DE-NW') {\n    return sum % 11;\n  } else {\n    if (sum % 11 === 0) return 0;\n    return 11 * Math.ceil(sum / 11) - sum;\n  }\n}\n\n/**\n * Returns the sum of digits of the given `num`.\n */\nfunction sumDigits(num: number): number {\n  let sum = 0;\n  while (num) {\n    sum += num % 10;\n    num = Math.floor(num / 10);\n  }\n  return sum;\n}\n"],"names":["sum"],"mappings":";;;;;;EAMa,MAAA,gBAAA,uBAAuB,GAAI,CAAA;EAAA,EACtC,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,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"}