web-csv-toolbox 0.10.3-next-ee4125d4c2daeac2840037eddcc4335c766a489a → 0.10.3-pr317-874058b020bd8e180674e73a11c0abbd258327a5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/dist/cjs/Lexer.cjs +0 -2
- package/dist/cjs/Lexer.cjs.map +0 -1
- package/dist/cjs/LexerTransformer.cjs +0 -2
- package/dist/cjs/LexerTransformer.cjs.map +0 -1
- package/dist/cjs/RecordAssembler.cjs +0 -2
- package/dist/cjs/RecordAssembler.cjs.map +0 -1
- package/dist/cjs/RecordAssemblerTransformer.cjs +0 -2
- package/dist/cjs/RecordAssemblerTransformer.cjs.map +0 -1
- package/dist/cjs/_virtual/_web-csv-toolbox-wasm.cjs +0 -2
- package/dist/cjs/_virtual/_web-csv-toolbox-wasm.cjs.map +0 -1
- package/dist/cjs/_virtual/web_csv_toolbox_wasm_bg.wasm.cjs +0 -2
- package/dist/cjs/_virtual/web_csv_toolbox_wasm_bg.wasm.cjs.map +0 -1
- package/dist/cjs/assertCommonOptions.cjs +0 -2
- package/dist/cjs/assertCommonOptions.cjs.map +0 -1
- package/dist/cjs/common/constants.cjs +0 -2
- package/dist/cjs/common/constants.cjs.map +0 -1
- package/dist/cjs/common/errors.cjs +0 -2
- package/dist/cjs/common/errors.cjs.map +0 -1
- package/dist/cjs/commonParseErrorHandling.cjs +0 -2
- package/dist/cjs/commonParseErrorHandling.cjs.map +0 -1
- package/dist/cjs/constants.cjs +0 -2
- package/dist/cjs/constants.cjs.map +0 -1
- package/dist/cjs/getOptionsFromResponse.cjs +0 -2
- package/dist/cjs/getOptionsFromResponse.cjs.map +0 -1
- package/dist/cjs/loadWASM.cjs +0 -2
- package/dist/cjs/loadWASM.cjs.map +0 -1
- package/dist/cjs/loadWASM.web.cjs +0 -2
- package/dist/cjs/loadWASM.web.cjs.map +0 -1
- package/dist/cjs/parse.cjs +0 -2
- package/dist/cjs/parse.cjs.map +0 -1
- package/dist/cjs/parseBinary.cjs +0 -2
- package/dist/cjs/parseBinary.cjs.map +0 -1
- package/dist/cjs/parseBinaryToArraySync.cjs +0 -2
- package/dist/cjs/parseBinaryToArraySync.cjs.map +0 -1
- package/dist/cjs/parseBinaryToIterableIterator.cjs +0 -2
- package/dist/cjs/parseBinaryToIterableIterator.cjs.map +0 -1
- package/dist/cjs/parseBinaryToStream.cjs +0 -2
- package/dist/cjs/parseBinaryToStream.cjs.map +0 -1
- package/dist/cjs/parseResponse.cjs +0 -2
- package/dist/cjs/parseResponse.cjs.map +0 -1
- package/dist/cjs/parseResponseToStream.cjs +0 -2
- package/dist/cjs/parseResponseToStream.cjs.map +0 -1
- package/dist/cjs/parseString.cjs +0 -2
- package/dist/cjs/parseString.cjs.map +0 -1
- package/dist/cjs/parseStringStream.cjs +0 -2
- package/dist/cjs/parseStringStream.cjs.map +0 -1
- package/dist/cjs/parseStringStreamToStream.cjs +0 -2
- package/dist/cjs/parseStringStreamToStream.cjs.map +0 -1
- package/dist/cjs/parseStringToArraySync.cjs +0 -2
- package/dist/cjs/parseStringToArraySync.cjs.map +0 -1
- package/dist/cjs/parseStringToArraySyncWASM.cjs +0 -2
- package/dist/cjs/parseStringToArraySyncWASM.cjs.map +0 -1
- package/dist/cjs/parseStringToIterableIterator.cjs +0 -2
- package/dist/cjs/parseStringToIterableIterator.cjs.map +0 -1
- package/dist/cjs/parseStringToStream.cjs +0 -2
- package/dist/cjs/parseStringToStream.cjs.map +0 -1
- package/dist/cjs/parseUint8ArrayStream.cjs +0 -2
- package/dist/cjs/parseUint8ArrayStream.cjs.map +0 -1
- package/dist/cjs/parseUint8ArrayStreamToStream.cjs +0 -2
- package/dist/cjs/parseUint8ArrayStreamToStream.cjs.map +0 -1
- package/dist/cjs/utils/convertBinaryToString.cjs +0 -2
- package/dist/cjs/utils/convertBinaryToString.cjs.map +0 -1
- package/dist/cjs/utils/convertIterableIteratorToAsync.cjs +0 -2
- package/dist/cjs/utils/convertIterableIteratorToAsync.cjs.map +0 -1
- package/dist/cjs/utils/convertStreamToAsyncIterableIterator.cjs +0 -2
- package/dist/cjs/utils/convertStreamToAsyncIterableIterator.cjs.map +0 -1
- package/dist/cjs/utils/convertThisAsyncIterableIteratorToArray.cjs +0 -2
- package/dist/cjs/utils/convertThisAsyncIterableIteratorToArray.cjs.map +0 -1
- package/dist/cjs/utils/escapeRegExp.cjs +0 -2
- package/dist/cjs/utils/escapeRegExp.cjs.map +0 -1
- package/dist/cjs/utils/parseMime.cjs +0 -2
- package/dist/cjs/utils/parseMime.cjs.map +0 -1
- package/dist/cjs/utils/pipeline.cjs +0 -2
- package/dist/cjs/utils/pipeline.cjs.map +0 -1
- package/dist/cjs/web-csv-toolbox.cjs +0 -2
- package/dist/cjs/web-csv-toolbox.cjs.map +0 -1
- package/dist/es/Lexer.js +0 -225
- package/dist/es/Lexer.js.map +0 -1
- package/dist/es/LexerTransformer.js +0 -29
- package/dist/es/LexerTransformer.js.map +0 -1
- package/dist/es/RecordAssembler.js +0 -73
- package/dist/es/RecordAssembler.js.map +0 -1
- package/dist/es/RecordAssemblerTransformer.js +0 -31
- package/dist/es/RecordAssemblerTransformer.js.map +0 -1
- package/dist/es/_virtual/_web-csv-toolbox-wasm.js +0 -185
- package/dist/es/_virtual/_web-csv-toolbox-wasm.js.map +0 -1
- package/dist/es/_virtual/web_csv_toolbox_wasm_bg.wasm.js +0 -4
- package/dist/es/_virtual/web_csv_toolbox_wasm_bg.wasm.js.map +0 -1
- package/dist/es/assertCommonOptions.js +0 -31
- package/dist/es/assertCommonOptions.js.map +0 -1
- package/dist/es/common/constants.js +0 -6
- package/dist/es/common/constants.js.map +0 -1
- package/dist/es/common/errors.js +0 -20
- package/dist/es/common/errors.js.map +0 -1
- package/dist/es/commonParseErrorHandling.js +0 -13
- package/dist/es/commonParseErrorHandling.js.map +0 -1
- package/dist/es/constants.js +0 -8
- package/dist/es/constants.js.map +0 -1
- package/dist/es/getOptionsFromResponse.js +0 -20
- package/dist/es/getOptionsFromResponse.js.map +0 -1
- package/dist/es/loadWASM.js +0 -9
- package/dist/es/loadWASM.js.map +0 -1
- package/dist/es/loadWASM.web.js +0 -8
- package/dist/es/loadWASM.web.js.map +0 -1
- package/dist/es/parse.js +0 -39
- package/dist/es/parse.js.map +0 -1
- package/dist/es/parseBinary.js +0 -35
- package/dist/es/parseBinary.js.map +0 -1
- package/dist/es/parseBinaryToArraySync.js +0 -15
- package/dist/es/parseBinaryToArraySync.js.map +0 -1
- package/dist/es/parseBinaryToIterableIterator.js +0 -15
- package/dist/es/parseBinaryToIterableIterator.js.map +0 -1
- package/dist/es/parseBinaryToStream.js +0 -15
- package/dist/es/parseBinaryToStream.js.map +0 -1
- package/dist/es/parseResponse.js +0 -32
- package/dist/es/parseResponse.js.map +0 -1
- package/dist/es/parseResponseToStream.js +0 -18
- package/dist/es/parseResponseToStream.js.map +0 -1
- package/dist/es/parseString.js +0 -38
- package/dist/es/parseString.js.map +0 -1
- package/dist/es/parseStringStream.js +0 -23
- package/dist/es/parseStringStream.js.map +0 -1
- package/dist/es/parseStringStreamToStream.js +0 -14
- package/dist/es/parseStringStreamToStream.js.map +0 -1
- package/dist/es/parseStringToArraySync.js +0 -17
- package/dist/es/parseStringToArraySync.js.map +0 -1
- package/dist/es/parseStringToArraySyncWASM.js +0 -24
- package/dist/es/parseStringToArraySyncWASM.js.map +0 -1
- package/dist/es/parseStringToIterableIterator.js +0 -17
- package/dist/es/parseStringToIterableIterator.js.map +0 -1
- package/dist/es/parseStringToStream.js +0 -24
- package/dist/es/parseStringToStream.js.map +0 -1
- package/dist/es/parseUint8ArrayStream.js +0 -23
- package/dist/es/parseUint8ArrayStream.js.map +0 -1
- package/dist/es/parseUint8ArrayStreamToStream.js +0 -22
- package/dist/es/parseUint8ArrayStreamToStream.js.map +0 -1
- package/dist/es/utils/convertBinaryToString.js +0 -9
- package/dist/es/utils/convertBinaryToString.js.map +0 -1
- package/dist/es/utils/convertIterableIteratorToAsync.js +0 -14
- package/dist/es/utils/convertIterableIteratorToAsync.js.map +0 -1
- package/dist/es/utils/convertStreamToAsyncIterableIterator.js +0 -11
- package/dist/es/utils/convertStreamToAsyncIterableIterator.js.map +0 -1
- package/dist/es/utils/convertThisAsyncIterableIteratorToArray.js +0 -10
- package/dist/es/utils/convertThisAsyncIterableIteratorToArray.js.map +0 -1
- package/dist/es/utils/escapeRegExp.js +0 -6
- package/dist/es/utils/escapeRegExp.js.map +0 -1
- package/dist/es/utils/parseMime.js +0 -15
- package/dist/es/utils/parseMime.js.map +0 -1
- package/dist/es/utils/pipeline.js +0 -18
- package/dist/es/utils/pipeline.js.map +0 -1
- package/dist/es/web-csv-toolbox.js +0 -13
- package/dist/es/web-csv-toolbox.js.map +0 -1
- package/dist/types/Lexer.d.ts +0 -27
- package/dist/types/Lexer.test.d.ts +0 -1
- package/dist/types/LexerTransformer.d.ts +0 -37
- package/dist/types/LexerTransformer.test.d.ts +0 -1
- package/dist/types/RecordAssembler.d.ts +0 -8
- package/dist/types/RecordAssemblerTransformer.d.ts +0 -50
- package/dist/types/assertCommonOptions.d.ts +0 -22
- package/dist/types/common/constants.d.ts +0 -15
- package/dist/types/common/errors.d.ts +0 -34
- package/dist/types/common/types.d.ts +0 -228
- package/dist/types/commonParseErrorHandling.d.ts +0 -8
- package/dist/types/constants.d.ts +0 -11
- package/dist/types/escapeField.d.ts +0 -14
- package/dist/types/getOptionsFromResponse.d.ts +0 -11
- package/dist/types/loadWASM.d.ts +0 -19
- package/dist/types/loadWASM.web.d.ts +0 -19
- package/dist/types/parse.d.ts +0 -183
- package/dist/types/parseBinary.d.ts +0 -114
- package/dist/types/parseBinaryToArraySync.d.ts +0 -3
- package/dist/types/parseBinaryToArraySync.test.d.ts +0 -1
- package/dist/types/parseBinaryToIterableIterator.d.ts +0 -11
- package/dist/types/parseBinaryToStream.d.ts +0 -3
- package/dist/types/parseResponse.d.ts +0 -81
- package/dist/types/parseResponseToStream.d.ts +0 -3
- package/dist/types/parseString.d.ts +0 -121
- package/dist/types/parseStringStream.d.ts +0 -99
- package/dist/types/parseStringStreamToStream.d.ts +0 -3
- package/dist/types/parseStringToArraySync.d.ts +0 -3
- package/dist/types/parseStringToArraySyncWASM.d.ts +0 -38
- package/dist/types/parseStringToIterableIterator.d.ts +0 -3
- package/dist/types/parseStringToStream.d.ts +0 -3
- package/dist/types/parseUint8ArrayStream.d.ts +0 -95
- package/dist/types/parseUint8ArrayStreamToStream.d.ts +0 -3
- package/dist/types/utils/SingleValueReadableStream.d.ts +0 -3
- package/dist/types/utils/convertBinaryToString.d.ts +0 -12
- package/dist/types/utils/convertIterableIteratorToAsync.d.ts +0 -1
- package/dist/types/utils/convertStreamToAsyncIterableIterator.d.ts +0 -1
- package/dist/types/utils/convertThisAsyncIterableIteratorToArray.d.ts +0 -1
- package/dist/types/utils/escapeRegExp.d.ts +0 -8
- package/dist/types/utils/occurrences.d.ts +0 -7
- package/dist/types/utils/parseMime.d.ts +0 -7
- package/dist/types/utils/pipeline.d.ts +0 -3
- package/dist/types/web-csv-toolbox.d.ts +0 -13
- package/dist/web-csv-toolbox.umd.cjs +0 -2
- package/dist/web-csv-toolbox.umd.cjs.map +0 -1
- package/dist/web_csv_toolbox_wasm_bg.wasm +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "web-csv-toolbox",
|
|
3
|
-
"version": "0.10.3-
|
|
3
|
+
"version": "0.10.3-pr317-874058b020bd8e180674e73a11c0abbd258327a5",
|
|
4
4
|
"description": "A CSV Toolbox utilizing Web Standard APIs.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/cjs/web-csv-toolbox.cjs",
|
package/dist/cjs/Lexer.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./assertCommonOptions.cjs"),e=require("./common/constants.cjs"),r=require("./common/errors.cjs"),s=require("./constants.cjs"),i=require("./utils/escapeRegExp.cjs");exports.Lexer=class{#t;#e;#r="";#s=!1;#i;#u;#o={line:1,column:1,offset:0};#h=1;constructor({delimiter:e=s.COMMA,quotation:r=s.DOUBLE_QUOTE}={}){t.assertCommonOptions({delimiter:e,quotation:r}),this.#t=e,this.#e=r,this.#u=e.length;const u=i.escapeRegExp(e),o=i.escapeRegExp(r);this.#i=new RegExp(`^(?:(?!${o})(?!${u})(?![\\r\\n]))([\\S\\s\\uFEFF\\xA0]+?)(?=${o}|${u}|\\r|\\n|$)`)}lex(t,e=!1){return e||(this.#s=!0),"string"==typeof t&&0!==t.length&&(this.#r+=t),this.#f()}flush(){return this.#s=!0,[...this.#f()]}*#f(){let t;for(this.#s&&(this.#r.endsWith(s.CRLF)?this.#r=this.#r.slice(0,-2):this.#r.endsWith(s.LF)&&(this.#r=this.#r.slice(0,-1)));t=this.#n();)yield t}#n(){if(0===this.#r.length)return null;if(!1===this.#s&&(this.#r===s.CRLF||this.#r===s.LF))return null;if(this.#r.startsWith(s.CRLF)){this.#r=this.#r.slice(2);const t={...this.#o};this.#o.line++,this.#o.column=1,this.#o.offset+=2;return{type:e.RecordDelimiter,value:s.CRLF,location:{start:t,end:{...this.#o},rowNumber:this.#h++}}}if(this.#r.startsWith(s.LF)){this.#r=this.#r.slice(1);const t={...this.#o};this.#o.line++,this.#o.column=1,this.#o.offset+=1;return{type:e.RecordDelimiter,value:s.LF,location:{start:t,end:{...this.#o},rowNumber:this.#h++}}}if(this.#r.startsWith(this.#t)){this.#r=this.#r.slice(1);const t={...this.#o};return this.#o.column+=this.#u,this.#o.offset+=this.#u,{type:e.FieldDelimiter,value:this.#t,location:{start:t,end:{...this.#o},rowNumber:this.#h}}}if(this.#r.startsWith(this.#e)){let t="",i=1,u=2,o=0,h=this.#r[i],f=this.#r[i+1];do{if(h===this.#e){if(f===this.#e){t+=this.#e,i+=2,h=this.#r[i],f=this.#r[i+1],u+=2;continue}if(void 0===f&&!1===this.#s)return null;i++,this.#r=this.#r.slice(i);const r={...this.#o};return this.#o.column+=u,this.#o.offset+=i,this.#o.line+=o,{type:e.Field,value:t,location:{start:r,end:{...this.#o},rowNumber:this.#h}}}t+=h,h===s.LF?(o++,u=1):u++,i++,h=f,f=this.#r[i+1]}while(void 0!==h);if(this.#s)throw new r.ParseError("Unexpected EOF while parsing quoted field.",{position:{...this.#o}});return null}const t=this.#i.exec(this.#r);if(t){if(!1===this.#s&&t[0].length===this.#r.length)return null;const r=t[1];this.#r=this.#r.slice(r.length);const s={...this.#o};return this.#o.column+=r.length,this.#o.offset+=r.length,{type:e.Field,value:r,location:{start:s,end:{...this.#o},rowNumber:this.#h}}}return null}};
|
|
2
|
-
//# sourceMappingURL=Lexer.cjs.map
|
package/dist/cjs/Lexer.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Lexer.cjs","sources":["../../src/Lexer.ts"],"sourcesContent":["import { assertCommonOptions } from \"./assertCommonOptions.ts\";\nimport { Field, FieldDelimiter, RecordDelimiter } from \"./common/constants.ts\";\nimport { ParseError } from \"./common/errors.ts\";\nimport type {\n CommonOptions,\n Position,\n RecordDelimiterToken,\n Token,\n} from \"./common/types.ts\";\nimport { COMMA, CRLF, DOUBLE_QUOTE, LF } from \"./constants.ts\";\nimport { escapeRegExp } from \"./utils/escapeRegExp.ts\";\n\n/**\n * CSV Lexer.\n *\n * Lexter tokenizes CSV data into fields and records.\n */\nexport class Lexer {\n #delimiter: string;\n #quotation: string;\n #buffer = \"\";\n #flush = false;\n #matcher: RegExp;\n #fieldDelimiterLength: number;\n\n #cursor: Position = {\n line: 1,\n column: 1,\n offset: 0,\n };\n #rowNumber = 1;\n\n /**\n * Constructs a new Lexer instance.\n * @param options - The common options for the lexer.\n */\n constructor({\n delimiter = COMMA,\n quotation = DOUBLE_QUOTE,\n }: CommonOptions = {}) {\n assertCommonOptions({ delimiter, quotation });\n this.#delimiter = delimiter;\n this.#quotation = quotation;\n this.#fieldDelimiterLength = delimiter.length;\n const d = escapeRegExp(delimiter);\n const q = escapeRegExp(quotation);\n this.#matcher = new RegExp(\n `^(?:(?!${q})(?!${d})(?![\\\\r\\\\n]))([\\\\S\\\\s\\\\uFEFF\\\\xA0]+?)(?=${q}|${d}|\\\\r|\\\\n|$)`,\n );\n }\n\n /**\n * Lexes the given chunk of CSV data.\n * @param chunk - The chunk of CSV data to be lexed.\n * @param buffering - Indicates whether the lexer is buffering or not.\n * @returns An iterable iterator of tokens.\n */\n public lex(chunk: string | null, buffering = false): IterableIterator<Token> {\n if (!buffering) {\n this.#flush = true;\n }\n if (typeof chunk === \"string\" && chunk.length !== 0) {\n this.#buffer += chunk;\n }\n\n return this.#tokens();\n }\n\n /**\n * Flushes the lexer and returns any remaining tokens.\n * @returns An array of tokens.\n */\n public flush(): Token[] {\n this.#flush = true;\n return [...this.#tokens()];\n }\n\n /**\n * Generates tokens from the buffered CSV data.\n * @yields Tokens from the buffered CSV data.\n */\n *#tokens(): Generator<Token> {\n if (this.#flush) {\n // Trim the last CRLF or LF\n if (this.#buffer.endsWith(CRLF)) {\n this.#buffer = this.#buffer.slice(0, -2 /* -CRLF.length */);\n } else if (this.#buffer.endsWith(LF)) {\n this.#buffer = this.#buffer.slice(0, -1 /* -LF.length */);\n }\n }\n let token: Token | null;\n while ((token = this.#nextToken())) {\n yield token;\n }\n }\n\n /**\n * Retrieves the next token from the buffered CSV data.\n * @returns The next token or null if there are no more tokens.\n */\n #nextToken(): Token | null {\n if (this.#buffer.length === 0) {\n return null;\n }\n // Buffer is Record Delimiter, defer to the next iteration.\n if (\n this.#flush === false &&\n (this.#buffer === CRLF || this.#buffer === LF)\n ) {\n return null;\n }\n\n // Check for CRLF\n if (this.#buffer.startsWith(CRLF)) {\n this.#buffer = this.#buffer.slice(2);\n const start: Position = { ...this.#cursor };\n this.#cursor.line++;\n this.#cursor.column = 1;\n this.#cursor.offset += 2; // CRLF.length\n const token: RecordDelimiterToken = {\n type: RecordDelimiter,\n value: CRLF,\n location: {\n start,\n end: { ...this.#cursor },\n rowNumber: this.#rowNumber++,\n },\n };\n return token;\n }\n\n // Check for LF\n if (this.#buffer.startsWith(LF)) {\n this.#buffer = this.#buffer.slice(1);\n const start: Position = { ...this.#cursor };\n this.#cursor.line++;\n this.#cursor.column = 1;\n this.#cursor.offset += 1; // LF.length\n const token: RecordDelimiterToken = {\n type: RecordDelimiter,\n value: LF,\n location: {\n start,\n end: { ...this.#cursor },\n rowNumber: this.#rowNumber++,\n },\n };\n return token;\n }\n\n // Check for Delimiter\n if (this.#buffer.startsWith(this.#delimiter)) {\n this.#buffer = this.#buffer.slice(1);\n const start: Position = { ...this.#cursor };\n this.#cursor.column += this.#fieldDelimiterLength;\n this.#cursor.offset += this.#fieldDelimiterLength;\n return {\n type: FieldDelimiter,\n value: this.#delimiter,\n location: {\n start,\n end: { ...this.#cursor },\n rowNumber: this.#rowNumber,\n },\n };\n }\n\n // Check for Quoted String\n if (this.#buffer.startsWith(this.#quotation)) {\n /**\n * Extract Quoted field.\n *\n * The following code is equivalent to the following:\n *\n * If the next character is a quote:\n * - If the character after that is a quote, then append a quote to the value and skip two characters.\n * - Otherwise, return the quoted string.\n * Otherwise, append the character to the value and skip one character.\n *\n * ```plaintext\n * | `i` | `i + 1` | `i + 2` |\n * |------------|------------|----------|\n * | cur | next | | => Variable names\n * | #quotation | #quotation | | => Escaped quote\n * | #quotation | (EOF) | | => Closing quote\n * | #quotation | undefined | | => End of buffer\n * | undefined | | | => End of buffer\n * ```\n */\n let value = \"\";\n let offset = 1; // Skip the opening quote\n let column = 2; // Skip the opening quote\n let line = 0;\n\n // Define variables\n let cur: string = this.#buffer[offset];\n let next: string | undefined = this.#buffer[offset + 1];\n do {\n // If the current character is a quote, check the next characters for closing quotes.\n if (cur === this.#quotation) {\n // If the cur character is a quote and the next character is a quote,\n // then append a quote to the value and skip two characters.\n if (next === this.#quotation) {\n // Append a quote to the value and skip two characters.\n value += this.#quotation;\n offset += 2;\n cur = this.#buffer[offset];\n next = this.#buffer[offset + 1];\n\n // Update the diff\n column += 2;\n continue;\n }\n\n // If the cur character is a quote and the next character is undefined,\n // then return null.\n if (next === undefined && this.#flush === false) {\n return null;\n }\n\n // Otherwise, return the quoted string.\n // Update the buffer and return the token\n offset++;\n this.#buffer = this.#buffer.slice(offset);\n const start: Position = { ...this.#cursor };\n this.#cursor.column += column;\n this.#cursor.offset += offset;\n this.#cursor.line += line;\n return {\n type: Field,\n value,\n location: {\n start,\n end: { ...this.#cursor },\n rowNumber: this.#rowNumber,\n },\n };\n }\n\n // Append the character to the value.\n value += cur;\n\n // Prepare for the next iteration\n if (cur === LF) {\n // If the current character is a LF,\n // then increment the line number and reset the column number.\n line++;\n column = 1;\n } else {\n // Otherwise, increment the column number and offset.\n column++;\n }\n\n offset++;\n cur = next;\n next = this.#buffer[offset + 1];\n } while (cur !== undefined);\n\n if (this.#flush) {\n throw new ParseError(\"Unexpected EOF while parsing quoted field.\", {\n position: { ...this.#cursor },\n });\n }\n return null;\n }\n\n // Check for Unquoted String\n const match = this.#matcher.exec(this.#buffer);\n if (match) {\n // If we're flushing and the match doesn't consume the entire buffer,\n // then return null\n if (this.#flush === false && match[0].length === this.#buffer.length) {\n return null;\n }\n const value = match[1];\n this.#buffer = this.#buffer.slice(value.length);\n const start: Position = { ...this.#cursor };\n this.#cursor.column += value.length;\n this.#cursor.offset += value.length;\n return {\n type: Field,\n value,\n location: {\n start,\n end: { ...this.#cursor },\n rowNumber: this.#rowNumber,\n },\n };\n }\n\n // Otherwise, return null\n return null;\n }\n}\n"],"names":["delimiter","quotation","buffer","flush","matcher","fieldDelimiterLength","cursor","line","column","offset","rowNumber","constructor","COMMA","DOUBLE_QUOTE","assertCommonOptions","this","length","d","escapeRegExp","q","RegExp","lex","chunk","buffering","tokens","token","endsWith","CRLF","slice","LF","nextToken","startsWith","start","type","RecordDelimiter","value","location","end","FieldDelimiter","cur","next","Field","ParseError","position","match","exec"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./Lexer.cjs");class r extends TransformStream{lexer;constructor(r={}){super({transform:(e,r)=>{if(0!==e.length)try{r.enqueue([...this.lexer.lex(e,!0)])}catch(t){r.error(t)}},flush:e=>{try{e.enqueue(this.lexer.flush())}catch(r){e.error(r)}}}),this.lexer=new e.Lexer(r)}}exports.LexerTransformer=r;
|
|
2
|
-
//# sourceMappingURL=LexerTransformer.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LexerTransformer.cjs","sources":["../../src/LexerTransformer.ts"],"sourcesContent":["import { Lexer } from \"./Lexer.ts\";\nimport type { CommonOptions, Token } from \"./common/types.ts\";\n\n/**\n * A transform stream that converts a stream of tokens into a stream of rows.\n *\n * @category Low-level API\n *\n * @example Parse a CSV with headers by data\n * ```ts\n * new ReadableStream({\n * start(controller) {\n * controller.enqueue(\"name,age\\r\\n\");\n * controller.enqueue(\"Alice,20\\r\\n\");\n * controller.close();\n * }\n * })\n * .pipeThrough(new LexerTransformer())\n * .pipeTo(new WritableStream({ write(tokens) {\n * for (const token of tokens) {\n * console.log(token);\n * }\n * }}));\n * // { type: Field, value: \"name\", location: {...} }\n * // { type: FieldDelimiter, value: \",\", location: {...} }\n * // { type: Field, value: \"age\", location: {...} }\n * // { type: RecordDelimiter, value: \"\\r\\n\", location: {...} }\n * // { type: Field, value: \"Alice\", location: {...} }\n * // { type: FieldDelimiter, value: \",\", location: {...} }\n * // { type: Field, value: \"20\" }\n * // { type: RecordDelimiter, value: \"\\r\\n\", location: {...} }\n * ```\n */\nexport class LexerTransformer extends TransformStream<string, Token[]> {\n public readonly lexer: Lexer;\n constructor(options: CommonOptions = {}) {\n super({\n transform: (chunk, controller) => {\n if (chunk.length !== 0) {\n try {\n controller.enqueue([...this.lexer.lex(chunk, true)]);\n } catch (error) {\n controller.error(error);\n }\n }\n },\n flush: (controller) => {\n try {\n controller.enqueue(this.lexer.flush());\n } catch (error) {\n controller.error(error);\n }\n },\n });\n this.lexer = new Lexer(options);\n }\n}\n"],"names":["LexerTransformer","TransformStream","lexer","constructor","options","super","transform","chunk","controller","length","enqueue","this","lex","error","flush","Lexer"],"mappings":"+GAiCO,MAAMA,UAAyBC,gBACpBC,MAChB,WAAAC,CAAYC,EAAyB,IAC7BC,MAAA,CACJC,UAAW,CAACC,EAAOC,KACb,GAAiB,IAAjBD,EAAME,OACJ,IACSD,EAAAE,QAAQ,IAAIC,KAAKT,MAAMU,IAAIL,GAAO,WACtCM,GACPL,EAAWK,MAAMA,EACnB,CACF,EAEFC,MAAQN,IACF,IACFA,EAAWE,QAAQC,KAAKT,MAAMY,eACvBD,GACPL,EAAWK,MAAMA,EACnB,KAGCF,KAAAT,MAAQ,IAAIa,EAAAA,MAAMX,EACzB"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./common/constants.cjs"),r=require("./common/errors.cjs");exports.RecordAssembler=class{#e=0;#r=[];#t;#i=!1;constructor(e={}){void 0!==e.header&&Array.isArray(e.header)&&this.#s(e.header)}*assemble(r,t=!0){for(const i of r)switch(i.type){case e.FieldDelimiter:this.#e++,this.#i=!0;break;case e.RecordDelimiter:void 0===this.#t?this.#s(this.#r):this.#i?yield Object.fromEntries(this.#t.map(((e,r)=>[e,this.#r.at(r)]))):yield Object.fromEntries(this.#t.map((e=>[e,""]))),this.#e=0,this.#r=new Array(this.#t?.length).fill(""),this.#i=!1;break;default:this.#i=!0,this.#r[this.#e]=i.value}t&&(yield*this.flush())}*flush(){void 0!==this.#t&&this.#i&&(yield Object.fromEntries(this.#t.filter((e=>e)).map(((e,r)=>[e,this.#r.at(r)]))))}#s(e){if(this.#t=e,0===this.#t.length)throw new r.ParseError("The header must not be empty.");if(new Set(this.#t).size!==this.#t.length)throw new r.ParseError("The header must not contain duplicate fields.")}};
|
|
2
|
-
//# sourceMappingURL=RecordAssembler.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RecordAssembler.cjs","sources":["../../src/RecordAssembler.ts"],"sourcesContent":["import { FieldDelimiter, RecordDelimiter } from \"./common/constants.ts\";\nimport { ParseError } from \"./common/errors.ts\";\nimport type {\n CSVRecord,\n RecordAssemblerOptions,\n Token,\n} from \"./common/types.ts\";\n\nexport class RecordAssembler<Header extends ReadonlyArray<string>> {\n #fieldIndex = 0;\n #row: string[] = [];\n #header: Header | undefined;\n #dirty = false;\n\n constructor(options: RecordAssemblerOptions<Header> = {}) {\n if (options.header !== undefined && Array.isArray(options.header)) {\n this.#setHeader(options.header);\n }\n }\n\n public *assemble(\n tokens: Iterable<Token>,\n flush = true,\n ): IterableIterator<CSVRecord<Header>> {\n for (const token of tokens) {\n switch (token.type) {\n case FieldDelimiter:\n this.#fieldIndex++;\n this.#dirty = true;\n break;\n case RecordDelimiter:\n if (this.#header === undefined) {\n this.#setHeader(this.#row as unknown as Header);\n } else {\n if (this.#dirty) {\n yield Object.fromEntries(\n this.#header.map((header, index) => [\n header,\n this.#row.at(index),\n ]),\n ) as unknown as CSVRecord<Header>;\n } else {\n yield Object.fromEntries(\n this.#header.map((header) => [header, \"\"]),\n ) as CSVRecord<Header>;\n }\n }\n // Reset the row fields buffer.\n this.#fieldIndex = 0;\n this.#row = new Array(this.#header?.length).fill(\"\");\n this.#dirty = false;\n break;\n default:\n this.#dirty = true;\n this.#row[this.#fieldIndex] = token.value;\n break;\n }\n }\n\n if (flush) {\n yield* this.flush();\n }\n }\n\n public *flush(): Generator<CSVRecord<Header>> {\n if (this.#header !== undefined) {\n if (this.#dirty) {\n yield Object.fromEntries(\n this.#header\n .filter((v) => v)\n .map((header, index) => [header, this.#row.at(index)]),\n ) as unknown as CSVRecord<Header>;\n }\n }\n }\n\n #setHeader(header: Header) {\n this.#header = header;\n if (this.#header.length === 0) {\n throw new ParseError(\"The header must not be empty.\");\n }\n if (new Set(this.#header).size !== this.#header.length) {\n throw new ParseError(\"The header must not contain duplicate fields.\");\n }\n }\n}\n"],"names":["fieldIndex","row","header","dirty","constructor","options","Array","isArray","this","setHeader","assemble","tokens","flush","token","type","FieldDelimiter","RecordDelimiter","Object","fromEntries","map","index","at","length","fill","value","filter","v","ParseError","Set","size"],"mappings":"mLAQO,MACLA,GAAc,EACdC,GAAiB,GACjBC,GACAC,IAAS,EAET,WAAAC,CAAYC,EAA0C,SAC7B,IAAnBA,EAAQH,QAAwBI,MAAMC,QAAQF,EAAQH,SACnDM,MAAAC,EAAWJ,EAAQH,OAE5B,CAEA,SAAQQ,CACNC,EACAC,GAAQ,GAER,IAAA,MAAWC,KAASF,EAClB,OAAQE,EAAMC,MACZ,KAAKC,EAAAA,eACEP,MAAAR,IACLQ,MAAKL,GAAS,EACd,MACF,KAAKa,EAAAA,qBACkB,IAAjBR,MAAKN,EACFM,MAAAC,EAAWD,MAAKP,GAEjBO,MAAKL,QACDc,OAAOC,YACXV,MAAKN,EAAQiB,KAAI,CAACjB,EAAQkB,IAAU,CAClClB,EACAM,MAAKP,EAAKoB,GAAGD,aAIXH,OAAOC,YACXV,MAAKN,EAAQiB,KAAKjB,GAAW,CAACA,EAAQ,OAK5CM,MAAKR,EAAc,EACdQ,MAAAP,EAAO,IAAIK,MAAME,MAAKN,GAASoB,QAAQC,KAAK,IACjDf,MAAKL,GAAS,EACd,MACF,QACEK,MAAKL,GAAS,EACdK,MAAKP,EAAKO,MAAKR,GAAea,EAAMW,MAKtCZ,UACKJ,KAAKI,QAEhB,CAEA,MAAQA,QACe,IAAjBJ,MAAKN,GACHM,MAAKL,UACDc,OAAOC,YACXV,MAAKN,EACFuB,QAAQC,GAAMA,IACdP,KAAI,CAACjB,EAAQkB,IAAU,CAAClB,EAAQM,MAAKP,EAAKoB,GAAGD,OAIxD,CAEA,EAAAX,CAAWP,GAEL,GADJM,MAAKN,EAAUA,EACa,IAAxBM,MAAKN,EAAQoB,OACT,MAAA,IAAIK,EAAAA,WAAW,iCAEnB,GAAA,IAAIC,IAAIpB,MAAKN,GAAS2B,OAASrB,MAAKN,EAAQoB,OACxC,MAAA,IAAIK,EAAAA,WAAW,gDAEzB"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./RecordAssembler.cjs");class r extends TransformStream{assembler;constructor(r={}){super({transform:(e,r)=>{try{for(const s of this.assembler.assemble(e,!1))r.enqueue(s)}catch(s){r.error(s)}},flush:e=>{try{for(const r of this.assembler.flush())e.enqueue(r)}catch(r){e.error(r)}}}),this.assembler=new e.RecordAssembler(r)}}exports.RecordAssemblerTransformer=r;
|
|
2
|
-
//# sourceMappingURL=RecordAssemblerTransformer.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RecordAssemblerTransformer.cjs","sources":["../../src/RecordAssemblerTransformer.ts"],"sourcesContent":["import { RecordAssembler } from \"./RecordAssembler.ts\";\nimport type {\n CSVRecord,\n RecordAssemblerOptions,\n Token,\n} from \"./common/types.ts\";\n\n/**\n * A transform stream that converts a stream of tokens into a stream of rows.\n * @template Header The type of the header row.\n * @param options The options for the parser.\n *\n * @category Low-level API\n *\n * @example Parse a CSV with headers by data\n * ```ts\n * new ReadableStream({\n * start(controller) {\n * controller.enqueue(\"name,age\\r\\n\");\n * controller.enqueue(\"Alice,20\\r\\n\");\n * controller.enqueue(\"Bob,25\\r\\n\");\n * controller.enqueue(\"Charlie,30\\r\\n\");\n * controller.close();\n * })\n * .pipeThrough(new LexerTransformer())\n * .pipeThrough(new RecordAssemblerTransformer())\n * .pipeTo(new WritableStream({ write(row) { console.log(row); }}));\n * // { name: \"Alice\", age: \"20\" }\n * // { name: \"Bob\", age: \"25\" }\n * // { name: \"Charlie\", age: \"30\" }\n * ```\n *\n * @example Parse a CSV with headers by options\n * ```ts\n * new ReadableStream({\n * start(controller) {\n * controller.enqueue(\"Alice,20\\r\\n\");\n * controller.enqueue(\"Bob,25\\r\\n\");\n * controller.enqueue(\"Charlie,30\\r\\n\");\n * controller.close();\n * }\n * })\n * .pipeThrough(new LexerTransformer())\n * .pipeThrough(new RecordAssemblerTransformer({ header: [\"name\", \"age\"] }))\n * .pipeTo(new WritableStream({ write(row) { console.log(row); }}));\n * // { name: \"Alice\", age: \"20\" }\n * // { name: \"Bob\", age: \"25\" }\n * // { name: \"Charlie\", age: \"30\" }\n * ```\n */\nexport class RecordAssemblerTransformer<\n Header extends ReadonlyArray<string>,\n> extends TransformStream<Token[], CSVRecord<Header>> {\n public readonly assembler: RecordAssembler<Header>;\n\n constructor(options: RecordAssemblerOptions<Header> = {}) {\n super({\n transform: (tokens, controller) => {\n try {\n for (const token of this.assembler.assemble(tokens, false)) {\n controller.enqueue(token);\n }\n } catch (error) {\n controller.error(error);\n }\n },\n flush: (controller) => {\n try {\n for (const token of this.assembler.flush()) {\n controller.enqueue(token);\n }\n } catch (error) {\n controller.error(error);\n }\n },\n });\n this.assembler = new RecordAssembler(options);\n }\n}\n"],"names":["RecordAssemblerTransformer","TransformStream","assembler","constructor","options","super","transform","tokens","controller","token","this","assemble","enqueue","error","flush","RecordAssembler"],"mappings":"yHAkDO,MAAMA,UAEHC,gBACQC,UAEhB,WAAAC,CAAYC,EAA0C,IAC9CC,MAAA,CACJC,UAAW,CAACC,EAAQC,KACd,IACF,IAAA,MAAWC,KAASC,KAAKR,UAAUS,SAASJ,GAAQ,GAClDC,EAAWI,QAAQH,SAEdI,GACPL,EAAWK,MAAMA,EACnB,GAEFC,MAAQN,IACF,IACF,IAAA,MAAWC,KAASC,KAAKR,UAAUY,QACjCN,EAAWI,QAAQH,SAEdI,GACPL,EAAWK,MAAMA,EACnB,KAGCH,KAAAR,UAAY,IAAIa,EAAAA,gBAAgBX,EACvC"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";let e;Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n="undefined"!=typeof TextDecoder?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};"undefined"!=typeof TextDecoder&&n.decode();let t=null;function o(){return null!==t&&0!==t.byteLength||(t=new Uint8Array(e.memory.buffer)),t}const r=new Array(128).fill(void 0);r.push(void 0,null,!0,!1);let i=r.length;let a=0;const s="undefined"!=typeof TextEncoder?new TextEncoder("utf-8"):{encode:()=>{throw Error("TextEncoder not available")}},c="function"==typeof s.encodeInto?function(e,n){return s.encodeInto(e,n)}:function(e,n){const t=s.encode(e);return n.set(t),{read:e.length,written:t.length}};function u(e){const n=function(e){return r[e]}(e);return function(e){e<132||(r[e]=i,i=e)}(e),n}function l(){const e={wbg:{}};return e.wbg.__wbindgen_string_new=function(e,t){var a,s;return function(e){i===r.length&&r.push(r.length+1);const n=i;return i=r[n],r[n]=e,n}((a=e,s=t,a>>>=0,n.decode(o().subarray(a,a+s))))},e}async function f(n){if(void 0!==e)return e;void 0===n&&(n="/web_csv_toolbox_wasm_bg.wasm");const o=l();("string"==typeof n||"function"==typeof Request&&n instanceof Request||"function"==typeof URL&&n instanceof URL)&&(n=fetch(n));const{instance:r,module:i}=await async function(e,n){if("function"==typeof Response&&e instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(e,n)}catch(t){if("application/wasm"==e.headers.get("Content-Type"))throw t;console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",t)}const o=await e.arrayBuffer();return await WebAssembly.instantiate(o,n)}{const t=await WebAssembly.instantiate(e,n);return t instanceof WebAssembly.Instance?{instance:t,module:e}:t}}(await n,o);return function(n,o){return e=n.exports,f.__wbindgen_wasm_module=o,t=null,e}(r,i)}exports.default=f,exports.parseStringToArraySync=function(n,t){const r=function(e,n,t){if(void 0===t){const t=s.encode(e),r=n(t.length,1)>>>0;return o().subarray(r,r+t.length).set(t),a=t.length,r}let r=e.length,i=n(r,1)>>>0;const u=o();let l=0;for(;l<r;l++){const n=e.charCodeAt(l);if(n>127)break;u[i+l]=n}if(l!==r){0!==l&&(e=e.slice(l)),i=t(i,r,r=l+3*e.length,1)>>>0;const n=o().subarray(i+l,i+r);l+=c(e,n).written,i=t(i,r,l,1)>>>0}return a=l,i}(n,e.__wbindgen_malloc,e.__wbindgen_realloc),i=a;return u(e.parseStringToArraySync(r,i,t))};
|
|
2
|
-
//# sourceMappingURL=_web-csv-toolbox-wasm.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_web-csv-toolbox-wasm.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});exports.default="data:application/wasm;base64,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ajYCCCABKAIEIABqQfTk1asGNgAADAYLIAEoAgAhBAJAAkACQCAAKAIIQQFrDgIBAgALQRQhAiAAKQMQIgxCkM4AVARAIAwhDQwHCwNAIAlBCGogAmoiAEEEayAMIAxCkM4AgCINQpDOAH59pyIBQf//A3FB5ABuIgdBAXRBj47AAGovAAA7AAAgAEECayABIAdB5ABsa0H//wNxQQF0QY+OwABqLwAAOwAAIAJBBGshAiAMQv/B1y9WIA0hDA0ACwwGC0EUIQIgACkDECIOIA5CP4ciDIUgDH0iDEKQzgBUBEAgDCENDAULA0AgCUEIaiACaiIAQQRrIAwgDEKQzgCAIg1CkM4Afn2nIgFB//8DcUHkAG4iB0EBdEGPjsAAai8AADsAACAAQQJrIAEgB0HkAGxrQf//A3FBAXRBj47AAGovAAA7AAAgAkEEayECIAxC/8HXL1YgDSEMDQALDAQLIAArAxAiE71C////////////AINC//////////f/AFgEQCAJQQhqIQcjAEGgAmsiACQAIBO9Ig1C/////////weDIQwgDUIAUwRAIAdBLToAAEEBIQMLAkACfwJ/AkACQAJAIA1CNIinQf8PcSIBRSAMUHFFBEAgAUECSSAMQgBSciECIAxCgICAgICAgAiEIAwgARsiDEIChiEOIAxCAYMhEiABQbUIa0HMdyABGyIBQQBIBEAgAEGQAmpBoM3AACABIAFBhaJTbEEUdiABQX9HayIFaiIGQQR0IgFrKQMAIgwgDkIChCIPEDwgAEGAAmpBqM3AACABaykDACINIA8QPCAAQfABaiAAQZgCaikDACIPIAApA4ACfCIQIABBiAJqKQMAIA8gEFatfCAFIAZBsdm1H2xBE3ZrQfwAakH/AHFBwABzIgEQRCAAQbABaiAMIA4gAkF/c6x8Ig8QPCAAQaABaiANIA8QPCAAQZABaiAAQbgBaikDACIPIAApA6ABfCIQIABBqAFqKQMAIA8gEFatfCABEEQgAEHgAWogDCAOEDwgAEHQAWogDSAOEDwgAEHAAWogAEHoAWopAwAiDCAAKQPQAXwiDSAAQdgBaikDACAMIA1WrXwgARBEIAApA8ABIQ8gACkDkAEhECAAKQPwASEMIAVBAk8EQCAOQn8gBa2GQn+Fg1BFIAVBP09yDQQMBQsgDCASfSEMIAIg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ASACQTBqOgAAIAZBH3ZBAWogA2ohAQwCCyABIAJBAXRBgPbAAGovAAA7AAAgBkEfdkECciADaiEBDAELIAEgAkHkAG4iB0EwajoAACABIAIgB0HkAGxrQQF0QYD2wABqLwAAOwABIAZBH3ZBA2ogA2ohAQsgAEGgAmokACABIQAgACAEKAIAIAQoAggiAmtLBEAgBCACIAAQLCAEKAIIIQILIAQoAgQgAmogCUEIaiAAEBsaIAQgACACajYCCAwGCyAEKAIAIAQoAggiAGtBA00EQCAEIABBBBAsIAQoAgghAAsgBCAAQQRqNgIIIAQoAgQgAGpB7uqx4wY2AAAMBQsgASgCACAAKAIIIAAoAgwQCwwECyAAKAIMIQQgACgCCCEHIAEoAgAiACgCACAAKAIIIgJGBEAgACACQQEQLCAAKAIIIQILIAAgAkEBajYCCCAAKAIEIAJqQdsAOgAAAkAgBEUNACAHIAEQAiAEQQFGDQAgBEEYbEEYayEGIAdBGGohAwNAIAAoAggiAiAAKAIARgRAIAAgAkEBECwgACgCCCECCyAAIAJBAWo2AgggACgCBCACakEsOgAAIAMgARACIANBGGohAyAGQRhrIgYNAAsLIAAoAggiAiAAKAIARgRAIAAgAkEBECwgACgCCCECCyAAIAJBAWo2AgggACgCBCACakHdADoAAAwDCyAAKAIMIQogASgCACIFKAIAIAUoAggiAkYEQCAFIAJBARAsIAUoAgghAgsgBSACQQFqIgM2AgggBSgCBCACakH7ADoAACAKRQRAIAMgBSgCAEYEQCAFIANBARAsIAUoAgghAwsgBSADQQFqNgIIIAUoAgQgA2pB/QA6AAAMAwsgACgCBCICBEACQCAAKAIIIgRFDQACQCAEQQdxIgNFBEAgBCEADAELIAQhAANAIABBAWshACACKAKYAyECIANBAWsiAw0ACwsgBEEISQ0AA0AgAigCmAMoApgDKAKYAygCmAMoApgDKAKYAygCmAMoApgDIQIgAEEIayIADQALCwJAAkACQCACLwGSAwRAQQEhCCACIQAMAQtBACEDQQEhBwNAIAchBCACKAKIAiIARQ0CIARBAWohByADQQFqIQMgAi8BkAMhBiAGIAAiAi8BkgNPDQALIAZBAWohCCADRQ0AIANBAWsgACAIQQJ0akGYA2ohAiADQQdxBEAgBEEHcSEIQQAhBwNAIAIoAgAiBEGYA2ohAiAIIAdBAWoiB0cNAAsgAyAHayEDC0EAIQhBB0kEQCAAIQIgBCEADAELA0AgAigCACgCmAMoApgDKAKYAygCmAMoApgDKAKYAygCmAMiBEGYA2ohAiADQQhrIgMNAAsgACECIAQhAAsgCkEBayEKIAUgAiAGQQxsaiIEQZACaigCACAEQZQCaigCABALIAIgBkEYbGogBSgCCCICIAUoAgBGBEAgBSACQQEQLCAFKAIIIQILIAUgAkEBajYCCCAFKAIEIAJqQTo6AAAgARACIApFDQEDQAJAIAAvAZIDIAhNBEBBACEGQQEhBwNAIAchBCAAKAKIAiICRQ0EIARBAWohByAGQQFqIQYgAC8BkAMhAyADIAIiAC8BkgNPDQALIANBAWohCCAGRQ0BIAAgCEECdGpBmANqIQcgBkEHcQR/IARBB3EhCEEAIQQDQCAHKAIAIgBBmANqIQcgCCAEQQFqIgRHDQALIAYgBGsFIAYLIQRBACEIIAZBAWtBB0kNAQNAIAcoAgAoApgDKAKYAygCmAMoApgDKAKYAygCmAMoApgDIgBBmANqIQcgBEEIayIEDQALDAELIAAhAiAIIgNBAWohCAsgAiADQQxsaiIEQZQCaigCACEHIARBkAJqKAIAIQQgA0EYbCACaiAFKAIIIgMgBSgCAEYEQCAFIANBARAsIAUoAgghAwsgBSADQQFqNgIIIAUoAgQgA2pBLDoAACAFIAQgBxALIAUoAggiAiAFKAIARgRAIAUgAkEBECwgBSgCCCECCyAFIAJBAWo2AgggBSgCBCACakE6OgAAIAEQAiAKQQFrIgoNAAsMAQtBuJDAABB7AAsgBSgCCCEDCyADIAUoAgBGBEAgBSADQQEQLCAFKAIIIQMLIAUgA0EBajYCCCAFKAIEIANqQf0AOgAADAILAkAgDULjAFgEQCANpyEDDAELIAJBAmsiAiAJQQhqaiANpyIAIABB//8DcUHkAG4iA0HkAGxrQf//A3FBAXRBj47AAGovAAA7AAALAkAgA0EKTwRAIAJBAmsiACAJQQhqaiADQQF0QY+OwABqLwAAOwAADAELIAJBAWsiACAJQQhqaiADQTByOgAACyAOQgBTBEAgAEEBayIAIAlBCGpqQS06AAALQRQgAGsiASAEKAIAIAQoAggiAmtLBEAgBCACIAEQLCAEKAIIIQILIAQoAgQgAmogCUEIaiAAaiABEBsaIAQgASACajYCCAwBCwJAIA1C4wBYBEAgDachAAwBCyACQQJrIgIgCUEIamogDaciACAAQf//A3FB5ABuIgBB5ABsa0H//wNxQQF0QY+OwABqLwAAOwAACwJAIABBCk8EQCACQQJrIgIgCUEIamogAEEBdEGPjsAAai8AADsAAAwBCyACQQFrIgIgCUEIamogAEEwcjoAAAtBFCACayIBIAQoAgAgBCgCCCIAa0sEQCAEIAAgARAsIAQoAgghAAsgBCgCBCAAaiAJQQhqIAJqIAEQGxogBCAAIAFqNgIICyAJQTBqJAAL30YCJ38KfiMAQbAEayIFJAAgBUHcAGohCEGZrMEALQAAGkGwA0EIEG4iBkUEQEEIQbADEIMBAAsgBkIBNwMAIAZBCGpBAEGEAhAvGiAGQQA6AKIDIAZBATYCjAIgBkGQAmpBAEGRARAvGiAGQYECNgGqAyAGQQA6AKgDIAZBrMQANgCjAyAIQQE6AAogCEGAwAA2AgAgCEEAOwEIIAggBjYCBCAFKAJgIhMgAjoAowNBASEWIAVBAToAZiAFQYABaiEhIwBBsANrIhAkACAQQdoCakEAQcYAEC8hHiAQQQxqQQBBgAIQLyEaIBBBkAJqIBNBkAJqQcYAEBshHyAQQQA2AdYCIBBBATYCjAIgECATLQClAzoApQMgECATLQCiAzoAogMgEykDACEqIBMoAgghAyATLQCoAyEKIBMtAKkDIQwgEy0AqwMhDiATLwGsAyEGIBMtAKADIQ8gEy0AoQMhEiATLQCkAyEUIBMtAKYDIQkgEy0ApwMhDSATLQCqAyEIIBogEy0AowMiAmpBAToAACAQIAg6AKoDIBAgDToApwMgECAJOgCmAyAQIBQ6AKQDIBAgEjoAoQMgECAPOgCgAyAQIAI6AKMDIBAgBjsBrAMgECAOOgCrAyAQIAw6AKkDIBAgCjoAqAMgECADNgIIIBAgKjcDAAJ/QQIgDkUNABogFCAaakECOgAAQQMgCUEBcUUNABogDSAaakEDOgAAQQQLIQMgCkEBcQRAIAwgGmogAzoAACADQQFqIQMLAn8CQAJAAkAgD0EBaw4CAAECCyASIBpqDAILQbT4wABBKEHc+MAAEFIACyAQIAM6ABkgA0EBaiEDIBBBFmoLIAM6AAAgECADQQFqIhg2AowCIBhBygFsIiBB/gFxISIgIEEIdkEARyEmIBBBDWohJwJAAkACQANAAkACQCAdQar4wABqLQAAIhRBygFHBEAgFCAYbCICQf8BcSEoQQAhHCACQQh2QQBHISkDQCAcQf8BcSIVQQ1GIgQgFUEKRiIDciEGIBAtAKsDIgcgEC0ApAMiCyAVRnEiIyAQLQCjAyIRIBVGIgJyIQogIyAQLQCqA3EiJCACciEMIBAtAKEDIg4gFUYiCCAQLQCoAyAQLQCpAyAVRnEiD3IhEkEAQQYgAxshCSAcQQFqIRwgA0EBdCENIBAtAKADIRsgFCEDA0ACQCADQf8BcSElQQMhA0EBIQICQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQCAlDgoGBQQDEAIOAQkHAAtByQEhAyAlQckBaw0ODAcLQQEMCAsgDA0KIAYhAgJAAkAgG0EBaw4CABYBCyAIIQILQUhBAiACGyEDIAJBAXMiAkUNDgwNC0EFQQMgB0EBcSIIGyEDQQJBASAIGyECIAhFIAsgFUZyDQxBAkEBIBAtAKYDIBAtAKcDIBVGcSIIGyECQQRBAyAIGyEDDAwLIBEgFUYEQEEHIQNBAiECDAwLIAYhAgJAAkAgG0EBaw4CABQBCyAIIQILQUhBAiACGyEDIAJBAXMiAkUNDAwLCyAKDQYgBiECAkACQCAbQQFrDgIAEwELIAghAgtBSEECIAIbIQMgAkEBcyICRQ0LDAoLAkAgG0EBaw4CBREAC0EAIQNBAiECAkAgFUEKaw4ECgAACgALIA9FBEBBASEDDAsLQQYhAwwJC0EAIQMgDSICRQ0JDAgLQQEhAwJAAkACQCAbQQFrDgIBAAILQZz5wABBKEGg+sAAEFIAC0EAIQMLQQlBCCADG0EIIAQbIQNBAiECDAcLQQALIQMMBAtBASEDIBJFDQNBBkEAIA4gFUcbIQNBAiECDAQLQQNBByAjGyEDQQIhAgwDC0EDQQcgJBshA0EBQQIgJBshAgwCC0ECIQIgCSEDDAELDAELCyApDQYgA0H/AXEgGGwiCEEIdkUEQCAVIBpqLQAAIChqIgNBxQBLDQMgAyAeaiACQQFGOgAAIAMgH2ogCDoAACAcQYACRw0BDAQLCwwFCyAmDQRBACECA0AgGiACQf4BcWotAAAgImoiA0HGAE8NASADIB5qQQA6AAAgAyAfaiAgOgAAIAIgJ2otAAAgImoiA0HFAEsNASADIB5qQQA6AAAgAyAfaiAgOgAAIAJBAmoiAkGAAkcNAAsMAQsgA0HGAEGM+cAAED8ACyAdQQFqIh1BCkcNAAsgEEEAOgCiAwJAIBhBAE4EQCAQIBhBAXQ6ANYCIBAgGEEDbDoA1wIgGEEHbCICQQh2QQFGDQEgECACOgDYAiAYQSBPDQMgECAYQQN0OgDZAiAhIBBBsAMQGxogEEGwA2okAAwECwwCCwwBC0Gc+cAAQShBsPrAABBSAAtB7PjAABB7AAtBmazBAC0AABoCQEGwA0EIEG4iAgRAIAIgIUGwAxAbIQIgBSgCXCIIRQ0BIAhBAE4EQEGZrMEALQAAGkEBIRcgCEEBEG4iFg0CCyAXIAgQaQALQQhBsAMQgwEACyAFIAE2AtwBIAUgADYC2AEgBUEANgLUASAFQgA3AswBIAUgCDYCyAEgBSAWNgLEASAFIAI2AsABIAUgBS0AZDoAvQEgBUEAOgC8ASAFQQA7AboBIAUgBS0AZToAuQEgBUEBOgC4ASAFQgA3A7ABIAVCATcDqAEgBUIANwOgASAFQQI2ApABIAVCADcDgAEgE0GwA0EIEHkgBUEIaiESQQAhCkEAIQ4jAEHQAGsiCyQAAkACQAJAAn8CfgJAAkACQAJAIAVBgAFqIgcoAhAiAkECRgR/QZmswQAtAAAaAkBBwABBCBBuIgQEQCAEQQA2AjggBEKAgICAEDcDMCAEQoCAgIDAADcDICAEQgA3AyggBEIBNwMAIAQgBykDMCIrNwMYIAQgBykDKDcDECAEIAcpAyAiKjcDCCAHLQA8DQEgBygCRCETIAcoAlAhESAHKAJMIQ8gBEEwaiEUIARBIGohCQNAIA8gEU8EQCAHKAJUIQMgEyAHKAJYIgggBygCSCICIAcoAlwiBiACIAZJGyIREBsaIAcgBiARazYCXCAHIAggEWo2AlggByARNgJQIAcgAyARIAMgEUsbNgJUQQAhDwsCQAJAAkACQAJAAkACQAJAIA4gBCgCOCIITQRAIAQoAigiAiAKSQ0TIAtBCGogBygCQCINIA8gE2ogESAPayAEKAI0IA5qIAggDmsgBCgCJCAKQQJ0aiACIAprEAQgCygCFCALKAIMIQYgCy0AECEIIAcgKiALKAIIIgKtfCIqNwMgIAcgAiAPaiICIBEgAiARSRsiDzYCTCANKQMAIi9QDRQgByAvNwMoIApqIQogBiAOaiEOAn4CQAJAAkACQAJAIAhBAWsOBAABAgMPCyAEKAI4IgJBAEgNBkEEIAJBAXQgAkECSRsiDCACTQ0NIAwgAmsiAyAEKAIwIAJrSw0HDAwLIAQoAigiCEEASA0HQQQgCEEBdCAIQQJJGyIMIAhNDQogDCAIIgJrIg0gBCgCICACa00NCSAJIAIgDRApIAQoAighAgwJCyAEIAo2AiwgK0J/UQ0HIAcgK0IBfDcDMCAHLQA5DQ4gBygCAEUEQCAHQgE3AwAgByAKrTcDCAwPCyAHKQMIIjAgCq0iL1ENDiAEKAIAQQFGDQFCAAwCCyAHQQE6ADwMDQsgBCkDGCEtIAQpAxAhLiAEKQMIISxCAQshKiALIC03AzggCyAuNwMwIAsgLDcDKCALICo3AyAgCyAvNwMYIAsgMDcDECALQQI2AgggC0EIahBfIQggBCgCMCICBEAgBCgCNCACQQEQeQsgBCgCICICBEAgBCgCJCACQQJ0QQQQeQsgBEHAAEEIEHlBAQwSCyAOIAhBhIzAABA+AAtB/InAABB7AAsgFCACIAMQLCAEKAI4IQIMBAtBzIrAABB7AAtBuIvAABB7AAsgBCgCJCIGIAJBAnRqIQMgDUECTwRAIANBACAMIAhBf3NqQQJ0EC8aIAYgAiAMaiAIa0ECdGpBBGshAyACIA1qQQFrIQILIANBADYCACACQQFqIQwLIAQgDDYCKAwCCyAEKAI0IgYgAmohCCADQQJPBH8gCEEAIANBAWsiCBAvGiAGIAIgCGoiAmoFIAgLQQA6AAAgAkEBaiEMCyAEIAw2AjgMAAsACwwKCyAHIAQQFiAHKAIQBSACC0EBaw4CAQACC0GUjMAAEHsACyAHKAIcIgIoAgANAUIADAILIAdBFGohCEEADAILIAIpAxghLCACKQMQISsgAikDCCEvQgELISogCyAsNwMwIAsgKzcDKCALIC83AyAgCyAqNwMYIAtBATYCCCALIAcpAhQ3AgwgC0EIahBfIQhBAQshAiASIAg2AgQgEiACNgIAIAtB0ABqJAAgBSgCDCECAkACQAJAAkACQAJAIAUoAghFBEBBmazBAC0AABpBwABBCBBuIhFFDQlBASEWIAIoAgAiFCgCAEEBRwR+QgAFIBQpAxghMSAUKQMQITIgFCkDCCEzQgELISogFCgCNCECIBQoAjgiCQRAQQAhFyAJQQBIDQJBmazBAC0AABpBASEXIAlBARBuIhZFDQILIBYgAiAJEBshCCAUKAIkIQICQCAUKAIoIg1FBEBBBCEDQQAhBgwBCyANQQJ0IQYgDUH/////AUsNB0GZrMEALQAAGkEEIRkgBkEEEG4iA0UNBwsgAyACIAYQGyECIBEgCTYCOCARIAg2AjQgESAJNgIwIBEgDTYCKCARIAI2AiQgESANNgIgIBEgMTcDGCARIDI3AxAgESAzNwMIIBEgKjcDACARIBQoAiw2AixBmazBAC0AABogBUEANgIcIAVCgICAgIABNwIUQcAAQQgQbiICRQ0JIAJBADYCOCACQoCAgIAQNwMwIAJCADcDKCACQoCAgIDAADcDICACQgA3AwAgBSACNgIkIAUgBUGAAWo2AiACQANAAkAgBSEIQQAhB0EAIQpBACEMQgAhK0IAISxCACEtIwBB0ABrIg4kACAFQSBqIgJBBGohEiACKAIAIgQpAzAhLiAEKQMoITAgBCkDICExAkACQAJAIAQtADsNACAELQA4QQFGDQAgBC0AOg0AIAQoAhBBAkYNACAEQQE6ADpBmazBAC0AABogBCgCHCECQcAAQQgQbiIGBEAgAiAGECEgEigCACIKKAIwIgIEQCAKKAI0IAJBARB5CyAKKAIgIgwEQCAKKAIkIAxBAnRBBBB5CyAKQcAAQQgQeSASIAY2AgAgBC0APUEGcUECRgR/IBIQBSASKAIABSAGCygCLEEAR0EIdCEHDAILDA8LIBIoAgAiC0EANgIsIAsgLjcDGCALIDA3AxAgCyAxNwMIIAtCATcDAAJAIAQtADwNACALQTBqIRMgC0EgaiEUA0AgBCgCRCEJIAQoAkwiDyAEKAJQIgdPBEAgBCgCVCENIAkgBCgCWCIGIAQoAkgiAiAEKAJcIgMgAiADSRsiBxAbGiAEIAMgB2s2AlwgBCAGIAdqNgJYIAQgBzYCUCAEQQA2AkwgBCANIAcgByANSRs2AlRBACEPCwJAAkACQAJAAkACQAJAAkAgDCALKAI4IgZNBEAgCygCKCICIApJDRcgDkEIaiAEKAJAIAkgD2ogByAPayALKAI0IAxqIAYgDGsgCygCJCAKQQJ0aiACIAprEAQgDigCFCAOKAIMIQ0gDi0AECEDIAQgBCkDICAOKAIIIgKtfDcDICAEIAIgBCgCTGoiBiAEKAJQIgIgAiAGSxs2AkwgBCgCQCkDACIqUA0YIAQgKjcDKCAKaiEKIAwgDWohDAJ+AkACQAJAAkACQCADQQFrDgQAAQIDDwsgCygCOCIHQQBIDQZBBCAHQQF0IAdBAkkbIg8gB00NDSAPIAdrIgMgCygCMCAHa0sNBwwMCyALKAIoIgZBAEgNB0EEIAZBAXQgBkECSRsiDyAGTQ0KIA8gBiICayINIAsoAiAgAmtNDQkgFCACIA0QKSALKAIoIQIMCQsgCyAKNgIsIAQpAzAiKkJ/UQ0HIAQgKkIBfDcDMEGAAiEHIAQtADkNDSAEKAIARQRAIARCATcDACAEIAqtNwMIDA4LIAQpAwgiMiAKrSIzUQ0NQQEhByALKAIAQQFGDQFCAAwCCyAEQQE6ADxBACEHDAwLIAspAxghKyALKQMQISwgCykDCCEtQgELISogDiArNwM4IA4gLDcDMCAOIC03AyggDiAqNwMgIA4gMzcDGCAOIDI3AxAgDkECNgIIIA5BCGoQXyEMDAsLIAwgBkGEjMAAED4AC0H8icAAEHsACyATIAcgAxAsIAsoAjghBwwEC0HMisAAEHsAC0G4i8AAEHsACyALKAIkIgMgAkECdGohCSANQQJPBEAgCUEAIA8gBkF/c2pBAnQQLxogAyACIA9qIAZrQQJ0akEEayEJIAIgDWpBAWshAgsgCUEANgIAIAJBAWohDwsgCyAPNgIoDAILIAsoAjQiBiAHaiECIANBAk8EfyACQQAgA0EBayICEC8aIAYgAiAHaiIHagUgAgtBADoAACAHQQFqIQ8LIAsgDzYCOAwACwALIARBAToAOgJAIAQtADtFBEAgBCgCEEECRg0BCyAELQA9QQZxQQJGBEAgEhAFCwwBC0GZrMEALQAAGgJAQcAAQQgQbiIKBEAgCyAKECEgBCAKEBYgBC0AOEEBRw0CQQAhByALQQA2AiwgC0IBNwMAIAsgBCkDMDcDGCALIAQpAyg3AxAgCyAEKQMgNwMIIAQtADwNASALQTBqIRMgC0EgaiEUQQAhDEEAIQoDQCAEKAJEIQkgBCgCTCIPIAQoAlAiB08EQCAEKAJUIQ0gCSAEKAJYIgYgBCgCSCICIAQoAlwiAyACIANJGyIHEBsaIAQgAyAHazYCXCAEIAYgB2o2AlggBCAHNgJQIARBADYCTCAEIA0gByAHIA1JGzYCVEEAIQ8LAkACQAJAAkACQAJAAkAgDCALKAI4IgZNBEAgCygCKCICIApJDRcgDkEIaiAEKAJAIAkgD2ogByAPayALKAI0IAxqIAYgDGsgCygCJCAKQQJ0aiACIAprEAQgDigCFCAOKAIMIQ0gDi0AECEDIAQgBCkDICAOKAIIIgKtfDcDICAEIAIgBCgCTGoiBiAEKAJQIgIgAiAGSxs2AkwgBCgCQCkDACIqUA0YIAQgKjcDKCAKaiEKIAwgDWohDAJ+AkACQAJAAkACQCADQQFrDgQAAQIDDgsgCygCOCIHQQBIDQZBBCAHQQF0IAdBAkkbIg8gB00NDCAPIAdrIgMgCygCMCAHa0sNBwwLCyALKAIoIgZBAEgNB0EEIAZBAXQgBkECSRsiDyAGTQ0JIA8gBiICayINIAsoAiAgAmtNDQggFCACIA0QKSALKAIoIQIMCAsgCyAKNgIsAkAgBCkDMCIqQn9SBEAgBCAqQgF8NwMwQYACIQcgBC0AOUUNAQwPC0G4i8AAEHsACyAEKAIARQRAIARCATcDACAEIAqtNwMIDA4LIAQpAwgiMiAKrSIzUQ0NQQEhByALKAIAQQFGDQFCAAwCCyAEQQE6ADxBACEHDAwLIAspAxghKyALKQMQISwgCykDCCEtQgELISogDiArNwM4IA4gLDcDMCAOIC03AyggDiAqNwMgIA4gMzcDGCAOIDI3AxAgDkECNgIIIA5BCGoQXyEMDAoLIAwgBkGEjMAAED4AC0H8icAAEHsACyATIAcgAxAsIAsoAjghBwwDC0HMisAAEHsACyALKAIkIgMgAkECdGohCSANQQJPBEAgCUEAIA8gBkF/c2pBAnQQLxogAyACIA9qIAZrQQJ0akEEayEJIAIgDWpBAWshAgsgCUEANgIAIAJBAWohDwsgCyAPNgIoDAILIAsoAjQiBiAHaiECIANBAk8EfyACQQAgA0EBayICEC8aIAYgAiAHaiIHagUgAgtBADoAACAHQQFqIQ8LIAsgDzYCOAwACwALDA8LIAQtAD1BBnFBAkcNACASEAULIA5BCGogEigCABARAkACQAJAIA4oAghFBEBBASEDIAdBAXENASAHQQh2IQoMAwtBACEDIBIoAgBBADYCLCAHQQFxRQ0BC0EAIQMMAQsgDigCECEKIA4oAgwhAiAOIC43AzAgDiAwNwMoIA4gMTcDICAOQgE3AxggDiAKNgIQIA4gAjYCDCAOQQE2AgggDkEIahBfIQwLIAQtAD1BBnFBAkYEQCASEAYLAkACQAJAAkACf0EBIANFDQAaQQIgCkEBcUUNABpBmazBAC0AABogEigCACEJQcAAQQgQbiIMRQ0SIAxBADYCOCAMQoCAgIAQNwMwQgAhKiAMQgA3AyggDEKAgICAwAA3AyAgCSgCAEEBRgRAIAkpAxghMSAJKQMQITAgCSkDCCEuQgEhKgsgDCAxNwMYIAwgMDcDECAMIC43AwggDCAqNwMAIAkoAiQhBgJAIAkoAigiDUUEQEEEIQ9BACEKDAELIA1BAnQhCiANQf////8BSwRAQQAhAgwGC0GZrMEALQAAGkEEIQIgCkEEEG4iD0UNBQsgDyAGIAoQGyEDIAkoAiwiBiEKIAwoAiAiAgRAIAwoAiQgAkECdEEEEHkgCSgCLCEKCyAMIAY2AiwgDCANNgIoIAwgAzYCJCAMIA02AiAgCiAJKAIoIgJLDQECQAJAAkAgCkUEQCAJKAI0IQIMAQsgCSgCJCAKQQJ0akEEaygCACIDIAkoAjgiAksNBSAJKAI0IQIgAw0BC0EBIQpBACEDDAELQQAhByADQQBIDQRBmazBAC0AABpBASEHIANBARBuIgpFDQQLIAogAiADEBshBiAMKAIwIgIEQCAMKAI0IAJBARB5CyAMIAM2AjggDCAGNgI0IAwgAzYCMEEACyECIAggDDYCBCAIIAI2AgAgDkHQAGokAAwECyAKIAJBjIrAABBAAAsgAyACQZyKwAAQQAALIAcgAxBpAAsgAiAKEGkACyAFKAIEIQoCQAJAAkACQAJAAkAgBSgCACICBEAgAkECRw0EIAUoAiQiCCgCMCICBEAgCCgCNCACQQEQeQsgCCgCICICBEAgCCgCJCACQQJ0QQQQeQsgCEHAAEEIEHlBmazBAC0AABpBgAFBARBuIgJFDQEgBUEANgJkIAUgAjYCYCAFQYABNgJcIAUgBUHcAGo2AiggBUEUaiICKAIIIQMgAigCBCEGIAVBKGoiCCgCACIJKAIAIAkoAggiDUYEQCAJIA1BARAsIAkoAgghDQsgCSANQQFqNgIIIAkoAgQgDWpB2wA6AAACQCADRQ0AIAYgCBACIANBAUYNACADQRhsQRhrIQIgBkEYaiEGA0AgCSgCCCINIAkoAgBGBEAgCSANQQEQLCAJKAIIIQ0LIAkgDUEBajYCCCAJKAIEIA1qQSw6AAAgBiAIEAIgBkEYaiEGIAJBGGsiAg0ACwsgCSgCCCINIAkoAgBGBEAgCSANQQEQLCAJKAIIIQ0LIAkgDUEBajYCCCAJKAIEIA1qQd0AOgAAQQAiAgRAIAUoAlwiAEUNECAFKAJgIABBARB5DBALIAUoAmAhAiAFKAJcIghBgICAgHhGDQ8gAiAFKAJkEAAgCARAIAIgCEEBEHkLIAVBFGoQKCAFKAIUIgIEQCAFKAIYIAJBGGxBCBB5CyARKAIwIgIEQCARKAI0IAJBARB5CyARKAIgIgIEQCARKAIkIAJBAnRBBBB5CyARQcAAQQgQeSAFKALAAUGwA0EIEHkgBSgCyAEiAgRAIAUoAsQBIAJBARB5CwJAIAUoApABIghBAkYNACAFKAKcASIDKAIwIgIEQCADKAI0IAJBARB5CyADKAIgIgIEQCADKAIkIAJBAnRBBBB5CyADQcAAQQgQeSAIDQAgBSgClAEiCCgCMCICBEAgCCgCNCACQQEQeQsgCCgCICICBEAgCCgCJCACQQJ0QQQQeQsgCEHAAEEIEHkLIAEEQCAAIAFBARB5CyAFQbAEaiQADwsgBUEANgI0IAVBADYCLCAFQQU6ACggCigCLCIOIAooAigiAksNASAORQ0FIAooAiQiCCAOQQJ0akEEaygCACICIAooAjgiFksNAiAIKAIAIgYgFksNDSAKKAI0IQIgBkUEQEEBIRkMBQtBACEMIAZBAEgNC0GZrMEALQAAGiAGQQEQbiIZDQRBASAGEGkAC0EBQYABEGkACyAOIAJB8IDAABBAAAsgAiAWQYCBwAAQQAALIAUgCjYCXEHsh8AAQSsgBUHcAGpBxIjAAEHUiMAAED0ACyAZIAIgBhAbIQggESgCLCINRQ0HIBEoAigiA0UNByARKAIkIhMoAgAiAiARKAI4IhJLDQMCQAJAAkACQCARKAI0IhQgAiAFQShqEAoiCS0AAA4FAwMDAQACCyAJQQRqECggCSgCBCICRQ0CIAkoAgggAkEYbEEIEHkMAgsgCSgCBCICRQ0BIAkoAgggAkEBEHkMAQsCfyAJKAIEIgJFBEBBACEMQQAMAQsgBSACNgJ0IAVBADYCcCAFIAI2AmQgBUEANgJgIAUgCSgCCCICNgJ4IAUgAjYCaCAJKAIMIQxBAQshAiAFIAw2AnwgBSACNgJsIAUgAjYCXCAFQdwAahAHCyAJIAY2AgwgCSAINgIIIAkgBjYCBCAJQQM6AAAgDkEBRg0AIA0gAyADIA1LGyEJQQEhF0EAIQ8DQCAGIQICQAJAIAooAiwiAyAKKAIoIghNBEACQCADIBdLBEAgCigCJCAPakEEaigCACIGIAJJDQMgBiAKKAI4IhZNDQEMDgsgFyADQbyHwAAQPwALIAooAjQhAyAGIAJrIghFBEBBASEZDAMLQQAhDCAIQQBIDQpBmazBAC0AABpBASEMIAhBARBuIhkNAiAIIRkMCgsgAyAIQfCAwAAQQAALIAIgBkHMh8AAEEEACyAZIAIgA2ogCBAbIQ0gCSAXRg0IIA8gE2oiA0EEaigCACICIAMoAgAiA0kNAiACIBJLDQQCQAJAAkACQCADIBRqIAIgA2sgBUEoahAKIgMtAAAOBQMDAwECAAsCfyADKAIEIgJFBEBBACEMQQAMAQsgBSACNgJ0IAVBADYCcCAFIAI2AmQgBUEANgJgIAUgAygCCCICNgJ4IAUgAjYCaCADKAIMIQxBAQshAiAFIAw2AnwgBSACNgJsIAUgAjYCXCAFQdwAahAHDAILIAMoAgQiAkUNASADKAIIIAJBARB5DAELIANBBGoQKCADKAIEIgJFDQAgAygCCCACQRhsQQgQeQsgAyAINgIMIAMgDTYCCCADIAg2AgQgA0EDOgAAIA9BBGohDyAOIBdBAWoiF0cNAAsLIAVB0ABqIgMgBUE4aikDADcDACAFQcgAaiIGIAVBMGopAwA3AwAgBSAFKQMoNwNAIAUoAhwiCSAFKAIURgRAIwBBIGsiEiQAIAVBFGoiFCgCACITQX9GBEBBAEEAEGkAC0EEIBNBAXQgE0EBaiATQQBKGyINIA1BBE0bIghBGGwhAiASIBMEfyASIBNBGGw2AhwgEiAUKAIENgIUQQgFQQALNgIYIBJBCGogDUHWqtUqSUEDdCACIBJBFGoQMiASKAIIQQFGBEAgEigCDCASKAIQEGkACyASKAIMIQIgFCAINgIAIBQgAjYCBCASQSBqJAALIAUoAhggCUEYbGoiAiAFKQNANwMAIAJBCGogBikDADcDACACQRBqIAMpAwA3AwAgBSAJQQFqNgIcIAooAjAiAgRAIAooAjQgAkEBEHkLIAooAiAiAgRAIAooAiQgAkECdEEEEHkLIApBwABBCBB5DAELCyADIAJB4IDAABBBAAsgAiASQeCAwAAQQAALIAUgAjYCXEHsh8AAQSsgBUHcAGpBxIjAAEHkiMAAED0ACyAXIAkQaQALIAwgGRBpAAtBtIjAABB7AAsgBiAWQcyHwAAQQAALIAUgAjYCXEHsh8AAQSsgBUHcAGpB3IfAAEGkiMAAED0ACyAZIAYQaQALIAogAkH0i8AAED4AC0HIi8AAQRpB5IvAABBSAAtBCEHAABCDAQALjg4CEn8BfgJAIANBA0kNACABLQCtA0EBcQ0AIAIvAAAgAkECai0AAEEQdHJB7/f+BUcNAEEDIRUgAkEDaiECIANBA2shAwsCQAJAAn8CQAJAAkACQCABLQCsA0UEQAJAAkACQAJAIANFBEAgAS0AogMiAkUgAiABLQDZAiIDT3JFBEAgASgCjAIiAkH/AXFBIE8NBSACQQN0IQgLIAhB/wFxIgIgA0kNASAHDQIMCQsgBQ0CDAcLIAEgCDoAogNBACEIIAJFQQJ0DAgLIAEgCDoAogMMBAsgB0UNAiABQdoCaiERIAFBkAJqIRIgAUEMaiELIAEoAgghDiABLQDYAiEPIAEpAwAhGiABLQCiAyEJIAEtANYCIRMgAS0A1wIhFANAAkACQCALIAIgCmotAAAiEGotAAAgCWoiDUHGAEkEQCABIBogEEEKRq18Iho3AwAgDSASai0AACEJIA0gEWotAAANAQwCCyANQcYAQfz4wAAQPwALIAQgCGogEDoAACAIQQFqIQgLIApBAWohCgJAIAkgD08EQCAGIAxBAnRqIAggDmo2AgAgDEEBaiEMIAkgD0sNAQsCQCAJIBNHIAkgFEdxIAMgCk0gBSAITXJyDQADQCALIAIgCmotAAAiDWotAAANASAEIAhqIA06AAAgCEEBaiEIIApBAWoiCiADTw0BIAUgCEsNAAsLIAMgCk0gBSAITXINACAHIAxLDQELCyABLQDZAiAJSwRAIAEgCToAogMgASAIIA5qNgIIQQAgByAMTUEBdCADIApNIgIbIgNBASADIAUgCE0bIAIbIQMMCAsgAUEANgIIIAEgCToAogNBAyEDDAcLQez4wAAQewALAkAgAQJ/AkACQAJAAkAgA0UEQCABLQClAyICQQlNDQEgAkHKAWsNBgwCCyAFRQ0IIAdFDQYgAS0ApQMhCSABKAIIIgggBUkNAgwDC0EBIAJ0Qb4BcQ0ECyABQcoBOgClA0EEDAgLIAEtAKsDIhIgAS0AqgNxIRMgAS0AqAMhFCABLQChAyEPIAEtAKADIQ4gAS0AowMhECABLQCkAyERIAEtAKkDIRYgAS0ApgNBAXEhFyABLQCnAyEYA0ACQCACIApqLQAAIQtBAyENAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgCUH/AXEiGQ4KAQIJDBAICw0DBAALQckBIQkCQAJAIBlByQFrDgIAARMLQQEhCQJAAkACQCAOQQFrDgIBAAILQZz5wABBKEGg+sAAEFIAC0EAIQkLQQhBCUEIIAkbIAtBDUcbIQ0MEQsgBiAMQQJ0aiAINgIAIAxBAWohDEEEIQNBygEhCSAIDBULAkACQCAOQQFrDgIAHgELIAsgD0cNBUEAIQkgCkEBaiEKDBELQQAhCSALQQprDgQDBAQDBAsgEkEBcUUgCyARR3INBEEDIQkgCkEBaiEKDA8LQQAhCQwOC0EAIQkgC0EKRw0NCyAKQQFqIQoMDAtBASEJIBRBAXFFIAsgFkdyDQtBBiEJIApBAWohCgwLCyALIBBGDQICQAJAIA5BAWsOAgAYAQsgCyAPRwRAQQIhDQwKC0HIASEJDAsLQcgBIQlBAiENIAtBCmsOBAoICAoICyATIAsgEUZxDQcgCyAQRg0BAkACQCAOQQFrDgIAFwELIAsgD0cEQEECIQ0MCQtByAEhCQwKC0HIASEJQQIhDSALQQprDgQJBwcJBwsgCyAQRw0FCyAGIAxBAnRqIAg2AgAgDEEBaiEMIApBAWohCkEHIQkMBwtBBkEAIAtBCkcbIQ0MBQsgEkEBcQ0BDAMLQQEhCQwECyALIBFGBEBBBSEJIApBAWohCgwECyAXRQ0BIAsgGEcNAUEEIQkgCkEBaiEKDAMLAkACQCAOQQFrDgIAEAELIAsgD0cEQEECIQ0MAgtByAEhCQwDC0HIASEJQQIhDSALQQprDgQCAAACAAsgBCAIaiALOgAAIAhBAWohCAsgCkEBaiEKIA1BB2tBA0kNASANIQkLIAMgCk0gBSAITXINAiAHIAxLDQEMAgsLIAYgDEECdGogCDYCACAMQQFqIQwgDSEJCyAJQf8BcSICQQhrQQJPBEAgAkHKAUYEQEEEIQMgCAwCCyADIApNIAUgCEtyRQRAQQEhAyAIDAILIAMgCktBAXRBACAHIAxNGyEDIAgMAQtBAyEDQQALNgIIIAEgCToApQMMBgsgB0UNAyABQQg6AKUDDAELQQIMAwsgASgCCCECQQAhCCABQQA2AgggBiACNgIAQQEhDEEDIQMMAwtBAQwBC0EAIQhBAgshAwsgACADOgAIIAFBAToArQMgACAMNgIMIAAgCDYCBCAAIAogFWo2AgAPC0Gc+cAAQShBsPrAABBSAAuaCgIQfwR+AkACQAJAAkACQAJAAkAgACgCACIGKAIsIgUEQCAFIAYoAigiAUsNBiAGKAIkIAVBAnRqQQRrKAIAIgQgBigCOCIBSw0FAkAgBEUEQEEBIQEMAQsgBEEASA0FQQEhAiAEQQEQbyIBRQ0FCyAFQQJ0IQIgBUH/////AUsEQAwIC0EEIQcgAkEEEG8iC0UNB0GZrMEALQAAGkHAAEEIEG4iA0UNAyADIAQ2AjggAyABNgI0IAMgBDYCMCADQQA2AiwgAyAFNgIoIAMgCzYCJCADIAU2AiAgBigCAAR+IAYpAxghESAGKQMQIRIgBikDCCETQgEFQgALIRQgAyARNwMYIAMgEjcDECADIBM3AwggAyAUNwMAIAYoAiwiDSAGKAIoIgFLDQIgDQRAIAYoAiQgDUECdGpBBGsoAgAiASAGKAI4IgRLDQIgA0EwaiEPIANBIGohEEEAIQIDQAJAIAYoAiwiASAGKAIoIgRNBEACQAJAIAEgDEsEQCAGKAIkIAxBAnRqKAIAIgogAkkNAiAKIAYoAjgiAU0NASAKIAFB0KDAABBAAAsgDCABQcCgwAAQPwALIAYoAjQiASACaiEJQQAhBwJAIAogAmsiAkUEQCAJIQQMAQsgASAKaiEBAkADQCABQQFrIgQtAABBCWsiDkEXS0EBIA50QZuAgARxRXINASAEIQEgAkEBayICDQALIAkhBAwBCwJAA0AgByAJaiIELQAAQQlrIg5BF0tBASAOdEGbgIAEcUVyDQEgAiAHQQFqIgdHDQALQQAhByABIQQMAQsgAiAHayEHCyAFIAhPBEAgByAIBH8gCEECdCALakEEaygCAAVBAAsiBWoiCSADKAI4IgJNDQMDQCADAn8CQAJAIAJBAE4EQCACQQQgAkEBdCACQQJJGyIBTwRAIAEMBAsgASACayIIIAMoAjAgAmtLDQEMAgtBkKDAABB7AAsgDyACIAgQLCADKAI4IQILIAMoAjQiCyACaiEBIAhBAk8EfyABQQAgCEEBayIBEC8aIAsgASACaiICagUgAQtBADoAACACQQFqCyICNgI4IAIgCUkNAAsMAwsgCCAFQeCfwAAQQAALIAIgCkHQoMAAEEEACyABIARB4J/AABBAAAsCQAJAAkACQCAFIAlNBEAgAygCNCAFaiAEIAcQGxogAygCLCIBIAMoAigiBEkEQCAEIQUMBQsgBEEASA0BQQQgBEEBdCAEQQJJGyIFIARNDQMgBSAEIgFrIgIgAygCICABa00NAiAQIAEgAhApIAMoAighAQwCCyAFIAlB8J/AABBBAAtBoKDAABB7AAsgAygCJCIIIAFBAnRqIQcgAkECSQR/IAEFIAdBACAFIARBf3NqQQJ0EC8aIAggASAFaiAEa0ECdGpBBGshByABIAJqQQFrCyAHQQA2AgBBAWohBSADKAIsIQELIAMgBTYCKAsgASAFTwRAIAEgBUGwoMAAED8ACyADKAIkIgsgAUECdGogCTYCACADIAFBAWoiCDYCLCAKIQIgDEEBaiIMIA1HDQALCyAGKAIwIgEEQCAGKAI0IAFBARB5CyAGKAIgIgEEQCAGKAIkIAFBAnRBBBB5CyAGQcAAQQgQeSAAIAM2AgALDwsgASAEQYCgwAAQQAALIA0gAUHgn8AAEEAAC0EIQcAAEIMBAAsgAiAEEGkACyAEIAFBgKDAABBAAAsgBSABQeCfwAAQQAALIAcgAhBpAAvcDgIVfwR+IwBBEGsiDyQAAkACQAJAAkACQAJAAkAgACgCACIGKAIsIgMEQCADIAYoAigiAUsNBiAGKAIkIANBAnRqQQRrKAIAIgEgBigCOCICSw0FAkAgAUUEQEEBIQIMAQsgAUEASA0FQQEhByABQQEQbyICRQ0FCyADQQJ0IQcgA0H/////AUsNB0EEIQggB0EEEG8iC0UNB0GZrMEALQAAGkHAAEEIEG4iBUUNAyAFIAE2AjggBSACNgI0IAUgATYCMCAFQQA2AiwgBSADNgIoIAUgCzYCJCAFIAM2AiAgBigCAAR+IAYpAxghFiAGKQMQIRcgBikDCCEYQgEFQgALIRkgBSAWNwMYIAUgFzcDECAFIBg3AwggBSAZNwMAIAYoAiwiECAGKAIoIgFLDQIgEARAIAYoAiQgEEECdGpBBGsoAgAiASAGKAI4IgJLDQIgBUEwaiEUIAVBIGohFUEAIQJBACEBA0ACQCAGKAIsIgcgBigCKCIITQRAAkACQCAHIBFLBEAgBigCJCARQQJ0aigCACINIAFJDQIgDSAGKAI4IgdNDQEgDSAHQbCiwAAQQAALIBEgB0GgosAAED8ACyAPQQhqIRJBACEJQQAhDCAGKAI0IAFqIgcgDSABayITaiEIAkACQAJAAkAgE0UEQCAHIQEMAQsgByEBA0AgCSIMAn8gASIJLAAAIgFBAE4EQCABQf8BcSEEIAlBAWoMAQsgCS0AAUE/cSEEIAFBH3EhCiABQV9NBEAgCkEGdCAEciEEIAlBAmoMAQsgCS0AAkE/cSAEQQZ0ciEEIAFBcEkEQCAEIApBDHRyIQQgCUEDagwBCyAKQRJ0QYCA8ABxIAktAANBP3EgBEEGdHJyIQQgCUEEagsiASAJa2ohCQJAIARBIEYgBEEJa0EFSXINACAEQYABSQ0CAkACQAJAAkAgBEEIdiIKQRZrDhsBBgYGBgYGBgYGAwYGBgYGBgYGBgYGBgYGBgIACyAKDQUgBEH/AXFBl6rBAGotAABBAXFFDQUMAwsgBEGALUcNBAwCCyAEQYDgAEcNAwwBCyAEQf8BcUGXqsEAai0AAEECcUUNAgsgASAIRw0ACwwBCyABIAhHBEADQCAIIgpBAWsiCCwAACIEQQBIBEAgBEE/cQJ/IApBAmsiCC0AACIEwCIOQUBOBEAgBEEfcQwBCyAOQT9xAn8gCkEDayIILQAAIgTAIg5BQE4EQCAEQQ9xDAELIA5BP3EgCkEEayIILQAAQQdxQQZ0cgtBBnRyC0EGdHIhBAsCQCAEQSBGIARBCWtBBUlyDQAgBEGAAUkNBAJAAkACQAJAIARBCHYiDkEWaw4bAwgICAgICAgICAEICAgICAgICAgICAgICAgAAgsgBEGA4ABHDQcMAwsgBEH/AXFBl6rBAGotAABBAnFFDQYMAgsgDg0FIARB/wFxQZeqwQBqLQAAQQFxDQEMBQsgBEGALUcNBAsgASAIRw0ACwsgEw0CC0EAIQxBACEJDAELIAkgAWsgCmohCQsgEiAJIAxrNgIEIBIgByAMajYCACACIANNBEAgDygCCCEJIA8oAgwiDCACBH8gAkECdCALakEEaygCAAVBAAsiAWoiByAFKAI4IgNNDQMDQCAFAn8CQAJAIANBAE4EQCADQQQgA0EBdCADQQJJGyICTwRAIAIMBAsgAiADayICIAUoAjAgA2tLDQEMAgtB8KHAABB7AAsgFCADIAIQLCAFKAI4IQMLIAUoAjQiCiADaiEIIAJBAk8EfyAIQQAgAkEBayICEC8aIAogAiADaiIDagUgCAtBADoAACADQQFqCyIDNgI4IAMgB0kNAAsMAwsgAiADQcChwAAQQAALIAEgDUGwosAAEEEACyAHIAhBwKHAABBAAAsCQAJAAkACQCABIAdNBEAgBSgCNCABaiAJIAwQGxogBSgCLCICIAUoAigiAUkEQCABIQMMBQsgAUEASA0BQQQgAUEBdCABQQJJGyIDIAFNDQMgAyABIgJrIgggBSgCICABa00NAiAVIAEgCBApIAUoAighAgwCCyABIAdB0KHAABBBAAtBgKLAABB7AAsgBSgCJCIJIAJBAnRqIQsgCEECTwRAIAtBACADIAFBf3NqQQJ0EC8aIAkgAiADaiABa0ECdGpBBGshCyACIAhqQQFrIQILIAtBADYCACACQQFqIQMgBSgCLCECCyAFIAM2AigLIAIgA08EQCACIANBkKLAABA/AAsgBSgCJCILIAJBAnRqIAc2AgAgBSACQQFqIgI2AiwgDSEBIBFBAWoiESAQRw0ACwsgBigCMCIBBEAgBigCNCABQQEQeQsgBigCICIBBEAgBigCJCABQQJ0QQQQeQsgBkHAAEEIEHkgACAFNgIACyAPQRBqJAAPCyABIAJB4KHAABBAAAsgECABQcChwAAQQAALQQhBwAAQgwEACyAHIAEQaQALIAEgAkHgocAAEEAACyADIAFBwKHAABBAAAsgCCAHEGkAC8MJAQp/IwBBMGsiBSQAIAAoAgAhCgJ/IAAoAiAiCUUEQCAAKAIMIQcgACgCBCECIAAoAggMAQsgACgCBCECA0AgACAJQQFrIgk2AiACfwJAIApBAXEEQCACBEAgACgCDCEIIAAoAggMAwsgACgCCCECIAAoAgwiBEUNAQJAIARBB3EiA0UEQCAEIQEMAQsgBCEBA0AgAUEBayEBIAIoApgDIQIgA0EBayIDDQALCyAEQQhJDQEDQCACKAKYAygCmAMoApgDKAKYAygCmAMoApgDKAKYAygCmAMhAiABQQhrIgENAAsMAQtBjITAABB7AAsgAEIANwIIIAAgAjYCBEEBIQogAEEBNgIAQQAhCEEACyEBAkAgAi8BkgMgCEsEQCACIQMMAQsDQCACKAKIAiIDBEAgAi8BkAMhCCACQcgDQZgDIAEbQQgQeSABQQFqIQEgAyICLwGSAyAITQ0BDAILCyACQcgDQZgDIAEbQQgQeUGokcAAEHsACyAIQQFqIQcCQCABRQRAIAMhAgwBCyADIAdBAnRqQZgDaiEGAkAgAUEHcSIHRQRAIAEhBAwBCyABIQQDQCAEQQFrIQQgBigCACICQZgDaiEGIAdBAWsiBw0ACwtBACEHIAFBCEkNAANAIAYoAgAoApgDKAKYAygCmAMoApgDKAKYAygCmAMoApgDIgJBmANqIQYgBEEIayIEDQALCyAAIAc2AgwgAEEANgIIIAAgAjYCBCADIAhBDGxqQYwCaiIEKAIAIgEEQCAEKAIEIAFBARB5CwJAAkACQAJAAkAgAyAIQRhsaiIGLQAADgUDAwMBAgALAn8gBigCBCIERQRAQQAhA0EADAELIAYoAgwhAyAFIAYoAggiATYCKCAFIAQ2AiQgBUEANgIgIAUgATYCGCAFIAQ2AhQgBUEANgIQQQELIQEgBSADNgIsIAUgATYCHCAFIAE2AgwgBUEMahAHIAlFDQMMBAsgBigCBCIDRQ0BIAYoAgggA0EBEHkgCUUNAgwDCyAGKAIMIgMEQCAGKAIIIQEDQAJAAkACQAJAIAEtAAAOBQMDAwECAAsCfyABQQRqKAIAIgRFBEBBACEIQQAMAQsgBSAENgIkIAVBADYCICAFIAQ2AhQgBUEANgIQIAUgAUEIaigCACIENgIoIAUgBDYCGCABQQxqKAIAIQhBAQshBCAFIAg2AiwgBSAENgIcIAUgBDYCDCAFQQxqEAcMAgsgAUEEaigCACIERQ0BIAFBCGooAgAgBEEBEHkMAQsgAUEEahAmCyABQRhqIQEgA0EBayIDDQALCyAGKAIEIgNFDQAgBigCCCADQRhsQQgQeQsgCQ0BCwsgACgCACEKQQALIQMgAEEANgIAIAoEQAJAAkACQCACRQRAQQAhASAHRQ0CAkAgB0EHcSIGRQRAIAchAgwBCyAHIQIDQCACQQFrIQIgAygCmAMhAyAGQQFrIgYNAAsLIAdBCE8NAQwCCyADIQEMAgsDQCADKAKYAygCmAMoApgDKAKYAygCmAMoApgDKAKYAygCmAMhAyACQQhrIgINAAsLIAMhAgsDQCACKAKIAiACQcgDQZgDIAEbQQgQeSABQQFqIQEiAg0ACwsgBUEwaiQAC8YGAQh/AkACQCABIABBA2pBfHEiAiAAayIISQ0AIAEgCGsiBkEESQ0AIAZBA3EhB0EAIQECQCAAIAJGIgkNAAJAIAAgAmsiBEF8SwRAQQAhAgwBC0EAIQIDQCABIAAgAmoiAywAAEG/f0pqIANBAWosAABBv39KaiADQQJqLAAAQb9/SmogA0EDaiwAAEG/f0pqIQEgAkEEaiICDQALCyAJDQAgACACaiEDA0AgASADLAAAQb9/SmohASADQQFqIQMgBEEBaiIEDQALCyAAIAhqIQICQCAHRQ0AIAIgBkF8cWoiACwAAEG/f0ohBSAHQQFGDQAgBSAALAABQb9/SmohBSAHQQJGDQAgBSAALAACQb9/SmohBQsgBkECdiEGIAEgBWohBANAIAIhACAGRQ0CQcABIAYgBkHAAU8bIgVBA3EhByAFQQJ0IQhBACEDIAZBBE8EQCAAIAhB8AdxaiEJIAAhAQNAIAEoAgAiAkF/c0EHdiACQQZ2ckGBgoQIcSADaiABKAIEIgJBf3NBB3YgAkEGdnJBgYKECHFqIAEoAggiAkF/c0EHdiACQQZ2ckGBgoQIcWogASgCDCICQX9zQQd2IAJBBnZyQYGChAhxaiEDIAFBEGoiASAJRw0ACwsgBiAFayEGIAAgCGohAiADQQh2Qf+B/AdxIANB/4H8B3FqQYGABGxBEHYgBGohBCAHRQ0ACwJ/IAAgBUH8AXFBAnRqIgAoAgAiAUF/c0EHdiABQQZ2ckGBgoQIcSIBIAdBAUYNABogASAAKAIEIgFBf3NBB3YgAUEGdnJBgYKECHFqIgEgB0ECRg0AGiAAKAIIIgBBf3NBB3YgAEEGdnJBgYKECHEgAWoLIgFBCHZB/4EccSABQf+B/AdxakGBgARsQRB2IARqDwsgAUUEQEEADwsgAUEDcSECAkAgAUEESQRADAELIAFBfHEhBQNAIAQgACADaiIBLAAAQb9/SmogAUEBaiwAAEG/f0pqIAFBAmosAABBv39KaiABQQNqLAAAQb9/SmohBCAFIANBBGoiA0cNAAsLIAJFDQAgACADaiEBA0AgBCABLAAAQb9/SmohBCABQQFqIQEgAkEBayICDQALCyAEC8sGAQ5/IwBBEGsiBiQAQQEhDAJAIAIoAhQiCUEiIAIoAhgiDSgCECIOEQAADQACQCABRQRAQQAhAgwBC0EAIAFrIQ8gACEHIAEhAwJAAn8CQAJAA0AgAyAHaiEQQQAhAgJAA0AgAiAHaiIKLQAAIgVB/wBrQf8BcUGhAUkgBUEiRnIgBUHcAEZyDQEgAyACQQFqIgJHDQALIAMgCGoMBAsgCkEBaiEHAkAgCiwAACILQQBOBEAgC0H/AXEhAwwBCyAHLQAAQT9xIQMgC0EfcSEFIApBAmohByALQV9NBEAgBUEGdCADciEDDAELIActAABBP3EgA0EGdHIhAyAKQQNqIQcgC0FwSQRAIAMgBUEMdHIhAwwBCyAFQRJ0QYCA8ABxIActAABBP3EgA0EGdHJyIQMgCkEEaiEHCyAGQQRqIANBgYAEEA4CQAJAIAYtAARBgAFGDQAgBi0ADyAGLQAOa0H/AXFBAUYNACAEIAIgCGoiBUsNAwJAIARFDQAgASAESwRAIAAgBGosAABBv39KDQEMBQsgASAERw0ECwJAIAVFDQAgASAFSwRAIAAgCGogAmosAABBv39MDQUMAQsgBSAPag0ECyAJIAAgBGogCCAEayACaiANKAIMIgURAQANAQJAIAYtAARBgAFGBEAgCSAGKAIIIA4RAABFDQEMAwsgCSAGLQAOIgQgBkEEamogBi0ADyAEayAFEQEADQILAn9BASADQYABSQ0AGkECIANBgBBJDQAaQQNBBCADQYCABEkbCyAIaiACaiEECwJ/QQEgA0GAAUkNABpBAiADQYAQSQ0AGkEDQQQgA0GAgARJGwsgCGoiBSACaiEIIBAgB2siA0UNAwwBCwsMBQsgACABIAQgBUGEksEAEG0ACyACIAVqCyICIARJDQBBACEDAkAgBEUNACABIARLBEAgBCIDIABqLAAAQb9/TA0CDAELIAQiAyABRw0BCyACRQRAQQAhAgwCCyABIAJLBEAgAyEEIAAgAmosAABBv39KDQIMAQsgAyEEIAEgAkYNAQsgACABIAQgAkGUksEAEG0ACyAJIAAgA2ogAiADayANKAIMEQEADQAgCUEiIA4RAAAhDAsgBkEQaiQAIAwLyCQCEX8BfiMAQfAAayIIJAAgCCABNgIMIAggADYCCAJAAkACQAJAAkACQAJAAkAgAi0AAA4GAAICAgIBAgsgAkEANgIMIAJBADYCBCACQQU6AAALAkAgAUUEQEEBIQMMAQsgAUEASA0CQZmswQAtAAAaQQEhBiABQQEQbiIDRQ0CCyADIAAgARAbIQQgAkEEaiEFIAIoAgQiA0UEQEEAIQMMBAsgAigCCCEKAkADQCADQYwCaiECIAMvAZIDIg1BDGwhAEF/IQYCQAJAA0AgAEUEQCANIQYMAgsgAkEIaiELIAJBBGogBkEBaiEGIABBDGshACACQQxqIQIgBCEHKAIAIQlBACEOAkAgASALKAIAIgsgASALSRsiDEUNAANAIActAAAiDyAJLQAAIhBGBEAgB0EBaiEHIAlBAWohCSAMQQFrIgwNAQwCCwsgDyAQayEOC0F/IA4gASALayAOGyIHQQBHIAdBAEgbIgdBAUYNAAsgB0H/AXFFDQELIApFDQIgCkEBayEKIAMgBkECdGpBmANqKAIAIQMMAQsLIAFFDQMgBCABQQEQeQwDCyABQYCAgIB4Rw0DIAQhAyAFIQYMAgsgCEECNgIwIAhBwJ7AADYCLCAIQgI3AjggCCACNgJgIAggCEHgAGqtQoCAgIDABIQ3AxggCCAIQQhqrUKAgICA0ASENwMQIAggCEEQajYCNCAIQSxqQdCewAAQSgALIAYgARBpAAsgAyAGQRhsaiECDAELIAhBADoAECAIIAY2AkQgCEEANgJAIAggAzYCPCAIIAU2AjggCCABNgI0IAggBDYCMCAIIAE2AiwgA0UEQEGZrMEALQAAGkGYA0EIEG4iAkUNAiACQQA2AogCIAIgCCkCLDcCjAIgAkEBOwGSAyACIAgpAxA3AwAgAkGUAmogCEE0aigCADYCACACQQhqIAhBGGopAwA3AwAgAkEQaiAIQSBqKQMANwMAIAVCgICAgBA3AgQgBSACNgIADAELIAhB0ABqIAhBPGoiAEEIaigCADYCACAIIAApAgA3A0ggCEHoAGogCEE0aigCADYCACAIIAgpAiw3A2AgCEHUAGohDiAIQeAAaiEDIAhBEGohCSAIQThqIRAjAEGQAWsiBCQAAkACQAJAAkACQAJ/AkACQAJ/AkACQAJAAkAgCEHIAGoiASgCACIALwGSAyIGQQtPBEBBmazBAC0AABogASgCBCEGIAEoAgghDUGYA0EIEG4iB0UNBiAHQQA7AZIDIAdBADYCiAIgDUEFSQ0BIA1BBWsOAgMEAgsgAEGMAmoiByABKAIIIg1BDGxqIQIgASgCBCEBAkAgBiANQQFqIgVJBEAgAiADKQIANwIAIAJBCGogA0EIaigCADYCAAwBCyAHIAVBDGxqIAIgBiANayIHQQxsEIYBGiACQQhqIANBCGooAgA2AgAgAiADKQIANwIAIAAgBUEYbGogACANQRhsaiAHQRhsEIYBGgsgACANQRhsaiICQRBqIAlBEGopAwA3AwAgAiAJKQMANwMAIAJBCGogCUEIaikDADcDACAAIAZBAWo7AZIDDAgLIAcgAC8BkgNBBWsiBTsBkgMgBEHIAGoiAiAAQegAaikDADcDACAEQdAAaiIBIABB8ABqKQMANwMAIAQgACkDYDcDQCAFQQxPDQogACkCwAIhFCAAKAK8AiEKIAdBjAJqIABByAJqIAVBDGwQGxogByAAQfgAaiAFQRhsEBsaIABBBDsBkgMMBQsgByAALwGSA0EHayIFOwGSAyAEQcgAaiIBIABBmAFqKQMANwMAIARB0ABqIgIgAEGgAWopAwA3AwAgBCAAKQOQATcDQCAFQQxPDQkgACkC2AIhFCAAKALUAiEKIAdBjAJqIABB4AJqIAVBDGwQGxogByAAQagBaiAFQRhsEBsaIABBBjsBkgMgBEHkAGogASkDADcCACAEQewAaiACKQMANwIAIAQgBCkDQDcCXCANQQdrDAILIAcgAC8BkgNBBmsiBTsBkgMgBEHIAGoiAiAAQYABaikDADcDACAEQdAAaiIBIABBiAFqKQMANwMAIAQgACkDeDcDQCAFQQxPDQggACkCzAIhFCAAKALIAiEKIAdBjAJqIABB1AJqIAVBDGwQGxogByAAQZABaiAFQRhsEBsaQQUhDSAAQQU7AZIDDAMLIAcgAC8BkgNBBmsiBTsBkgMgBEHIAGoiASAAQYABaikDADcDACAEQdAAaiICIABBiAFqKQMANwMAIAQgACkDeDcDQCAFQQxPDQcgACkCzAIhFCAAKALIAiEKIAdBjAJqIABB1AJqIAVBDGwQGxogByAAQZABaiAFQRhsEBsaIABBBTsBkgMgBEHkAGogASkDADcCACAEQewAaiACKQMANwIAIAQgBCkDQDcCXEEACyENQQAhASAHDAILQQhBmAMQgwEACyAEQeQAaiACKQMANwIAIARB7ABqIAEpAwA3AgAgBCAEKQNANwJcIAYhASAACyICQYwCaiANQQxsaiEFAkAgDSACLwGSAyILTwRAIAUgAykCADcCACAFQQhqIANBCGooAgA2AgAMAQsgBUEMaiAFIAsgDWsiDEEMbBCGARogBUEIaiADQQhqKAIANgIAIAUgAykCADcCACACIA1BGGxqIgNBGGogAyAMQRhsEIYBGgsgAiANQRhsaiIDQRBqIAlBEGopAwA3AwAgAyAJKQMANwMAIARBCGoiBSAEQeAAaikCADcDACAEQRBqIgwgBEHoAGopAgA3AwAgBEEYaiIPIARB8ABqKAIANgIAIANBCGogCUEIaikDADcDACACIAtBAWo7AZIDIAQgBCkCWDcDACAKQYCAgIB4Rw0BIAIhAAsgDiANNgIIIA4gATYCBCAOIAA2AgAMAQsgBEE4aiAPKAIANgIAIARBMGogDCkDADcDACAEQShqIAUpAwA3AwAgBCAEKQMANwMgAkACQCAAKAKIAiIFRQRAQQAhAwwBCyAEQYgBaiERIARBgAFqIRIgBEHkAGohCyAEQSBqQQRyIQlBACEDA0ACQCADIAZGBEAgAC8BkAMhAwJ/An8CQAJAAkACQCAFLwGSAyIMQQtPBEAgBkEBaiEAIANBBUkNASADQQVrDgIDBAILIAVBjAJqIgsgA0EMbGohBiADQQFqIQAgDEEBaiEPAkAgAyAMTwRAIAYgFDcCBCAGIAo2AgAgBSADQRhsaiIGIAkpAgA3AgAgBkEQaiAJQRBqKQIANwIAIAZBCGogCUEIaikCADcCAAwBCyALIABBDGxqIAYgDCADayILQQxsEIYBGiAGIBQ3AgQgBiAKNgIAIAUgAEEYbGogBSADQRhsaiIGIAtBGGwQhgEaIAZBEGogCUEQaikCADcCACAGQQhqIAlBCGopAgA3AgAgBiAJKQIANwIAIAVBmANqIgYgA0ECdGpBCGogBiAAQQJ0aiALQQJ0EIYBGgsgBSAPOwGSAyAFIABBAnRqQZgDaiAHNgIAIAAgDEECaiIGTw0KIAwgA2siCkEBakEDcSIHBEAgBSADQQJ0akGcA2ohAwNAIAMoAgAiCSAAOwGQAyAJIAU2AogCIANBBGohAyAAQQFqIQAgB0EBayIHDQALCyAKQQNJDQogAEECdCAFakGkA2ohAwNAIANBDGsoAgAiByAAOwGQAyAHIAU2AogCIANBCGsoAgAiByAAQQFqOwGQAyAHIAU2AogCIANBBGsoAgAiByAAQQJqOwGQAyAHIAU2AogCIAMoAgAiByAAQQNqOwGQAyAHIAU2AogCIANBEGohAyAGIABBBGoiAEcNAAsMCgsgBEEENgJIIAQgADYCRCAEIAU2AkAgEgwECyAEQQY2AkggBCAANgJEIAQgBTYCQCADQQdrDAILIARBBTYCSCAEIAA2AkQgBCAFNgJAIARB2ABqIARBQGsQECAEKAKAASIALwGSAyIGQQFqIQMCQAJAIAZBBk8EQCAAQdQCaiAAQcgCaiAGQQVrIgVBDGwQhgEaIAAgFDcCzAIgACAKNgLIAiAAQZABaiAAQfgAaiAFQRhsEIYBGiAAQYgBaiAJQRBqKQIANwIAIABBgAFqIAlBCGopAgA3AgAgACAJKQIANwJ4IABBtANqIABBsANqIAZBAnRBFGsQhgEaIAAgAzsBkgMgACAHNgKwAwwBCyAAIBQ3AswCIAAgCjYCyAIgACAHNgKwAyAAIAM7AZIDIAAgCSkCADcCeCAAQYABaiAJQQhqKQIANwIAIABBiAFqIAlBEGopAgA3AgAgBkEFRw0BCyAGQQNxIQpBBiEDIAZBBWtBA08EQCAGQfz/A3FBCGshDEEGIQVBACEHA0AgACAHaiIGQbADaigCACIDIAU7AZADIAMgADYCiAIgBkG0A2ooAgAiAyAFQQFqOwGQAyADIAA2AogCIAZBuANqKAIAIgMgBUECajsBkAMgAyAANgKIAiAGQbwDaigCACIGIAVBA2o7AZADIAYgADYCiAIgB0EQaiEHIAVBBmsgBUEEaiIDIQUgDEcNAAsLIApFDQAgACADQQJ0akGYA2ohBQNAIAUoAgAiBiADOwGQAyAGIAA2AogCIAVBBGohBSADQQFqIQMgCkEBayIKDQALCyAEQQhqIAtBCGopAgA3AwAgBEEQaiALQRBqKQIANwMAIARBGGogC0EYaigCADYCACAEIAspAgA3AwAgBCkCXCEUIAQoAlghCgwECyAEQQU2AkggBCAANgJEIAQgBTYCQEEACyEDIBELIARB2ABqIARBQGsQECgCACIGQYwCaiIPIANBDGxqIQUgA0EBaiEAIAYvAZIDIgxBAWohEwJAIAMgDE8EQCAFIBQ3AgQgBSAKNgIAIAYgA0EYbGoiBSAJKQIANwIAIAVBEGogCUEQaikCADcCACAFQQhqIAlBCGopAgA3AgAMAQsgDyAAQQxsaiAFIAwgA2siD0EMbBCGARogBSAUNwIEIAUgCjYCACAGIABBGGxqIAYgA0EYbGoiBSAPQRhsEIYBGiAFQRBqIAlBEGopAgA3AgAgBUEIaiAJQQhqKQIANwIAIAUgCSkCADcCACAGQZgDaiIFIANBAnRqQQhqIAUgAEECdGogD0ECdBCGARoLIAYgAEECdGpBmANqIAc2AgAgBiATOwGSAwJAIAAgDEECaiIFTw0AIAwgA2siCkEBakEDcSIHBEAgBiADQQJ0akGcA2ohAwNAIAMoAgAiDCAAOwGQAyAMIAY2AogCIANBBGohAyAAQQFqIQAgB0EBayIHDQALCyAKQQNJDQAgBiAAQQJ0akGkA2ohAwNAIANBDGsoAgAiByAAOwGQAyAHIAY2AogCIANBCGsoAgAiByAAQQFqOwGQAyAHIAY2AogCIANBBGsoAgAiByAAQQJqOwGQAyAHIAY2AogCIAMoAgAiByAAQQNqOwGQAyAHIAY2AogCIANBEGohAyAFIABBBGoiAEcNAAsLIARBCGogC0EIaikCADcDACAEQRBqIAtBEGopAgA3AwAgBEEYaiALQRhqKAIANgIAIAQgCykCADcDACAEKQJcIRQgBCgCWCEKIAQoAoABIQAMAQtB3JzAAEE1QZSdwAAQUgALIAQoAoQBIQYgBCgCiAEhByAEKAKMASEDIApBgICAgHhGDQIgBEE4aiAEQRhqKAIANgIAIARBMGogBEEQaikDADcDACAEQShqIARBCGopAwA3AwAgBCAEKQMANwMgIAAoAogCIgUNAAsLAkACQCAQKAIAIgYoAgAiBQRAQZmswQAtAAAaIAYoAgQhCUHIA0EIEG4iAEUNASAAIAU2ApgDIABBADsBkgMgAEEANgKIAiAFQQA7AZADIAUgADYCiAIgBiAJQQFqNgIEIAYgADYCACADIAlHDQIgACAUNwOQAiAAIAo2AowCIABBATsBkgMgACAEKQIkNwIAIAAgBzYCnAMgAEEIaiAEQSxqKQIANwIAIABBEGogBEE0aikCADcCACAHQQE7AZADIAcgADYCiAIgDiACNgIAIA4gATYCBCAOIA02AggMBAtB2JrAABB7AAtBCEHIAxCDAQALQcObwABBMEH0m8AAEFIACyAOIA02AgggDiABNgIEIA4gAjYCAAsgBEGQAWokAAwBCyAFQQtBvJzAABBAAAsgCCgCOCIAIAAoAghBAWo2AgggCCgCVCAIKAJcQRhsaiECCyAIQfAAaiQAIAIPC0EIQZgDEIMBAAurBgELfyAAKAIIIgQgACgCAEYEQCAAIARBARAsIAAoAgghBAsgACAEQQFqIgM2AgggACgCBCAEakEiOgAAIAFBAWshCyACQX9zIQwgASACaiENIAEhCQJAAkADQEEAIQQCQANAIA0gBCAJaiIGRgRAIAIgBUcEQCAFBEAgAiAFTQ0EIAEgBWosAABBv39MDQQLIAIgBWsiAiAAKAIAIANrSwRAIAAgAyACECwgACgCCCEDCyAAKAIEIANqIAEgBWogAhAbGiAAIAIgA2oiAzYCCAsgAyAAKAIARgRAIAAgA0EBECwgACgCCCEDCyAAIANBAWo2AgggACgCBCADakEiOgAADwsgBEEBaiEEIAYtAAAiB0HIkcAAai0AACIKRQ0ACyAEIAVqIgZBAWsiCCAFSwRAAkAgBUUNACACIAVLBEAgASAFaiwAAEG/f0oNAQwGCyACIAVHDQULAkAgAiAISwRAIAUgC2ogBGosAABBv39KDQEMBgsgBiAMag0FCyAEQQFrIgggACgCACADa0sEQCAAIAMgCBAsIAAoAgghAwsgACgCBCADaiABIAVqIAgQGxogACADIARqQQFrIgM2AggLIAQgCWohCSAAAn8CQAJAAkACQAJAAkACQAJAAkAgCkHcAGsOGgAMDAwMDAEMDAwCDAwMDAwMDAMMDAwEDAUGBwtBg47AACEEDAcLQYWOwAAhBAwGC0GHjsAAIQQMBQtBiY7AACEEDAQLQYuOwAAhBAwDC0GNjsAAIQQMAgsgB0EPcUG4kcAAai0AACEEIAdBBHZBuJHAAGotAAAhByAAKAIAIANrQQVNBEAgACADQQYQLCAAKAIIIQMLIAAoAgQgA2oiBSAEOgAFIAUgBzoABCAFQdzqwYEDNgAAIANBBmoMAgtBgY7AACEEIApBIkcNBAsgACgCACADa0EBTQRAIAAgA0ECECwgACgCCCEDCyAAKAIEIANqIAQvAAA7AAAgA0ECagsiAzYCCCAGIQUMAQsLIAEgAiAFIAJBpI3AABBtAAtBxI3AAEEoQeyNwAAQUgALIAEgAiAFIAQgBWpBAWtBtI3AABBtAAupBQEHfwJAIAAoAghBAXFFIgQgACgCACIJRXFFBEACQCAEDQAgASACaiEHAkAgACgCDCIGRQRAIAEhBAwBCyABIQQDQCAEIgMgB0YNAgJ/IANBAWogAywAACIIQQBODQAaIANBAmogCEFgSQ0AGiADQQNqIAhBcEkNABogA0EEagsiBCADayAFaiEFIAZBAWsiBg0ACwsgBCAHRg0AIAQsAAAaIAUgAgJ/AkAgBUUNACACIAVLBEAgASAFaiwAAEG/f0oNAUEADAILIAIgBUYNAEEADAELIAELIgMbIQIgAyABIAMbIQELIAlFDQEgACgCBCEHAkAgAkEQTwRAIAEgAhAIIQMMAQsgAkUEQEEAIQMMAQsgAkEDcSEGAkAgAkEESQRAQQAhA0EAIQUMAQsgAkEMcSEIQQAhA0EAIQUDQCADIAEgBWoiBCwAAEG/f0pqIARBAWosAABBv39KaiAEQQJqLAAAQb9/SmogBEEDaiwAAEG/f0pqIQMgCCAFQQRqIgVHDQALCyAGRQ0AIAEgBWohBANAIAMgBCwAAEG/f0pqIQMgBEEBaiEEIAZBAWsiBg0ACwsCQCADIAdJBEAgByADayEEQQAhAwJAAkACQCAALQAgQQFrDgIAAQILIAQhA0EAIQQMAQsgBEEBdiEDIARBAWpBAXYhBAsgA0EBaiEDIAAoAhAhBiAAKAIYIQUgACgCFCEAA0AgA0EBayIDRQ0CIAAgBiAFKAIQEQAARQ0AC0EBDwsMAgsgACABIAIgBSgCDBEBAARAQQEPC0EAIQMDQCADIARGBEBBAA8LIANBAWohAyAAIAYgBSgCEBEAAEUNAAsgA0EBayAESQ8LIAAoAhQgASACIAAoAhgoAgwRAQAPCyAAKAIUIAEgAiAAKAIYKAIMEQEAC+YFAQd/An8gAUUEQCAAKAIcIQhBLSEKIAVBAWoMAQtBK0GAgMQAIAAoAhwiCEEBcSIBGyEKIAEgBWoLIQcCQCAIQQRxRQRAQQAhAgwBCwJAIANBEE8EQCACIAMQCCEBDAELIANFBEBBACEBDAELIANBA3EhCQJAIANBBEkEQEEAIQEMAQsgA0EMcSEMQQAhAQNAIAEgAiAGaiILLAAAQb9/SmogC0EBaiwAAEG/f0pqIAtBAmosAABBv39KaiALQQNqLAAAQb9/SmohASAMIAZBBGoiBkcNAAsLIAlFDQAgAiAGaiEGA0AgASAGLAAAQb9/SmohASAGQQFqIQYgCUEBayIJDQALCyABIAdqIQcLIAAoAgBFBEAgACgCFCIBIAAoAhgiACAKIAIgAxBYBEBBAQ8LIAEgBCAFIAAoAgwRAQAPCwJAAkACQCAHIAAoAgQiBk8EQCAAKAIUIgEgACgCGCIAIAogAiADEFhFDQFBAQ8LIAhBCHFFDQEgACgCECELIABBMDYCECAALQAgIQxBASEBIABBAToAICAAKAIUIgggACgCGCIJIAogAiADEFgNAiAGIAdrQQFqIQECQANAIAFBAWsiAUUNASAIQTAgCSgCEBEAAEUNAAtBAQ8LIAggBCAFIAkoAgwRAQAEQEEBDwsgACAMOgAgIAAgCzYCEEEADwsgASAEIAUgACgCDBEBACEBDAELIAYgB2shBwJAAkACQCAALQAgIgFBAWsOAwABAAILIAchAUEAIQcMAQsgB0EBdiEBIAdBAWpBAXYhBwsgAUEBaiEBIAAoAhAhCCAAKAIYIQYgACgCFCEAAkADQCABQQFrIgFFDQEgACAIIAYoAhARAABFDQALQQEPC0EBIQEgACAGIAogAiADEFgNACAAIAQgBSAGKAIMEQEADQBBACEBA0AgASAHRgRAQQAPCyABQQFqIQEgACAIIAYoAhARAABFDQALIAFBAWsgB0kPCyABC7wLAQV/IwBBIGsiBCQAAkACQAJAAkACQAJAAkACQAJAAkAgAQ4oBQgICAgICAgIAQMICAIICAgICAgICAgICAgICAgICAgICAYICAgIBwALIAFB3ABGDQMMBwsgAEGABDsBCiAAQgA3AQIgAEHc6AE7AQAMBwsgAEGABDsBCiAAQgA3AQIgAEHc5AE7AQAMBgsgAEGABDsBCiAAQgA3AQIgAEHc3AE7AQAMBQsgAEGABDsBCiAAQgA3AQIgAEHcuAE7AQAMBAsgAEGABDsBCiAAQgA3AQIgAEHc4AA7AQAMAwsgAkGAgARxRQ0BIABBgAQ7AQogAEIANwECIABB3MQAOwEADAILIAJBgAJxRQ0AIABBgAQ7AQogAEIANwECIABB3M4AOwEADAELAkAgAkEBcUUgAUH/BU1yDQACfwJAIAFBqp0ES0EEdCICIAJBCHIiAyABQQt0IgIgA0ECdEG8o8EAaigCAEELdEkbIgMgA0EEciIDIANBAnRBvKPBAGooAgBBC3QgAksbIgMgA0ECciIDIANBAnRBvKPBAGooAgBBC3QgAksbIgMgA0EBaiIDIANBAnRBvKPBAGooAgBBC3QgAksbIgMgA0EBaiIDIANBAnRBvKPBAGooAgBBC3QgAksbIgNBAnRBvKPBAGooAgBBC3QiBSACRiACIAVLaiADaiIDQSBNBEAgA0ECdEG8o8EAaiIGKAIAQRV2IQJB1wUhBQJ/AkAgA0EgRg0AIAYoAgRBFXYhBSADDQBBAAwBCyADQQJ0QbijwQBqKAIAQf///wBxCyEDAkAgBSACQX9zakUNACABIANrIQdB1wUgAiACQdcFTRshBiAFQQFrIQNBACEFA0AgAiAGRg0DIAUgAkHApMEAai0AAGoiBSAHSw0BIAMgAkEBaiICRw0ACyADIQILIAJBAXEMAgsgA0EhQZyjwQAQPwALIAZB1wVBrKPBABA/AAtFDQAgBEEAOgAKIARBADsBCCAEIAFBFHZBw47BAGotAAA6AAsgBCABQQR2QQ9xQcOOwQBqLQAAOgAPIAQgAUEIdkEPcUHDjsEAai0AADoADiAEIAFBDHZBD3FBw47BAGotAAA6AA0gBCABQRB2QQ9xQcOOwQBqLQAAOgAMIAFBAXJnQQJ2IgIgBEEIaiIDaiIFQfsAOgAAIAVBAWtB9QA6AAAgAyACQQJrIgJqQdwAOgAAIARBEGoiAyABQQ9xQcOOwQBqLQAAOgAAIABBCjoACyAAIAI6AAogACAEKQIINwIAIARB/QA6ABEgAEEIaiADLwEAOwEADAELAn9BACABQSBJDQAaQQEgAUH/AEkNABogAUGAgARPBEAgAUHg//8AcUHgzQpHIAFB/v//AHFBnvAKR3EgAUHA7gprQXpJcSABQbCdC2tBcklxIAFB8NcLa0FxSXEgAUGA8AtrQd5sSXEgAUGAgAxrQZ50SXEgAUHQpgxrQXtJcSABQYCCOGtBsMVUSXEgAUHwgzhJcSABQYCACE8NARogAUGAmMEAQSxB2JjBAEHEAUGcmsEAQcIDEBgMAQsgAUHencEAQShBrp7BAEGgAkHOoMEAQa0CEBgLRQRAIARBADoAFiAEQQA7ARQgBCABQRR2QcOOwQBqLQAAOgAXIAQgAUEEdkEPcUHDjsEAai0AADoAGyAEIAFBCHZBD3FBw47BAGotAAA6ABogBCABQQx2QQ9xQcOOwQBqLQAAOgAZIAQgAUEQdkEPcUHDjsEAai0AADoAGCABQQFyZ0ECdiICIARBFGoiA2oiBUH7ADoAACAFQQFrQfUAOgAAIAMgAkECayICakHcADoAACAEQRxqIgMgAUEPcUHDjsEAai0AADoAACAAQQo6AAsgACACOgAKIAAgBCkCFDcCACAEQf0AOgAdIABBCGogAy8BADsBAAwBCyAAIAE2AgQgAEGAAToAAAsgBEEgaiQAC/4FAQV/IABBCGsiASAAQQRrKAIAIgNBeHEiAGohAgJAAkAgA0EBcQ0AIANBAnFFDQEgASgCACIDIABqIQAgASADayIBQfivwQAoAgBGBEAgAigCBEEDcUEDRw0BQfCvwQAgADYCACACIAIoAgRBfnE2AgQgASAAQQFyNgIEIAIgADYCAA8LIAEgAxAZCwJAAkACQAJAAkAgAigCBCIDQQJxRQRAIAJB/K/BACgCAEYNAiACQfivwQAoAgBGDQMgAiADQXhxIgIQGSABIAAgAmoiAEEBcjYCBCAAIAFqIAA2AgAgAUH4r8EAKAIARw0BQfCvwQAgADYCAA8LIAIgA0F+cTYCBCABIABBAXI2AgQgACABaiAANgIACyAAQYACSQ0CIAEgABAgQQAhAUGQsMEAQZCwwQAoAgBBAWsiADYCACAADQRB2K3BACgCACIABEADQCABQQFqIQEgACgCCCIADQALC0GQsMEAQf8fIAEgAUH/H00bNgIADwtB/K/BACABNgIAQfSvwQBB9K/BACgCACAAaiIANgIAIAEgAEEBcjYCBEH4r8EAKAIAIAFGBEBB8K/BAEEANgIAQfivwQBBADYCAAsgAEGIsMEAKAIAIgNNDQNB/K/BACgCACICRQ0DQQAhAEH0r8EAKAIAIgRBKUkNAkHQrcEAIQEDQCACIAEoAgAiBU8EQCACIAUgASgCBGpJDQQLIAEoAgghAQwACwALQfivwQAgATYCAEHwr8EAQfCvwQAoAgAgAGoiADYCACABIABBAXI2AgQgACABaiAANgIADwsgAEH4AXFB4K3BAGohAgJ/QeivwQAoAgAiA0EBIABBA3Z0IgBxRQRAQeivwQAgACADcjYCACACDAELIAIoAggLIQAgAiABNgIIIAAgATYCDCABIAI2AgwgASAANgIIDwtB2K3BACgCACIBBEADQCAAQQFqIQAgASgCCCIBDQALC0GQsMEAQf8fIAAgAEH/H00bNgIAIAMgBE8NAEGIsMEAQX82AgALC+0EAQ1/IwBB0ABrIgIkAEGZrMEALQAAGiABKAIAIgcvAZIDIQgCQAJAAkACQEHIA0EIEG4iBQRAIAVBADYCiAIgBSAHLwGSAyIJIAEoAggiBkF/c2oiBDsBkgMgAkEwaiIKIAdBjAJqIgsgBkEMbGoiDEEIaigCADYCACACQUBrIg0gByAGQRhsaiIDQQhqKQMANwMAIAJByABqIg4gA0EQaikDADcDACACIAwpAgA3AyggAiADKQMANwM4IARBDE8NASAJIAZBAWoiA2sgBEcNAiAFQYwCaiALIANBDGxqIARBDGwQGxogBSAHIANBGGxqIARBGGwQGyEEIAcgBjsBkgMgAkEIaiAKKAIANgIAIAJBGGogDSkDADcDACACQSBqIA4pAwA3AwAgAiACKQMoNwMAIAIgAikDODcDECAELwGSAyIFQQFqIQMgBUEMTw0DIAMgCCAGayIDRw0EIARBmANqIAcgBkECdGpBnANqIANBAnQQGyEDIAEoAgQhBkEAIQEDQAJAIAMgAUECdGooAgAiCCABOwGQAyAIIAQ2AogCIAEgBU8NACABIAEgBUlqIgEgBU0NAQsLIAAgBjYCLCAAIAc2AiggACACKQMANwMAIAAgBjYCNCAAIAQ2AjAgAEEIaiACQQhqKQMANwMAIABBEGogAkEQaikDADcDACAAQRhqIAJBGGopAwA3AwAgAEEgaiACQSBqKQMANwMAIAJB0ABqJAAPC0EIQcgDEIMBAAsgBEELQbycwAAQQAALQYScwABBKEGsnMAAEFIACyADQQxBzJzAABBAAAtBhJzAAEEoQaycwAAQUgALtQoCEH8CfiMAQRBrIgwkAAJAAkACQAJAAkACQAJAAkACQAJAAkAgASgCLCIJIAEoAigiAk0EQCABKAIkIQUgCUUEQCABQTRqIQ8gAUE4aiENIAEoAjQhAgwDCyAJQQJ0IAVqQQRrKAIAIgcgASgCOCICSw0BIAFBOGohDSABQTRqIQ8gASgCNCECIAdBBEkNAiACKAAAQYCBgoR4cQ0FQQQgAkEDakF8cSIDIAJrIAIgA0YbIgggB0EEayIDSQRAA0AgAiAIaigCAEGAgYKEeHENBiAIQQRqIgggA0kNAAsLIAIgA2ooAABBgIGChHhxRQ0DDAQLIAkgAkGMisAAEEAACyAHIAJBvIrAABBAAAsgB0UNACACIAdBAWsiA2osAABBAEgNASADRQ0AIAIgB0ECayIDaiwAAEEASA0BIANFDQAgAiAHQQNrIgNqLAAAQQBIIANyDQELIABBADYCAAwHCyAJRQ0BCyAJQQJ0IAVqQQRrKAIAIgIgDSgCACIFSw0DQQAhB0EAIQhBACECA0AgASgCLCIFIAEoAigiA0sNAgJAIAUgCEsEQCABKAIkIAdqKAIAIgUgAkkNBSAFIA0oAgAiA00NASAFIANBtIzAABBAAAsgCCAFQaSMwAAQPwALIAxBBGohCiAPKAIAIAJqIQMCQAJAIAUgAmsiBkUNACAGQQdrIgJBACACIAZNGyEQIANBA2pBfHEgA2shEUEAIQIDQAJAAkACQCACIANqLQAAIgvAIg5BAE4EQCARIAJrQQNxDQEgAiAQTw0CA0AgAiADaiIEKAIEIAQoAgByQYCBgoR4cQ0DIAJBCGoiAiAQSQ0ACwwCC0KAgICAgCAhE0KAgICAECESAkACQAJ+AkACQAJAAkACQAJAAkACQAJAIAtBvJPBAGotAABBAmsOAwABAgoLIAJBAWoiBCAGSQ0CQgAhE0IAIRIMCQtCACETIAJBAWoiBCAGSQ0CQgAhEgwIC0IAIRMgAkEBaiIEIAZJDQJCACESDAcLIAMgBGosAABBv39KDQYMBwsgAyAEaiwAACEEAkACQCALQeABayILBEAgC0ENRgRADAIFDAMLAAsgBEFgcUGgf0YNBAwDCyAEQZ9/Sg0CDAMLIA5BH2pB/wFxQQxPBEAgDkF+cUFuRw0CIARBQEgNAwwCCyAEQUBIDQIMAQsgAyAEaiwAACEEAkACQAJAAkAgC0HwAWsOBQEAAAACAAsgDkEPakH/AXFBAksgBEFATnINAwwCCyAEQfAAakH/AXFBME8NAgwBCyAEQY9/Sg0BCyAGIAJBAmoiBE0EQEIAIRIMBQsgAyAEaiwAAEG/f0oNAkIAIRIgAkEDaiIEIAZPDQQgAyAEaiwAAEG/f0wNBUKAgICAgOAADAMLQoCAgICAIAwCC0IAIRIgAkECaiIEIAZPDQIgAyAEaiwAAEG/f0wNAwtCgICAgIDAAAshE0KAgICAECESCyAKIBMgAq2EIBKENwIEIApBATYCAAwGCyAEQQFqIQIMAgsgAkEBaiECDAELIAIgBk8NAANAIAIgA2osAABBAEgNASAGIAJBAWoiAkcNAAsMAgsgAiAGSQ0ACwsgCiAGNgIIIAogAzYCBCAKQQA2AgALIAwoAgQNBSAHQQRqIQcgBSECIAkgCEEBaiIIRw0ACwsgAEEANgIADAQLIAUgA0GMisAAEEAACyACIAVBtIzAABBBAAsgAiAFQayKwAAQQAALIAAgDCgCCDYCCCAAIAg2AgQgAEEBNgIACyAMQRBqJAAL7gQBCn8jAEEwayIDJAAgA0EDOgAsIANBIDYCHCADQQA2AiggAyABNgIkIAMgADYCICADQQA2AhQgA0EANgIMAn8CQAJAAkAgAigCECIKRQRAIAIoAgwiAEUNASACKAIIIQEgAEEDdCEFIABBAWtB/////wFxQQFqIQcgAigCACEAA0AgAEEEaigCACIEBEAgAygCICAAKAIAIAQgAygCJCgCDBEBAA0ECyABKAIAIANBDGogASgCBBEAAA0DIAFBCGohASAAQQhqIQAgBUEIayIFDQALDAELIAIoAhQiAEUNACAAQQV0IQsgAEEBa0H///8/cUEBaiEHIAIoAgghCCACKAIAIQADQCAAQQRqKAIAIgEEQCADKAIgIAAoAgAgASADKAIkKAIMEQEADQMLIAMgBSAKaiIBQRBqKAIANgIcIAMgAUEcai0AADoALCADIAFBGGooAgA2AiggAUEMaigCACEEQQAhCUEAIQYCQAJAAkAgAUEIaigCAEEBaw4CAAIBCyAEQQN0IAhqIgwoAgQNASAMKAIAIQQLQQEhBgsgAyAENgIQIAMgBjYCDCABQQRqKAIAIQQCQAJAAkAgASgCAEEBaw4CAAIBCyAEQQN0IAhqIgYoAgQNASAGKAIAIQQLQQEhCQsgAyAENgIYIAMgCTYCFCAIIAFBFGooAgBBA3RqIgEoAgAgA0EMaiABKAIEEQAADQIgAEEIaiEAIAsgBUEgaiIFRw0ACwsgByACKAIETw0BIAMoAiAgAigCACAHQQN0aiIAKAIAIAAoAgQgAygCJCgCDBEBAEUNAQtBAQwBC0EACyADQTBqJAALjwQBDX8gAUEBayEPIAAoAgQhCiAAKAIAIQsgACgCCCEMAkADQCAODQECQAJAIAIgBEkNAANAIAEgBGohBQJAAkACQCACIARrIgZBB00EQCACIARHDQEgAiEEDAULAkAgBUEDakF8cSIIIAVrIgMEQEEAIQADQCAAIAVqLQAAQQpGDQUgAyAAQQFqIgBHDQALIAMgBkEIayIATQ0BDAMLIAZBCGshAAsDQEGAgoQIIAgoAgAiCUGKlKjQAHNrIAlyQYCChAggCEEEaigCACIJQYqUqNAAc2sgCXJxQYCBgoR4cUGAgYKEeEcNAiAIQQhqIQggA0EIaiIDIABNDQALDAELQQAhAANAIAAgBWotAABBCkYNAiAGIABBAWoiAEcNAAsgAiEEDAMLIAMgBkYEQCACIQQMAwsDQCADIAVqLQAAQQpGBEAgAyEADAILIAYgA0EBaiIDRw0ACyACIQQMAgsgACAEaiIDQQFqIQQCQCACIANNDQAgACAFai0AAEEKRw0AIAQhBSAEIQAMAwsgAiAETw0ACwtBASEOIAIiACAHIgVGDQILAkAgDC0AAARAIAtB7I/BAEEEIAooAgwRAQANAQtBACEDIAAgB0cEQCAAIA9qLQAAQQpGIQMLIAAgB2shACABIAdqIQYgDCADOgAAIAUhByALIAYgACAKKAIMEQEARQ0BCwtBASENCyANC/kDAQJ/IAAgAWohAgJAAkAgACgCBCIDQQFxDQAgA0ECcUUNASAAKAIAIgMgAWohASAAIANrIgBB+K/BACgCAEYEQCACKAIEQQNxQQNHDQFB8K/BACABNgIAIAIgAigCBEF+cTYCBCAAIAFBAXI2AgQgAiABNgIADAILIAAgAxAZCwJAAkACQCACKAIEIgNBAnFFBEAgAkH8r8EAKAIARg0CIAJB+K/BACgCAEYNAyACIANBeHEiAhAZIAAgASACaiIBQQFyNgIEIAAgAWogATYCACAAQfivwQAoAgBHDQFB8K/BACABNgIADwsgAiADQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgALIAFBgAJPBEAgACABECAPCyABQfgBcUHgrcEAaiECAn9B6K/BACgCACIDQQEgAUEDdnQiAXFFBEBB6K/BACABIANyNgIAIAIMAQsgAigCCAshASACIAA2AgggASAANgIMIAAgAjYCDCAAIAE2AggPC0H8r8EAIAA2AgBB9K/BAEH0r8EAKAIAIAFqIgE2AgAgACABQQFyNgIEIABB+K/BACgCAEcNAUHwr8EAQQA2AgBB+K/BAEEANgIADwtB+K/BACAANgIAQfCvwQBB8K/BACgCACABaiIBNgIAIAAgAUEBcjYCBCAAIAFqIAE2AgALC7kDAQV/AkAgAEKAgICAEFQEQCABIQIMAQsgAUEIayICIAAgAEKAwtcvgCIAQoC+qNAPfnynIgNBkM4AbiIEQZDOAHAiBUHkAG4iBkEBdEGA9sAAai8AADsAACABQQRrIAMgBEGQzgBsayIDQf//A3FB5ABuIgRBAXRBgPbAAGovAAA7AAAgAUEGayAFIAZB5ABsa0H//wNxQQF0QYD2wABqLwAAOwAAIAFBAmsgAyAEQeQAbGtB//8DcUEBdEGA9sAAai8AADsAAAsCQCAApyIBQZDOAEkEQCABIQMMAQsgAkEEayECA0AgAiABQZDOAG4iA0HwsX9sIAFqIgRB5ABuIgVBAXRBgPbAAGovAAA7AAAgAkECaiAEIAVB5ABsa0EBdEGA9sAAai8AADsAACACQQRrIQIgAUH/wdcvSyADIQENAAsgAkEEaiECCwJAIANB4wBNBEAgAyEBDAELIAJBAmsiAiADIANB//8DcUHkAG4iAUHkAGxrQf//A3FBAXRBgPbAAGovAAA7AAALIAFBCU0EQCACQQFrIAFBMHI6AAAPCyACQQJrIAFBAXRBgPbAAGovAAA7AAALtAMBBn8jAEEgayIDJABBmazBAC0AABoCQEHAAEEIEG4iAgRAIAEgAhAhIANBEGogAhARAn8gAygCEEUEQCACIQZBAAwBCyADKAIYIQUgAygCFCEGIAIoAjAiBARAIAIoAjQgBEEBEHkLIAIoAiAiBARAIAIoAiQgBEECdEEEEHkLIAJBwABBCBB5QQELIQQgAyAFNgIIIAMgBjYCBCADIAQ2AgAgAyABNgIMAkAgAC0APUEBaw4DAAIAAgsgBEUEQCADQQRqEAYLIANBDGoQBSADKAIMIQEMAQtBCEHAABCDAQALIANBGGoiBCADQQhqKAIANgIAIAMgAykCADcDECAAQRBqIQYCQCAAKAIQIgVBAkYNACAAKAIcIgIoAjAiBwRAIAIoAjQgB0EBEHkLIAIoAiAiBwRAIAIoAiQgB0ECdEEEEHkLIAJBwABBCBB5IAUNACAAKAIUIgIoAjAiBQRAIAIoAjQgBUEBEHkLIAIoAiAiBQRAIAIoAiQgBUECdEEEEHkLIAJBwABBCBB5CyAGIAMpAxA3AgAgACABNgIcIAZBCGogBCgCADYCACADQSBqJAAL5wIBBX8CQEHN/3tBECAAIABBEE0bIgBrIAFNDQAgAEEQIAFBC2pBeHEgAUELSRsiBGpBDGoQASICRQ0AIAJBCGshAQJAIABBAWsiAyACcUUEQCABIQAMAQsgAkEEayIFKAIAIgZBeHEgAiADakEAIABrcUEIayICIABBACACIAFrQRBNG2oiACABayICayEDIAZBA3EEQCAAIAMgACgCBEEBcXJBAnI2AgQgACADaiIDIAMoAgRBAXI2AgQgBSACIAUoAgBBAXFyQQJyNgIAIAEgAmoiAyADKAIEQQFyNgIEIAEgAhAUDAELIAEoAgAhASAAIAM2AgQgACABIAJqNgIACwJAIAAoAgQiAUEDcUUNACABQXhxIgIgBEEQak0NACAAIAQgAUEBcXJBAnI2AgQgACAEaiIBIAIgBGsiBEEDcjYCBCAAIAJqIgIgAigCBEEBcjYCBCABIAQQFAsgAEEIaiEDCyADC88CAQd/QQEhCQJAAkAgAkUNACABIAJBAXRqIQogAEGA/gNxQQh2IQsgAEH/AXEhDQNAIAFBAmohDCAHIAEtAAEiAmohCCALIAEtAAAiAUcEQCABIAtLDQIgCCEHIAwiASAKRg0CDAELAkACQCAHIAhNBEAgBCAISQ0BIAMgB2ohAQNAIAJFDQMgAkEBayECIAEtAAAgAUEBaiEBIA1HDQALQQAhCQwFCyAHIAhB8JfBABBBAAsgCCAEQfCXwQAQQAALIAghByAMIgEgCkcNAAsLIAZFDQAgBSAGaiEDIABB//8DcSEBA0AgBUEBaiEAAkAgBSwAACICQQBOBEAgACEFDAELIAAgA0cEQCAFLQABIAJB/wBxQQh0ciECIAVBAmohBQwBC0Hgl8EAEHsACyABIAJrIgFBAEgNASAJQQFzIQkgAyAFRw0ACwsgCUEBcQvxAgEEfyAAKAIMIQICQAJAIAFBgAJPBEAgACgCGCEDAkACQCAAIAJGBEAgAEEUQRAgACgCFCICG2ooAgAiAQ0BQQAhAgwCCyAAKAIIIgEgAjYCDCACIAE2AggMAQsgAEEUaiAAQRBqIAIbIQQDQCAEIQUgASICQRRqIAJBEGogAigCFCIBGyEEIAJBFEEQIAEbaigCACIBDQALIAVBADYCAAsgA0UNAiAAIAAoAhxBAnRB0KzBAGoiASgCAEcEQCADQRBBFCADKAIQIABGG2ogAjYCACACRQ0DDAILIAEgAjYCACACDQFB7K/BAEHsr8EAKAIAQX4gACgCHHdxNgIADAILIAAoAggiACACRwRAIAAgAjYCDCACIAA2AggPC0Hor8EAQeivwQAoAgBBfiABQQN2d3E2AgAPCyACIAM2AhggACgCECIBBEAgAiABNgIQIAEgAjYCGAsgACgCFCIARQ0AIAIgADYCFCAAIAI2AhgLC4YDAgV/AX4jAEFAaiIFJABBASEHAkAgAC0ABA0AIAAtAAUhCSAAKAIAIgYoAhwiCEEEcUUEQCAGKAIUQfOPwQBB8I/BACAJQQFxIgkbQQJBAyAJGyAGKAIYKAIMEQEADQEgBigCFCABIAIgBigCGCgCDBEBAA0BIAYoAhRBwI/BAEECIAYoAhgoAgwRAQANASADIAYgBCgCDBEAACEHDAELIAlBAXFFBEAgBigCFEH1j8EAQQMgBigCGCgCDBEBAA0BIAYoAhwhCAsgBUEBOgAbIAUgBikCFDcCDCAFQdSPwQA2AjQgBSAFQRtqNgIUIAUgBikCCDcCJCAGKQIAIQogBSAINgI4IAUgBigCEDYCLCAFIAYtACA6ADwgBSAKNwIcIAUgBUEMaiIINgIwIAggASACEBMNACAIQcCPwQBBAhATDQAgAyAFQRxqIAQoAgwRAAANACAFKAIwQfiPwQBBAiAFKAI0KAIMEQEAIQcLIABBAToABSAAIAc6AAQgBUFAayQAIAALtgIBB38CQCACQRBJBEAgACEDDAELIABBACAAa0EDcSIEaiEFIAQEQCAAIQMgASEGA0AgAyAGLQAAOgAAIAZBAWohBiADQQFqIgMgBUkNAAsLIAUgAiAEayIIQXxxIgdqIQMCQCABIARqIgRBA3EEQCAHQQBMDQEgBEEDdCICQRhxIQkgBEF8cSIGQQRqIQFBACACa0EYcSECIAYoAgAhBgNAIAUgBiAJdiABKAIAIgYgAnRyNgIAIAFBBGohASAFQQRqIgUgA0kNAAsMAQsgB0EATA0AIAQhAQNAIAUgASgCADYCACABQQRqIQEgBUEEaiIFIANJDQALCyAIQQNxIQIgBCAHaiEBCyACBEAgAiADaiECA0AgAyABLQAAOgAAIAFBAWohASADQQFqIgMgAkkNAAsLIAALvgIBA38jAEGAAWsiBCQAAn8CQAJAIAEoAhwiAkEQcUUEQCACQSBxDQEgADUCAEEBIAEQHQwDCyAAKAIAIQBBACECA0AgAiAEakH/AGogAEEPcSIDQTByIANB1wBqIANBCkkbOgAAIAJBAWshAiAAQRBJIABBBHYhAEUNAAsMAQsgACgCACEAQQAhAgNAIAIgBGpB/wBqIABBD3EiA0EwciADQTdqIANBCkkbOgAAIAJBAWshAiAAQRBJIABBBHYhAEUNAAsgAkGAAWoiAEGBAU8EQCAAQYABQZSQwQAQPgALIAFBAUGkkMEAQQIgAiAEakGAAWpBACACaxANDAELIAJBgAFqIgBBgQFPBEAgAEGAAUGUkMEAED4ACyABQQFBpJDBAEECIAIgBGpBgAFqQQAgAmsQDQsgBEGAAWokAAvEAgIFfwF+IwBBMGsiBSQAQSchAwJAIABCkM4AVARAIAAhCAwBCwNAIAVBCWogA2oiBEEEayAAIABCkM4AgCIIQpDOAH59pyIGQf//A3FB5ABuIgdBAXRBppDBAGovAAA7AAAgBEECayAGIAdB5ABsa0H//wNxQQF0QaaQwQBqLwAAOwAAIANBBGshAyAAQv/B1y9WIAghAA0ACwsCQCAIQuMAWARAIAinIQQMAQsgA0ECayIDIAVBCWpqIAinIgQgBEH//wNxQeQAbiIEQeQAbGtB//8DcUEBdEGmkMEAai8AADsAAAsCQCAEQQpPBEAgA0ECayIDIAVBCWpqIARBAXRBppDBAGovAAA7AAAMAQsgA0EBayIDIAVBCWpqIARBMHI6AAALIAIgAUEBQQAgBUEJaiADakEnIANrEA0gBUEwaiQAC78CAQJ/IwBBEGsiAiQAAkACfwJAIAFBgAFPBEAgAkEANgIMIAFBgBBJDQEgAUGAgARJBEAgAiABQT9xQYABcjoADiACIAFBDHZB4AFyOgAMIAIgAUEGdkE/cUGAAXI6AA1BAwwDCyACIAFBP3FBgAFyOgAPIAIgAUESdkHwAXI6AAwgAiABQQZ2QT9xQYABcjoADiACIAFBDHZBP3FBgAFyOgANQQQMAgsgACgCCCIDIAAoAgBGBEAgABAtCyAAKAIEIANqIAE6AAAgACADQQFqNgIIDAILIAIgAUE/cUGAAXI6AA0gAiABQQZ2QcABcjoADEECCyEBIAEgACgCACAAKAIIIgNrSwRAIAAgAyABECwgACgCCCEDCyAAKAIEIANqIAJBDGogARAbGiAAIAEgA2o2AggLIAJBEGokAEEAC78CAQJ/IwBBEGsiAiQAAkACfwJAIAFBgAFPBEAgAkEANgIMIAFBgBBJDQEgAUGAgARJBEAgAiABQT9xQYABcjoADiACIAFBDHZB4AFyOgAMIAIgAUEGdkE/cUGAAXI6AA1BAwwDCyACIAFBP3FBgAFyOgAPIAIgAUESdkHwAXI6AAwgAiABQQZ2QT9xQYABcjoADiACIAFBDHZBP3FBgAFyOgANQQQMAgsgACgCCCIDIAAoAgBGBEAgABAtCyAAIANBAWo2AgggACgCBCADaiABOgAADAILIAIgAUE/cUGAAXI6AA0gAiABQQZ2QcABcjoADEECCyEBIAEgACgCACAAKAIIIgNrSwRAIAAgAyABECwgACgCCCEDCyAAKAIEIANqIAJBDGogARAbGiAAIAEgA2o2AggLIAJBEGokAEEAC8QCAQR/IABCADcCECAAAn9BACABQYACSQ0AGkEfIAFB////B0sNABogAUEGIAFBCHZnIgNrdkEBcSADQQF0a0E+agsiAjYCHCACQQJ0QdCswQBqIQRBASACdCIDQeyvwQAoAgBxRQRAIAQgADYCACAAIAQ2AhggACAANgIMIAAgADYCCEHsr8EAQeyvwQAoAgAgA3I2AgAPCwJAAkAgASAEKAIAIgMoAgRBeHFGBEAgAyECDAELIAFBGSACQQF2a0EAIAJBH0cbdCEFA0AgAyAFQR12QQRxakEQaiIEKAIAIgJFDQIgBUEBdCEFIAIhAyACKAIEQXhxIAFHDQALCyACKAIIIgEgADYCDCACIAA2AgggAEEANgIYIAAgAjYCDCAAIAE2AggPCyAEIAA2AgAgACADNgIYIAAgADYCDCAAIAA2AggLpgICB38EfkEBIQMgACgCAEEBRwR+QgAFIAApAxghCSAAKQMQIQogACkDCCELQgELIQwgACgCNCEFAkACQCAAKAI4IgQEQCAEQQBIDQFBmazBAC0AABpBASECIARBARBuIgNFDQELIAMgBSAEEBshByAAKAIkIQgCQCAAKAIoIgNFBEBBBCEFQQAhAgwBCyADQQJ0IQIgA0H/////AUsEQAwDC0GZrMEALQAAGkEEIQYgAkEEEG4iBUUNAgsgBSAIIAIQGyECIAEgBDYCOCABIAc2AjQgASAENgIwIAEgAzYCKCABIAI2AiQgASADNgIgIAEgCTcDGCABIAo3AxAgASALNwMIIAEgDDcDACABIAAoAiw2AiwPCyACIAQQaQALIAYgAhBpAAvRAgEBfyMAQRBrIgIkAAJ/AkACQAJAAkACQAJAAkAgACgCACgCACIAKAIAQQFrDgYBAgMEBQYACyACIABBBGo2AgwgAUG4gcAAQQIgAkEMakGogcAAECsMBgsgAiAAQQRqNgIMIAFB3IHAAEEEQeCBwABBAyAAQRBqQbyBwABB44HAAEEDIAJBDGpBzIHAABAxDAULIAIgAEEQajYCDCABQYiCwABBDkHggcAAQQMgAEEYakG8gcAAQZaCwABBDCAAQQhqQaKCwABBAyACQQxqEC4MBAsgAUGlgsAAQQQQawwDCyACIABBBGo2AgwgAUG8gsAAQQkgAkEMakGsgsAAECsMAgsgAiAAQShqNgIMIAFB2ILAAEELQeCBwABBAyAAQQhqQbyBwABB44HAAEEDIAJBDGpByILAABAxDAELIAFB44LAAEEPEGsLIAJBEGokAAuOCQEEfyMAQfAAayIDJAAgACgCACEAIANBADYCRCADQoCAgIAQNwI8IANBAzoAaCADQSA2AlggA0EANgJkIANBzJjAADYCYCADQQA2AlAgA0EANgJIIAMgA0E8ajYCXAJ/IANByABqIQICQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIAQQFrDhgBAgMEBQYHCAkKCwwNDg8QERITFBUWFxgACyACIAAoAgQgACgCCBBrDBgLAn8jAEFAaiIEJAACQAJAAkACQAJAAkAgAEEEaiIFLQAAQQFrDgMBAgMACyAEIAUoAgQ2AgRBmazBAC0AABpBFEEBEG4iBUUNBCAFQRBqQeqIwQAoAAA2AAAgBUEIakHiiMEAKQAANwAAIAVB2ojBACkAADcAACAEQRQ2AhAgBCAFNgIMIARBFDYCCCAEQQM2AiwgBEH4gsEANgIoIARCAjcCNCAEIARBBGqtQoCAgIDgBIQ3AyAgBCAEQQhqrUKAgICA8ASENwMYIAQgBEEYajYCMCACKAIUIAIoAhggBEEoahASIQIgBCgCCCIFRQ0DIAQoAgwgBUEBEHkMAwsgBS0AASEFIARBATYCLCAEQYD8wAA2AiggBEIBNwI0IAQgBEEYaq1CgICAgIAFhDcDCCAEIAVBAnQiBUHwiMEAaigCADYCHCAEIAVBlIrBAGooAgA2AhggBCAEQQhqNgIwIAIoAhQgAigCGCAEQShqEBIhAgwCCyAFKAIEIgUoAgAgBSgCBCACEIUBIQIMAQsgBSgCBCIFKAIAIAIgBSgCBCgCEBEAACECCyAEQUBrJAAgAgwBC0EBQRQQaQALDBcLIAJBmJTAAEEYEGsMFgsgAkGwlMAAQRsQawwVCyACQcuUwABBGhBrDBQLIAJB5ZTAAEEZEGsMEwsgAkH+lMAAQQwQawwSCyACQYqVwABBExBrDBELIAJBnZXAAEETEGsMEAsgAkGwlcAAQQ4QawwPCyACQb6VwABBDhBrDA4LIAJBzJXAAEEMEGsMDQsgAkHYlcAAQQ4QawwMCyACQeaVwABBDhBrDAsLIAJB9JXAAEETEGsMCgsgAkGHlsAAQRoQawwJCyACQaGWwABBPhBrDAgLIAJB35bAAEEUEGsMBwsgAkHzlsAAQTQQawwGCyACQaeXwABBLBBrDAULIAJB05fAAEEkEGsMBAsgAkH3l8AAQQ4QawwDCyACQYWYwABBExBrDAILIAJBmJjAAEEcEGsMAQsgAkG0mMAAQRgQawtFBEAgA0E4aiADQcQAaigCADYCACADIAMpAjw3AzAgA0EENgIEIANBgJnAADYCACADQgM3AgwgAyAAQRBqrUKAgICAoAOENwMoIAMgAEEMaq1CgICAgKADhDcDICADIANBMGqtQoCAgICwA4Q3AxggAyADQRhqNgIIIAEoAhQgASgCGCADEBIgAygCMCIBBEAgAygCNCABQQEQeQsgA0HwAGokAA8LQbCZwABBNyADQe8AakGgmcAAQeiZwAAQPQALpAICA38BfiMAQUBqIgIkACABKAIAQYCAgIB4RgRAIAEoAgwhAyACQSRqIgRBADYCACACQoCAgIAQNwIcIAJBOGogA0EQaikCADcDACACQTBqIANBCGopAgA3AwAgAiADKQIANwMoIAJBHGpBwPrAACACQShqEBIaIAJBGGogBCgCACIDNgIAIAIgAikCHCIFNwMQIAFBCGogAzYCACABIAU3AgALIAEpAgAhBSABQoCAgIAQNwIAIAJBCGoiAyABQQhqIgEoAgA2AgAgAUEANgIAQZmswQAtAAAaIAIgBTcDAEEMQQQQbiIBBEAgASACKQMANwIAIAFBCGogAygCADYCACAAQeSDwQA2AgQgACABNgIAIAJBQGskAA8LQQRBDBCDAQALuwICBH8BfiMAQUBqIgMkACAAKAIAIQUgAAJ/QQEgAC0ACA0AGiAAKAIEIgQoAhwiBkEEcUUEQEEBIAQoAhRB84/BAEH9j8EAIAUbQQJBASAFGyAEKAIYKAIMEQEADQEaIAEgBCACKAIMEQAADAELIAVFBEBBASAEKAIUQf6PwQBBAiAEKAIYKAIMEQEADQEaIAQoAhwhBgsgA0EBOgAbIAMgBCkCFDcCDCADQdSPwQA2AjQgAyADQRtqNgIUIAMgBCkCCDcCJCAEKQIAIQcgAyAGNgI4IAMgBCgCEDYCLCADIAQtACA6ADwgAyAHNwIcIAMgA0EMajYCMEEBIAEgA0EcaiACKAIMEQAADQAaIAMoAjBB+I/BAEECIAMoAjQoAgwRAQALOgAIIAAgBUEBajYCACADQUBrJAAgAAuFAgEGfyMAQTBrIgEkACAAKAIEIQQgACgCCCIFBEAgBCECA0ACQAJAAkACQCACLQAADgUDAwMBAgALAn8gAkEEaigCACIDRQRAQQAhBkEADAELIAEgAzYCJCABQQA2AiAgASADNgIUIAFBADYCECABIAJBCGooAgAiAzYCKCABIAM2AhggAkEMaigCACEGQQELIQMgASAGNgIsIAEgAzYCHCABIAM2AgwgAUEMahAHDAILIAJBBGooAgAiA0UNASACQQhqKAIAIANBARB5DAELIAJBBGoQJgsgAkEYaiECIAVBAWsiBQ0ACwsgACgCACIABEAgBCAAQRhsQQgQeQsgAUEwaiQAC5MCAQF/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQCAAKAIAIgAtAABBAWsOBgECAwQFBgALIAIgAEEEajYCDCABQayGwABBByACQQxqQayCwAAQKwwGCyACIABBBGo2AgwgAUGzhsAAQQsgAkEMakGsgsAAECsMBQsgAUG+hsAAQRIQawwECyACIABBBGo2AgwgAUHghsAAQQsgAkEMakHQhsAAECsMAwsgAiAAQQFqNgIMIAFB/IbAAEEJIAJBDGpB7IbAABArDAILIAIgAEEBajYCDCABQZiHwABBCCACQQxqQYiHwAAQKwwBCyACIABBAWo2AgwgAUGwh8AAQQogAkEMakGgh8AAECsLIAJBEGokAAvsAQEEfyMAQTBrIgEkACAAKAIIIgMEQCAAKAIEIQADQAJAAkACQAJAIAAtAAAOBQMDAwECAAsCfyAAQQRqKAIAIgJFBEBBACEEQQAMAQsgASACNgIkIAFBADYCICABIAI2AhQgAUEANgIQIAEgAEEIaigCACICNgIoIAEgAjYCGCAAQQxqKAIAIQRBAQshAiABIAQ2AiwgASACNgIcIAEgAjYCDCABQQxqEAcMAgsgAEEEaigCACICRQ0BIABBCGooAgAgAkEBEHkMAQsgAEEEahAmCyAAQRhqIQAgA0EBayIDDQALCyABQTBqJAALxgEBBH8jAEEgayIDJAAgASABIAJqIgJLBEBBAEEAEGkAC0EEIQFBBCAAKAIAIgVBAXQiBCACIAIgBEkbIgIgAkEETRsiBEECdCEGIAJBgICAgAJJQQJ0IQICQCAFRQRAQQAhAQwBCyADIAVBAnQ2AhwgAyAAKAIENgIUCyADIAE2AhggA0EIaiACIAYgA0EUahAyIAMoAghBAUYEQCADKAIMIAMoAhAQaQALIAMoAgwhASAAIAQ2AgAgACABNgIEIANBIGokAAv6AQECfyMAQSBrIgUkAEHMrMEAQcyswQAoAgAiBkEBajYCAAJAAkAgBkEASA0AQZiwwQAtAAANAUGYsMEAQQE6AABBlLDBAEGUsMEAKAIAQQFqNgIAQcCswQAoAgAiBkEASA0AQcCswQAgBkEBajYCAEHArMEAQcSswQAoAgAEfyAFQQhqIAAgASgCFBECACAFIAQ6AB0gBSADOgAcIAUgAjYCGCAFIAUpAwg3AhBBxKzBACgCACAFQRBqQciswQAoAgAoAhQRAgBBwKzBACgCAEEBawUgBgs2AgBBmLDBAEEAOgAAIANFDQAACwALIAUgACABKAIYEQIAAAvWAQEBfyMAQRBrIgUkACAFIAAoAhQgASACIAAoAhgoAgwRAQA6AAwgBSAANgIIIAUgAkU6AA0gBUEANgIEIAVBBGogAyAEECUoAgAiAUEARyAFLQAMIgJyIQACQCABRSACQQFxcg0AAkAgAUEBRwRAIAUoAgghAgwBCyAFKAIIIQIgBS0ADUUNACACLQAcQQRxDQBBASEAIAIoAhRBgJDBAEEBIAIoAhgoAgwRAQANAQsgAigCFEHAjsEAQQEgAigCGCgCDBEBACEACyAFQRBqJAAgAEEBcQutAQECfyMAQSBrIgMkACABIAEgAmoiAksEQEEAQQAQaQALQQggACgCACIBQQF0IgQgAiACIARJGyICIAJBCE0bIgJBf3NBH3YhBCADIAEEfyADIAE2AhwgAyAAKAIENgIUQQEFQQALNgIYIANBCGogBCACIANBFGoQMiADKAIIQQFGBEAgAygCDCADKAIQEGkACyADKAIMIQEgACACNgIAIAAgATYCBCADQSBqJAALrQEBBH8jAEEgayIBJAAgACgCACICQX9GBEBBAEEAEGkAC0EIIAJBAXQiAyACQQFqIgQgAyAESxsiAyADQQhNGyIDQX9zQR92IQQgASACBH8gASACNgIcIAEgACgCBDYCFEEBBUEACzYCGCABQQhqIAQgAyABQRRqEDIgASgCCEEBRgRAIAEoAgwgASgCEBBpAAsgASgCDCECIAAgAzYCACAAIAI2AgQgAUEgaiQAC9UBAQF/IwBBEGsiDSQAIAAoAhQgASACIAAoAhgoAgwRAQAhASANQQA6AA0gDSABOgAMIA0gADYCCCANQQhqIAMgBCAFIAYQGiAHIAggCUHogcAAEBogCiALIAxB+IHAABAaIQEgDS0ADSICIA0tAAwiA3IhAAJAIANBAXEgAkEBR3INACABKAIAIgAtABxBBHFFBEAgACgCFEH7j8EAQQIgACgCGCgCDBEBACEADAELIAAoAhRB+o/BAEEBIAAoAhgoAgwRAQAhAAsgDUEQaiQAIABBAXELqwEBA38CQCACQRBJBEAgACEDDAELIABBACAAa0EDcSIEaiEFIAQEQCAAIQMDQCADIAE6AAAgA0EBaiIDIAVJDQALCyAFIAIgBGsiAkF8cSIEaiEDIARBAEoEQCABQf8BcUGBgoQIbCEEA0AgBSAENgIAIAVBBGoiBSADSQ0ACwsgAkEDcSECCyACBEAgAiADaiECA0AgAyABOgAAIANBAWoiAyACSQ0ACwsgAAu8AQIDfwF+IwBBMGsiAiQAIAEoAgBBgICAgHhGBEAgASgCDCEDIAJBFGoiBEEANgIAIAJCgICAgBA3AgwgAkEoaiADQRBqKQIANwMAIAJBIGogA0EIaikCADcDACACIAMpAgA3AxggAkEMakHA+sAAIAJBGGoQEhogAkEIaiAEKAIAIgM2AgAgAiACKQIMIgU3AwAgAUEIaiADNgIAIAEgBTcCAAsgAEHkg8EANgIEIAAgATYCACACQTBqJAALxQEBAX8jAEEQayILJAAgACgCFCABIAIgACgCGCgCDBEBACEBIAtBADoADSALIAE6AAwgCyAANgIIIAtBCGogAyAEIAUgBhAaIAcgCCAJIAoQGiEBIAstAA0iAiALLQAMIgNyIQACQCADQQFxIAJBAUdyDQAgASgCACIALQAcQQRxRQRAIAAoAhRB+4/BAEECIAAoAhgoAgwRAQAhAAwBCyAAKAIUQfqPwQBBASAAKAIYKAIMEQEAIQALIAtBEGokACAAQQFxC5kBAQF/AkACQCABBEAgAkEASA0BAn8gAygCBARAAkAgAygCCCIERQRADAELIAMoAgAgBCABIAIQagwCCwsgASACRQ0AGkGZrMEALQAAGiACIAEQbgsiAwRAIAAgAjYCCCAAIAM2AgQgAEEANgIADwsgACACNgIIIAAgATYCBAwCCyAAQQA2AgQMAQsgAEEANgIECyAAQQE2AgALvgEBAX8jAEEQayIFJAAgACgCFCABIAIgACgCGCgCDBEBACEBIAVBADoADSAFIAE6AAwgBSAANgIIIAVBCGpBwYXAAEEEIAMgBBAaIQEgBS0ADSICIAUtAAwiA3IhAAJAIANBAXEgAkEBR3INACABKAIAIgAtABxBBHFFBEAgACgCFEH7j8EAQQIgACgCGCgCDBEBACEADAELIAAoAhRB+o/BAEEBIAAoAhgoAgwRAQAhAAsgBUEQaiQAIABBAXELsAEBBH8CQAJAAkACQCAAKAIAIgAoAgAOBgADAwMBAgMLIAAtAARBA0cNAiAAKAIIIgEoAgAhAyABQQRqKAIAIgQoAgAiAgRAIAMgAhEDAAsgBCgCBCICBEAgAyACIAQoAggQeQsgAUEMQQQQeQwCCyAAKAIEIgFFDQEgACgCCCABQQEQeQwBCyAALQA4QQFLDQAgACgCPCIBRQ0AIAAoAkAgAUEBEHkLIABByABBCBB5C5YBAgJ/AX4jAEGAAWsiAyQAIAApAwAhBEEAIQADQCAAIANqQf8AaiAEp0EPcSICQTByIAJB1wBqIAJBCkkbOgAAIABBAWshACAEQhBUIARCBIghBEUNAAsgAEGAAWoiAkGBAU8EQCACQYABQZSQwQAQPgALIAFBAUGkkMEAQQIgACADakGAAWpBACAAaxANIANBgAFqJAALlQECAn8BfiMAQYABayIDJAAgACkDACEEQQAhAANAIAAgA2pB/wBqIASnQQ9xIgJBMHIgAkE3aiACQQpJGzoAACAAQQFrIQAgBEIQVCAEQgSIIQRFDQALIABBgAFqIgJBgQFPBEAgAkGAAUGUkMEAED4ACyABQQFBpJDBAEECIAAgA2pBgAFqQQAgAGsQDSADQYABaiQAC48BAQN/IwBBgAFrIgQkACAAKAIAIQADQCACIARqQf8AaiAAQQ9xIgNBMHIgA0HXAGogA0EKSRs6AAAgAkEBayECIABBEEkgAEEEdiEARQ0ACyACQYABaiIAQYEBTwRAIABBgAFBlJDBABA+AAsgAUEBQaSQwQBBAiACIARqQYABakEAIAJrEA0gBEGAAWokAAuOAQEDfyMAQYABayIEJAAgACgCACEAA0AgAiAEakH/AGogAEEPcSIDQTByIANBN2ogA0EKSRs6AAAgAkEBayECIABBEEkgAEEEdiEARQ0ACyACQYABaiIAQYEBTwRAIABBgAFBlJDBABA+AAsgAUEBQaSQwQBBAiACIARqQYABakEAIAJrEA0gBEGAAWokAAuSAQEEfyMAQRBrIgIkAEEBIQQCQCABKAIUIgNBJyABKAIYIgUoAhAiAREAAA0AIAJBBGogACgCAEGBAhAOAkAgAi0ABEGAAUYEQCADIAIoAgggAREAAEUNAQwCCyADIAItAA4iACACQQRqaiACLQAPIABrIAUoAgwRAQANAQsgA0EnIAERAAAhBAsgAkEQaiQAIAQLhwEBBH8CQAJAAkAgACgCACIAKAIADgIAAQILIAAoAggiAUUNASAAKAIEIAFBARB5DAELIAAtAARBA0cNACAAKAIIIgEoAgAhAyABQQRqKAIAIgQoAgAiAgRAIAMgAhEDAAsgBCgCBCICBEAgAyACIAQoAggQeQsgAUEMQQQQeQsgAEEUQQQQeQt2AQF/IwBBIGsiAiQAAn8gACgCAEGAgICAeEcEQCABIAAoAgQgACgCCBBrDAELIAJBGGogACgCDCIAQRBqKQIANwMAIAJBEGogAEEIaikCADcDACACIAApAgA3AwggASgCFCABKAIYIAJBCGoQEgsgAkEgaiQAC2IBBH4gACACQv////8PgyIDIAFC/////w+DIgR+IgUgBCACQiCIIgJ+IgQgAyABQiCIIgZ+fCIBQiCGfCIDNwMAIAAgAyAFVK0gAiAGfiABIARUrUIghiABQiCIhHx8NwMIC3sBAX8jAEFAaiIFJAAgBSABNgIMIAUgADYCCCAFIAM2AhQgBSACNgIQIAVBAjYCHCAFQcSPwQA2AhggBUICNwIkIAUgBUEQaq1CgICAgOAHhDcDOCAFIAVBCGqtQoCAgIDwB4Q3AzAgBSAFQTBqNgIgIAVBGGogBBBKAAtpAgF/AX4jAEEwayIDJAAgAyAANgIAIAMgATYCBCADQQI2AgwgA0HYksEANgIIIANCAjcCFCADQoCAgICgAyIEIANBBGqthDcDKCADIAQgA62ENwMgIAMgA0EgajYCECADQQhqIAIQSgALaQIBfwF+IwBBMGsiAyQAIAMgATYCBCADIAA2AgAgA0ECNgIMIANBsI/BADYCCCADQgI3AhQgA0KAgICAoAMiBCADrYQ3AyggAyAEIANBBGqthDcDICADIANBIGo2AhAgA0EIaiACEEoAC2kCAX8BfiMAQTBrIgMkACADIAA2AgAgAyABNgIEIANBAjYCDCADQfiSwQA2AgggA0ICNwIUIANCgICAgKADIgQgA0EEaq2ENwMoIAMgBCADrYQ3AyAgAyADQSBqNgIQIANBCGogAhBKAAtpAgF/AX4jAEEwayIDJAAgAyAANgIAIAMgATYCBCADQQI2AgwgA0Gsk8EANgIIIANCAjcCFCADQoCAgICgAyIEIANBBGqthDcDKCADIAQgA62ENwMgIAMgA0EgajYCECADQQhqIAIQSgALbQEBfyAALQAEIQEgAC0ABQRAIAACf0EBIAFBAXENABogACgCACIBLQAcQQRxRQRAIAEoAhRB+4/BAEECIAEoAhgoAgwRAQAMAQsgASgCFEH6j8EAQQEgASgCGCgCDBEBAAsiAToABAsgAUEBcQtmACMAQTBrIgAkAEGYrMEALQAABEAgAEECNgIMIABBtIPBADYCCCAAQgE3AhQgACABNgIsIAAgAEEsaq1CgICAgKADhDcDICAAIABBIGo2AhAgAEEIakHUg8EAEEoACyAAQTBqJAALVgEBfgJAIANBwABxRQRAIANFDQEgAkEAIANrQT9xrYYgASADQT9xrSIEiIQhASACIASIIQIMAQsgAiADQT9xrYghAUIAIQILIAAgATcDACAAIAI3AwgLbgACQAJAAkACQAJAAkAgACgCAC0AAEEBaw4FAQIDBAUACyABQeCewABBBBBrDwsgAUHknsAAQQcQaw8LIAFB657AAEEGEGsPCyABQfGewABBBhBrDwsgAUH3nsAAQQUQaw8LIAFB/J7AAEEGEGsLVAEBfyMAQRBrIgIkACACIAAoAgAiAEEQajYCDCABQZyEwABBCEGkhMAAQQQgAEHogcAAQaiEwABBBCAAQQhqQayEwABBBiACQQxqEC4gAkEQaiQAC1EBAX8jAEEQayICJAACfyAAKAIAIgAtAABFBEAgAUHNhMAAQQQQawwBCyACIABBAWo2AgwgAUHkhMAAQQQgAkEMakHUhMAAECsLIAJBEGokAAtMAQF/IwBBEGsiAiQAAn8gACgCAEUEQCABQc2EwABBBBBrDAELIAIgAEEIajYCDCABQeSEwABBBCACQQxqQeiEwAAQKwsgAkEQaiQAC0wBAX8jAEEQayICJAACfyAAKAIARQRAIAFBzYTAAEEEEGsMAQsgAiAAQQhqNgIMIAFB5ITAAEEEIAJBDGpB+IHAABArCyACQRBqJAALtAIBA38jAEEgayICJAAgAkEQaiIDIABBEGopAgA3AwAgAkEIaiIEIABBCGopAgA3AwAgAkEBOwEcIAIgATYCGCACIAApAgA3AwAjAEEgayIAJAAgAigCGCEBIABBEGogAykCADcDACAAQQhqIAQpAgA3AwAgACAC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AAAIAAAARGVzZXJpYWxpemVfX05vbmV4aGF1c3RpdmUAAAAAAAAEAAAABAAAAAkAAAAAAAAABAAAAAQAAAAKAAAAVXRmOEVycm9yZmllbGR2YWxpZF91cF90by9ydXN0Yy9jYTVkMjVlMmM0MWY1YTZiNGNlNjVjNjgxYmYyZjk0YzdlYWQxZjE0L2xpYnJhcnkvYWxsb2Mvc3JjL2NvbGxlY3Rpb25zL2J0cmVlL25hdmlnYXRlLnJzrQEQAF8AAADGAAAAJwAAAFBvc2l0aW9uYnl0ZWxpbmVyZWNvcmQAAAAAAAAEAAAABAAAAAsAAABlcnJvcl9sZW5Ob25lAAAAAAAAAAQAAAAEAAAADAAAAFNvbWUAAAAABAAAAAQAAAANAAAARW1wdHlJbnZhbGlkRGlnaXRQb3NPdmVyZmxvd05lZ092ZXJmbG93WmVybwAAAAAABAAAAAQAAAAOAAAAUGFyc2VJbnRFcnJvcmtpbmRQYXJzZUJvb2xFcnJvckludmFsaWQAAAAAAAAEAAAABAAAAA8AAABQYXJzZUZsb2F0RXJyb3IAAAAAABAAAAAIAAAAEAAAAAAAAAAEAAAABAAAABEAAABEZXNlcmlhbGl6ZUVycm9yTWVzc2FnZVVuc3VwcG9ydGVkVW5leHBlY3RlZEVuZE9mUm93AAAAAAQAAAAEAAAAEgAAAEludmFsaWRVdGY4AAAAAAAEAAAABAAAABMAAABQYXJzZUJvb2wAAAAAAAAABAAAAAQAAAAUAAAAUGFyc2VJbnQAAAAABAAAAAQAAAAVAAAAUGFyc2VGbG9hdAAAAAAQAF4AAAA0AwAAFwAAAAAAEABeAAAANwMAACIAAAAWAAAABAAAAAQAAAAXAAAAY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZXNyYy9saWIucnMAAAAXBBAACgAAABkAAAA0AAAAFwQQAAoAAAAUAAAAIQAAABgAAAAEAAAABAAAABkAAAAXBBAACgAAABEAAAAdAAAAFwQQAAoAAAAMAAAAIQAAAAUAAAAMAAAACwAAAAsAAAAEAAAAeAIQAH0CEACJAhAAlAIQAJ8CEAAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9jc3YtMS4zLjAvc3JjL2J5dGVfcmVjb3JkLnJzAACcBBAAXgAAABMCAAA6AAAAnAQQAF4AAAC1AgAAEwAAAJwEEABeAAAA/wEAACQAAACcBBAAXgAAAPQBAAAXAAAAnAQQAF4AAAAjAgAAGQAAAJwEEABeAAAAyQIAADYAAAAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9jc3YtMS4zLjAvc3JjL3JlYWRlci5ycwAAAFwFEABZAAAAWwcAADIAAABhc3NlcnRpb24gZmFpbGVkOiBsaW5lID4gMAAAnAQQAF4AAAB4AgAACQAAAFwFEABZAAAAaQYAAB4AAABcBRAAWQAAAGgGAAAgAAAAXAUQAFkAAAAxBQAAMwAAAJwEEABeAAAANAMAABcAAACcBBAAXgAAADcDAAAiAAAAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc2VyZGVfanNvbi0xLjAuMTE3L3NyYy9zZXIucnMARAYQAF8AAAAuCAAAMwAAAEQGEABfAAAAIQgAAEAAAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlRAYQAF8AAAALBgAAEgAAAGZhbHNlXCJcXFxiXGZcblxyXHQwMDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MjAyMTIyMjMyNDI1MjYyNzI4MjkzMDMxMzIzMzM0MzUzNjM3MzgzOTQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NTA1MTUyNTM1NDU1NTY1NzU4NTk2MDYxNjI2MzY0NjU2NjY3Njg2OTcwNzE3MjczNzQ3NTc2Nzc3ODc5ODA4MTgyODM4NDg1ODY4Nzg4ODk5MDkxOTI5Mzk0OTU5Njk3OTg5OS9ydXN0Yy9jYTVkMjVlMmM0MWY1YTZiNGNlNjVjNjgxYmYyZjk0YzdlYWQxZjE0L2xpYnJhcnkvYWxsb2Mvc3JjL2NvbGxlY3Rpb25zL2J0cmVlL25hdmlnYXRlLnJzAADXBxAAXwAAABYCAAAvAAAAL3J1c3RjL2NhNWQyNWUyYzQxZjVhNmI0Y2U2NWM2ODFiZjJmOTRjN2VhZDFmMTQvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbmF2aWdhdGUucnMASAgQAF8AAABYAgAAMAAAADAxMjM0NTY3ODlhYmNkZWZ1dXV1dXV1dWJ0bnVmcnV1dXV1dXV1dXV1dXV1dXV1dQAAIgBBpJLAAAsBXABByJPAAAvVBUVycm9yL3J1c3RjL2NhNWQyNWUyYzQxZjVhNmI0Y2U2NWM2ODFiZjJmOTRjN2VhZDFmMTQvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzRU9GIHdoaWxlIHBhcnNpbmcgYSBsaXN0RU9GIHdoaWxlIHBhcnNpbmcgYW4gb2JqZWN0RU9GIHdoaWxlIHBhcnNpbmcgYSBzdHJpbmdFT0Ygd2hpbGUgcGFyc2luZyBhIHZhbHVlZXhwZWN0ZWQgYDpgZXhwZWN0ZWQgYCxgIG9yIGBdYGV4cGVjdGVkIGAsYCBvciBgfWBleHBlY3RlZCBpZGVudGV4cGVjdGVkIHZhbHVlZXhwZWN0ZWQgYCJgaW52YWxpZCBlc2NhcGVpbnZhbGlkIG51bWJlcm51bWJlciBvdXQgb2YgcmFuZ2VpbnZhbGlkIHVuaWNvZGUgY29kZSBwb2ludGNvbnRyb2wgY2hhcmFjdGVyIChcdTAwMDAtXHUwMDFGKSBmb3VuZCB3aGlsZSBwYXJzaW5nIGEgc3RyaW5na2V5IG11c3QgYmUgYSBzdHJpbmdpbnZhbGlkIHZhbHVlOiBleHBlY3RlZCBrZXkgdG8gYmUgYSBudW1iZXIgaW4gcXVvdGVzZmxvYXQga2V5IG11c3QgYmUgZmluaXRlIChnb3QgTmFOIG9yICsvLWluZilsb25lIGxlYWRpbmcgc3Vycm9nYXRlIGluIGhleCBlc2NhcGV0cmFpbGluZyBjb21tYXRyYWlsaW5nIGNoYXJhY3RlcnN1bmV4cGVjdGVkIGVuZCBvZiBoZXggZXNjYXBlcmVjdXJzaW9uIGxpbWl0IGV4Y2VlZGVkHAAAAAwAAAAEAAAAHQAAAB4AAAAfAAAARXJyb3IoLCBsaW5lOiAsIGNvbHVtbjogKQAAAGQMEAAGAAAAagwQAAgAAAByDBAACgAAAHwMEAABAEGomcAAC5kJAQAAACAAAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5AM0JEABLAAAABgoAAA4AAAAvcnVzdGMvY2E1ZDI1ZTJjNDFmNWE2YjRjZTY1YzY4MWJmMmY5NGM3ZWFkMWYxNC9saWJyYXJ5L2FsbG9jL3NyYy9jb2xsZWN0aW9ucy9idHJlZS9tYXAvZW50cnkucnP4DBAAYAAAAHEBAAA2AAAAL3J1c3RjL2NhNWQyNWUyYzQxZjVhNmI0Y2U2NWM2ODFiZjJmOTRjN2VhZDFmMTQvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbm9kZS5yc2Fzc2VydGlvbiBmYWlsZWQ6IGVkZ2UuaGVpZ2h0ID09IHNlbGYuaGVpZ2h0IC0gMQBoDRAAWwAAAK8CAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogc3JjLmxlbigpID09IGRzdC5sZW4oKWgNEABbAAAALwcAAAUAAABoDRAAWwAAAK8EAAAjAAAAaA0QAFsAAADvBAAAJAAAAGFzc2VydGlvbiBmYWlsZWQ6IGVkZ2UuaGVpZ2h0ID09IHNlbGYubm9kZS5oZWlnaHQgLSAxAAAAaA0QAFsAAADwAwAACQAAACEAAAAMAAAABAAAACIAAAAjAAAAHwAAAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3NlcmRlX2pzb24tMS4wLjExNy9zcmMvdmFsdWUvaW5kZXgucnNjYW5ub3QgYWNjZXNzIGtleSAgaW4gSlNPTiAAACMPEAASAAAANQ8QAAkAAAC8DhAAZwAAAGYAAAASAAAAbnVsbGJvb2xlYW5udW1iZXJzdHJpbmdhcnJheW9iamVjdC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL2Nzdi0xLjMuMC9zcmMvYnl0ZV9yZWNvcmQucnOCDxAAXgAAALUCAAATAAAAgg8QAF4AAACPAQAAFgAAAIIPEABeAAAA9AEAABcAAACCDxAAXgAAABMCAAA6AAAAgg8QAF4AAADJAgAANgAA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aW9uIHJlc2V0aG9zdCB1bnJlYWNoYWJsZW5ldHdvcmsgdW5yZWFjaGFibGVjb25uZWN0aW9uIGFib3J0ZWRub3QgY29ubmVjdGVkYWRkcmVzcyBpbiB1c2VhZGRyZXNzIG5vdCBhdmFpbGFibGVuZXR3b3JrIGRvd25icm9rZW4gcGlwZWVudGl0eSBhbHJlYWR5IGV4aXN0c29wZXJhdGlvbiB3b3VsZCBibG9ja25vdCBhIGRpcmVjdG9yeWlzIGEgZGlyZWN0b3J5ZGlyZWN0b3J5IG5vdCBlbXB0eXJlYWQtb25seSBmaWxlc3lzdGVtIG9yIHN0b3JhZ2UgbWVkaXVtZmlsZXN5c3RlbSBsb29wIG9yIGluZGlyZWN0aW9uIGxpbWl0IChlLmcuIHN5bWxpbmsgbG9vcClzdGFsZSBuZXR3b3JrIGZpbGUgaGFuZGxlaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJpbnZhbGlkIGRhdGF0aW1lZCBvdXR3cml0ZSB6ZXJvbm8gc3RvcmFnZSBzcGFjZXNlZWsgb24gdW5zZWVrYWJsZSBmaWxlZmlsZXN5c3RlbSBxdW90YSBleGNlZWRlZGZpbGUgdG9vIGxhcmdlcmVzb3VyY2UgYnVzeWV4ZWN1dGFibGUgZmlsZSBidXN5ZGVhZGxvY2tjcm9zcy1kZXZpY2UgbGluayBvciByZW5hbWV0b28gbWFueSBsaW5rc2ludmFsaWQgZmlsZW5hbWVhcmd1bWVudCBsaXN0IHRvbyBsb25nb3BlcmF0aW9uIGludGVycnVwdGVkdW5zdXBwb3J0ZWR1bmV4cGVjdGVkIGVuZCBvZiBmaWxlb3V0IG9mIG1lbW9yeW90aGVyIGVycm9ydW5jYXRlZ29yaXplZCBlcnJvck9zAAAAAAAEAAAABAAAAC4AAABjb2RlAAAAAAEAAAABAAAALwAAAGtpbmQqAAAADAAAAAQAAAAwAAAAbWVzc2FnZUtpbmRFcnJvcgAAAAAIAAAABAAAADEAAAAAAAAABAAAAAQAAAAyAAAAQ3VzdG9tZXJyb3IgKG9zIGVycm9yICkAAQAAAAAAAABrQRAACwAAAHZBEAABAAAAbWVtb3J5IGFsbG9jYXRpb24gb2YgIGJ5dGVzIGZhaWxlZAAAkEEQABUAAAClQRAADQAAAHN0ZC9zcmMvYWxsb2MucnPEQRAAEAAAAGMBAAAJAAAAKgAAAAwAAAAEAAAAMwAAAAAAAAAIAAAABAAAADQAAAAAAAAACAAAAAQAAAA1AAAANgAAADcAAAA4AAAAOQAAABAAAAAEAAAAOgAAADsAAAA8AAAAPQAAAE5vdEZvdW5kUGVybWlzc2lvbkRlbmllZENvbm5lY3Rpb25SZWZ1c2VkQ29ubmVjdGlvblJlc2V0SG9zdFVucmVhY2hhYmxlTmV0d29ya1VucmVhY2hhYmxlQ29ubmVjdGlvbkFib3J0ZWROb3RDb25uZWN0ZWRBZGRySW5Vc2VBZGRyTm90QXZhaWxhYmxlTmV0d29ya0Rvd25Ccm9rZW5QaXBlQWxyZWFkeUV4aXN0c1dvdWxkQmxvY2tOb3RBRGlyZWN0b3J5SXNBRGlyZWN0b3J5RGlyZWN0b3J5Tm90RW1wdHlSZWFkT25seUZpbGVzeXN0ZW1GaWxlc3lzdGVtTG9vcFN0YWxlTmV0d29ya0ZpbGVIYW5kbGVJbnZhbGlkSW5wdXRJbnZhbGlkRGF0YVRpbWVkT3V0V3JpdGVaZXJvU3RvcmFnZUZ1bGxOb3RTZWVrYWJsZUZpbGVzeXN0ZW1RdW90YUV4Y2VlZGVkRmlsZVRvb0xhcmdlUmVzb3VyY2VCdXN5RXhlY3V0YWJsZUZpbGVCdXN5RGVhZGxvY2tDcm9zc2VzRGV2aWNlc1Rvb01hbnlMaW5rc0ludmFsaWRGaWxlbmFtZUFyZ3VtZW50TGlzdFRvb0xvbmdJbnRlcnJ1cHRlZFVuc3VwcG9ydGVkVW5leHBlY3RlZEVvZk91dE9mTWVtb3J5T3RoZXJVbmNhdGVnb3JpemVkb3BlcmF0aW9uIHN1Y2Nlc3NmdWwAABAAAAARAAAAEgAAABAAAAAQAAAAEwAAABIAAAANAAAADgAAABUAAAAMAAAACwAAABUAAAAVAAAADwAAAA4AAAATAAAAJgAAADgAAAAZAAAAFwAAAAwAAAAJAAAACgAAABAAAAAXAAAAGQAAAA4AAAANAAAAFAAAAAgAAAAbAAAADgAAABAAAAAWAAAAFQAAAAsAAAAWAAAADQAAAAsAAAATAAAACD4QABg+EAApPhAAOz4QAEs+EABbPhAAbj4QAIA+EACNPhAAmz4QALA+EAC8PhAAxz4QANw+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";
|
|
2
|
-
//# sourceMappingURL=web_csv_toolbox_wasm_bg.wasm.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web_csv_toolbox_wasm_bg.wasm.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./common/errors.cjs"),e=require("./constants.cjs");function r(r,o){if("string"!=typeof r)throw new TypeError(`${o} must be a string`);switch(!0){case 0===r.length:throw new t.InvalidOptionError(`${o} must not be empty`);case r.length>1:throw new t.InvalidOptionError(`${o} must be a single character`);case r===e.LF:case r===e.CR:throw new t.InvalidOptionError(`${o} must not include CR or LF`)}}exports.assertCommonOptions=function(e){for(const t of["delimiter","quotation"])r(e[t],t);if(e.delimiter===e.quotation)throw new t.InvalidOptionError("delimiter must not be the same as quotation, use different characters")};
|
|
2
|
-
//# sourceMappingURL=assertCommonOptions.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assertCommonOptions.cjs","sources":["../../src/assertCommonOptions.ts"],"sourcesContent":["import { InvalidOptionError } from \"./common/errors.ts\";\nimport type { CommonOptions } from \"./common/types.ts\";\nimport { CR, LF } from \"./constants.ts\";\n\n/**\n * Asserts that the provided value is a string and satisfies certain conditions.\n * @param value - The value to be checked.\n * @param name - The name of the option.\n * @throws {InvalidOptionError} If the value is empty, longer than 1 byte, or includes CR or LF.\n * @throws {TypeError} If the value is not a string.\n */\nfunction assertOptionValue(\n value: string,\n name: string,\n): asserts value is string {\n if (typeof value === \"string\") {\n switch (true) {\n case value.length === 0:\n throw new InvalidOptionError(`${name} must not be empty`);\n case value.length > 1:\n throw new InvalidOptionError(`${name} must be a single character`);\n case value === LF:\n case value === CR:\n throw new InvalidOptionError(`${name} must not include CR or LF`);\n default:\n break;\n }\n } else {\n throw new TypeError(`${name} must be a string`);\n }\n}\n\n/**\n * Asserts that the provided options object contains all the required properties.\n * Throws an error if any required property is missing\n * or if the delimiter and quotation length is not 1 byte character,\n * or if the delimiter is the same as the quotation.\n *\n * @example\n *\n * ```ts\n * assertCommonOptions({\n * quotation: '\"',\n * delimiter: ',',\n * });\n * ```\n *\n * @param options - The options object to be validated.\n * @throws {InvalidOptionError} If any required property is missing or if the delimiter is the same as the quotation.\n * @throws {TypeError} If any required property is not a string.\n */\nexport function assertCommonOptions(\n options: Required<CommonOptions>,\n): asserts options is Required<CommonOptions> {\n for (const name of [\"delimiter\", \"quotation\"] as const) {\n assertOptionValue(options[name], name);\n }\n if (options.delimiter === options.quotation) {\n throw new InvalidOptionError(\n \"delimiter must not be the same as quotation, use different characters\",\n );\n }\n}\n"],"names":["assertOptionValue","value","name","TypeError","length","InvalidOptionError","LF","CR","options","delimiter","quotation"],"mappings":"oJAWA,SAASA,EACPC,EACAC,GAEI,GAAiB,iBAAVD,EAaT,MAAM,IAAIE,UAAU,GAAGD,sBAZvB,QAAQ,GACN,KAAsB,IAAjBD,EAAMG,OACT,MAAM,IAAIC,EAAAA,mBAAmB,GAAGH,uBAClC,KAAKD,EAAMG,OAAS,EAClB,MAAM,IAAIC,EAAAA,mBAAmB,GAAGH,gCAClC,KAAKD,IAAUK,EAAAA,GACf,KAAKL,IAAUM,EAAAA,GACb,MAAM,IAAIF,EAAAA,mBAAmB,GAAGH,+BAOxC,6BAqBO,SACLM,GAEA,IAAA,MAAWN,IAAQ,CAAC,YAAa,aACbF,EAAAQ,EAAQN,GAAOA,GAE/B,GAAAM,EAAQC,YAAcD,EAAQE,UAChC,MAAM,IAAIL,EAAAA,mBACR,wEAGN"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=Symbol.for("web-csv-toolbox.FieldDelimiter"),o=Symbol.for("web-csv-toolbox.RecordDelimiter"),t=Symbol.for("web-csv-toolbox.Field");exports.Field=t,exports.FieldDelimiter=e,exports.RecordDelimiter=o;
|
|
2
|
-
//# sourceMappingURL=constants.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.cjs","sources":["../../../src/common/constants.ts"],"sourcesContent":["/**\n * FiledDelimiter is a symbol for field delimiter of CSV.\n * @category Constants\n */\nexport const FieldDelimiter = Symbol.for(\"web-csv-toolbox.FieldDelimiter\");\n/**\n * RecordDelimiter is a symbol for record delimiter of CSV.\n * @category Constants\n */\nexport const RecordDelimiter = Symbol.for(\"web-csv-toolbox.RecordDelimiter\");\n/**\n * Field is a symbol for field of CSV.\n * @category Constants\n */\nexport const Field = Symbol.for(\"web-csv-toolbox.Field\");\n"],"names":["FieldDelimiter","Symbol","for","RecordDelimiter","Field"],"mappings":"gFAIa,MAAAA,EAAiBC,OAAOC,IAAI,kCAK5BC,EAAkBF,OAAOC,IAAI,mCAK7BE,EAAQH,OAAOC,IAAI"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class r extends Error{constructor(r,o){super(r,o),this.name="InvalidOptionError"}}class o extends SyntaxError{position;constructor(r,o){super(r,{cause:o?.cause}),this.name="ParseError",this.position=o?.position}}exports.InvalidOptionError=r,exports.ParseError=o;
|
|
2
|
-
//# sourceMappingURL=errors.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.cjs","sources":["../../../src/common/errors.ts"],"sourcesContent":["import type { Position } from \"./types.js\";\n\n/**\n * Error class for invalid option errors.\n */\nexport class InvalidOptionError extends Error {\n constructor(message?: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"InvalidOptionError\";\n }\n}\n\n/**\n * Options for creating a parse error.\n */\nexport interface ParseErrorOptions extends ErrorOptions {\n /**\n * The position where the error occurred.\n */\n position?: Position;\n}\n\n/**\n * Error class for parse errors.\n *\n * @remarks\n * This error is thrown when a parsing error occurs.\n * {@link ParseError} is a subclass of {@link !SyntaxError}.\n *\n * This is in reference to the specification\n * that the error thrown when a parse error occurs in the {@link !JSON.parse} function is {@link !SyntaxError}.\n */\nexport class ParseError extends SyntaxError {\n /**\n * The position where the error occurred.\n */\n public position?: Position;\n\n constructor(message?: string, options?: ParseErrorOptions) {\n super(message, { cause: options?.cause });\n this.name = \"ParseError\";\n this.position = options?.position;\n }\n}\n"],"names":["InvalidOptionError","Error","constructor","message","options","super","this","name","ParseError","SyntaxError","position","cause"],"mappings":"gFAKO,MAAMA,UAA2BC,MACtC,WAAAC,CAAYC,EAAkBC,GAC5BC,MAAMF,EAASC,GACfE,KAAKC,KAAO,oBACd,EAuBK,MAAMC,UAAmBC,YAIvBC,SAEP,WAAAR,CAAYC,EAAkBC,GAC5BC,MAAMF,EAAS,CAAEQ,MAAOP,GAASO,QACjCL,KAAKC,KAAO,aACZD,KAAKI,SAAWN,GAASM,QAC3B"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./common/errors.cjs");exports.commonParseErrorHandling=function(o){if(o instanceof r.ParseError||o instanceof r.InvalidOptionError)throw o;throw new r.ParseError("An error occurred while parsing the CSV data.",{cause:o})};
|
|
2
|
-
//# sourceMappingURL=commonParseErrorHandling.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commonParseErrorHandling.cjs","sources":["../../src/commonParseErrorHandling.ts"],"sourcesContent":["import { InvalidOptionError, ParseError } from \"./common/errors\";\n\n/**\n * Common error handling for parsing CSV data.\n *\n * @param error - The error to handle.\n * @throws {ParseError} When an error occurs while parsing the CSV data.\n * @throws {InvalidOptionError} When an invalid option is provided.\n */\n\nexport function commonParseErrorHandling(error: unknown): never {\n if (error instanceof ParseError || error instanceof InvalidOptionError) {\n throw error;\n }\n throw new ParseError(\"An error occurred while parsing the CSV data.\", {\n cause: error,\n });\n}\n"],"names":["error","ParseError","InvalidOptionError","cause"],"mappings":"wJAUO,SAAkCA,GACnC,GAAAA,aAAiBC,EAAAA,YAAcD,aAAiBE,qBAC5C,MAAAF,EAEF,MAAA,IAAIC,aAAW,gDAAiD,CACpEE,MAAOH,GAEX"}
|
package/dist/cjs/constants.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.cjs","sources":["../../src/constants.ts"],"sourcesContent":["export const CR = \"\\r\";\nexport const CRLF = \"\\r\\n\";\nexport const LF = \"\\n\";\n\n/**\n * COMMA is a symbol for comma(,).\n */\nexport const COMMA = \",\";\n\n/**\n * DOUBLE_QUOTE is a symbol for double quote(\").\n */\nexport const DOUBLE_QUOTE = '\"';\n"],"names":[],"mappings":"8FAOqB,eAPH,kBACE,4BAWQ,eAVV"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./utils/parseMime.cjs");exports.getOptionsFromResponse=function(t,r={}){const{headers:o}=t,s=o.get("content-type")??"text/csv",n=e.parseMime(s);if("text/csv"!==n.type)throw new RangeError(`Invalid mime type: "${s}"`);return{decomposition:o.get("content-encoding")??void 0,charset:n.parameters.charset??"utf-8",...r}};
|
|
2
|
-
//# sourceMappingURL=getOptionsFromResponse.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getOptionsFromResponse.cjs","sources":["../../src/getOptionsFromResponse.ts"],"sourcesContent":["import type { ParseBinaryOptions } from \"./common/types.ts\";\nimport { parseMime } from \"./utils/parseMime.ts\";\n\n/**\n * Extracts the options from the response object.\n *\n * @param response - The response object from which to extract the options.\n * @param options - The options to merge with the extracted options.\n * @returns The options extracted from the response.\n * @throws {RangeError} - The content type is not supported.\n */\nexport function getOptionsFromResponse<Header extends ReadonlyArray<string>>(\n response: Response,\n options: ParseBinaryOptions<Header> = {},\n): ParseBinaryOptions<Header> {\n const { headers } = response;\n const contentType = headers.get(\"content-type\") ?? \"text/csv\";\n const mime = parseMime(contentType);\n if (mime.type !== \"text/csv\") {\n throw new RangeError(`Invalid mime type: \"${contentType}\"`);\n }\n const decomposition =\n (headers.get(\"content-encoding\") as CompressionFormat) ?? undefined;\n const charset = mime.parameters.charset ?? \"utf-8\";\n // TODO: Support header=present and header=absent\n // const header = mime.parameters.header ?? \"present\";\n return {\n decomposition,\n charset,\n ...options,\n };\n}\n"],"names":["response","options","headers","contentType","get","mime","parseMime","type","RangeError","decomposition","charset","parameters"],"mappings":"wJAWO,SACLA,EACAC,EAAsC,IAEhC,MAAAC,QAAEA,GAAYF,EACdG,EAAcD,EAAQE,IAAI,iBAAmB,WAC7CC,EAAOC,YAAUH,GACnB,GAAc,aAAdE,EAAKE,KACP,MAAM,IAAIC,WAAW,uBAAuBL,MAOvC,MAAA,CACLM,cALCP,EAAQE,IAAI,0BAA6C,EAM1DM,QALcL,EAAKM,WAAWD,SAAW,WAMtCT,EAEP"}
|
package/dist/cjs/loadWASM.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./_virtual/_web-csv-toolbox-wasm.cjs"),t=require("./_virtual/web_csv_toolbox_wasm_bg.wasm.cjs");exports.loadWASM=async function(o){await e.default(o??t.default)};
|
|
2
|
-
//# sourceMappingURL=loadWASM.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loadWASM.cjs","sources":["../../src/loadWASM.ts"],"sourcesContent":["import init, { type InitInput } from \"web-csv-toolbox-wasm\";\n\nimport dataURL from \"web-csv-toolbox-wasm/web_csv_toolbox_wasm_bg.wasm\";\n\n/**\n * Load WASM module.\n *\n * This must be called before calling WebAssembly functions.\n *\n * @example\n *\n * ```ts\n * import { loadWASM, parseStringWASM } from \"web-csv-toolbox\";\n *\n * await loadWASM();\n *\n * const csv = \"a,b,c\\n1,2,3\";\n * const parsed = parseStringWASM(csv);\n * ```\n */\nexport async function loadWASM(input?: InitInput | Promise<InitInput>) {\n await init(input ?? dataURL);\n}\n"],"names":["async","input","init","default","dataURL"],"mappings":"kNAoBAA,eAA+BC,SACvBC,EAAAC,QAAKF,GAASG,EAAAA,QACtB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loadWASM.web.cjs","sources":["../../src/loadWASM.web.ts"],"sourcesContent":["import init, { type InitInput } from \"web-csv-toolbox-wasm\";\n\n/**\n * Load WASM module.\n *\n * This must be called before calling WebAssembly functions.\n *\n * @example\n *\n * ```ts\n * import { loadWASM, parseStringWASM } from \"web-csv-toolbox\";\n *\n * await loadWASM();\n *\n * const csv = \"a,b,c\\n1,2,3\";\n * const parsed = parseStringWASM(csv);\n * ```\n */\nexport async function loadWASM(input?: InitInput | Promise<InitInput>) {\n await init(input);\n}\n"],"names":["async","input","init"],"mappings":"yJAkBAA,eAA+BC,SACvBC,EAAAA,QAAKD,EACb"}
|
package/dist/cjs/parse.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./parseBinary.cjs"),r=require("./parseResponse.cjs"),a=require("./parseString.cjs"),t=require("./parseStringStream.cjs"),s=require("./parseUint8ArrayStream.cjs"),i=require("./utils/convertThisAsyncIterableIteratorToArray.cjs");async function*n(i,n){if("string"==typeof i)yield*a.parseString(i,n);else if(i instanceof Uint8Array||i instanceof ArrayBuffer)yield*e.parseBinary(i,n);else if(i instanceof ReadableStream){const[e,r]=i.tee(),a=e.getReader(),{value:o}=await a.read();a.releaseLock(),"string"==typeof o?yield*t.parseStringStream(r,n):o instanceof Uint8Array&&(yield*s.parseUint8ArrayStream(r,n))}else i instanceof Response&&(yield*r.parseResponse(i,n))}Object.defineProperties(n,{toArray:{enumerable:!0,writable:!1,value:i.convertThisAsyncIterableIteratorToArray}}),exports.parse=n;
|
|
2
|
-
//# sourceMappingURL=parse.cjs.map
|
package/dist/cjs/parse.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse.cjs","sources":["../../src/parse.ts"],"sourcesContent":["import type {\n CSV,\n CSVBinary,\n CSVRecord,\n CSVString,\n ParseBinaryOptions,\n ParseOptions,\n} from \"./common/types.ts\";\nimport { parseBinary } from \"./parseBinary.ts\";\nimport { parseResponse } from \"./parseResponse.ts\";\nimport { parseString } from \"./parseString.ts\";\nimport { parseStringStream } from \"./parseStringStream.ts\";\nimport { parseUint8ArrayStream } from \"./parseUint8ArrayStream.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse CSV to records.\n *\n * {@link !String}, {@link !ReadableStream}<string | {@link !Uint8Array}> and {@link !Response} are supported.\n *\n *\n * @typeParam Header Header type like `['name', 'age']`.\n *\n * @param csv CSV string to parse.\n * @param options Parsing options for CSV string parsing.\n * @returns Async iterable iterator of records.\n *\n * If you want array of records, use {@link parse.toArray} function.\n * @category High-level API\n *\n * @remarks\n * {@link parseString}, {@link parseBinary}, {@link parseUint8ArrayStream},\n * {@link parseStringStream} and {@link parseResponse} are used internally.\n *\n * If you known the type of the CSV, it performs better to use them directly.\n *\n * | If you want to parse a... | Use... | Options... |\n * | -------------------------------------------- | ----------------------------- | -------------------------- |\n * | {@link !String} | {@link parseString} | {@link ParseOptions} |\n * | {@link !ReadableStream}<{@link !String}> | {@link parseStringStream} | {@link ParseOptions} |\n * | {@link !Uint8Array} \\| {@link !ArrayBuffer} | {@link parseBinary} | {@link ParseBinaryOptions} |\n * | {@link !ReadableStream}<{@link !Uint8Array}> | {@link parseUint8ArrayStream} | {@link ParseBinaryOptions} |\n * | {@link !Response} | {@link parseResponse} | {@link ParseBinaryOptions} |\n *\n * @example Parsing CSV files from strings\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * for await (const record of parse(csv)) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n *\n * @example Parsing CSV files from streams\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * const stream = new ReadableStream({\n * start(controller) {\n * controller.enqueue(csv);\n * controller.close();\n * }\n * });\n *\n * for await (const record of parse(stream)) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n *\n *\n * @example Parsing CSV files with headers\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * // This CSV has no header.\n * const csv = `Alice,42\n * Bob,69`;\n *\n * for await (const record of parse(csv, { header: ['name', 'age'] })) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n *\n * @example Parsing CSV files with different delimiters characters\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name\\tage\n * Alice\\t42\n * Bob\\t69`;\n *\n * for await (const record of parse(csv, { delimiter: '\\t' })) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n */\nexport function parse<Header extends ReadonlyArray<string>>(\n csv: CSVString,\n options?: ParseOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>>;\n/**\n * Parse CSV binary to records.\n *\n * @param csv CSV binary to parse.\n * @param options Parsing options for CSV binary parsing.\n *\n * @example Parsing CSV files from responses\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * // This CSV data is not gzipped and encoded in utf-8.\n * const response = await fetch('https://example.com/data.csv');\n *\n * for await (const record of parse(response)) {\n * // ...\n * }\n * ```\n *\n * @example Parsing CSV files with options spcialized for binary\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * // This CSV data is gzipped and encoded in shift-jis and has BOM.\n * const response = await fetch('https://example.com/data.csv.gz');\n *\n * for await (const record of parse(response, {\n * charset: 'shift-jis',\n * ignoreBOM: true,\n * decomposition: 'gzip',\n * })) {\n * // ...\n * }\n * ```\n */\nexport function parse<Header extends ReadonlyArray<string>>(\n csv: CSVBinary,\n options?: ParseBinaryOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>>;\nexport async function* parse<Header extends ReadonlyArray<string>>(\n csv: CSV,\n options?: ParseBinaryOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n if (typeof csv === \"string\") {\n yield* parseString(csv, options);\n } else if (csv instanceof Uint8Array || csv instanceof ArrayBuffer) {\n yield* parseBinary(csv, options);\n } else if (csv instanceof ReadableStream) {\n const [branch1, branch2] = csv.tee();\n const reader1 = branch1.getReader();\n const { value: firstChunk } = await reader1.read();\n reader1.releaseLock();\n if (typeof firstChunk === \"string\") {\n yield* parseStringStream(branch2 as ReadableStream<string>, options);\n } else if (firstChunk instanceof Uint8Array) {\n yield* parseUint8ArrayStream(\n branch2 as ReadableStream<Uint8Array>,\n options,\n );\n }\n } else if (csv instanceof Response) {\n yield* parseResponse(csv, options);\n }\n}\n\nexport declare namespace parse {\n /**\n * Parse CSV string to array of records,\n * ideal for smaller data sets.\n *\n * @example Parse a CSV as array of records\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * const records = await parse.toArray(csv);\n * console.log(records);\n * // Prints:\n * // [ { name: 'Alice', age: '42' }, { name: 'Bob', age: '69' } ]\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n csv: CSVString,\n options?: ParseOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse CSV string to array of records,\n * ideal for smaller data sets.\n *\n * @example Parse a CSV as array of records\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * const records = await parse.toArray(response);\n * console.log(records);\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n csv: CSVBinary,\n options?: ParseBinaryOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n}\n\nObject.defineProperties(parse, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n});\n"],"names":["async","parse","csv","options","parseString","Uint8Array","ArrayBuffer","parseBinary","ReadableStream","branch1","branch2","tee","reader1","getReader","value","firstChunk","read","releaseLock","parseStringStream","parseUint8ArrayStream","Response","parseResponse","Object","defineProperties","toArray","enumerable","writable","internal.convertThisAsyncIterableIteratorToArray","convertThisAsyncIterableIteratorToArray"],"mappings":"oUAoKuBA,eAAAC,EACrBC,EACAC,GAEI,GAAe,iBAARD,QACFE,EAAAA,YAAYF,EAAKC,QACf,GAAAD,aAAeG,YAAcH,aAAeI,kBAC9CC,EAAAA,YAAYL,EAAKC,QAC1B,GAAWD,aAAeM,eAAgB,CACxC,MAAOC,EAASC,GAAWR,EAAIS,MACzBC,EAAUH,EAAQI,aAChBC,MAAOC,SAAqBH,EAAQI,OAC5CJ,EAAQK,cACkB,iBAAfF,QACFG,EAAAA,kBAAkBR,EAAmCP,GACnDY,aAAsBV,mBACxBc,EAAAA,sBACLT,EACAP,GAEJ,MACSD,aAAekB,iBACjBC,EAAAA,cAAcnB,EAAKC,GAE9B,CA+CAmB,OAAOC,iBAAiBtB,EAAO,CAC7BuB,QAAS,CACPC,YAAY,EACZC,UAAU,EACVZ,MAAOa,EAASC"}
|
package/dist/cjs/parseBinary.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./parseBinaryToArraySync.cjs"),e=require("./parseBinaryToIterableIterator.cjs"),a=require("./parseBinaryToStream.cjs"),t=require("./utils/convertIterableIteratorToAsync.cjs"),o=require("./utils/convertThisAsyncIterableIteratorToArray.cjs");function n(r,a){const o=e.parseBinaryToIterableIterator(r,a);return t.convertIterableIteratorToAsync(o)}Object.defineProperties(n,{toArray:{enumerable:!0,writable:!1,value:o.convertThisAsyncIterableIteratorToArray},toArraySync:{enumerable:!0,writable:!1,value:r.parseBinaryToArraySync},toIterableIterator:{enumerable:!0,writable:!1,value:e.parseBinaryToIterableIterator},toStream:{enumerable:!0,writable:!1,value:a.parseBinaryToStream}}),exports.parseBinary=n;
|
|
2
|
-
//# sourceMappingURL=parseBinary.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseBinary.cjs","sources":["../../src/parseBinary.ts"],"sourcesContent":["import type { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { parseBinaryToArraySync } from \"./parseBinaryToArraySync.ts\";\nimport { parseBinaryToIterableIterator } from \"./parseBinaryToIterableIterator.ts\";\nimport { parseBinaryToStream } from \"./parseBinaryToStream.ts\";\nimport { convertIterableIteratorToAsync } from \"./utils/convertIterableIteratorToAsync.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse a binary from an {@link !Uint8Array}.\n *\n * @category Middle-level API\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Async iterable iterator of records.\n *\n * @example Parsing CSV binary\n *\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * for await (const record of parseUint8Array(csv)) {\n * console.log(record);\n * }\n * ```\n */\nexport function parseBinary<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array | ArrayBuffer,\n options?: ParseBinaryOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n const iterator = parseBinaryToIterableIterator(bytes, options);\n return convertIterableIteratorToAsync(iterator);\n}\n\nexport declare namespace parseBinary {\n /**\n * Parse a binary from an {@link !Uint8Array} to an array of records.\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Array of records\n *\n * @example\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * const records = await parseUint8Array.toArray(csv);\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array | ArrayBuffer,\n options?: ParseBinaryOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse a binary from an {@link !Uint8Array} to an array of records.\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Array of records\n * @example\n *\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * const records = parseUint8Array.toArraySync(csv);\n * ```\n */\n export function toArraySync<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array | ArrayBuffer,\n options?: ParseBinaryOptions<Header>,\n ): CSVRecord<Header>[];\n\n /**\n * Parse a binary from an {@link !Uint8Array} to an iterable iterator of records.\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Async iterable iterator of records.\n * @example\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * for (const record of parseUint8Array.toIterableIterator(csv)) {\n * console.log(record);\n * }\n * ```\n */\n export function toIterableIterator<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array,\n options?: ParseBinaryOptions<Header>,\n ): IterableIterator<CSVRecord<Header>>;\n\n /**\n * Parse a binary from an {@link !Uint8Array} to a stream of records.\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Stream of records.\n *\n * @example\n *\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * const stream = parseUint8Array.toStream(csv);\n *\n * await stream.pipeTo(\n * new WritableStream({\n * write(record) {\n * console.log(record);\n * },\n * }),\n * );\n * ```\n */\n export function toStream<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array,\n options?: ParseBinaryOptions<Header>,\n ): ReadableStream<CSVRecord<Header>>;\n}\n\nObject.defineProperties(parseBinary, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n toArraySync: {\n enumerable: true,\n writable: false,\n value: parseBinaryToArraySync,\n },\n toIterableIterator: {\n enumerable: true,\n writable: false,\n value: parseBinaryToIterableIterator,\n },\n toStream: {\n enumerable: true,\n writable: false,\n value: parseBinaryToStream,\n },\n});\n"],"names":["parseBinary","bytes","options","iterator","parseBinaryToIterableIterator","convertIterableIteratorToAsync","Object","defineProperties","toArray","enumerable","writable","value","internal.convertThisAsyncIterableIteratorToArray","convertThisAsyncIterableIteratorToArray","toArraySync","parseBinaryToArraySync","toIterableIterator","toStream","parseBinaryToStream"],"mappings":"iVA8BgB,SAAAA,EACdC,EACAC,GAEM,MAAAC,EAAWC,EAAAA,8BAA8BH,EAAOC,GACtD,OAAOG,EAAAA,+BAA+BF,EACxC,CAyGAG,OAAOC,iBAAiBP,EAAa,CACnCQ,QAAS,CACPC,YAAY,EACZC,UAAU,EACVC,MAAOC,EAASC,yCAElBC,YAAa,CACXL,YAAY,EACZC,UAAU,EACVC,MAAOI,EAAAA,wBAETC,mBAAoB,CAClBP,YAAY,EACZC,UAAU,EACVC,MAAOP,EAAAA,+BAETa,SAAU,CACRR,YAAY,EACZC,UAAU,EACVC,MAAOO,EAAAA"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./commonParseErrorHandling.cjs"),n=require("./parseStringToArraySync.cjs"),e=require("./utils/convertBinaryToString.cjs");exports.parseBinaryToArraySync=function(o,t={}){try{const r=e.convertBinaryToString(o,t);return n.parseStringToArraySync(r,t)}catch(c){r.commonParseErrorHandling(c)}};
|
|
2
|
-
//# sourceMappingURL=parseBinaryToArraySync.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseBinaryToArraySync.cjs","sources":["../../src/parseBinaryToArraySync.ts"],"sourcesContent":["import type { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport { parseStringToArraySync } from \"./parseStringToArraySync.ts\";\nimport { convertBinaryToString } from \"./utils/convertBinaryToString.ts\";\n\nexport function parseBinaryToArraySync<Header extends ReadonlyArray<string>>(\n binary: Uint8Array | ArrayBuffer,\n options: ParseBinaryOptions<Header> = {},\n): CSVRecord<Header>[] {\n try {\n const csv = convertBinaryToString(binary, options);\n return parseStringToArraySync(csv, options);\n } catch (error) {\n commonParseErrorHandling(error);\n }\n}\n"],"names":["binary","options","csv","convertBinaryToString","parseStringToArraySync","error","commonParseErrorHandling"],"mappings":"0PAKO,SACLA,EACAC,EAAsC,IAElC,IACI,MAAAC,EAAMC,EAAAA,sBAAsBH,EAAQC,GACnC,OAAAG,EAAAA,uBAAuBF,EAAKD,SAC5BI,GACPC,EAAAA,yBAAyBD,EAC3B,CACF"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./commonParseErrorHandling.cjs"),e=require("./parseStringToIterableIterator.cjs"),t=require("./utils/convertBinaryToString.cjs");exports.parseBinaryToIterableIterator=function(o,n={}){try{const r=t.convertBinaryToString(o,n);return e.parseStringToIterableIterator(r,n)}catch(a){r.commonParseErrorHandling(a)}};
|
|
2
|
-
//# sourceMappingURL=parseBinaryToIterableIterator.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseBinaryToIterableIterator.cjs","sources":["../../src/parseBinaryToIterableIterator.ts"],"sourcesContent":["import type { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport { parseStringToIterableIterator } from \"./parseStringToIterableIterator.ts\";\nimport { convertBinaryToString } from \"./utils/convertBinaryToString.ts\";\n\n/**\n * Parses the given binary data into an iterable iterator of CSV records.\n *\n * @param binary - The binary data to parse.\n * @param options - The parse options.\n * @returns An iterable iterator of CSV records.\n * @throws {ParseError} When an error occurs while parsing the CSV data.\n */\nexport function parseBinaryToIterableIterator<\n Header extends ReadonlyArray<string>,\n>(\n binary: Uint8Array | ArrayBuffer,\n options: ParseBinaryOptions<Header> = {},\n): IterableIterator<CSVRecord<Header>> {\n try {\n const csv = convertBinaryToString(binary, options);\n return parseStringToIterableIterator(csv, options);\n } catch (error) {\n commonParseErrorHandling(error);\n }\n}\n"],"names":["binary","options","csv","convertBinaryToString","parseStringToIterableIterator","error","commonParseErrorHandling"],"mappings":"wQAaO,SAGLA,EACAC,EAAsC,IAElC,IACI,MAAAC,EAAMC,EAAAA,sBAAsBH,EAAQC,GACnC,OAAAG,EAAAA,8BAA8BF,EAAKD,SACnCI,GACPC,EAAAA,yBAAyBD,EAC3B,CACF"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./commonParseErrorHandling.cjs"),e=require("./parseStringToStream.cjs"),t=require("./utils/convertBinaryToString.cjs");exports.parseBinaryToStream=function(n,o={}){try{const r=t.convertBinaryToString(n,o);return e.parseStringToStream(r,o)}catch(i){r.commonParseErrorHandling(i)}};
|
|
2
|
-
//# sourceMappingURL=parseBinaryToStream.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseBinaryToStream.cjs","sources":["../../src/parseBinaryToStream.ts"],"sourcesContent":["import type { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport { parseStringToStream } from \"./parseStringToStream.ts\";\nimport { convertBinaryToString } from \"./utils/convertBinaryToString.ts\";\n\nexport function parseBinaryToStream<Header extends ReadonlyArray<string>>(\n binary: Uint8Array | ArrayBuffer,\n options: ParseBinaryOptions<Header> = {},\n): ReadableStream<CSVRecord<Header>> {\n try {\n const csv = convertBinaryToString(binary, options);\n return parseStringToStream(csv, options);\n } catch (error) {\n commonParseErrorHandling(error);\n }\n}\n"],"names":["binary","options","csv","convertBinaryToString","parseStringToStream","error","commonParseErrorHandling"],"mappings":"oPAKO,SACLA,EACAC,EAAsC,IAElC,IACI,MAAAC,EAAMC,EAAAA,sBAAsBH,EAAQC,GACnC,OAAAG,EAAAA,oBAAoBF,EAAKD,SACzBI,GACPC,EAAAA,yBAAyBD,EAC3B,CACF"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./commonParseErrorHandling.cjs"),r=require("./getOptionsFromResponse.cjs"),o=require("./parseResponseToStream.cjs"),t=require("./parseUint8ArrayStream.cjs"),s=require("./utils/convertThisAsyncIterableIteratorToArray.cjs");function n(o,s){try{const e=r.getOptionsFromResponse(o,s);if(null===o.body)throw new RangeError("Response body is null");return t.parseUint8ArrayStream(o.body,e)}catch(n){e.commonParseErrorHandling(n)}}Object.defineProperties(n,{toArray:{enumerable:!0,writable:!1,value:s.convertThisAsyncIterableIteratorToArray},toStreamSync:{enumerable:!0,writable:!1,value:o.parseResponseToStream}}),exports.parseResponse=n;
|
|
2
|
-
//# sourceMappingURL=parseResponse.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseResponse.cjs","sources":["../../src/parseResponse.ts"],"sourcesContent":["import type { CSVRecord, ParseOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport { getOptionsFromResponse } from \"./getOptionsFromResponse.ts\";\nimport { parseResponseToStream } from \"./parseResponseToStream.ts\";\nimport { parseUint8ArrayStream } from \"./parseUint8ArrayStream.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse HTTP Response what contains CSV to records,\n * ideal for smaller data sets.\n *\n * @remarks\n * This function automatically treats response headers.\n *\n * - If `Content-Type` header is not set, it assumes `text/csv`.\n * - If `Content-Type` header is not `text/csv`, it throws an error.\n * - If `Content-Type` header has charset parameter, it uses it for decoding.\n * - If `Content-Encoding` header is set, it decompresses the response.\n * - Should there be any conflicting information between the header and the options, the option's value will take precedence.\n *\n * @category Middle-level API\n * @param response\n * @param options\n * @returns Async iterable iterator of records.\n *\n * If you want array of records, use {@link parseResponse.toArray} function.\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * for await (const record of parseResponse(response)) {\n * console.log(record);\n * }\n * ```\n */\nexport function parseResponse<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n try {\n const options_ = getOptionsFromResponse(response, options);\n if (response.body === null) {\n throw new RangeError(\"Response body is null\");\n }\n return parseUint8ArrayStream(response.body, options_);\n } catch (error) {\n commonParseErrorHandling(error);\n }\n}\n\nexport declare namespace parseResponse {\n /**\n * Parse CSV Response to array of records.\n *\n * @returns Array of records\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * const records = await parseResponse.toArray(response);\n * console.log(records);\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse CSV Response to stream of records.\n *\n * @param response Response to parse\n * @returns Stream of records\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * await parseResponse.toStream(response)\n * .pipeTo(\n * new WritableStream({\n * write(record) {\n * console.log(record);\n * },\n * }),\n * );\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n */\n export function toStream<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n ): ReadableStream<CSVRecord<Header>[]>;\n}\n\nObject.defineProperties(parseResponse, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n toStreamSync: {\n enumerable: true,\n writable: false,\n value: parseResponseToStream,\n },\n});\n"],"names":["parseResponse","response","options","options_","getOptionsFromResponse","body","RangeError","parseUint8ArrayStream","error","commonParseErrorHandling","Object","defineProperties","toArray","enumerable","writable","value","internal.convertThisAsyncIterableIteratorToArray","convertThisAsyncIterableIteratorToArray","toStreamSync","parseResponseToStream"],"mappings":"+TAuCgB,SAAAA,EACdC,EACAC,GAEI,IACI,MAAAC,EAAWC,EAAAA,uBAAuBH,EAAUC,GAC9C,GAAkB,OAAlBD,EAASI,KACL,MAAA,IAAIC,WAAW,yBAEhB,OAAAC,wBAAsBN,EAASI,KAAMF,SACrCK,GACPC,EAAAA,yBAAyBD,EAC3B,CACF,CAuDAE,OAAOC,iBAAiBX,EAAe,CACrCY,QAAS,CACPC,YAAY,EACZC,UAAU,EACVC,MAAOC,EAASC,yCAElBC,aAAc,CACZL,YAAY,EACZC,UAAU,EACVC,MAAOI,EAAAA"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./commonParseErrorHandling.cjs"),e=require("./getOptionsFromResponse.cjs"),o=require("./parseUint8ArrayStreamToStream.cjs");exports.parseResponseToStream=function(t,n){try{const r=e.getOptionsFromResponse(t,n);if(null===t.body)throw new RangeError("Response body is null");return o.parseUint8ArrayStreamToStream(t.body,r)}catch(s){r.commonParseErrorHandling(s)}};
|
|
2
|
-
//# sourceMappingURL=parseResponseToStream.cjs.map
|