diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index ff8cc8e..be7698c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -10,7 +10,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
- vscode-version: ['1.72.0', '1.100.0']
+ vscode-version: ['1.90.0', '1.104.0']
fail-fast: false
runs-on: ${{ matrix.os }}
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index b240e90..47b3a84 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -6,5 +6,8 @@
- Record the whole window with the sidebar hidden
- Resize gif with `gifsicle --resize 800x sortOrderExample.gif > sortOrderExample.gif`
+# Debug extension tests
+You can change `test` to `test.only` to execute only a single test
+
## Current minimally supported VSCode version
-I only increase the minimally supported code version, if there is feature in a newer version that I need. The most current feature that is in use is `--profile-temp` which was introduced in [1.72](https://code.visualstudio.com/updates/v1_72#_extension-debugging-in-a-clean-environment)
\ No newline at end of file
+Currently, the version is set at 1.190, because the tests in the pipeline failed for lower versions and it wasn't reproducible otherwise. Usually, I only increase the minimally supported code version, if there is feature in a newer version that I need.
\ No newline at end of file
diff --git a/README.md b/README.md
index de86ba4..27409a6 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,15 @@
-# Sort JSON/JS array
+# Sort JSON/JSONL/JSONC/JS array

-Sorts a JSON/JS array by common property or by custom function and replace the array in-place. The array can be selected (must include `[` and `]`). If no selection is present, the extension will try to find an array that is enclosed by the current cursor position.
+Sorts a JSON/JSONL/JSONC/JS array by common property or by custom function and replace the array in-place. The array can be selected (must include `[` and `]`). If no selection is present, the extension will try to find an array that is enclosed by the current cursor position.
## Installation
Install through VS Code extensions. Search for `sort js array`
-[Visual Studio Code Market Place: Sort JSON/JS array](https://marketplace.visualstudio.com/items?itemName=fvclaus.sort-json-array)
+[Visual Studio Code Market Place: Sort JSON/JSONL/JSONC/JS array](https://marketplace.visualstudio.com/items?itemName=fvclaus.sort-json-array)
Can also be installed in VS Code: Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
@@ -19,7 +19,7 @@ ext install fvclaus.sort-json-array
## What is supported?
-This extension contains its own parser, because `JSON.parse` is too restrictive and `eval` doesn't support comments (which is an upcoming feature) and will strip out some information (for example how and if object properties are quoted).
+This extension contains its own parser, because `JSON.parse` is too restrictive and `eval` doesn't support comments and will strip out some information (for example how and if object properties are quoted). The result is a support for a superset of JSON/JSONC/JSONL and a subset of JS.
- Arrays:
- `number[]`, `string[]` or `object[]`
@@ -28,7 +28,11 @@ This extension contains its own parser, because `JSON.parse` is too restrictive
- Object properties/key can be either unquoted, `'single'` or `"double"` quoted
- Strings: `'single'` and `"double"` quoted
- Numbers: Base 10 numbers with optional exponent
+- Comments:
+ - `// Line comments`
+ - `/* Block comments stretching multiple lines`
- JSONL: with the same rules as above. Selection of an arbitrary number of lines is supported.
+- JSONC: Full support with the same rules as above
## Demo
diff --git a/package.json b/package.json
index 82a9329..b755442 100644
--- a/package.json
+++ b/package.json
@@ -1,12 +1,12 @@
{
"name": "sort-json-array",
- "displayName": "Sort JSON/JS array",
- "description": "Sorts JSON/JS arrays by value, object property or custom function",
+ "displayName": "Sort JSON/JSONL/JSONC/JS array",
+ "description": "Sorts JSON/JSONL/JSONC/JS arrays by value, object property or custom function",
"version": "4.1.0",
"publisher": "fvclaus",
"license": "BSD-3-Clause",
"engines": {
- "vscode": "^1.44.0",
+ "vscode": "^1.90.0",
"node": ">=22.0.0"
},
"bugs": {
@@ -36,17 +36,17 @@
"commands": [
{
"command": "extension.sortJsonArrayAscending",
- "title": "Sort JSON/JS array ascending",
+ "title": "Sort JSON/JSONL/JSONC/JS array ascending",
"enablement": "editorLangId == json || editorLangId == jsonc || editorLangId == jsonl || editorLangId == typescript || editorLangId == typescriptreact || editorLangId == javascript || editorLangId == javascriptreact || editorLangId == dart || editorLangId == coffeescript"
},
{
"command": "extension.sortJsonArrayDescending",
- "title": "Sort JSON/JS array descending",
+ "title": "Sort JSON/JSONL/JSONC/JS array descending",
"enablement": "editorLangId == json || editorLangId == jsonc || editorLangId == jsonl || editorLangId == typescript || editorLangId == typescriptreact || editorLangId == javascript || editorLangId == javascriptreact || editorLangId == dart || editorLangId == coffeescript"
},
{
"command": "extension.sortJsonArrayCustom",
- "title": "Sort JSON/JS array custom",
+ "title": "Sort JSON/JSONL/JSONC/JS array custom",
"enablement": "editorLangId == json || editorLangId == jsonc || editorLangId == jsonl || editorLangId == typescript || editorLangId == typescriptreact || editorLangId == javascript || editorLangId == javascriptreact || editorLangId == dart || editorLangId == coffeescript"
}
],
diff --git a/src/parser/JSON.g4 b/src/parser/JSON.g4
index 7512123..3963458 100644
--- a/src/parser/JSON.g4
+++ b/src/parser/JSON.g4
@@ -86,5 +86,8 @@ IDENTIFIER
// Single-line comments
LINE_COMMENT : '//' ~[\r\n]* -> channel(HIDDEN);
+// Multi-line comments
+BLOCK_COMMENT : '/*' .*? '*/' -> channel(HIDDEN);
+
// handle characters which failed to match any other token
ErrorCharacter : . ;
diff --git a/src/parser/generated/JSON.interp b/src/parser/generated/JSON.interp
index eb72e3d..c273df9 100644
--- a/src/parser/generated/JSON.interp
+++ b/src/parser/generated/JSON.interp
@@ -16,6 +16,7 @@ null
null
null
null
+null
token symbolic names:
null
@@ -34,6 +35,7 @@ NUMBER
WS
IDENTIFIER
LINE_COMMENT
+BLOCK_COMMENT
ErrorCharacter
rule names:
@@ -45,4 +47,4 @@ arr
atn:
-[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 18, 66, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 24, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 30, 10, 4, 12, 4, 14, 4, 33, 11, 4, 3, 4, 5, 4, 36, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 42, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 52, 10, 6, 12, 6, 14, 6, 55, 11, 6, 3, 6, 5, 6, 58, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 64, 10, 6, 3, 6, 2, 2, 2, 7, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 2, 3, 4, 2, 13, 13, 16, 16, 2, 73, 2, 12, 3, 2, 2, 2, 4, 23, 3, 2, 2, 2, 6, 41, 3, 2, 2, 2, 8, 43, 3, 2, 2, 2, 10, 63, 3, 2, 2, 2, 12, 13, 5, 10, 6, 2, 13, 14, 7, 2, 2, 3, 14, 3, 3, 2, 2, 2, 15, 24, 5, 6, 4, 2, 16, 24, 5, 10, 6, 2, 17, 24, 7, 13, 2, 2, 18, 24, 7, 14, 2, 2, 19, 24, 7, 3, 2, 2, 20, 24, 7, 4, 2, 2, 21, 24, 7, 5, 2, 2, 22, 24, 7, 6, 2, 2, 23, 15, 3, 2, 2, 2, 23, 16, 3, 2, 2, 2, 23, 17, 3, 2, 2, 2, 23, 18, 3, 2, 2, 2, 23, 19, 3, 2, 2, 2, 23, 20, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 23, 22, 3, 2, 2, 2, 24, 5, 3, 2, 2, 2, 25, 26, 7, 11, 2, 2, 26, 31, 5, 8, 5, 2, 27, 28, 7, 7, 2, 2, 28, 30, 5, 8, 5, 2, 29, 27, 3, 2, 2, 2, 30, 33, 3, 2, 2, 2, 31, 29, 3, 2, 2, 2, 31, 32, 3, 2, 2, 2, 32, 35, 3, 2, 2, 2, 33, 31, 3, 2, 2, 2, 34, 36, 7, 7, 2, 2, 35, 34, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 37, 3, 2, 2, 2, 37, 38, 7, 10, 2, 2, 38, 42, 3, 2, 2, 2, 39, 40, 7, 11, 2, 2, 40, 42, 7, 10, 2, 2, 41, 25, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 42, 7, 3, 2, 2, 2, 43, 44, 9, 2, 2, 2, 44, 45, 7, 12, 2, 2, 45, 46, 5, 4, 3, 2, 46, 9, 3, 2, 2, 2, 47, 48, 7, 8, 2, 2, 48, 53, 5, 4, 3, 2, 49, 50, 7, 7, 2, 2, 50, 52, 5, 4, 3, 2, 51, 49, 3, 2, 2, 2, 52, 55, 3, 2, 2, 2, 53, 51, 3, 2, 2, 2, 53, 54, 3, 2, 2, 2, 54, 57, 3, 2, 2, 2, 55, 53, 3, 2, 2, 2, 56, 58, 7, 7, 2, 2, 57, 56, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 60, 7, 9, 2, 2, 60, 64, 3, 2, 2, 2, 61, 62, 7, 8, 2, 2, 62, 64, 7, 9, 2, 2, 63, 47, 3, 2, 2, 2, 63, 61, 3, 2, 2, 2, 64, 11, 3, 2, 2, 2, 9, 23, 31, 35, 41, 53, 57, 63]
\ No newline at end of file
+[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 19, 66, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 24, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 30, 10, 4, 12, 4, 14, 4, 33, 11, 4, 3, 4, 5, 4, 36, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 42, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 52, 10, 6, 12, 6, 14, 6, 55, 11, 6, 3, 6, 5, 6, 58, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 64, 10, 6, 3, 6, 2, 2, 2, 7, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 2, 3, 4, 2, 13, 13, 16, 16, 2, 73, 2, 12, 3, 2, 2, 2, 4, 23, 3, 2, 2, 2, 6, 41, 3, 2, 2, 2, 8, 43, 3, 2, 2, 2, 10, 63, 3, 2, 2, 2, 12, 13, 5, 10, 6, 2, 13, 14, 7, 2, 2, 3, 14, 3, 3, 2, 2, 2, 15, 24, 5, 6, 4, 2, 16, 24, 5, 10, 6, 2, 17, 24, 7, 13, 2, 2, 18, 24, 7, 14, 2, 2, 19, 24, 7, 3, 2, 2, 20, 24, 7, 4, 2, 2, 21, 24, 7, 5, 2, 2, 22, 24, 7, 6, 2, 2, 23, 15, 3, 2, 2, 2, 23, 16, 3, 2, 2, 2, 23, 17, 3, 2, 2, 2, 23, 18, 3, 2, 2, 2, 23, 19, 3, 2, 2, 2, 23, 20, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 23, 22, 3, 2, 2, 2, 24, 5, 3, 2, 2, 2, 25, 26, 7, 11, 2, 2, 26, 31, 5, 8, 5, 2, 27, 28, 7, 7, 2, 2, 28, 30, 5, 8, 5, 2, 29, 27, 3, 2, 2, 2, 30, 33, 3, 2, 2, 2, 31, 29, 3, 2, 2, 2, 31, 32, 3, 2, 2, 2, 32, 35, 3, 2, 2, 2, 33, 31, 3, 2, 2, 2, 34, 36, 7, 7, 2, 2, 35, 34, 3, 2, 2, 2, 35, 36, 3, 2, 2, 2, 36, 37, 3, 2, 2, 2, 37, 38, 7, 10, 2, 2, 38, 42, 3, 2, 2, 2, 39, 40, 7, 11, 2, 2, 40, 42, 7, 10, 2, 2, 41, 25, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 42, 7, 3, 2, 2, 2, 43, 44, 9, 2, 2, 2, 44, 45, 7, 12, 2, 2, 45, 46, 5, 4, 3, 2, 46, 9, 3, 2, 2, 2, 47, 48, 7, 8, 2, 2, 48, 53, 5, 4, 3, 2, 49, 50, 7, 7, 2, 2, 50, 52, 5, 4, 3, 2, 51, 49, 3, 2, 2, 2, 52, 55, 3, 2, 2, 2, 53, 51, 3, 2, 2, 2, 53, 54, 3, 2, 2, 2, 54, 57, 3, 2, 2, 2, 55, 53, 3, 2, 2, 2, 56, 58, 7, 7, 2, 2, 57, 56, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 60, 7, 9, 2, 2, 60, 64, 3, 2, 2, 2, 61, 62, 7, 8, 2, 2, 62, 64, 7, 9, 2, 2, 63, 47, 3, 2, 2, 2, 63, 61, 3, 2, 2, 2, 64, 11, 3, 2, 2, 2, 9, 23, 31, 35, 41, 53, 57, 63]
\ No newline at end of file
diff --git a/src/parser/generated/JSON.tokens b/src/parser/generated/JSON.tokens
index 5777a80..c34ef57 100644
--- a/src/parser/generated/JSON.tokens
+++ b/src/parser/generated/JSON.tokens
@@ -13,7 +13,8 @@ NUMBER=12
WS=13
IDENTIFIER=14
LINE_COMMENT=15
-ErrorCharacter=16
+BLOCK_COMMENT=16
+ErrorCharacter=17
'true'=1
'false'=2
'null'=3
diff --git a/src/parser/generated/JSONLexer.interp b/src/parser/generated/JSONLexer.interp
index d38dfda..ab8de6f 100644
--- a/src/parser/generated/JSONLexer.interp
+++ b/src/parser/generated/JSONLexer.interp
@@ -16,6 +16,7 @@ null
null
null
null
+null
token symbolic names:
null
@@ -34,6 +35,7 @@ NUMBER
WS
IDENTIFIER
LINE_COMMENT
+BLOCK_COMMENT
ErrorCharacter
rule names:
@@ -56,6 +58,7 @@ EXP
WS
IDENTIFIER
LINE_COMMENT
+BLOCK_COMMENT
ErrorCharacter
channel names:
@@ -66,4 +69,4 @@ mode names:
DEFAULT_MODE
atn:
-[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 18, 165, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 90, 10, 12, 3, 13, 3, 13, 3, 13, 7, 13, 95, 10, 13, 12, 13, 14, 13, 98, 11, 13, 3, 14, 3, 14, 3, 14, 7, 14, 103, 10, 14, 12, 14, 14, 14, 106, 11, 14, 3, 15, 5, 15, 109, 10, 15, 3, 15, 3, 15, 3, 15, 6, 15, 114, 10, 15, 13, 15, 14, 15, 115, 5, 15, 118, 10, 15, 3, 15, 5, 15, 121, 10, 15, 3, 16, 3, 16, 3, 16, 7, 16, 126, 10, 16, 12, 16, 14, 16, 129, 11, 16, 5, 16, 131, 10, 16, 3, 17, 3, 17, 5, 17, 135, 10, 17, 3, 17, 3, 17, 3, 18, 6, 18, 140, 10, 18, 13, 18, 14, 18, 141, 3, 18, 3, 18, 3, 19, 3, 19, 7, 19, 148, 10, 19, 12, 19, 14, 19, 151, 11, 19, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 157, 10, 20, 12, 20, 14, 20, 160, 11, 20, 3, 20, 3, 20, 3, 21, 3, 21, 2, 2, 2, 22, 3, 2, 3, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 2, 27, 2, 2, 29, 2, 14, 31, 2, 2, 33, 2, 2, 35, 2, 15, 37, 2, 16, 39, 2, 17, 41, 2, 18, 3, 2, 10, 3, 2, 36, 36, 3, 2, 41, 41, 3, 2, 50, 59, 3, 2, 51, 59, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 13, 2, 11, 15, 34, 34, 135, 135, 162, 162, 5762, 5762, 8194, 8204, 8234, 8235, 8241, 8241, 8289, 8289, 12290, 12290, 65281, 65281, 4, 2, 12, 12, 15, 15, 4, 575, 2, 38, 2, 38, 2, 67, 2, 92, 2, 97, 2, 97, 2, 99, 2, 124, 2, 172, 2, 172, 2, 183, 2, 183, 2, 188, 2, 188, 2, 194, 2, 216, 2, 218, 2, 248, 2, 250, 2, 707, 2, 712, 2, 723, 2, 738, 2, 742, 2, 750, 2, 750, 2, 752, 2, 752, 2, 882, 2, 886, 2, 888, 2, 889, 2, 892, 2, 895, 2, 897, 2, 897, 2, 904, 2, 904, 2, 906, 2, 908, 2, 910, 2, 910, 2, 912, 2, 931, 2, 933, 2, 1015, 2, 1017, 2, 1155, 2, 1164, 2, 1329, 2, 1331, 2, 1368, 2, 1371, 2, 1371, 2, 1379, 2, 1417, 2, 1490, 2, 1516, 2, 1522, 2, 1524, 2, 1570, 2, 1612, 2, 1648, 2, 1649, 2, 1651, 2, 1749, 2, 1751, 2, 1751, 2, 1767, 2, 1768, 2, 1776, 2, 1777, 2, 1788, 2, 1790, 2, 1793, 2, 1793, 2, 1810, 2, 1810, 2, 1812, 2, 1841, 2, 1871, 2, 1959, 2, 1971, 2, 1971, 2, 1996, 2, 2028, 2, 2038, 2, 2039, 2, 2044, 2, 2044, 2, 2050, 2, 2071, 2, 2076, 2, 2076, 2, 2086, 2, 2086, 2, 2090, 2, 2090, 2, 2114, 2, 2138, 2, 2210, 2, 2230, 2, 2232, 2, 2239, 2, 2310, 2, 2363, 2, 2367, 2, 2367, 2, 2386, 2, 2386, 2, 2394, 2, 2403, 2, 2419, 2, 2434, 2, 2439, 2, 2446, 2, 2449, 2, 2450, 2, 2453, 2, 2474, 2, 2476, 2, 2482, 2, 2484, 2, 2484, 2, 2488, 2, 2491, 2, 2495, 2, 2495, 2, 2512, 2, 2512, 2, 2526, 2, 2527, 2, 2529, 2, 2531, 2, 2546, 2, 2547, 2, 2567, 2, 2572, 2, 2577, 2, 2578, 2, 2581, 2, 2602, 2, 2604, 2, 2610, 2, 2612, 2, 2613, 2, 2615, 2, 2616, 2, 2618, 2, 2619, 2, 2651, 2, 2654, 2, 2656, 2, 2656, 2, 2676, 2, 2678, 2, 2695, 2, 2703, 2, 2705, 2, 2707, 2, 2709, 2, 2730, 2, 2732, 2, 2738, 2, 2740, 2, 2741, 2, 2743, 2, 2747, 2, 2751, 2, 2751, 2, 2770, 2, 2770, 2, 2786, 2, 2787, 2, 2811, 2, 2811, 2, 2823, 2, 2830, 2, 2833, 2, 2834, 2, 2837, 2, 2858, 2, 2860, 2, 2866, 2, 2868, 2, 2869, 2, 2871, 2, 2875, 2, 2879, 2, 2879, 2, 2910, 2, 2911, 2, 2913, 2, 2915, 2, 2931, 2, 2931, 2, 2949, 2, 2949, 2, 2951, 2, 2956, 2, 2960, 2, 2962, 2, 2964, 2, 2967, 2, 2971, 2, 2972, 2, 2974, 2, 2974, 2, 2976, 2, 2977, 2, 2981, 2, 2982, 2, 2986, 2, 2988, 2, 2992, 2, 3003, 2, 3026, 2, 3026, 2, 3079, 2, 3086, 2, 3088, 2, 3090, 2, 3092, 2, 3114, 2, 3116, 2, 3131, 2, 3135, 2, 3135, 2, 3162, 2, 3164, 2, 3170, 2, 3171, 2, 3202, 2, 3202, 2, 3207, 2, 3214, 2, 3216, 2, 3218, 2, 3220, 2, 3242, 2, 3244, 2, 3253, 2, 3255, 2, 3259, 2, 3263, 2, 3263, 2, 3296, 2, 3296, 2, 3298, 2, 3299, 2, 3315, 2, 3316, 2, 3335, 2, 3342, 2, 3344, 2, 3346, 2, 3348, 2, 3388, 2, 3391, 2, 3391, 2, 3408, 2, 3408, 2, 3414, 2, 3416, 2, 3425, 2, 3427, 2, 3452, 2, 3457, 2, 3463, 2, 3480, 2, 3484, 2, 3507, 2, 3509, 2, 3517, 2, 3519, 2, 3519, 2, 3522, 2, 3528, 2, 3587, 2, 3634, 2, 3636, 2, 3637, 2, 3650, 2, 3656, 2, 3715, 2, 3716, 2, 3718, 2, 3718, 2, 3721, 2, 3722, 2, 3724, 2, 3724, 2, 3727, 2, 3727, 2, 3734, 2, 3737, 2, 3739, 2, 3745, 2, 3747, 2, 3749, 2, 3751, 2, 3751, 2, 3753, 2, 3753, 2, 3756, 2, 3757, 2, 3759, 2, 3762, 2, 3764, 2, 3765, 2, 3775, 2, 3775, 2, 3778, 2, 3782, 2, 3784, 2, 3784, 2, 3806, 2, 3809, 2, 3842, 2, 3842, 2, 3906, 2, 3913, 2, 3915, 2, 3950, 2, 3978, 2, 3982, 2, 4098, 2, 4140, 2, 4161, 2, 4161, 2, 4178, 2, 4183, 2, 4188, 2, 4191, 2, 4195, 2, 4195, 2, 4199, 2, 4200, 2, 4208, 2, 4210, 2, 4215, 2, 4227, 2, 4240, 2, 4240, 2, 4258, 2, 4295, 2, 4297, 2, 4297, 2, 4303, 2, 4303, 2, 4306, 2, 4348, 2, 4350, 2, 4682, 2, 4684, 2, 4687, 2, 4690, 2, 4696, 2, 4698, 2, 4698, 2, 4700, 2, 4703, 2, 4706, 2, 4746, 2, 4748, 2, 4751, 2, 4754, 2, 4786, 2, 4788, 2, 4791, 2, 4794, 2, 4800, 2, 4802, 2, 4802, 2, 4804, 2, 4807, 2, 4810, 2, 4824, 2, 4826, 2, 4882, 2, 4884, 2, 4887, 2, 4890, 2, 4956, 2, 4994, 2, 5009, 2, 5026, 2, 5111, 2, 5114, 2, 5119, 2, 5123, 2, 5742, 2, 5745, 2, 5761, 2, 5763, 2, 5788, 2, 5794, 2, 5868, 2, 5872, 2, 5882, 2, 5890, 2, 5902, 2, 5904, 2, 5907, 2, 5922, 2, 5939, 2, 5954, 2, 5971, 2, 5986, 2, 5998, 2, 6000, 2, 6002, 2, 6018, 2, 6069, 2, 6105, 2, 6105, 2, 6110, 2, 6110, 2, 6178, 2, 6265, 2, 6274, 2, 6314, 2, 6316, 2, 6316, 2, 6322, 2, 6391, 2, 6402, 2, 6432, 2, 6482, 2, 6511, 2, 6514, 2, 6518, 2, 6530, 2, 6573, 2, 6578, 2, 6603, 2, 6658, 2, 6680, 2, 6690, 2, 6742, 2, 6825, 2, 6825, 2, 6919, 2, 6965, 2, 6983, 2, 6989, 2, 7045, 2, 7074, 2, 7088, 2, 7089, 2, 7100, 2, 7143, 2, 7170, 2, 7205, 2, 7247, 2, 7249, 2, 7260, 2, 7295, 2, 7298, 2, 7306, 2, 7403, 2, 7406, 2, 7408, 2, 7411, 2, 7415, 2, 7416, 2, 7426, 2, 7617, 2, 7682, 2, 7959, 2, 7962, 2, 7967, 2, 7970, 2, 8007, 2, 8010, 2, 8015, 2, 8018, 2, 8025, 2, 8027, 2, 8027, 2, 8029, 2, 8029, 2, 8031, 2, 8031, 2, 8033, 2, 8063, 2, 8066, 2, 8118, 2, 8120, 2, 8126, 2, 8128, 2, 8128, 2, 8132, 2, 8134, 2, 8136, 2, 8142, 2, 8146, 2, 8149, 2, 8152, 2, 8157, 2, 8162, 2, 8174, 2, 8180, 2, 8182, 2, 8184, 2, 8190, 2, 8307, 2, 8307, 2, 8321, 2, 8321, 2, 8338, 2, 8350, 2, 8452, 2, 8452, 2, 8457, 2, 8457, 2, 8460, 2, 8469, 2, 8471, 2, 8471, 2, 8474, 2, 8479, 2, 8486, 2, 8486, 2, 8488, 2, 8488, 2, 8490, 2, 8490, 2, 8492, 2, 8507, 2, 8510, 2, 8513, 2, 8519, 2, 8523, 2, 8528, 2, 8528, 2, 8546, 2, 8586, 2, 11266, 2, 11312, 2, 11314, 2, 11360, 2, 11362, 2, 11494, 2, 11501, 2, 11504, 2, 11508, 2, 11509, 2, 11522, 2, 11559, 2, 11561, 2, 11561, 2, 11567, 2, 11567, 2, 11570, 2, 11625, 2, 11633, 2, 11633, 2, 11650, 2, 11672, 2, 11682, 2, 11688, 2, 11690, 2, 11696, 2, 11698, 2, 11704, 2, 11706, 2, 11712, 2, 11714, 2, 11720, 2, 11722, 2, 11728, 2, 11730, 2, 11736, 2, 11738, 2, 11744, 2, 12295, 2, 12297, 2, 12323, 2, 12331, 2, 12339, 2, 12343, 2, 12346, 2, 12350, 2, 12355, 2, 12440, 2, 12445, 2, 12449, 2, 12451, 2, 12540, 2, 12542, 2, 12545, 2, 12551, 2, 12591, 2, 12595, 2, 12688, 2, 12706, 2, 12732, 2, 12786, 2, 12801, 2, 13314, 2, 19895, 2, 19970, 2, 40919, 2, 40962, 2, 42126, 2, 42194, 2, 42239, 2, 42242, 2, 42510, 2, 42514, 2, 42529, 2, 42540, 2, 42541, 2, 42562, 2, 42608, 2, 42625, 2, 42655, 2, 42658, 2, 42737, 2, 42777, 2, 42785, 2, 42788, 2, 42890, 2, 42893, 2, 42928, 2, 42930, 2, 42937, 2, 43001, 2, 43011, 2, 43013, 2, 43015, 2, 43017, 2, 43020, 2, 43022, 2, 43044, 2, 43074, 2, 43125, 2, 43140, 2, 43189, 2, 43252, 2, 43257, 2, 43261, 2, 43261, 2, 43263, 2, 43263, 2, 43276, 2, 43303, 2, 43314, 2, 43336, 2, 43362, 2, 43390, 2, 43398, 2, 43444, 2, 43473, 2, 43473, 2, 43490, 2, 43494, 2, 43496, 2, 43505, 2, 43516, 2, 43520, 2, 43522, 2, 43562, 2, 43586, 2, 43588, 2, 43590, 2, 43597, 2, 43618, 2, 43640, 2, 43644, 2, 43644, 2, 43648, 2, 43697, 2, 43699, 2, 43699, 2, 43703, 2, 43704, 2, 43707, 2, 43711, 2, 43714, 2, 43714, 2, 43716, 2, 43716, 2, 43741, 2, 43743, 2, 43746, 2, 43756, 2, 43764, 2, 43766, 2, 43779, 2, 43784, 2, 43787, 2, 43792, 2, 43795, 2, 43800, 2, 43810, 2, 43816, 2, 43818, 2, 43824, 2, 43826, 2, 43868, 2, 43870, 2, 43879, 2, 43890, 2, 44004, 2, 44034, 2, 55205, 2, 55218, 2, 55240, 2, 55245, 2, 55293, 2, 63746, 2, 64111, 2, 64114, 2, 64219, 2, 64258, 2, 64264, 2, 64277, 2, 64281, 2, 64287, 2, 64287, 2, 64289, 2, 64298, 2, 64300, 2, 64312, 2, 64314, 2, 64318, 2, 64320, 2, 64320, 2, 64322, 2, 64323, 2, 64325, 2, 64326, 2, 64328, 2, 64435, 2, 64469, 2, 64831, 2, 64850, 2, 64913, 2, 64916, 2, 64969, 2, 65010, 2, 65021, 2, 65138, 2, 65142, 2, 65144, 2, 65278, 2, 65315, 2, 65340, 2, 65347, 2, 65372, 2, 65384, 2, 65472, 2, 65476, 2, 65481, 2, 65484, 2, 65489, 2, 65492, 2, 65497, 2, 65500, 2, 65502, 2, 2, 3, 13, 3, 15, 3, 40, 3, 42, 3, 60, 3, 62, 3, 63, 3, 65, 3, 79, 3, 82, 3, 95, 3, 130, 3, 252, 3, 322, 3, 374, 3, 642, 3, 670, 3, 674, 3, 722, 3, 770, 3, 801, 3, 818, 3, 844, 3, 850, 3, 887, 3, 898, 3, 927, 3, 930, 3, 965, 3, 970, 3, 977, 3, 979, 3, 983, 3, 1026, 3, 1183, 3, 1202, 3, 1237, 3, 1242, 3, 1277, 3, 1282, 3, 1321, 3, 1330, 3, 1381, 3, 1538, 3, 1848, 3, 1858, 3, 1879, 3, 1890, 3, 1897, 3, 2050, 3, 2055, 3, 2058, 3, 2058, 3, 2060, 3, 2103, 3, 2105, 3, 2106, 3, 2110, 3, 2110, 3, 2113, 3, 2135, 3, 2146, 3, 2168, 3, 2178, 3, 2208, 3, 2274, 3, 2292, 3, 2294, 3, 2295, 3, 2306, 3, 2327, 3, 2338, 3, 2363, 3, 2434, 3, 2489, 3, 2496, 3, 2497, 3, 2562, 3, 2562, 3, 2578, 3, 2581, 3, 2583, 3, 2585, 3, 2587, 3, 2613, 3, 2658, 3, 2686, 3, 2690, 3, 2718, 3, 2754, 3, 2761, 3, 2763, 3, 2790, 3, 2818, 3, 2871, 3, 2882, 3, 2903, 3, 2914, 3, 2932, 3, 2946, 3, 2963, 3, 3074, 3, 3146, 3, 3202, 3, 3252, 3, 3266, 3, 3316, 3, 4101, 3, 4153, 3, 4229, 3, 4273, 3, 4306, 3, 4330, 3, 4357, 3, 4392, 3, 4434, 3, 4468, 3, 4472, 3, 4472, 3, 4485, 3, 4532, 3, 4547, 3, 4550, 3, 4572, 3, 4572, 3, 4574, 3, 4574, 3, 4610, 3, 4627, 3, 4629, 3, 4653, 3, 4738, 3, 4744, 3, 4746, 3, 4746, 3, 4748, 3, 4751, 3, 4753, 3, 4767, 3, 4769, 3, 4778, 3, 4786, 3, 4832, 3, 4871, 3, 4878, 3, 4881, 3, 4882, 3, 4885, 3, 4906, 3, 4908, 3, 4914, 3, 4916, 3, 4917, 3, 4919, 3, 4923, 3, 4927, 3, 4927, 3, 4946, 3, 4946, 3, 4959, 3, 4963, 3, 5122, 3, 5174, 3, 5193, 3, 5196, 3, 5250, 3, 5297, 3, 5318, 3, 5319, 3, 5321, 3, 5321, 3, 5506, 3, 5552, 3, 5594, 3, 5597, 3, 5634, 3, 5681, 3, 5702, 3, 5702, 3, 5762, 3, 5804, 3, 5890, 3, 5915, 3, 6306, 3, 6369, 3, 6401, 3, 6401, 3, 6850, 3, 6906, 3, 7170, 3, 7178, 3, 7180, 3, 7216, 3, 7234, 3, 7234, 3, 7284, 3, 7313, 3, 8194, 3, 9115, 3, 9218, 3, 9328, 3, 9346, 3, 9541, 3, 12290, 3, 13360, 3, 17410, 3, 17992, 3, 26626, 3, 27194, 3, 27202, 3, 27232, 3, 27346, 3, 27375, 3, 27394, 3, 27441, 3, 27458, 3, 27461, 3, 27493, 3, 27513, 3, 27519, 3, 27537, 3, 28418, 3, 28486, 3, 28498, 3, 28498, 3, 28565, 3, 28577, 3, 28642, 3, 28642, 3, 28674, 3, 34798, 3, 34818, 3, 35572, 3, 45058, 3, 45059, 3, 48130, 3, 48236, 3, 48242, 3, 48254, 3, 48258, 3, 48266, 3, 48274, 3, 48283, 3, 54274, 3, 54358, 3, 54360, 3, 54430, 3, 54432, 3, 54433, 3, 54436, 3, 54436, 3, 54439, 3, 54440, 3, 54443, 3, 54446, 3, 54448, 3, 54459, 3, 54461, 3, 54461, 3, 54463, 3, 54469, 3, 54471, 3, 54535, 3, 54537, 3, 54540, 3, 54543, 3, 54550, 3, 54552, 3, 54558, 3, 54560, 3, 54587, 3, 54589, 3, 54592, 3, 54594, 3, 54598, 3, 54600, 3, 54600, 3, 54604, 3, 54610, 3, 54612, 3, 54951, 3, 54954, 3, 54978, 3, 54980, 3, 55004, 3, 55006, 3, 55036, 3, 55038, 3, 55062, 3, 55064, 3, 55094, 3, 55096, 3, 55120, 3, 55122, 3, 55152, 3, 55154, 3, 55178, 3, 55180, 3, 55210, 3, 55212, 3, 55236, 3, 55238, 3, 55245, 3, 59394, 3, 59590, 3, 59650, 3, 59717, 3, 60930, 3, 60933, 3, 60935, 3, 60961, 3, 60963, 3, 60964, 3, 60966, 3, 60966, 3, 60969, 3, 60969, 3, 60971, 3, 60980, 3, 60982, 3, 60985, 3, 60987, 3, 60987, 3, 60989, 3, 60989, 3, 60996, 3, 60996, 3, 61001, 3, 61001, 3, 61003, 3, 61003, 3, 61005, 3, 61005, 3, 61007, 3, 61009, 3, 61011, 3, 61012, 3, 61014, 3, 61014, 3, 61017, 3, 61017, 3, 61019, 3, 61019, 3, 61021, 3, 61021, 3, 61023, 3, 61023, 3, 61025, 3, 61025, 3, 61027, 3, 61028, 3, 61030, 3, 61030, 3, 61033, 3, 61036, 3, 61038, 3, 61044, 3, 61046, 3, 61049, 3, 61051, 3, 61054, 3, 61056, 3, 61056, 3, 61058, 3, 61067, 3, 61069, 3, 61085, 3, 61091, 3, 61093, 3, 61095, 3, 61099, 3, 61101, 3, 61117, 3, 2, 4, 42712, 4, 42754, 4, 46902, 4, 46914, 4, 47135, 4, 47138, 4, 52899, 4, 63490, 4, 64031, 4, 679, 2, 38, 2, 38, 2, 50, 2, 59, 2, 67, 2, 92, 2, 97, 2, 97, 2, 99, 2, 124, 2, 172, 2, 172, 2, 183, 2, 183, 2, 185, 2, 185, 2, 188, 2, 188, 2, 194, 2, 216, 2, 218, 2, 248, 2, 250, 2, 707, 2, 712, 2, 723, 2, 738, 2, 742, 2, 750, 2, 750, 2, 752, 2, 752, 2, 770, 2, 886, 2, 888, 2, 889, 2, 892, 2, 895, 2, 897, 2, 897, 2, 904, 2, 908, 2, 910, 2, 910, 2, 912, 2, 931, 2, 933, 2, 1015, 2, 1017, 2, 1155, 2, 1157, 2, 1161, 2, 1164, 2, 1329, 2, 1331, 2, 1368, 2, 1371, 2, 1371, 2, 1379, 2, 1417, 2, 1427, 2, 1471, 2, 1473, 2, 1473, 2, 1475, 2, 1476, 2, 1478, 2, 1479, 2, 1481, 2, 1481, 2, 1490, 2, 1516, 2, 1522, 2, 1524, 2, 1554, 2, 1564, 2, 1570, 2, 1643, 2, 1648, 2, 1749, 2, 1751, 2, 1758, 2, 1761, 2, 1770, 2, 1772, 2, 1790, 2, 1793, 2, 1793, 2, 1810, 2, 1868, 2, 1871, 2, 1971, 2, 1986, 2, 2039, 2, 2044, 2, 2044, 2, 2050, 2, 2095, 2, 2114, 2, 2141, 2, 2210, 2, 2230, 2, 2232, 2, 2239, 2, 2262, 2, 2275, 2, 2277, 2, 2405, 2, 2408, 2, 2417, 2, 2419, 2, 2437, 2, 2439, 2, 2446, 2, 2449, 2, 2450, 2, 2453, 2, 2474, 2, 2476, 2, 2482, 2, 2484, 2, 2484, 2, 2488, 2, 2491, 2, 2494, 2, 2502, 2, 2505, 2, 2506, 2, 2509, 2, 2512, 2, 2521, 2, 2521, 2, 2526, 2, 2527, 2, 2529, 2, 2533, 2, 2536, 2, 2547, 2, 2563, 2, 2565, 2, 2567, 2, 2572, 2, 2577, 2, 2578, 2, 2581, 2, 2602, 2, 2604, 2, 2610, 2, 2612, 2, 2613, 2, 2615, 2, 2616, 2, 2618, 2, 2619, 2, 2622, 2, 2622, 2, 2624, 2, 2628, 2, 2633, 2, 2634, 2, 2637, 2, 2639, 2, 2643, 2, 2643, 2, 2651, 2, 2654, 2, 2656, 2, 2656, 2, 2664, 2, 2679, 2, 2691, 2, 2693, 2, 2695, 2, 2703, 2, 2705, 2, 2707, 2, 2709, 2, 2730, 2, 2732, 2, 2738, 2, 2740, 2, 2741, 2, 2743, 2, 2747, 2, 2750, 2, 2759, 2, 2761, 2, 2763, 2, 2765, 2, 2767, 2, 2770, 2, 2770, 2, 2786, 2, 2789, 2, 2792, 2, 2801, 2, 2811, 2, 2811, 2, 2819, 2, 2821, 2, 2823, 2, 2830, 2, 2833, 2, 2834, 2, 2837, 2, 2858, 2, 2860, 2, 2866, 2, 2868, 2, 2869, 2, 2871, 2, 2875, 2, 2878, 2, 2886, 2, 2889, 2, 2890, 2, 2893, 2, 2895, 2, 2904, 2, 2905, 2, 2910, 2, 2911, 2, 2913, 2, 2917, 2, 2920, 2, 2929, 2, 2931, 2, 2931, 2, 2948, 2, 2949, 2, 2951, 2, 2956, 2, 2960, 2, 2962, 2, 2964, 2, 2967, 2, 2971, 2, 2972, 2, 2974, 2, 2974, 2, 2976, 2, 2977, 2, 2981, 2, 2982, 2, 2986, 2, 2988, 2, 2992, 2, 3003, 2, 3008, 2, 3012, 2, 3016, 2, 3018, 2, 3020, 2, 3023, 2, 3026, 2, 3026, 2, 3033, 2, 3033, 2, 3048, 2, 3057, 2, 3074, 2, 3077, 2, 3079, 2, 3086, 2, 3088, 2, 3090, 2, 3092, 2, 3114, 2, 3116, 2, 3131, 2, 3135, 2, 3142, 2, 3144, 2, 3146, 2, 3148, 2, 3151, 2, 3159, 2, 3160, 2, 3162, 2, 3164, 2, 3170, 2, 3173, 2, 3176, 2, 3185, 2, 3202, 2, 3205, 2, 3207, 2, 3214, 2, 3216, 2, 3218, 2, 3220, 2, 3242, 2, 3244, 2, 3253, 2, 3255, 2, 3259, 2, 3262, 2, 3270, 2, 3272, 2, 3274, 2, 3276, 2, 3279, 2, 3287, 2, 3288, 2, 3296, 2, 3296, 2, 3298, 2, 3301, 2, 3304, 2, 3313, 2, 3315, 2, 3316, 2, 3331, 2, 3333, 2, 3335, 2, 3342, 2, 3344, 2, 3346, 2, 3348, 2, 3388, 2, 3391, 2, 3398, 2, 3400, 2, 3402, 2, 3404, 2, 3408, 2, 3414, 2, 3417, 2, 3425, 2, 3429, 2, 3432, 2, 3441, 2, 3452, 2, 3457, 2, 3460, 2, 3461, 2, 3463, 2, 3480, 2, 3484, 2, 3507, 2, 3509, 2, 3517, 2, 3519, 2, 3519, 2, 3522, 2, 3528, 2, 3532, 2, 3532, 2, 3537, 2, 3542, 2, 3544, 2, 3544, 2, 3546, 2, 3553, 2, 3560, 2, 3569, 2, 3572, 2, 3573, 2, 3587, 2, 3644, 2, 3650, 2, 3664, 2, 3666, 2, 3675, 2, 3715, 2, 3716, 2, 3718, 2, 3718, 2, 3721, 2, 3722, 2, 3724, 2, 3724, 2, 3727, 2, 3727, 2, 3734, 2, 3737, 2, 3739, 2, 3745, 2, 3747, 2, 3749, 2, 3751, 2, 3751, 2, 3753, 2, 3753, 2, 3756, 2, 3757, 2, 3759, 2, 3771, 2, 3773, 2, 3775, 2, 3778, 2, 3782, 2, 3784, 2, 3784, 2, 3786, 2, 3791, 2, 3794, 2, 3803, 2, 3806, 2, 3809, 2, 3842, 2, 3842, 2, 3866, 2, 3867, 2, 3874, 2, 3883, 2, 3895, 2, 3895, 2, 3897, 2, 3897, 2, 3899, 2, 3899, 2, 3904, 2, 3913, 2, 3915, 2, 3950, 2, 3955, 2, 3974, 2, 3976, 2, 3993, 2, 3995, 2, 4030, 2, 4040, 2, 4040, 2, 4098, 2, 4171, 2, 4178, 2, 4255, 2, 4258, 2, 4295, 2, 4297, 2, 4297, 2, 4303, 2, 4303, 2, 4306, 2, 4348, 2, 4350, 2, 4682, 2, 4684, 2, 4687, 2, 4690, 2, 4696, 2, 4698, 2, 4698, 2, 4700, 2, 4703, 2, 4706, 2, 4746, 2, 4748, 2, 4751, 2, 4754, 2, 4786, 2, 4788, 2, 4791, 2, 4794, 2, 4800, 2, 4802, 2, 4802, 2, 4804, 2, 4807, 2, 4810, 2, 4824, 2, 4826, 2, 4882, 2, 4884, 2, 4887, 2, 4890, 2, 4956, 2, 4959, 2, 4961, 2, 4971, 2, 4979, 2, 4994, 2, 5009, 2, 5026, 2, 5111, 2, 5114, 2, 5119, 2, 5123, 2, 5742, 2, 5745, 2, 5761, 2, 5763, 2, 5788, 2, 5794, 2, 5868, 2, 5872, 2, 5882, 2, 5890, 2, 5902, 2, 5904, 2, 5910, 2, 5922, 2, 5942, 2, 5954, 2, 5973, 2, 5986, 2, 5998, 2, 6000, 2, 6002, 2, 6004, 2, 6005, 2, 6018, 2, 6101, 2, 6105, 2, 6105, 2, 6110, 2, 6111, 2, 6114, 2, 6123, 2, 6157, 2, 6159, 2, 6162, 2, 6171, 2, 6178, 2, 6265, 2, 6274, 2, 6316, 2, 6322, 2, 6391, 2, 6402, 2, 6432, 2, 6434, 2, 6445, 2, 6450, 2, 6461, 2, 6472, 2, 6511, 2, 6514, 2, 6518, 2, 6530, 2, 6573, 2, 6578, 2, 6603, 2, 6610, 2, 6620, 2, 6658, 2, 6685, 2, 6690, 2, 6752, 2, 6754, 2, 6782, 2, 6785, 2, 6795, 2, 6802, 2, 6811, 2, 6825, 2, 6825, 2, 6834, 2, 6847, 2, 6914, 2, 6989, 2, 6994, 2, 7003, 2, 7021, 2, 7029, 2, 7042, 2, 7157, 2, 7170, 2, 7225, 2, 7234, 2, 7243, 2, 7247, 2, 7295, 2, 7298, 2, 7306, 2, 7378, 2, 7380, 2, 7382, 2, 7416, 2, 7418, 2, 7419, 2, 7426, 2, 7671, 2, 7677, 2, 7959, 2, 7962, 2, 7967, 2, 7970, 2, 8007, 2, 8010, 2, 8015, 2, 8018, 2, 8025, 2, 8027, 2, 8027, 2, 8029, 2, 8029, 2, 8031, 2, 8031, 2, 8033, 2, 8063, 2, 8066, 2, 8118, 2, 8120, 2, 8126, 2, 8128, 2, 8128, 2, 8132, 2, 8134, 2, 8136, 2, 8142, 2, 8146, 2, 8149, 2, 8152, 2, 8157, 2, 8162, 2, 8174, 2, 8180, 2, 8182, 2, 8184, 2, 8190, 2, 8257, 2, 8258, 2, 8278, 2, 8278, 2, 8307, 2, 8307, 2, 8321, 2, 8321, 2, 8338, 2, 8350, 2, 8402, 2, 8414, 2, 8419, 2, 8419, 2, 8423, 2, 8434, 2, 8452, 2, 8452, 2, 8457, 2, 8457, 2, 8460, 2, 8469, 2, 8471, 2, 8471, 2, 8474, 2, 8479, 2, 8486, 2, 8486, 2, 8488, 2, 8488, 2, 8490, 2, 8490, 2, 8492, 2, 8507, 2, 8510, 2, 8513, 2, 8519, 2, 8523, 2, 8528, 2, 8528, 2, 8546, 2, 8586, 2, 11266, 2, 11312, 2, 11314, 2, 11360, 2, 11362, 2, 11494, 2, 11501, 2, 11509, 2, 11522, 2, 11559, 2, 11561, 2, 11561, 2, 11567, 2, 11567, 2, 11570, 2, 11625, 2, 11633, 2, 11633, 2, 11649, 2, 11672, 2, 11682, 2, 11688, 2, 11690, 2, 11696, 2, 11698, 2, 11704, 2, 11706, 2, 11712, 2, 11714, 2, 11720, 2, 11722, 2, 11728, 2, 11730, 2, 11736, 2, 11738, 2, 11744, 2, 11746, 2, 11777, 2, 12295, 2, 12297, 2, 12323, 2, 12337, 2, 12339, 2, 12343, 2, 12346, 2, 12350, 2, 12355, 2, 12440, 2, 12443, 2, 12449, 2, 12451, 2, 12540, 2, 12542, 2, 12545, 2, 12551, 2, 12591, 2, 12595, 2, 12688, 2, 12706, 2, 12732, 2, 12786, 2, 12801, 2, 13314, 2, 19895, 2, 19970, 2, 40919, 2, 40962, 2, 42126, 2, 42194, 2, 42239, 2, 42242, 2, 42510, 2, 42514, 2, 42541, 2, 42562, 2, 42609, 2, 42614, 2, 42623, 2, 42625, 2, 42739, 2, 42777, 2, 42785, 2, 42788, 2, 42890, 2, 42893, 2, 42928, 2, 42930, 2, 42937, 2, 43001, 2, 43049, 2, 43074, 2, 43125, 2, 43138, 2, 43207, 2, 43218, 2, 43227, 2, 43234, 2, 43257, 2, 43261, 2, 43261, 2, 43263, 2, 43263, 2, 43266, 2, 43311, 2, 43314, 2, 43349, 2, 43362, 2, 43390, 2, 43394, 2, 43458, 2, 43473, 2, 43483, 2, 43490, 2, 43520, 2, 43522, 2, 43576, 2, 43586, 2, 43599, 2, 43602, 2, 43611, 2, 43618, 2, 43640, 2, 43644, 2, 43716, 2, 43741, 2, 43743, 2, 43746, 2, 43761, 2, 43764, 2, 43768, 2, 43779, 2, 43784, 2, 43787, 2, 43792, 2, 43795, 2, 43800, 2, 43810, 2, 43816, 2, 43818, 2, 43824, 2, 43826, 2, 43868, 2, 43870, 2, 43879, 2, 43890, 2, 44012, 2, 44014, 2, 44015, 2, 44018, 2, 44027, 2, 44034, 2, 55205, 2, 55218, 2, 55240, 2, 55245, 2, 55293, 2, 63746, 2, 64111, 2, 64114, 2, 64219, 2, 64258, 2, 64264, 2, 64277, 2, 64281, 2, 64287, 2, 64298, 2, 64300, 2, 64312, 2, 64314, 2, 64318, 2, 64320, 2, 64320, 2, 64322, 2, 64323, 2, 64325, 2, 64326, 2, 64328, 2, 64435, 2, 64469, 2, 64831, 2, 64850, 2, 64913, 2, 64916, 2, 64969, 2, 65010, 2, 65021, 2, 65026, 2, 65041, 2, 65058, 2, 65073, 2, 65077, 2, 65078, 2, 65103, 2, 65105, 2, 65138, 2, 65142, 2, 65144, 2, 65278, 2, 65298, 2, 65307, 2, 65315, 2, 65340, 2, 65345, 2, 65345, 2, 65347, 2, 65372, 2, 65384, 2, 65472, 2, 65476, 2, 65481, 2, 65484, 2, 65489, 2, 65492, 2, 65497, 2, 65500, 2, 65502, 2, 2, 3, 13, 3, 15, 3, 40, 3, 42, 3, 60, 3, 62, 3, 63, 3, 65, 3, 79, 3, 82, 3, 95, 3, 130, 3, 252, 3, 322, 3, 374, 3, 511, 3, 511, 3, 642, 3, 670, 3, 674, 3, 722, 3, 738, 3, 738, 3, 770, 3, 801, 3, 818, 3, 844, 3, 850, 3, 892, 3, 898, 3, 927, 3, 930, 3, 965, 3, 970, 3, 977, 3, 979, 3, 983, 3, 1026, 3, 1183, 3, 1186, 3, 1195, 3, 1202, 3, 1237, 3, 1242, 3, 1277, 3, 1282, 3, 1321, 3, 1330, 3, 1381, 3, 1538, 3, 1848, 3, 1858, 3, 1879, 3, 1890, 3, 1897, 3, 2050, 3, 2055, 3, 2058, 3, 2058, 3, 2060, 3, 2103, 3, 2105, 3, 2106, 3, 2110, 3, 2110, 3, 2113, 3, 2135, 3, 2146, 3, 2168, 3, 2178, 3, 2208, 3, 2274, 3, 2292, 3, 2294, 3, 2295, 3, 2306, 3, 2327, 3, 2338, 3, 2363, 3, 2434, 3, 2489, 3, 2496, 3, 2497, 3, 2562, 3, 2565, 3, 2567, 3, 2568, 3, 2574, 3, 2581, 3, 2583, 3, 2585, 3, 2587, 3, 2613, 3, 2618, 3, 2620, 3, 2625, 3, 2625, 3, 2658, 3, 2686, 3, 2690, 3, 2718, 3, 2754, 3, 2761, 3, 2763, 3, 2792, 3, 2818, 3, 2871, 3, 2882, 3, 2903, 3, 2914, 3, 2932, 3, 2946, 3, 2963, 3, 3074, 3, 3146, 3, 3202, 3, 3252, 3, 3266, 3, 3316, 3, 4098, 3, 4168, 3, 4200, 3, 4209, 3, 4225, 3, 4284, 3, 4306, 3, 4330, 3, 4338, 3, 4347, 3, 4354, 3, 4406, 3, 4408, 3, 4417, 3, 4434, 3, 4469, 3, 4472, 3, 4472, 3, 4482, 3, 4550, 3, 4556, 3, 4558, 3, 4562, 3, 4572, 3, 4574, 3, 4574, 3, 4610, 3, 4627, 3, 4629, 3, 4665, 3, 4672, 3, 4672, 3, 4738, 3, 4744, 3, 4746, 3, 4746, 3, 4748, 3, 4751, 3, 4753, 3, 4767, 3, 4769, 3, 4778, 3, 4786, 3, 4844, 3, 4850, 3, 4859, 3, 4866, 3, 4869, 3, 4871, 3, 4878, 3, 4881, 3, 4882, 3, 4885, 3, 4906, 3, 4908, 3, 4914, 3, 4916, 3, 4917, 3, 4919, 3, 4923, 3, 4926, 3, 4934, 3, 4937, 3, 4938, 3, 4941, 3, 4943, 3, 4946, 3, 4946, 3, 4953, 3, 4953, 3, 4959, 3, 4965, 3, 4968, 3, 4974, 3, 4978, 3, 4982, 3, 5122, 3, 5196, 3, 5202, 3, 5211, 3, 5250, 3, 5319, 3, 5321, 3, 5321, 3, 5330, 3, 5339, 3, 5506, 3, 5559, 3, 5562, 3, 5570, 3, 5594, 3, 5599, 3, 5634, 3, 5698, 3, 5702, 3, 5702, 3, 5714, 3, 5723, 3, 5762, 3, 5817, 3, 5826, 3, 5835, 3, 5890, 3, 5915, 3, 5919, 3, 5933, 3, 5938, 3, 5947, 3, 6306, 3, 6379, 3, 6401, 3, 6401, 3, 6850, 3, 6906, 3, 7170, 3, 7178, 3, 7180, 3, 7224, 3, 7226, 3, 7234, 3, 7250, 3, 7259, 3, 7284, 3, 7313, 3, 7316, 3, 7337, 3, 7339, 3, 7352, 3, 8194, 3, 9115, 3, 9218, 3, 9328, 3, 9346, 3, 9541, 3, 12290, 3, 13360, 3, 17410, 3, 17992, 3, 26626, 3, 27194, 3, 27202, 3, 27232, 3, 27234, 3, 27243, 3, 27346, 3, 27375, 3, 27378, 3, 27382, 3, 27394, 3, 27448, 3, 27458, 3, 27461, 3, 27474, 3, 27483, 3, 27493, 3, 27513, 3, 27519, 3, 27537, 3, 28418, 3, 28486, 3, 28498, 3, 28544, 3, 28561, 3, 28577, 3, 28642, 3, 28642, 3, 28674, 3, 34798, 3, 34818, 3, 35572, 3, 45058, 3, 45059, 3, 48130, 3, 48236, 3, 48242, 3, 48254, 3, 48258, 3, 48266, 3, 48274, 3, 48283, 3, 48287, 3, 48288, 3, 53607, 3, 53611, 3, 53615, 3, 53620, 3, 53629, 3, 53636, 3, 53639, 3, 53645, 3, 53676, 3, 53679, 3, 53828, 3, 53830, 3, 54274, 3, 54358, 3, 54360, 3, 54430, 3, 54432, 3, 54433, 3, 54436, 3, 54436, 3, 54439, 3, 54440, 3, 54443, 3, 54446, 3, 54448, 3, 54459, 3, 54461, 3, 54461, 3, 54463, 3, 54469, 3, 54471, 3, 54535, 3, 54537, 3, 54540, 3, 54543, 3, 54550, 3, 54552, 3, 54558, 3, 54560, 3, 54587, 3, 54589, 3, 54592, 3, 54594, 3, 54598, 3, 54600, 3, 54600, 3, 54604, 3, 54610, 3, 54612, 3, 54951, 3, 54954, 3, 54978, 3, 54980, 3, 55004, 3, 55006, 3, 55036, 3, 55038, 3, 55062, 3, 55064, 3, 55094, 3, 55096, 3, 55120, 3, 55122, 3, 55152, 3, 55154, 3, 55178, 3, 55180, 3, 55210, 3, 55212, 3, 55236, 3, 55238, 3, 55245, 3, 55248, 3, 55297, 3, 55810, 3, 55864, 3, 55869, 3, 55918, 3, 55927, 3, 55927, 3, 55942, 3, 55942, 3, 55965, 3, 55969, 3, 55971, 3, 55985, 3, 57346, 3, 57352, 3, 57354, 3, 57370, 3, 57373, 3, 57379, 3, 57381, 3, 57382, 3, 57384, 3, 57388, 3, 59394, 3, 59590, 3, 59602, 3, 59608, 3, 59650, 3, 59724, 3, 59730, 3, 59739, 3, 60930, 3, 60933, 3, 60935, 3, 60961, 3, 60963, 3, 60964, 3, 60966, 3, 60966, 3, 60969, 3, 60969, 3, 60971, 3, 60980, 3, 60982, 3, 60985, 3, 60987, 3, 60987, 3, 60989, 3, 60989, 3, 60996, 3, 60996, 3, 61001, 3, 61001, 3, 61003, 3, 61003, 3, 61005, 3, 61005, 3, 61007, 3, 61009, 3, 61011, 3, 61012, 3, 61014, 3, 61014, 3, 61017, 3, 61017, 3, 61019, 3, 61019, 3, 61021, 3, 61021, 3, 61023, 3, 61023, 3, 61025, 3, 61025, 3, 61027, 3, 61028, 3, 61030, 3, 61030, 3, 61033, 3, 61036, 3, 61038, 3, 61044, 3, 61046, 3, 61049, 3, 61051, 3, 61054, 3, 61056, 3, 61056, 3, 61058, 3, 61067, 3, 61069, 3, 61085, 3, 61091, 3, 61093, 3, 61095, 3, 61099, 3, 61101, 3, 61117, 3, 2, 4, 42712, 4, 42754, 4, 46902, 4, 46914, 4, 47135, 4, 47138, 4, 52899, 4, 63490, 4, 64031, 4, 258, 16, 497, 16, 175, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 3, 43, 3, 2, 2, 2, 5, 48, 3, 2, 2, 2, 7, 54, 3, 2, 2, 2, 9, 59, 3, 2, 2, 2, 11, 69, 3, 2, 2, 2, 13, 71, 3, 2, 2, 2, 15, 73, 3, 2, 2, 2, 17, 75, 3, 2, 2, 2, 19, 77, 3, 2, 2, 2, 21, 79, 3, 2, 2, 2, 23, 89, 3, 2, 2, 2, 25, 96, 3, 2, 2, 2, 27, 104, 3, 2, 2, 2, 29, 108, 3, 2, 2, 2, 31, 130, 3, 2, 2, 2, 33, 132, 3, 2, 2, 2, 35, 139, 3, 2, 2, 2, 37, 145, 3, 2, 2, 2, 39, 152, 3, 2, 2, 2, 41, 163, 3, 2, 2, 2, 43, 44, 7, 118, 2, 2, 44, 45, 7, 116, 2, 2, 45, 46, 7, 119, 2, 2, 46, 47, 7, 103, 2, 2, 47, 4, 3, 2, 2, 2, 48, 49, 7, 104, 2, 2, 49, 50, 7, 99, 2, 2, 50, 51, 7, 110, 2, 2, 51, 52, 7, 117, 2, 2, 52, 53, 7, 103, 2, 2, 53, 6, 3, 2, 2, 2, 54, 55, 7, 112, 2, 2, 55, 56, 7, 119, 2, 2, 56, 57, 7, 110, 2, 2, 57, 58, 7, 110, 2, 2, 58, 8, 3, 2, 2, 2, 59, 60, 7, 119, 2, 2, 60, 61, 7, 112, 2, 2, 61, 62, 7, 102, 2, 2, 62, 63, 7, 103, 2, 2, 63, 64, 7, 104, 2, 2, 64, 65, 7, 107, 2, 2, 65, 66, 7, 112, 2, 2, 66, 67, 7, 103, 2, 2, 67, 68, 7, 102, 2, 2, 68, 10, 3, 2, 2, 2, 69, 70, 7, 46, 2, 2, 70, 12, 3, 2, 2, 2, 71, 72, 7, 93, 2, 2, 72, 14, 3, 2, 2, 2, 73, 74, 7, 95, 2, 2, 74, 16, 3, 2, 2, 2, 75, 76, 7, 127, 2, 2, 76, 18, 3, 2, 2, 2, 77, 78, 7, 125, 2, 2, 78, 20, 3, 2, 2, 2, 79, 80, 7, 60, 2, 2, 80, 22, 3, 2, 2, 2, 81, 82, 7, 36, 2, 2, 82, 83, 5, 25, 13, 2, 83, 84, 7, 36, 2, 2, 84, 90, 3, 2, 2, 2, 85, 86, 7, 41, 2, 2, 86, 87, 5, 27, 14, 2, 87, 88, 7, 41, 2, 2, 88, 90, 3, 2, 2, 2, 89, 81, 3, 2, 2, 2, 89, 85, 3, 2, 2, 2, 90, 24, 3, 2, 2, 2, 91, 92, 7, 94, 2, 2, 92, 95, 7, 36, 2, 2, 93, 95, 10, 2, 2, 2, 94, 91, 3, 2, 2, 2, 94, 93, 3, 2, 2, 2, 95, 98, 3, 2, 2, 2, 96, 94, 3, 2, 2, 2, 96, 97, 3, 2, 2, 2, 97, 26, 3, 2, 2, 2, 98, 96, 3, 2, 2, 2, 99, 100, 7, 94, 2, 2, 100, 103, 7, 41, 2, 2, 101, 103, 10, 3, 2, 2, 102, 99, 3, 2, 2, 2, 102, 101, 3, 2, 2, 2, 103, 106, 3, 2, 2, 2, 104, 102, 3, 2, 2, 2, 104, 105, 3, 2, 2, 2, 105, 28, 3, 2, 2, 2, 106, 104, 3, 2, 2, 2, 107, 109, 7, 47, 2, 2, 108, 107, 3, 2, 2, 2, 108, 109, 3, 2, 2, 2, 109, 110, 3, 2, 2, 2, 110, 117, 5, 31, 16, 2, 111, 113, 7, 48, 2, 2, 112, 114, 9, 4, 2, 2, 113, 112, 3, 2, 2, 2, 114, 115, 3, 2, 2, 2, 115, 113, 3, 2, 2, 2, 115, 116, 3, 2, 2, 2, 116, 118, 3, 2, 2, 2, 117, 111, 3, 2, 2, 2, 117, 118, 3, 2, 2, 2, 118, 120, 3, 2, 2, 2, 119, 121, 5, 33, 17, 2, 120, 119, 3, 2, 2, 2, 120, 121, 3, 2, 2, 2, 121, 30, 3, 2, 2, 2, 122, 131, 7, 50, 2, 2, 123, 127, 9, 5, 2, 2, 124, 126, 9, 4, 2, 2, 125, 124, 3, 2, 2, 2, 126, 129, 3, 2, 2, 2, 127, 125, 3, 2, 2, 2, 127, 128, 3, 2, 2, 2, 128, 131, 3, 2, 2, 2, 129, 127, 3, 2, 2, 2, 130, 122, 3, 2, 2, 2, 130, 123, 3, 2, 2, 2, 131, 32, 3, 2, 2, 2, 132, 134, 9, 6, 2, 2, 133, 135, 9, 7, 2, 2, 134, 133, 3, 2, 2, 2, 134, 135, 3, 2, 2, 2, 135, 136, 3, 2, 2, 2, 136, 137, 5, 31, 16, 2, 137, 34, 3, 2, 2, 2, 138, 140, 9, 8, 2, 2, 139, 138, 3, 2, 2, 2, 140, 141, 3, 2, 2, 2, 141, 139, 3, 2, 2, 2, 141, 142, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 144, 8, 18, 2, 2, 144, 36, 3, 2, 2, 2, 145, 149, 9, 10, 2, 2, 146, 148, 9, 11, 2, 2, 147, 146, 3, 2, 2, 2, 148, 151, 3, 2, 2, 2, 149, 147, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 38, 3, 2, 2, 2, 151, 149, 3, 2, 2, 2, 152, 153, 7, 49, 2, 2, 153, 154, 7, 49, 2, 2, 154, 158, 3, 2, 2, 2, 155, 157, 10, 9, 2, 2, 156, 155, 3, 2, 2, 2, 157, 160, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 158, 159, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 158, 3, 2, 2, 2, 161, 162, 8, 20, 3, 2, 162, 40, 3, 2, 2, 2, 163, 164, 11, 2, 2, 2, 164, 42, 3, 2, 2, 2, 18, 2, 89, 94, 96, 102, 104, 108, 115, 117, 120, 127, 130, 134, 141, 149, 158, 4, 8, 2, 2, 2, 3, 2]
\ No newline at end of file
+[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 19, 181, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 92, 10, 12, 3, 13, 3, 13, 3, 13, 7, 13, 97, 10, 13, 12, 13, 14, 13, 100, 11, 13, 3, 14, 3, 14, 3, 14, 7, 14, 105, 10, 14, 12, 14, 14, 14, 108, 11, 14, 3, 15, 5, 15, 111, 10, 15, 3, 15, 3, 15, 3, 15, 6, 15, 116, 10, 15, 13, 15, 14, 15, 117, 5, 15, 120, 10, 15, 3, 15, 5, 15, 123, 10, 15, 3, 16, 3, 16, 3, 16, 7, 16, 128, 10, 16, 12, 16, 14, 16, 131, 11, 16, 5, 16, 133, 10, 16, 3, 17, 3, 17, 5, 17, 137, 10, 17, 3, 17, 3, 17, 3, 18, 6, 18, 142, 10, 18, 13, 18, 14, 18, 143, 3, 18, 3, 18, 3, 19, 3, 19, 7, 19, 150, 10, 19, 12, 19, 14, 19, 153, 11, 19, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 159, 10, 20, 12, 20, 14, 20, 162, 11, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 170, 10, 21, 12, 21, 14, 21, 173, 11, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 171, 2, 2, 23, 3, 2, 3, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 2, 27, 2, 2, 29, 2, 14, 31, 2, 2, 33, 2, 2, 35, 2, 15, 37, 2, 16, 39, 2, 17, 41, 2, 18, 43, 2, 19, 3, 2, 10, 3, 2, 36, 36, 3, 2, 41, 41, 3, 2, 50, 59, 3, 2, 51, 59, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 13, 2, 11, 15, 34, 34, 135, 135, 162, 162, 5762, 5762, 8194, 8204, 8234, 8235, 8241, 8241, 8289, 8289, 12290, 12290, 65281, 65281, 4, 2, 12, 12, 15, 15, 4, 575, 2, 38, 2, 38, 2, 67, 2, 92, 2, 97, 2, 97, 2, 99, 2, 124, 2, 172, 2, 172, 2, 183, 2, 183, 2, 188, 2, 188, 2, 194, 2, 216, 2, 218, 2, 248, 2, 250, 2, 707, 2, 712, 2, 723, 2, 738, 2, 742, 2, 750, 2, 750, 2, 752, 2, 752, 2, 882, 2, 886, 2, 888, 2, 889, 2, 892, 2, 895, 2, 897, 2, 897, 2, 904, 2, 904, 2, 906, 2, 908, 2, 910, 2, 910, 2, 912, 2, 931, 2, 933, 2, 1015, 2, 1017, 2, 1155, 2, 1164, 2, 1329, 2, 1331, 2, 1368, 2, 1371, 2, 1371, 2, 1379, 2, 1417, 2, 1490, 2, 1516, 2, 1522, 2, 1524, 2, 1570, 2, 1612, 2, 1648, 2, 1649, 2, 1651, 2, 1749, 2, 1751, 2, 1751, 2, 1767, 2, 1768, 2, 1776, 2, 1777, 2, 1788, 2, 1790, 2, 1793, 2, 1793, 2, 1810, 2, 1810, 2, 1812, 2, 1841, 2, 1871, 2, 1959, 2, 1971, 2, 1971, 2, 1996, 2, 2028, 2, 2038, 2, 2039, 2, 2044, 2, 2044, 2, 2050, 2, 2071, 2, 2076, 2, 2076, 2, 2086, 2, 2086, 2, 2090, 2, 2090, 2, 2114, 2, 2138, 2, 2210, 2, 2230, 2, 2232, 2, 2239, 2, 2310, 2, 2363, 2, 2367, 2, 2367, 2, 2386, 2, 2386, 2, 2394, 2, 2403, 2, 2419, 2, 2434, 2, 2439, 2, 2446, 2, 2449, 2, 2450, 2, 2453, 2, 2474, 2, 2476, 2, 2482, 2, 2484, 2, 2484, 2, 2488, 2, 2491, 2, 2495, 2, 2495, 2, 2512, 2, 2512, 2, 2526, 2, 2527, 2, 2529, 2, 2531, 2, 2546, 2, 2547, 2, 2567, 2, 2572, 2, 2577, 2, 2578, 2, 2581, 2, 2602, 2, 2604, 2, 2610, 2, 2612, 2, 2613, 2, 2615, 2, 2616, 2, 2618, 2, 2619, 2, 2651, 2, 2654, 2, 2656, 2, 2656, 2, 2676, 2, 2678, 2, 2695, 2, 2703, 2, 2705, 2, 2707, 2, 2709, 2, 2730, 2, 2732, 2, 2738, 2, 2740, 2, 2741, 2, 2743, 2, 2747, 2, 2751, 2, 2751, 2, 2770, 2, 2770, 2, 2786, 2, 2787, 2, 2811, 2, 2811, 2, 2823, 2, 2830, 2, 2833, 2, 2834, 2, 2837, 2, 2858, 2, 2860, 2, 2866, 2, 2868, 2, 2869, 2, 2871, 2, 2875, 2, 2879, 2, 2879, 2, 2910, 2, 2911, 2, 2913, 2, 2915, 2, 2931, 2, 2931, 2, 2949, 2, 2949, 2, 2951, 2, 2956, 2, 2960, 2, 2962, 2, 2964, 2, 2967, 2, 2971, 2, 2972, 2, 2974, 2, 2974, 2, 2976, 2, 2977, 2, 2981, 2, 2982, 2, 2986, 2, 2988, 2, 2992, 2, 3003, 2, 3026, 2, 3026, 2, 3079, 2, 3086, 2, 3088, 2, 3090, 2, 3092, 2, 3114, 2, 3116, 2, 3131, 2, 3135, 2, 3135, 2, 3162, 2, 3164, 2, 3170, 2, 3171, 2, 3202, 2, 3202, 2, 3207, 2, 3214, 2, 3216, 2, 3218, 2, 3220, 2, 3242, 2, 3244, 2, 3253, 2, 3255, 2, 3259, 2, 3263, 2, 3263, 2, 3296, 2, 3296, 2, 3298, 2, 3299, 2, 3315, 2, 3316, 2, 3335, 2, 3342, 2, 3344, 2, 3346, 2, 3348, 2, 3388, 2, 3391, 2, 3391, 2, 3408, 2, 3408, 2, 3414, 2, 3416, 2, 3425, 2, 3427, 2, 3452, 2, 3457, 2, 3463, 2, 3480, 2, 3484, 2, 3507, 2, 3509, 2, 3517, 2, 3519, 2, 3519, 2, 3522, 2, 3528, 2, 3587, 2, 3634, 2, 3636, 2, 3637, 2, 3650, 2, 3656, 2, 3715, 2, 3716, 2, 3718, 2, 3718, 2, 3721, 2, 3722, 2, 3724, 2, 3724, 2, 3727, 2, 3727, 2, 3734, 2, 3737, 2, 3739, 2, 3745, 2, 3747, 2, 3749, 2, 3751, 2, 3751, 2, 3753, 2, 3753, 2, 3756, 2, 3757, 2, 3759, 2, 3762, 2, 3764, 2, 3765, 2, 3775, 2, 3775, 2, 3778, 2, 3782, 2, 3784, 2, 3784, 2, 3806, 2, 3809, 2, 3842, 2, 3842, 2, 3906, 2, 3913, 2, 3915, 2, 3950, 2, 3978, 2, 3982, 2, 4098, 2, 4140, 2, 4161, 2, 4161, 2, 4178, 2, 4183, 2, 4188, 2, 4191, 2, 4195, 2, 4195, 2, 4199, 2, 4200, 2, 4208, 2, 4210, 2, 4215, 2, 4227, 2, 4240, 2, 4240, 2, 4258, 2, 4295, 2, 4297, 2, 4297, 2, 4303, 2, 4303, 2, 4306, 2, 4348, 2, 4350, 2, 4682, 2, 4684, 2, 4687, 2, 4690, 2, 4696, 2, 4698, 2, 4698, 2, 4700, 2, 4703, 2, 4706, 2, 4746, 2, 4748, 2, 4751, 2, 4754, 2, 4786, 2, 4788, 2, 4791, 2, 4794, 2, 4800, 2, 4802, 2, 4802, 2, 4804, 2, 4807, 2, 4810, 2, 4824, 2, 4826, 2, 4882, 2, 4884, 2, 4887, 2, 4890, 2, 4956, 2, 4994, 2, 5009, 2, 5026, 2, 5111, 2, 5114, 2, 5119, 2, 5123, 2, 5742, 2, 5745, 2, 5761, 2, 5763, 2, 5788, 2, 5794, 2, 5868, 2, 5872, 2, 5882, 2, 5890, 2, 5902, 2, 5904, 2, 5907, 2, 5922, 2, 5939, 2, 5954, 2, 5971, 2, 5986, 2, 5998, 2, 6000, 2, 6002, 2, 6018, 2, 6069, 2, 6105, 2, 6105, 2, 6110, 2, 6110, 2, 6178, 2, 6265, 2, 6274, 2, 6314, 2, 6316, 2, 6316, 2, 6322, 2, 6391, 2, 6402, 2, 6432, 2, 6482, 2, 6511, 2, 6514, 2, 6518, 2, 6530, 2, 6573, 2, 6578, 2, 6603, 2, 6658, 2, 6680, 2, 6690, 2, 6742, 2, 6825, 2, 6825, 2, 6919, 2, 6965, 2, 6983, 2, 6989, 2, 7045, 2, 7074, 2, 7088, 2, 7089, 2, 7100, 2, 7143, 2, 7170, 2, 7205, 2, 7247, 2, 7249, 2, 7260, 2, 7295, 2, 7298, 2, 7306, 2, 7403, 2, 7406, 2, 7408, 2, 7411, 2, 7415, 2, 7416, 2, 7426, 2, 7617, 2, 7682, 2, 7959, 2, 7962, 2, 7967, 2, 7970, 2, 8007, 2, 8010, 2, 8015, 2, 8018, 2, 8025, 2, 8027, 2, 8027, 2, 8029, 2, 8029, 2, 8031, 2, 8031, 2, 8033, 2, 8063, 2, 8066, 2, 8118, 2, 8120, 2, 8126, 2, 8128, 2, 8128, 2, 8132, 2, 8134, 2, 8136, 2, 8142, 2, 8146, 2, 8149, 2, 8152, 2, 8157, 2, 8162, 2, 8174, 2, 8180, 2, 8182, 2, 8184, 2, 8190, 2, 8307, 2, 8307, 2, 8321, 2, 8321, 2, 8338, 2, 8350, 2, 8452, 2, 8452, 2, 8457, 2, 8457, 2, 8460, 2, 8469, 2, 8471, 2, 8471, 2, 8474, 2, 8479, 2, 8486, 2, 8486, 2, 8488, 2, 8488, 2, 8490, 2, 8490, 2, 8492, 2, 8507, 2, 8510, 2, 8513, 2, 8519, 2, 8523, 2, 8528, 2, 8528, 2, 8546, 2, 8586, 2, 11266, 2, 11312, 2, 11314, 2, 11360, 2, 11362, 2, 11494, 2, 11501, 2, 11504, 2, 11508, 2, 11509, 2, 11522, 2, 11559, 2, 11561, 2, 11561, 2, 11567, 2, 11567, 2, 11570, 2, 11625, 2, 11633, 2, 11633, 2, 11650, 2, 11672, 2, 11682, 2, 11688, 2, 11690, 2, 11696, 2, 11698, 2, 11704, 2, 11706, 2, 11712, 2, 11714, 2, 11720, 2, 11722, 2, 11728, 2, 11730, 2, 11736, 2, 11738, 2, 11744, 2, 12295, 2, 12297, 2, 12323, 2, 12331, 2, 12339, 2, 12343, 2, 12346, 2, 12350, 2, 12355, 2, 12440, 2, 12445, 2, 12449, 2, 12451, 2, 12540, 2, 12542, 2, 12545, 2, 12551, 2, 12591, 2, 12595, 2, 12688, 2, 12706, 2, 12732, 2, 12786, 2, 12801, 2, 13314, 2, 19895, 2, 19970, 2, 40919, 2, 40962, 2, 42126, 2, 42194, 2, 42239, 2, 42242, 2, 42510, 2, 42514, 2, 42529, 2, 42540, 2, 42541, 2, 42562, 2, 42608, 2, 42625, 2, 42655, 2, 42658, 2, 42737, 2, 42777, 2, 42785, 2, 42788, 2, 42890, 2, 42893, 2, 42928, 2, 42930, 2, 42937, 2, 43001, 2, 43011, 2, 43013, 2, 43015, 2, 43017, 2, 43020, 2, 43022, 2, 43044, 2, 43074, 2, 43125, 2, 43140, 2, 43189, 2, 43252, 2, 43257, 2, 43261, 2, 43261, 2, 43263, 2, 43263, 2, 43276, 2, 43303, 2, 43314, 2, 43336, 2, 43362, 2, 43390, 2, 43398, 2, 43444, 2, 43473, 2, 43473, 2, 43490, 2, 43494, 2, 43496, 2, 43505, 2, 43516, 2, 43520, 2, 43522, 2, 43562, 2, 43586, 2, 43588, 2, 43590, 2, 43597, 2, 43618, 2, 43640, 2, 43644, 2, 43644, 2, 43648, 2, 43697, 2, 43699, 2, 43699, 2, 43703, 2, 43704, 2, 43707, 2, 43711, 2, 43714, 2, 43714, 2, 43716, 2, 43716, 2, 43741, 2, 43743, 2, 43746, 2, 43756, 2, 43764, 2, 43766, 2, 43779, 2, 43784, 2, 43787, 2, 43792, 2, 43795, 2, 43800, 2, 43810, 2, 43816, 2, 43818, 2, 43824, 2, 43826, 2, 43868, 2, 43870, 2, 43879, 2, 43890, 2, 44004, 2, 44034, 2, 55205, 2, 55218, 2, 55240, 2, 55245, 2, 55293, 2, 63746, 2, 64111, 2, 64114, 2, 64219, 2, 64258, 2, 64264, 2, 64277, 2, 64281, 2, 64287, 2, 64287, 2, 64289, 2, 64298, 2, 64300, 2, 64312, 2, 64314, 2, 64318, 2, 64320, 2, 64320, 2, 64322, 2, 64323, 2, 64325, 2, 64326, 2, 64328, 2, 64435, 2, 64469, 2, 64831, 2, 64850, 2, 64913, 2, 64916, 2, 64969, 2, 65010, 2, 65021, 2, 65138, 2, 65142, 2, 65144, 2, 65278, 2, 65315, 2, 65340, 2, 65347, 2, 65372, 2, 65384, 2, 65472, 2, 65476, 2, 65481, 2, 65484, 2, 65489, 2, 65492, 2, 65497, 2, 65500, 2, 65502, 2, 2, 3, 13, 3, 15, 3, 40, 3, 42, 3, 60, 3, 62, 3, 63, 3, 65, 3, 79, 3, 82, 3, 95, 3, 130, 3, 252, 3, 322, 3, 374, 3, 642, 3, 670, 3, 674, 3, 722, 3, 770, 3, 801, 3, 818, 3, 844, 3, 850, 3, 887, 3, 898, 3, 927, 3, 930, 3, 965, 3, 970, 3, 977, 3, 979, 3, 983, 3, 1026, 3, 1183, 3, 1202, 3, 1237, 3, 1242, 3, 1277, 3, 1282, 3, 1321, 3, 1330, 3, 1381, 3, 1538, 3, 1848, 3, 1858, 3, 1879, 3, 1890, 3, 1897, 3, 2050, 3, 2055, 3, 2058, 3, 2058, 3, 2060, 3, 2103, 3, 2105, 3, 2106, 3, 2110, 3, 2110, 3, 2113, 3, 2135, 3, 2146, 3, 2168, 3, 2178, 3, 2208, 3, 2274, 3, 2292, 3, 2294, 3, 2295, 3, 2306, 3, 2327, 3, 2338, 3, 2363, 3, 2434, 3, 2489, 3, 2496, 3, 2497, 3, 2562, 3, 2562, 3, 2578, 3, 2581, 3, 2583, 3, 2585, 3, 2587, 3, 2613, 3, 2658, 3, 2686, 3, 2690, 3, 2718, 3, 2754, 3, 2761, 3, 2763, 3, 2790, 3, 2818, 3, 2871, 3, 2882, 3, 2903, 3, 2914, 3, 2932, 3, 2946, 3, 2963, 3, 3074, 3, 3146, 3, 3202, 3, 3252, 3, 3266, 3, 3316, 3, 4101, 3, 4153, 3, 4229, 3, 4273, 3, 4306, 3, 4330, 3, 4357, 3, 4392, 3, 4434, 3, 4468, 3, 4472, 3, 4472, 3, 4485, 3, 4532, 3, 4547, 3, 4550, 3, 4572, 3, 4572, 3, 4574, 3, 4574, 3, 4610, 3, 4627, 3, 4629, 3, 4653, 3, 4738, 3, 4744, 3, 4746, 3, 4746, 3, 4748, 3, 4751, 3, 4753, 3, 4767, 3, 4769, 3, 4778, 3, 4786, 3, 4832, 3, 4871, 3, 4878, 3, 4881, 3, 4882, 3, 4885, 3, 4906, 3, 4908, 3, 4914, 3, 4916, 3, 4917, 3, 4919, 3, 4923, 3, 4927, 3, 4927, 3, 4946, 3, 4946, 3, 4959, 3, 4963, 3, 5122, 3, 5174, 3, 5193, 3, 5196, 3, 5250, 3, 5297, 3, 5318, 3, 5319, 3, 5321, 3, 5321, 3, 5506, 3, 5552, 3, 5594, 3, 5597, 3, 5634, 3, 5681, 3, 5702, 3, 5702, 3, 5762, 3, 5804, 3, 5890, 3, 5915, 3, 6306, 3, 6369, 3, 6401, 3, 6401, 3, 6850, 3, 6906, 3, 7170, 3, 7178, 3, 7180, 3, 7216, 3, 7234, 3, 7234, 3, 7284, 3, 7313, 3, 8194, 3, 9115, 3, 9218, 3, 9328, 3, 9346, 3, 9541, 3, 12290, 3, 13360, 3, 17410, 3, 17992, 3, 26626, 3, 27194, 3, 27202, 3, 27232, 3, 27346, 3, 27375, 3, 27394, 3, 27441, 3, 27458, 3, 27461, 3, 27493, 3, 27513, 3, 27519, 3, 27537, 3, 28418, 3, 28486, 3, 28498, 3, 28498, 3, 28565, 3, 28577, 3, 28642, 3, 28642, 3, 28674, 3, 34798, 3, 34818, 3, 35572, 3, 45058, 3, 45059, 3, 48130, 3, 48236, 3, 48242, 3, 48254, 3, 48258, 3, 48266, 3, 48274, 3, 48283, 3, 54274, 3, 54358, 3, 54360, 3, 54430, 3, 54432, 3, 54433, 3, 54436, 3, 54436, 3, 54439, 3, 54440, 3, 54443, 3, 54446, 3, 54448, 3, 54459, 3, 54461, 3, 54461, 3, 54463, 3, 54469, 3, 54471, 3, 54535, 3, 54537, 3, 54540, 3, 54543, 3, 54550, 3, 54552, 3, 54558, 3, 54560, 3, 54587, 3, 54589, 3, 54592, 3, 54594, 3, 54598, 3, 54600, 3, 54600, 3, 54604, 3, 54610, 3, 54612, 3, 54951, 3, 54954, 3, 54978, 3, 54980, 3, 55004, 3, 55006, 3, 55036, 3, 55038, 3, 55062, 3, 55064, 3, 55094, 3, 55096, 3, 55120, 3, 55122, 3, 55152, 3, 55154, 3, 55178, 3, 55180, 3, 55210, 3, 55212, 3, 55236, 3, 55238, 3, 55245, 3, 59394, 3, 59590, 3, 59650, 3, 59717, 3, 60930, 3, 60933, 3, 60935, 3, 60961, 3, 60963, 3, 60964, 3, 60966, 3, 60966, 3, 60969, 3, 60969, 3, 60971, 3, 60980, 3, 60982, 3, 60985, 3, 60987, 3, 60987, 3, 60989, 3, 60989, 3, 60996, 3, 60996, 3, 61001, 3, 61001, 3, 61003, 3, 61003, 3, 61005, 3, 61005, 3, 61007, 3, 61009, 3, 61011, 3, 61012, 3, 61014, 3, 61014, 3, 61017, 3, 61017, 3, 61019, 3, 61019, 3, 61021, 3, 61021, 3, 61023, 3, 61023, 3, 61025, 3, 61025, 3, 61027, 3, 61028, 3, 61030, 3, 61030, 3, 61033, 3, 61036, 3, 61038, 3, 61044, 3, 61046, 3, 61049, 3, 61051, 3, 61054, 3, 61056, 3, 61056, 3, 61058, 3, 61067, 3, 61069, 3, 61085, 3, 61091, 3, 61093, 3, 61095, 3, 61099, 3, 61101, 3, 61117, 3, 2, 4, 42712, 4, 42754, 4, 46902, 4, 46914, 4, 47135, 4, 47138, 4, 52899, 4, 63490, 4, 64031, 4, 679, 2, 38, 2, 38, 2, 50, 2, 59, 2, 67, 2, 92, 2, 97, 2, 97, 2, 99, 2, 124, 2, 172, 2, 172, 2, 183, 2, 183, 2, 185, 2, 185, 2, 188, 2, 188, 2, 194, 2, 216, 2, 218, 2, 248, 2, 250, 2, 707, 2, 712, 2, 723, 2, 738, 2, 742, 2, 750, 2, 750, 2, 752, 2, 752, 2, 770, 2, 886, 2, 888, 2, 889, 2, 892, 2, 895, 2, 897, 2, 897, 2, 904, 2, 908, 2, 910, 2, 910, 2, 912, 2, 931, 2, 933, 2, 1015, 2, 1017, 2, 1155, 2, 1157, 2, 1161, 2, 1164, 2, 1329, 2, 1331, 2, 1368, 2, 1371, 2, 1371, 2, 1379, 2, 1417, 2, 1427, 2, 1471, 2, 1473, 2, 1473, 2, 1475, 2, 1476, 2, 1478, 2, 1479, 2, 1481, 2, 1481, 2, 1490, 2, 1516, 2, 1522, 2, 1524, 2, 1554, 2, 1564, 2, 1570, 2, 1643, 2, 1648, 2, 1749, 2, 1751, 2, 1758, 2, 1761, 2, 1770, 2, 1772, 2, 1790, 2, 1793, 2, 1793, 2, 1810, 2, 1868, 2, 1871, 2, 1971, 2, 1986, 2, 2039, 2, 2044, 2, 2044, 2, 2050, 2, 2095, 2, 2114, 2, 2141, 2, 2210, 2, 2230, 2, 2232, 2, 2239, 2, 2262, 2, 2275, 2, 2277, 2, 2405, 2, 2408, 2, 2417, 2, 2419, 2, 2437, 2, 2439, 2, 2446, 2, 2449, 2, 2450, 2, 2453, 2, 2474, 2, 2476, 2, 2482, 2, 2484, 2, 2484, 2, 2488, 2, 2491, 2, 2494, 2, 2502, 2, 2505, 2, 2506, 2, 2509, 2, 2512, 2, 2521, 2, 2521, 2, 2526, 2, 2527, 2, 2529, 2, 2533, 2, 2536, 2, 2547, 2, 2563, 2, 2565, 2, 2567, 2, 2572, 2, 2577, 2, 2578, 2, 2581, 2, 2602, 2, 2604, 2, 2610, 2, 2612, 2, 2613, 2, 2615, 2, 2616, 2, 2618, 2, 2619, 2, 2622, 2, 2622, 2, 2624, 2, 2628, 2, 2633, 2, 2634, 2, 2637, 2, 2639, 2, 2643, 2, 2643, 2, 2651, 2, 2654, 2, 2656, 2, 2656, 2, 2664, 2, 2679, 2, 2691, 2, 2693, 2, 2695, 2, 2703, 2, 2705, 2, 2707, 2, 2709, 2, 2730, 2, 2732, 2, 2738, 2, 2740, 2, 2741, 2, 2743, 2, 2747, 2, 2750, 2, 2759, 2, 2761, 2, 2763, 2, 2765, 2, 2767, 2, 2770, 2, 2770, 2, 2786, 2, 2789, 2, 2792, 2, 2801, 2, 2811, 2, 2811, 2, 2819, 2, 2821, 2, 2823, 2, 2830, 2, 2833, 2, 2834, 2, 2837, 2, 2858, 2, 2860, 2, 2866, 2, 2868, 2, 2869, 2, 2871, 2, 2875, 2, 2878, 2, 2886, 2, 2889, 2, 2890, 2, 2893, 2, 2895, 2, 2904, 2, 2905, 2, 2910, 2, 2911, 2, 2913, 2, 2917, 2, 2920, 2, 2929, 2, 2931, 2, 2931, 2, 2948, 2, 2949, 2, 2951, 2, 2956, 2, 2960, 2, 2962, 2, 2964, 2, 2967, 2, 2971, 2, 2972, 2, 2974, 2, 2974, 2, 2976, 2, 2977, 2, 2981, 2, 2982, 2, 2986, 2, 2988, 2, 2992, 2, 3003, 2, 3008, 2, 3012, 2, 3016, 2, 3018, 2, 3020, 2, 3023, 2, 3026, 2, 3026, 2, 3033, 2, 3033, 2, 3048, 2, 3057, 2, 3074, 2, 3077, 2, 3079, 2, 3086, 2, 3088, 2, 3090, 2, 3092, 2, 3114, 2, 3116, 2, 3131, 2, 3135, 2, 3142, 2, 3144, 2, 3146, 2, 3148, 2, 3151, 2, 3159, 2, 3160, 2, 3162, 2, 3164, 2, 3170, 2, 3173, 2, 3176, 2, 3185, 2, 3202, 2, 3205, 2, 3207, 2, 3214, 2, 3216, 2, 3218, 2, 3220, 2, 3242, 2, 3244, 2, 3253, 2, 3255, 2, 3259, 2, 3262, 2, 3270, 2, 3272, 2, 3274, 2, 3276, 2, 3279, 2, 3287, 2, 3288, 2, 3296, 2, 3296, 2, 3298, 2, 3301, 2, 3304, 2, 3313, 2, 3315, 2, 3316, 2, 3331, 2, 3333, 2, 3335, 2, 3342, 2, 3344, 2, 3346, 2, 3348, 2, 3388, 2, 3391, 2, 3398, 2, 3400, 2, 3402, 2, 3404, 2, 3408, 2, 3414, 2, 3417, 2, 3425, 2, 3429, 2, 3432, 2, 3441, 2, 3452, 2, 3457, 2, 3460, 2, 3461, 2, 3463, 2, 3480, 2, 3484, 2, 3507, 2, 3509, 2, 3517, 2, 3519, 2, 3519, 2, 3522, 2, 3528, 2, 3532, 2, 3532, 2, 3537, 2, 3542, 2, 3544, 2, 3544, 2, 3546, 2, 3553, 2, 3560, 2, 3569, 2, 3572, 2, 3573, 2, 3587, 2, 3644, 2, 3650, 2, 3664, 2, 3666, 2, 3675, 2, 3715, 2, 3716, 2, 3718, 2, 3718, 2, 3721, 2, 3722, 2, 3724, 2, 3724, 2, 3727, 2, 3727, 2, 3734, 2, 3737, 2, 3739, 2, 3745, 2, 3747, 2, 3749, 2, 3751, 2, 3751, 2, 3753, 2, 3753, 2, 3756, 2, 3757, 2, 3759, 2, 3771, 2, 3773, 2, 3775, 2, 3778, 2, 3782, 2, 3784, 2, 3784, 2, 3786, 2, 3791, 2, 3794, 2, 3803, 2, 3806, 2, 3809, 2, 3842, 2, 3842, 2, 3866, 2, 3867, 2, 3874, 2, 3883, 2, 3895, 2, 3895, 2, 3897, 2, 3897, 2, 3899, 2, 3899, 2, 3904, 2, 3913, 2, 3915, 2, 3950, 2, 3955, 2, 3974, 2, 3976, 2, 3993, 2, 3995, 2, 4030, 2, 4040, 2, 4040, 2, 4098, 2, 4171, 2, 4178, 2, 4255, 2, 4258, 2, 4295, 2, 4297, 2, 4297, 2, 4303, 2, 4303, 2, 4306, 2, 4348, 2, 4350, 2, 4682, 2, 4684, 2, 4687, 2, 4690, 2, 4696, 2, 4698, 2, 4698, 2, 4700, 2, 4703, 2, 4706, 2, 4746, 2, 4748, 2, 4751, 2, 4754, 2, 4786, 2, 4788, 2, 4791, 2, 4794, 2, 4800, 2, 4802, 2, 4802, 2, 4804, 2, 4807, 2, 4810, 2, 4824, 2, 4826, 2, 4882, 2, 4884, 2, 4887, 2, 4890, 2, 4956, 2, 4959, 2, 4961, 2, 4971, 2, 4979, 2, 4994, 2, 5009, 2, 5026, 2, 5111, 2, 5114, 2, 5119, 2, 5123, 2, 5742, 2, 5745, 2, 5761, 2, 5763, 2, 5788, 2, 5794, 2, 5868, 2, 5872, 2, 5882, 2, 5890, 2, 5902, 2, 5904, 2, 5910, 2, 5922, 2, 5942, 2, 5954, 2, 5973, 2, 5986, 2, 5998, 2, 6000, 2, 6002, 2, 6004, 2, 6005, 2, 6018, 2, 6101, 2, 6105, 2, 6105, 2, 6110, 2, 6111, 2, 6114, 2, 6123, 2, 6157, 2, 6159, 2, 6162, 2, 6171, 2, 6178, 2, 6265, 2, 6274, 2, 6316, 2, 6322, 2, 6391, 2, 6402, 2, 6432, 2, 6434, 2, 6445, 2, 6450, 2, 6461, 2, 6472, 2, 6511, 2, 6514, 2, 6518, 2, 6530, 2, 6573, 2, 6578, 2, 6603, 2, 6610, 2, 6620, 2, 6658, 2, 6685, 2, 6690, 2, 6752, 2, 6754, 2, 6782, 2, 6785, 2, 6795, 2, 6802, 2, 6811, 2, 6825, 2, 6825, 2, 6834, 2, 6847, 2, 6914, 2, 6989, 2, 6994, 2, 7003, 2, 7021, 2, 7029, 2, 7042, 2, 7157, 2, 7170, 2, 7225, 2, 7234, 2, 7243, 2, 7247, 2, 7295, 2, 7298, 2, 7306, 2, 7378, 2, 7380, 2, 7382, 2, 7416, 2, 7418, 2, 7419, 2, 7426, 2, 7671, 2, 7677, 2, 7959, 2, 7962, 2, 7967, 2, 7970, 2, 8007, 2, 8010, 2, 8015, 2, 8018, 2, 8025, 2, 8027, 2, 8027, 2, 8029, 2, 8029, 2, 8031, 2, 8031, 2, 8033, 2, 8063, 2, 8066, 2, 8118, 2, 8120, 2, 8126, 2, 8128, 2, 8128, 2, 8132, 2, 8134, 2, 8136, 2, 8142, 2, 8146, 2, 8149, 2, 8152, 2, 8157, 2, 8162, 2, 8174, 2, 8180, 2, 8182, 2, 8184, 2, 8190, 2, 8257, 2, 8258, 2, 8278, 2, 8278, 2, 8307, 2, 8307, 2, 8321, 2, 8321, 2, 8338, 2, 8350, 2, 8402, 2, 8414, 2, 8419, 2, 8419, 2, 8423, 2, 8434, 2, 8452, 2, 8452, 2, 8457, 2, 8457, 2, 8460, 2, 8469, 2, 8471, 2, 8471, 2, 8474, 2, 8479, 2, 8486, 2, 8486, 2, 8488, 2, 8488, 2, 8490, 2, 8490, 2, 8492, 2, 8507, 2, 8510, 2, 8513, 2, 8519, 2, 8523, 2, 8528, 2, 8528, 2, 8546, 2, 8586, 2, 11266, 2, 11312, 2, 11314, 2, 11360, 2, 11362, 2, 11494, 2, 11501, 2, 11509, 2, 11522, 2, 11559, 2, 11561, 2, 11561, 2, 11567, 2, 11567, 2, 11570, 2, 11625, 2, 11633, 2, 11633, 2, 11649, 2, 11672, 2, 11682, 2, 11688, 2, 11690, 2, 11696, 2, 11698, 2, 11704, 2, 11706, 2, 11712, 2, 11714, 2, 11720, 2, 11722, 2, 11728, 2, 11730, 2, 11736, 2, 11738, 2, 11744, 2, 11746, 2, 11777, 2, 12295, 2, 12297, 2, 12323, 2, 12337, 2, 12339, 2, 12343, 2, 12346, 2, 12350, 2, 12355, 2, 12440, 2, 12443, 2, 12449, 2, 12451, 2, 12540, 2, 12542, 2, 12545, 2, 12551, 2, 12591, 2, 12595, 2, 12688, 2, 12706, 2, 12732, 2, 12786, 2, 12801, 2, 13314, 2, 19895, 2, 19970, 2, 40919, 2, 40962, 2, 42126, 2, 42194, 2, 42239, 2, 42242, 2, 42510, 2, 42514, 2, 42541, 2, 42562, 2, 42609, 2, 42614, 2, 42623, 2, 42625, 2, 42739, 2, 42777, 2, 42785, 2, 42788, 2, 42890, 2, 42893, 2, 42928, 2, 42930, 2, 42937, 2, 43001, 2, 43049, 2, 43074, 2, 43125, 2, 43138, 2, 43207, 2, 43218, 2, 43227, 2, 43234, 2, 43257, 2, 43261, 2, 43261, 2, 43263, 2, 43263, 2, 43266, 2, 43311, 2, 43314, 2, 43349, 2, 43362, 2, 43390, 2, 43394, 2, 43458, 2, 43473, 2, 43483, 2, 43490, 2, 43520, 2, 43522, 2, 43576, 2, 43586, 2, 43599, 2, 43602, 2, 43611, 2, 43618, 2, 43640, 2, 43644, 2, 43716, 2, 43741, 2, 43743, 2, 43746, 2, 43761, 2, 43764, 2, 43768, 2, 43779, 2, 43784, 2, 43787, 2, 43792, 2, 43795, 2, 43800, 2, 43810, 2, 43816, 2, 43818, 2, 43824, 2, 43826, 2, 43868, 2, 43870, 2, 43879, 2, 43890, 2, 44012, 2, 44014, 2, 44015, 2, 44018, 2, 44027, 2, 44034, 2, 55205, 2, 55218, 2, 55240, 2, 55245, 2, 55293, 2, 63746, 2, 64111, 2, 64114, 2, 64219, 2, 64258, 2, 64264, 2, 64277, 2, 64281, 2, 64287, 2, 64298, 2, 64300, 2, 64312, 2, 64314, 2, 64318, 2, 64320, 2, 64320, 2, 64322, 2, 64323, 2, 64325, 2, 64326, 2, 64328, 2, 64435, 2, 64469, 2, 64831, 2, 64850, 2, 64913, 2, 64916, 2, 64969, 2, 65010, 2, 65021, 2, 65026, 2, 65041, 2, 65058, 2, 65073, 2, 65077, 2, 65078, 2, 65103, 2, 65105, 2, 65138, 2, 65142, 2, 65144, 2, 65278, 2, 65298, 2, 65307, 2, 65315, 2, 65340, 2, 65345, 2, 65345, 2, 65347, 2, 65372, 2, 65384, 2, 65472, 2, 65476, 2, 65481, 2, 65484, 2, 65489, 2, 65492, 2, 65497, 2, 65500, 2, 65502, 2, 2, 3, 13, 3, 15, 3, 40, 3, 42, 3, 60, 3, 62, 3, 63, 3, 65, 3, 79, 3, 82, 3, 95, 3, 130, 3, 252, 3, 322, 3, 374, 3, 511, 3, 511, 3, 642, 3, 670, 3, 674, 3, 722, 3, 738, 3, 738, 3, 770, 3, 801, 3, 818, 3, 844, 3, 850, 3, 892, 3, 898, 3, 927, 3, 930, 3, 965, 3, 970, 3, 977, 3, 979, 3, 983, 3, 1026, 3, 1183, 3, 1186, 3, 1195, 3, 1202, 3, 1237, 3, 1242, 3, 1277, 3, 1282, 3, 1321, 3, 1330, 3, 1381, 3, 1538, 3, 1848, 3, 1858, 3, 1879, 3, 1890, 3, 1897, 3, 2050, 3, 2055, 3, 2058, 3, 2058, 3, 2060, 3, 2103, 3, 2105, 3, 2106, 3, 2110, 3, 2110, 3, 2113, 3, 2135, 3, 2146, 3, 2168, 3, 2178, 3, 2208, 3, 2274, 3, 2292, 3, 2294, 3, 2295, 3, 2306, 3, 2327, 3, 2338, 3, 2363, 3, 2434, 3, 2489, 3, 2496, 3, 2497, 3, 2562, 3, 2565, 3, 2567, 3, 2568, 3, 2574, 3, 2581, 3, 2583, 3, 2585, 3, 2587, 3, 2613, 3, 2618, 3, 2620, 3, 2625, 3, 2625, 3, 2658, 3, 2686, 3, 2690, 3, 2718, 3, 2754, 3, 2761, 3, 2763, 3, 2792, 3, 2818, 3, 2871, 3, 2882, 3, 2903, 3, 2914, 3, 2932, 3, 2946, 3, 2963, 3, 3074, 3, 3146, 3, 3202, 3, 3252, 3, 3266, 3, 3316, 3, 4098, 3, 4168, 3, 4200, 3, 4209, 3, 4225, 3, 4284, 3, 4306, 3, 4330, 3, 4338, 3, 4347, 3, 4354, 3, 4406, 3, 4408, 3, 4417, 3, 4434, 3, 4469, 3, 4472, 3, 4472, 3, 4482, 3, 4550, 3, 4556, 3, 4558, 3, 4562, 3, 4572, 3, 4574, 3, 4574, 3, 4610, 3, 4627, 3, 4629, 3, 4665, 3, 4672, 3, 4672, 3, 4738, 3, 4744, 3, 4746, 3, 4746, 3, 4748, 3, 4751, 3, 4753, 3, 4767, 3, 4769, 3, 4778, 3, 4786, 3, 4844, 3, 4850, 3, 4859, 3, 4866, 3, 4869, 3, 4871, 3, 4878, 3, 4881, 3, 4882, 3, 4885, 3, 4906, 3, 4908, 3, 4914, 3, 4916, 3, 4917, 3, 4919, 3, 4923, 3, 4926, 3, 4934, 3, 4937, 3, 4938, 3, 4941, 3, 4943, 3, 4946, 3, 4946, 3, 4953, 3, 4953, 3, 4959, 3, 4965, 3, 4968, 3, 4974, 3, 4978, 3, 4982, 3, 5122, 3, 5196, 3, 5202, 3, 5211, 3, 5250, 3, 5319, 3, 5321, 3, 5321, 3, 5330, 3, 5339, 3, 5506, 3, 5559, 3, 5562, 3, 5570, 3, 5594, 3, 5599, 3, 5634, 3, 5698, 3, 5702, 3, 5702, 3, 5714, 3, 5723, 3, 5762, 3, 5817, 3, 5826, 3, 5835, 3, 5890, 3, 5915, 3, 5919, 3, 5933, 3, 5938, 3, 5947, 3, 6306, 3, 6379, 3, 6401, 3, 6401, 3, 6850, 3, 6906, 3, 7170, 3, 7178, 3, 7180, 3, 7224, 3, 7226, 3, 7234, 3, 7250, 3, 7259, 3, 7284, 3, 7313, 3, 7316, 3, 7337, 3, 7339, 3, 7352, 3, 8194, 3, 9115, 3, 9218, 3, 9328, 3, 9346, 3, 9541, 3, 12290, 3, 13360, 3, 17410, 3, 17992, 3, 26626, 3, 27194, 3, 27202, 3, 27232, 3, 27234, 3, 27243, 3, 27346, 3, 27375, 3, 27378, 3, 27382, 3, 27394, 3, 27448, 3, 27458, 3, 27461, 3, 27474, 3, 27483, 3, 27493, 3, 27513, 3, 27519, 3, 27537, 3, 28418, 3, 28486, 3, 28498, 3, 28544, 3, 28561, 3, 28577, 3, 28642, 3, 28642, 3, 28674, 3, 34798, 3, 34818, 3, 35572, 3, 45058, 3, 45059, 3, 48130, 3, 48236, 3, 48242, 3, 48254, 3, 48258, 3, 48266, 3, 48274, 3, 48283, 3, 48287, 3, 48288, 3, 53607, 3, 53611, 3, 53615, 3, 53620, 3, 53629, 3, 53636, 3, 53639, 3, 53645, 3, 53676, 3, 53679, 3, 53828, 3, 53830, 3, 54274, 3, 54358, 3, 54360, 3, 54430, 3, 54432, 3, 54433, 3, 54436, 3, 54436, 3, 54439, 3, 54440, 3, 54443, 3, 54446, 3, 54448, 3, 54459, 3, 54461, 3, 54461, 3, 54463, 3, 54469, 3, 54471, 3, 54535, 3, 54537, 3, 54540, 3, 54543, 3, 54550, 3, 54552, 3, 54558, 3, 54560, 3, 54587, 3, 54589, 3, 54592, 3, 54594, 3, 54598, 3, 54600, 3, 54600, 3, 54604, 3, 54610, 3, 54612, 3, 54951, 3, 54954, 3, 54978, 3, 54980, 3, 55004, 3, 55006, 3, 55036, 3, 55038, 3, 55062, 3, 55064, 3, 55094, 3, 55096, 3, 55120, 3, 55122, 3, 55152, 3, 55154, 3, 55178, 3, 55180, 3, 55210, 3, 55212, 3, 55236, 3, 55238, 3, 55245, 3, 55248, 3, 55297, 3, 55810, 3, 55864, 3, 55869, 3, 55918, 3, 55927, 3, 55927, 3, 55942, 3, 55942, 3, 55965, 3, 55969, 3, 55971, 3, 55985, 3, 57346, 3, 57352, 3, 57354, 3, 57370, 3, 57373, 3, 57379, 3, 57381, 3, 57382, 3, 57384, 3, 57388, 3, 59394, 3, 59590, 3, 59602, 3, 59608, 3, 59650, 3, 59724, 3, 59730, 3, 59739, 3, 60930, 3, 60933, 3, 60935, 3, 60961, 3, 60963, 3, 60964, 3, 60966, 3, 60966, 3, 60969, 3, 60969, 3, 60971, 3, 60980, 3, 60982, 3, 60985, 3, 60987, 3, 60987, 3, 60989, 3, 60989, 3, 60996, 3, 60996, 3, 61001, 3, 61001, 3, 61003, 3, 61003, 3, 61005, 3, 61005, 3, 61007, 3, 61009, 3, 61011, 3, 61012, 3, 61014, 3, 61014, 3, 61017, 3, 61017, 3, 61019, 3, 61019, 3, 61021, 3, 61021, 3, 61023, 3, 61023, 3, 61025, 3, 61025, 3, 61027, 3, 61028, 3, 61030, 3, 61030, 3, 61033, 3, 61036, 3, 61038, 3, 61044, 3, 61046, 3, 61049, 3, 61051, 3, 61054, 3, 61056, 3, 61056, 3, 61058, 3, 61067, 3, 61069, 3, 61085, 3, 61091, 3, 61093, 3, 61095, 3, 61099, 3, 61101, 3, 61117, 3, 2, 4, 42712, 4, 42754, 4, 46902, 4, 46914, 4, 47135, 4, 47138, 4, 52899, 4, 63490, 4, 64031, 4, 258, 16, 497, 16, 192, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 3, 45, 3, 2, 2, 2, 5, 50, 3, 2, 2, 2, 7, 56, 3, 2, 2, 2, 9, 61, 3, 2, 2, 2, 11, 71, 3, 2, 2, 2, 13, 73, 3, 2, 2, 2, 15, 75, 3, 2, 2, 2, 17, 77, 3, 2, 2, 2, 19, 79, 3, 2, 2, 2, 21, 81, 3, 2, 2, 2, 23, 91, 3, 2, 2, 2, 25, 98, 3, 2, 2, 2, 27, 106, 3, 2, 2, 2, 29, 110, 3, 2, 2, 2, 31, 132, 3, 2, 2, 2, 33, 134, 3, 2, 2, 2, 35, 141, 3, 2, 2, 2, 37, 147, 3, 2, 2, 2, 39, 154, 3, 2, 2, 2, 41, 165, 3, 2, 2, 2, 43, 179, 3, 2, 2, 2, 45, 46, 7, 118, 2, 2, 46, 47, 7, 116, 2, 2, 47, 48, 7, 119, 2, 2, 48, 49, 7, 103, 2, 2, 49, 4, 3, 2, 2, 2, 50, 51, 7, 104, 2, 2, 51, 52, 7, 99, 2, 2, 52, 53, 7, 110, 2, 2, 53, 54, 7, 117, 2, 2, 54, 55, 7, 103, 2, 2, 55, 6, 3, 2, 2, 2, 56, 57, 7, 112, 2, 2, 57, 58, 7, 119, 2, 2, 58, 59, 7, 110, 2, 2, 59, 60, 7, 110, 2, 2, 60, 8, 3, 2, 2, 2, 61, 62, 7, 119, 2, 2, 62, 63, 7, 112, 2, 2, 63, 64, 7, 102, 2, 2, 64, 65, 7, 103, 2, 2, 65, 66, 7, 104, 2, 2, 66, 67, 7, 107, 2, 2, 67, 68, 7, 112, 2, 2, 68, 69, 7, 103, 2, 2, 69, 70, 7, 102, 2, 2, 70, 10, 3, 2, 2, 2, 71, 72, 7, 46, 2, 2, 72, 12, 3, 2, 2, 2, 73, 74, 7, 93, 2, 2, 74, 14, 3, 2, 2, 2, 75, 76, 7, 95, 2, 2, 76, 16, 3, 2, 2, 2, 77, 78, 7, 127, 2, 2, 78, 18, 3, 2, 2, 2, 79, 80, 7, 125, 2, 2, 80, 20, 3, 2, 2, 2, 81, 82, 7, 60, 2, 2, 82, 22, 3, 2, 2, 2, 83, 84, 7, 36, 2, 2, 84, 85, 5, 25, 13, 2, 85, 86, 7, 36, 2, 2, 86, 92, 3, 2, 2, 2, 87, 88, 7, 41, 2, 2, 88, 89, 5, 27, 14, 2, 89, 90, 7, 41, 2, 2, 90, 92, 3, 2, 2, 2, 91, 83, 3, 2, 2, 2, 91, 87, 3, 2, 2, 2, 92, 24, 3, 2, 2, 2, 93, 94, 7, 94, 2, 2, 94, 97, 7, 36, 2, 2, 95, 97, 10, 2, 2, 2, 96, 93, 3, 2, 2, 2, 96, 95, 3, 2, 2, 2, 97, 100, 3, 2, 2, 2, 98, 96, 3, 2, 2, 2, 98, 99, 3, 2, 2, 2, 99, 26, 3, 2, 2, 2, 100, 98, 3, 2, 2, 2, 101, 102, 7, 94, 2, 2, 102, 105, 7, 41, 2, 2, 103, 105, 10, 3, 2, 2, 104, 101, 3, 2, 2, 2, 104, 103, 3, 2, 2, 2, 105, 108, 3, 2, 2, 2, 106, 104, 3, 2, 2, 2, 106, 107, 3, 2, 2, 2, 107, 28, 3, 2, 2, 2, 108, 106, 3, 2, 2, 2, 109, 111, 7, 47, 2, 2, 110, 109, 3, 2, 2, 2, 110, 111, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 119, 5, 31, 16, 2, 113, 115, 7, 48, 2, 2, 114, 116, 9, 4, 2, 2, 115, 114, 3, 2, 2, 2, 116, 117, 3, 2, 2, 2, 117, 115, 3, 2, 2, 2, 117, 118, 3, 2, 2, 2, 118, 120, 3, 2, 2, 2, 119, 113, 3, 2, 2, 2, 119, 120, 3, 2, 2, 2, 120, 122, 3, 2, 2, 2, 121, 123, 5, 33, 17, 2, 122, 121, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 30, 3, 2, 2, 2, 124, 133, 7, 50, 2, 2, 125, 129, 9, 5, 2, 2, 126, 128, 9, 4, 2, 2, 127, 126, 3, 2, 2, 2, 128, 131, 3, 2, 2, 2, 129, 127, 3, 2, 2, 2, 129, 130, 3, 2, 2, 2, 130, 133, 3, 2, 2, 2, 131, 129, 3, 2, 2, 2, 132, 124, 3, 2, 2, 2, 132, 125, 3, 2, 2, 2, 133, 32, 3, 2, 2, 2, 134, 136, 9, 6, 2, 2, 135, 137, 9, 7, 2, 2, 136, 135, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 138, 3, 2, 2, 2, 138, 139, 5, 31, 16, 2, 139, 34, 3, 2, 2, 2, 140, 142, 9, 8, 2, 2, 141, 140, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 141, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 146, 8, 18, 2, 2, 146, 36, 3, 2, 2, 2, 147, 151, 9, 10, 2, 2, 148, 150, 9, 11, 2, 2, 149, 148, 3, 2, 2, 2, 150, 153, 3, 2, 2, 2, 151, 149, 3, 2, 2, 2, 151, 152, 3, 2, 2, 2, 152, 38, 3, 2, 2, 2, 153, 151, 3, 2, 2, 2, 154, 155, 7, 49, 2, 2, 155, 156, 7, 49, 2, 2, 156, 160, 3, 2, 2, 2, 157, 159, 10, 9, 2, 2, 158, 157, 3, 2, 2, 2, 159, 162, 3, 2, 2, 2, 160, 158, 3, 2, 2, 2, 160, 161, 3, 2, 2, 2, 161, 163, 3, 2, 2, 2, 162, 160, 3, 2, 2, 2, 163, 164, 8, 20, 3, 2, 164, 40, 3, 2, 2, 2, 165, 166, 7, 49, 2, 2, 166, 167, 7, 44, 2, 2, 167, 171, 3, 2, 2, 2, 168, 170, 11, 2, 2, 2, 169, 168, 3, 2, 2, 2, 170, 173, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 172, 174, 3, 2, 2, 2, 173, 171, 3, 2, 2, 2, 174, 175, 7, 44, 2, 2, 175, 176, 7, 49, 2, 2, 176, 177, 3, 2, 2, 2, 177, 178, 8, 21, 3, 2, 178, 42, 3, 2, 2, 2, 179, 180, 11, 2, 2, 2, 180, 44, 3, 2, 2, 2, 19, 2, 91, 96, 98, 104, 106, 110, 117, 119, 122, 129, 132, 136, 143, 151, 160, 171, 4, 8, 2, 2, 2, 3, 2]
\ No newline at end of file
diff --git a/src/parser/generated/JSONLexer.tokens b/src/parser/generated/JSONLexer.tokens
index 5777a80..c34ef57 100644
--- a/src/parser/generated/JSONLexer.tokens
+++ b/src/parser/generated/JSONLexer.tokens
@@ -13,7 +13,8 @@ NUMBER=12
WS=13
IDENTIFIER=14
LINE_COMMENT=15
-ErrorCharacter=16
+BLOCK_COMMENT=16
+ErrorCharacter=17
'true'=1
'false'=2
'null'=3
diff --git a/src/parser/generated/JSONLexer.ts b/src/parser/generated/JSONLexer.ts
index afec6f3..0a7ed39 100644
--- a/src/parser/generated/JSONLexer.ts
+++ b/src/parser/generated/JSONLexer.ts
@@ -31,7 +31,8 @@ export class JSONLexer extends Lexer {
public static readonly WS = 13;
public static readonly IDENTIFIER = 14;
public static readonly LINE_COMMENT = 15;
- public static readonly ErrorCharacter = 16;
+ public static readonly BLOCK_COMMENT = 16;
+ public static readonly ErrorCharacter = 17;
// tslint:disable:no-trailing-whitespace
public static readonly channelNames: string[] = [
@@ -46,7 +47,8 @@ export class JSONLexer extends Lexer {
public static readonly ruleNames: string[] = [
"T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "CLOSING_CURLIES",
"OPENING_CURLIES", "COLON", "STRING", "STRINGCHARS_DOUBLE", "STRINGCHARS_SINGLE",
- "NUMBER", "INT", "EXP", "WS", "IDENTIFIER", "LINE_COMMENT", "ErrorCharacter",
+ "NUMBER", "INT", "EXP", "WS", "IDENTIFIER", "LINE_COMMENT", "BLOCK_COMMENT",
+ "ErrorCharacter",
];
private static readonly _LITERAL_NAMES: Array = [
@@ -56,7 +58,7 @@ export class JSONLexer extends Lexer {
private static readonly _SYMBOLIC_NAMES: Array = [
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, "CLOSING_CURLIES", "OPENING_CURLIES", "COLON", "STRING", "NUMBER",
- "WS", "IDENTIFIER", "LINE_COMMENT", "ErrorCharacter",
+ "WS", "IDENTIFIER", "LINE_COMMENT", "BLOCK_COMMENT", "ErrorCharacter",
];
public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(JSONLexer._LITERAL_NAMES, JSONLexer._SYMBOLIC_NAMES, []);
@@ -90,434 +92,441 @@ export class JSONLexer extends Lexer {
private static readonly _serializedATNSegments: number = 2;
private static readonly _serializedATNSegment0: string =
- "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02\x12\xA5\b\x01" +
+ "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02\x13\xB5\b\x01" +
"\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06" +
"\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r" +
"\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t" +
- "\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x03\x02\x03\x02\x03\x02" +
- "\x03\x02\x03\x02\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x04" +
- "\x03\x04\x03\x04\x03\x04\x03\x04\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05" +
- "\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x06\x03\x06\x03\x07\x03\x07" +
- "\x03\b\x03\b\x03\t\x03\t\x03\n\x03\n\x03\v\x03\v\x03\f\x03\f\x03\f\x03" +
- "\f\x03\f\x03\f\x03\f\x03\f\x05\fZ\n\f\x03\r\x03\r\x03\r\x07\r_\n\r\f\r" +
- "\x0E\rb\v\r\x03\x0E\x03\x0E\x03\x0E\x07\x0Eg\n\x0E\f\x0E\x0E\x0Ej\v\x0E" +
- "\x03\x0F\x05\x0Fm\n\x0F\x03\x0F\x03\x0F\x03\x0F\x06\x0Fr\n\x0F\r\x0F\x0E" +
- "\x0Fs\x05\x0Fv\n\x0F\x03\x0F\x05\x0Fy\n\x0F\x03\x10\x03\x10\x03\x10\x07" +
- "\x10~\n\x10\f\x10\x0E\x10\x81\v\x10\x05\x10\x83\n\x10\x03\x11\x03\x11" +
- "\x05\x11\x87\n\x11\x03\x11\x03\x11\x03\x12\x06\x12\x8C\n\x12\r\x12\x0E" +
- "\x12\x8D\x03\x12\x03\x12\x03\x13\x03\x13\x07\x13\x94\n\x13\f\x13\x0E\x13" +
- "\x97\v\x13\x03\x14\x03\x14\x03\x14\x03\x14\x07\x14\x9D\n\x14\f\x14\x0E" +
- "\x14\xA0\v\x14\x03\x14\x03\x14\x03\x15\x03\x15\x02\x02\x02\x16\x03\x02" +
- "\x03\x05\x02\x04\x07\x02\x05\t\x02\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11" +
- "\x02\n\x13\x02\v\x15\x02\f\x17\x02\r\x19\x02\x02\x1B\x02\x02\x1D\x02\x0E" +
- "\x1F\x02\x02!\x02\x02#\x02\x0F%\x02\x10\'\x02\x11)\x02\x12\x03\x02\n\x03" +
- "\x02$$\x03\x02))\x03\x022;\x03\x023;\x04\x02GGgg\x04\x02--//\r\x02\v\x0F" +
- "\"\"\x87\x87\xA2\xA2\u1682\u1682\u2002\u200C\u202A\u202B\u2031\u2031\u2061" +
- "\u2061\u3002\u3002\uFF01\uFF01\x04\x02\f\f\x0F\x0F\x04\u023F\x02&\x02" +
- "&\x02C\x02\\\x02a\x02a\x02c\x02|\x02\xAC\x02\xAC\x02\xB7\x02\xB7\x02\xBC" +
- "\x02\xBC\x02\xC2\x02\xD8\x02\xDA\x02\xF8\x02\xFA\x02\u02C3\x02\u02C8\x02" +
- "\u02D3\x02\u02E2\x02\u02E6\x02\u02EE\x02\u02EE\x02\u02F0\x02\u02F0\x02" +
- "\u0372\x02\u0376\x02\u0378\x02\u0379\x02\u037C\x02\u037F\x02\u0381\x02" +
- "\u0381\x02\u0388\x02\u0388\x02\u038A\x02\u038C\x02\u038E\x02\u038E\x02" +
- "\u0390\x02\u03A3\x02\u03A5\x02\u03F7\x02\u03F9\x02\u0483\x02\u048C\x02" +
- "\u0531\x02\u0533\x02\u0558\x02\u055B\x02\u055B\x02\u0563\x02\u0589\x02" +
- "\u05D2\x02\u05EC\x02\u05F2\x02\u05F4\x02\u0622\x02\u064C\x02\u0670\x02" +
- "\u0671\x02\u0673\x02\u06D5\x02\u06D7\x02\u06D7\x02\u06E7\x02\u06E8\x02" +
- "\u06F0\x02\u06F1\x02\u06FC\x02\u06FE\x02\u0701\x02\u0701\x02\u0712\x02" +
- "\u0712\x02\u0714\x02\u0731\x02\u074F\x02\u07A7\x02\u07B3\x02\u07B3\x02" +
- "\u07CC\x02\u07EC\x02\u07F6\x02\u07F7\x02\u07FC\x02\u07FC\x02\u0802\x02" +
- "\u0817\x02\u081C\x02\u081C\x02\u0826\x02\u0826\x02\u082A\x02\u082A\x02" +
- "\u0842\x02\u085A\x02\u08A2\x02\u08B6\x02\u08B8\x02\u08BF\x02\u0906\x02" +
- "\u093B\x02\u093F\x02\u093F\x02\u0952\x02\u0952\x02\u095A\x02\u0963\x02" +
- "\u0973\x02\u0982\x02\u0987\x02\u098E\x02\u0991\x02\u0992\x02\u0995\x02" +
- "\u09AA\x02\u09AC\x02\u09B2\x02\u09B4\x02\u09B4\x02\u09B8\x02\u09BB\x02" +
- "\u09BF\x02\u09BF\x02\u09D0\x02\u09D0\x02\u09DE\x02\u09DF\x02\u09E1\x02" +
- "\u09E3\x02\u09F2\x02\u09F3\x02\u0A07\x02\u0A0C\x02\u0A11\x02\u0A12\x02" +
- "\u0A15\x02\u0A2A\x02\u0A2C\x02\u0A32\x02\u0A34\x02\u0A35\x02\u0A37\x02" +
- "\u0A38\x02\u0A3A\x02\u0A3B\x02\u0A5B\x02\u0A5E\x02\u0A60\x02\u0A60\x02" +
- "\u0A74\x02\u0A76\x02\u0A87\x02\u0A8F\x02\u0A91\x02\u0A93\x02\u0A95\x02" +
- "\u0AAA\x02\u0AAC\x02\u0AB2\x02\u0AB4\x02\u0AB5\x02\u0AB7\x02\u0ABB\x02" +
- "\u0ABF\x02\u0ABF\x02\u0AD2\x02\u0AD2\x02\u0AE2\x02\u0AE3\x02\u0AFB\x02" +
- "\u0AFB\x02\u0B07\x02\u0B0E\x02\u0B11\x02\u0B12\x02\u0B15\x02\u0B2A\x02" +
- "\u0B2C\x02\u0B32\x02\u0B34\x02\u0B35\x02\u0B37\x02\u0B3B\x02\u0B3F\x02" +
- "\u0B3F\x02\u0B5E\x02\u0B5F\x02\u0B61\x02\u0B63\x02\u0B73\x02\u0B73\x02" +
- "\u0B85\x02\u0B85\x02\u0B87\x02\u0B8C\x02\u0B90\x02\u0B92\x02\u0B94\x02" +
- "\u0B97\x02\u0B9B\x02\u0B9C\x02\u0B9E\x02\u0B9E\x02\u0BA0\x02\u0BA1\x02" +
- "\u0BA5\x02\u0BA6\x02\u0BAA\x02\u0BAC\x02\u0BB0\x02\u0BBB\x02\u0BD2\x02" +
- "\u0BD2\x02\u0C07\x02\u0C0E\x02\u0C10\x02\u0C12\x02\u0C14\x02\u0C2A\x02" +
- "\u0C2C\x02\u0C3B\x02\u0C3F\x02\u0C3F\x02\u0C5A\x02\u0C5C\x02\u0C62\x02" +
- "\u0C63\x02\u0C82\x02\u0C82\x02\u0C87\x02\u0C8E\x02\u0C90\x02\u0C92\x02" +
- "\u0C94\x02\u0CAA\x02\u0CAC\x02\u0CB5\x02\u0CB7\x02\u0CBB\x02\u0CBF\x02" +
- "\u0CBF\x02\u0CE0\x02\u0CE0\x02\u0CE2\x02\u0CE3\x02\u0CF3\x02\u0CF4\x02" +
- "\u0D07\x02\u0D0E\x02\u0D10\x02\u0D12\x02\u0D14\x02\u0D3C\x02\u0D3F\x02" +
- "\u0D3F\x02\u0D50\x02\u0D50\x02\u0D56\x02\u0D58\x02\u0D61\x02\u0D63\x02" +
- "\u0D7C\x02\u0D81\x02\u0D87\x02\u0D98\x02\u0D9C\x02\u0DB3\x02\u0DB5\x02" +
- "\u0DBD\x02\u0DBF\x02\u0DBF\x02\u0DC2\x02\u0DC8\x02\u0E03\x02\u0E32\x02" +
- "\u0E34\x02\u0E35\x02\u0E42\x02\u0E48\x02\u0E83\x02\u0E84\x02\u0E86\x02" +
- "\u0E86\x02\u0E89\x02\u0E8A\x02\u0E8C\x02\u0E8C\x02\u0E8F\x02\u0E8F\x02" +
- "\u0E96\x02\u0E99\x02\u0E9B\x02\u0EA1\x02\u0EA3\x02\u0EA5\x02\u0EA7\x02" +
- "\u0EA7\x02\u0EA9\x02\u0EA9\x02\u0EAC\x02\u0EAD\x02\u0EAF\x02\u0EB2\x02" +
- "\u0EB4\x02\u0EB5\x02\u0EBF\x02\u0EBF\x02\u0EC2\x02\u0EC6\x02\u0EC8\x02" +
- "\u0EC8\x02\u0EDE\x02\u0EE1\x02\u0F02\x02\u0F02\x02\u0F42\x02\u0F49\x02" +
- "\u0F4B\x02\u0F6E\x02\u0F8A\x02\u0F8E\x02\u1002\x02\u102C\x02\u1041\x02" +
- "\u1041\x02\u1052\x02\u1057\x02\u105C\x02\u105F\x02\u1063\x02\u1063\x02" +
- "\u1067\x02\u1068\x02\u1070\x02\u1072\x02\u1077\x02\u1083\x02\u1090\x02" +
- "\u1090\x02\u10A2\x02\u10C7\x02\u10C9\x02\u10C9\x02\u10CF\x02\u10CF\x02" +
- "\u10D2\x02\u10FC\x02\u10FE\x02\u124A\x02\u124C\x02\u124F\x02\u1252\x02" +
- "\u1258\x02\u125A\x02\u125A\x02\u125C\x02\u125F\x02\u1262\x02\u128A\x02" +
- "\u128C\x02\u128F\x02\u1292\x02\u12B2\x02\u12B4\x02\u12B7\x02\u12BA\x02" +
- "\u12C0\x02\u12C2\x02\u12C2\x02\u12C4\x02\u12C7\x02\u12CA\x02\u12D8\x02" +
- "\u12DA\x02\u1312\x02\u1314\x02\u1317\x02\u131A\x02\u135C\x02\u1382\x02" +
- "\u1391\x02\u13A2\x02\u13F7\x02\u13FA\x02\u13FF\x02\u1403\x02\u166E\x02" +
- "\u1671\x02\u1681\x02\u1683\x02\u169C\x02\u16A2\x02\u16EC\x02\u16F0\x02" +
- "\u16FA\x02\u1702\x02\u170E\x02\u1710\x02\u1713\x02\u1722\x02\u1733\x02" +
- "\u1742\x02\u1753\x02\u1762\x02\u176E\x02\u1770\x02\u1772\x02\u1782\x02" +
- "\u17B5\x02\u17D9\x02\u17D9\x02\u17DE\x02\u17DE\x02\u1822\x02\u1879\x02" +
- "\u1882\x02\u18AA\x02\u18AC\x02\u18AC\x02\u18B2\x02\u18F7\x02\u1902\x02" +
- "\u1920\x02\u1952\x02\u196F\x02\u1972\x02\u1976\x02\u1982\x02\u19AD\x02" +
- "\u19B2\x02\u19CB\x02\u1A02\x02\u1A18\x02\u1A22\x02\u1A56\x02\u1AA9\x02" +
- "\u1AA9\x02\u1B07\x02\u1B35\x02\u1B47\x02\u1B4D\x02\u1B85\x02\u1BA2\x02" +
- "\u1BB0\x02\u1BB1\x02\u1BBC\x02\u1BE7\x02\u1C02\x02\u1C25\x02\u1C4F\x02" +
- "\u1C51\x02\u1C5C\x02\u1C7F\x02\u1C82\x02\u1C8A\x02\u1CEB\x02\u1CEE\x02" +
- "\u1CF0\x02\u1CF3\x02\u1CF7\x02\u1CF8\x02\u1D02\x02\u1DC1\x02\u1E02\x02" +
- "\u1F17\x02\u1F1A\x02\u1F1F\x02\u1F22\x02\u1F47\x02\u1F4A\x02\u1F4F\x02" +
- "\u1F52\x02\u1F59\x02\u1F5B\x02\u1F5B\x02\u1F5D\x02\u1F5D\x02\u1F5F\x02" +
- "\u1F5F\x02\u1F61\x02\u1F7F\x02\u1F82\x02\u1FB6\x02\u1FB8\x02\u1FBE\x02" +
- "\u1FC0\x02\u1FC0\x02\u1FC4\x02\u1FC6\x02\u1FC8\x02\u1FCE\x02\u1FD2\x02" +
- "\u1FD5\x02\u1FD8\x02\u1FDD\x02\u1FE2\x02\u1FEE\x02\u1FF4\x02\u1FF6\x02" +
- "\u1FF8\x02\u1FFE\x02\u2073\x02\u2073\x02\u2081\x02\u2081\x02\u2092\x02" +
- "\u209E\x02\u2104\x02\u2104\x02\u2109\x02\u2109\x02\u210C\x02\u2115\x02" +
- "\u2117\x02\u2117\x02\u211A\x02\u211F\x02\u2126\x02\u2126\x02\u2128\x02" +
- "\u2128\x02\u212A\x02\u212A\x02\u212C\x02\u213B\x02\u213E\x02\u2141\x02" +
- "\u2147\x02\u214B\x02\u2150\x02\u2150\x02\u2162\x02\u218A\x02\u2C02\x02" +
- "\u2C30\x02\u2C32\x02\u2C60\x02\u2C62\x02\u2CE6\x02\u2CED\x02\u2CF0\x02" +
- "\u2CF4\x02\u2CF5\x02\u2D02\x02\u2D27\x02\u2D29\x02\u2D29\x02\u2D2F\x02" +
- "\u2D2F\x02\u2D32\x02\u2D69\x02\u2D71\x02\u2D71\x02\u2D82\x02\u2D98\x02" +
- "\u2DA2\x02\u2DA8\x02\u2DAA\x02\u2DB0\x02\u2DB2\x02\u2DB8\x02\u2DBA\x02" +
- "\u2DC0\x02\u2DC2\x02\u2DC8\x02\u2DCA\x02\u2DD0\x02\u2DD2\x02\u2DD8\x02" +
- "\u2DDA\x02\u2DE0\x02\u3007\x02\u3009\x02\u3023\x02\u302B\x02\u3033\x02" +
- "\u3037\x02\u303A\x02\u303E\x02\u3043\x02\u3098\x02\u309D\x02\u30A1\x02" +
- "\u30A3\x02\u30FC\x02\u30FE\x02\u3101\x02\u3107\x02\u312F\x02\u3133\x02" +
- "\u3190\x02\u31A2\x02\u31BC\x02\u31F2\x02\u3201\x02\u3402\x02\u4DB7\x02" +
- "\u4E02\x02\u9FD7\x02\uA002\x02\uA48E\x02\uA4D2\x02\uA4FF\x02\uA502\x02" +
- "\uA60E\x02\uA612\x02\uA621\x02\uA62C\x02\uA62D\x02\uA642\x02\uA670\x02" +
- "\uA681\x02\uA69F\x02\uA6A2\x02\uA6F1\x02\uA719\x02\uA721\x02\uA724\x02" +
- "\uA78A\x02\uA78D\x02\uA7B0\x02\uA7B2\x02\uA7B9\x02\uA7F9\x02\uA803\x02" +
- "\uA805\x02\uA807\x02\uA809\x02\uA80C\x02\uA80E\x02\uA824\x02\uA842\x02" +
- "\uA875\x02\uA884\x02\uA8B5\x02\uA8F4\x02\uA8F9\x02\uA8FD\x02\uA8FD\x02" +
- "\uA8FF\x02\uA8FF\x02\uA90C\x02\uA927\x02\uA932\x02\uA948\x02\uA962\x02" +
- "\uA97E\x02\uA986\x02\uA9B4\x02\uA9D1\x02\uA9D1\x02\uA9E2\x02\uA9E6\x02" +
- "\uA9E8\x02\uA9F1\x02\uA9FC\x02\uAA00\x02\uAA02\x02\uAA2A\x02\uAA42\x02" +
- "\uAA44\x02\uAA46\x02\uAA4D\x02\uAA62\x02\uAA78\x02\uAA7C\x02\uAA7C\x02" +
- "\uAA80\x02\uAAB1\x02\uAAB3\x02\uAAB3\x02\uAAB7\x02\uAAB8\x02\uAABB\x02" +
- "\uAABF\x02\uAAC2\x02\uAAC2\x02\uAAC4\x02\uAAC4\x02\uAADD\x02\uAADF\x02" +
- "\uAAE2\x02\uAAEC\x02\uAAF4\x02\uAAF6\x02\uAB03\x02\uAB08\x02\uAB0B\x02" +
- "\uAB10\x02\uAB13\x02\uAB18\x02\uAB22\x02\uAB28\x02\uAB2A\x02\uAB30\x02" +
- "\uAB32\x02\uAB5C\x02\uAB5E\x02\uAB67\x02\uAB72\x02\uABE4\x02\uAC02\x02" +
- "\uD7A5\x02\uD7B2\x02\uD7C8\x02\uD7CD\x02\uD7FD\x02\uF902\x02\uFA6F\x02" +
- "\uFA72\x02\uFADB\x02\uFB02\x02\uFB08\x02\uFB15\x02\uFB19\x02\uFB1F\x02" +
- "\uFB1F\x02\uFB21\x02\uFB2A\x02\uFB2C\x02\uFB38\x02\uFB3A\x02\uFB3E\x02" +
- "\uFB40\x02\uFB40\x02\uFB42\x02\uFB43\x02\uFB45\x02\uFB46\x02\uFB48\x02" +
- "\uFBB3\x02\uFBD5\x02\uFD3F\x02\uFD52\x02\uFD91\x02\uFD94\x02\uFDC9\x02" +
- "\uFDF2\x02\uFDFD\x02\uFE72\x02\uFE76\x02\uFE78\x02\uFEFE\x02\uFF23\x02" +
- "\uFF3C\x02\uFF43\x02\uFF5C\x02\uFF68\x02\uFFC0\x02\uFFC4\x02\uFFC9\x02" +
- "\uFFCC\x02\uFFD1\x02\uFFD4\x02\uFFD9\x02\uFFDC\x02\uFFDE\x02\x02\x03\r" +
- "\x03\x0F\x03(\x03*\x03<\x03>\x03?\x03A\x03O\x03R\x03_\x03\x82\x03\xFC" +
- "\x03\u0142\x03\u0176\x03\u0282\x03\u029E\x03\u02A2\x03\u02D2\x03\u0302" +
- "\x03\u0321\x03\u0332\x03\u034C\x03\u0352\x03\u0377\x03\u0382\x03\u039F" +
- "\x03\u03A2\x03\u03C5\x03\u03CA\x03\u03D1\x03\u03D3\x03\u03D7\x03\u0402" +
- "\x03\u049F\x03\u04B2\x03\u04D5\x03\u04DA\x03\u04FD\x03\u0502\x03\u0529" +
- "\x03\u0532\x03\u0565\x03\u0602\x03\u0738\x03\u0742\x03\u0757\x03\u0762" +
- "\x03\u0769\x03\u0802\x03\u0807\x03\u080A\x03\u080A\x03\u080C\x03\u0837" +
- "\x03\u0839\x03\u083A\x03\u083E\x03\u083E\x03\u0841\x03\u0857\x03\u0862" +
- "\x03\u0878\x03\u0882\x03\u08A0\x03\u08E2\x03\u08F4\x03\u08F6\x03\u08F7" +
- "\x03\u0902\x03\u0917\x03\u0922\x03\u093B\x03\u0982\x03\u09B9\x03\u09C0" +
- "\x03\u09C1\x03\u0A02\x03\u0A02\x03\u0A12\x03\u0A15\x03\u0A17\x03\u0A19" +
- "\x03\u0A1B\x03\u0A35\x03\u0A62\x03\u0A7E\x03\u0A82\x03\u0A9E\x03\u0AC2" +
- "\x03\u0AC9\x03\u0ACB\x03\u0AE6\x03\u0B02\x03\u0B37\x03\u0B42\x03\u0B57" +
- "\x03\u0B62\x03\u0B74\x03\u0B82\x03\u0B93\x03\u0C02\x03\u0C4A\x03\u0C82" +
- "\x03\u0CB4\x03\u0CC2\x03\u0CF4\x03\u1005\x03\u1039\x03\u1085\x03\u10B1" +
- "\x03\u10D2\x03\u10EA\x03\u1105\x03\u1128\x03\u1152\x03\u1174\x03\u1178" +
- "\x03\u1178\x03\u1185\x03\u11B4\x03\u11C3\x03\u11C6\x03\u11DC\x03\u11DC" +
- "\x03\u11DE\x03\u11DE\x03\u1202\x03\u1213\x03\u1215\x03\u122D\x03\u1282" +
- "\x03\u1288\x03\u128A\x03\u128A\x03\u128C\x03\u128F\x03\u1291\x03\u129F" +
- "\x03\u12A1\x03\u12AA\x03\u12B2\x03\u12E0\x03\u1307\x03\u130E\x03\u1311" +
- "\x03\u1312\x03\u1315\x03\u132A\x03\u132C\x03\u1332\x03\u1334\x03\u1335" +
- "\x03\u1337\x03\u133B\x03\u133F\x03\u133F\x03\u1352\x03\u1352\x03\u135F" +
- "\x03\u1363\x03\u1402\x03\u1436\x03\u1449\x03\u144C\x03\u1482\x03\u14B1" +
- "\x03\u14C6\x03\u14C7\x03\u14C9\x03\u14C9\x03\u1582\x03\u15B0\x03\u15DA" +
- "\x03\u15DD\x03\u1602\x03\u1631\x03\u1646\x03\u1646\x03\u1682\x03\u16AC" +
- "\x03\u1702\x03\u171B\x03\u18A2\x03\u18E1\x03\u1901\x03\u1901\x03\u1AC2" +
- "\x03\u1AFA\x03\u1C02\x03\u1C0A\x03\u1C0C\x03\u1C30\x03\u1C42\x03\u1C42" +
- "\x03\u1C74\x03\u1C91\x03\u2002\x03\u239B\x03\u2402\x03\u2470\x03\u2482" +
- "\x03\u2545\x03\u3002\x03\u3430\x03\u4402\x03\u4648\x03\u6802\x03\u6A3A" +
- "\x03\u6A42\x03\u6A60\x03\u6AD2\x03\u6AEF\x03\u6B02\x03\u6B31\x03\u6B42" +
- "\x03\u6B45\x03\u6B65\x03\u6B79\x03\u6B7F\x03\u6B91\x03\u6F02\x03\u6F46" +
- "\x03\u6F52\x03\u6F52\x03\u6F95\x03\u6FA1\x03\u6FE2\x03\u6FE2\x03\u7002" +
- "\x03\u87EE\x03\u8802\x03\u8AF4\x03\uB002\x03\uB003\x03\uBC02\x03\uBC6C" +
- "\x03\uBC72\x03\uBC7E\x03\uBC82\x03\uBC8A\x03\uBC92\x03\uBC9B\x03\uD402" +
- "\x03\uD456\x03\uD458\x03\uD49E\x03\uD4A0\x03\uD4A1\x03\uD4A4\x03\uD4A4" +
- "\x03\uD4A7\x03\uD4A8\x03\uD4AB\x03\uD4AE\x03\uD4B0\x03\uD4BB\x03\uD4BD" +
- "\x03\uD4BD\x03\uD4BF\x03\uD4C5\x03\uD4C7\x03\uD507\x03\uD509\x03\uD50C" +
- "\x03\uD50F\x03\uD516\x03\uD518\x03\uD51E\x03\uD520\x03\uD53B\x03\uD53D" +
- "\x03\uD540\x03\uD542\x03\uD546\x03\uD548\x03\uD548\x03\uD54C\x03\uD552" +
- "\x03\uD554\x03\uD6A7\x03\uD6AA\x03\uD6C2\x03\uD6C4\x03\uD6DC\x03\uD6DE" +
- "\x03\uD6FC\x03\uD6FE\x03\uD716\x03\uD718\x03\uD736\x03\uD738\x03\uD750" +
- "\x03\uD752\x03\uD770\x03\uD772\x03\uD78A\x03\uD78C\x03\uD7AA\x03\uD7AC" +
- "\x03\uD7C4\x03\uD7C6\x03\uD7CD\x03\uE802\x03\uE8C6\x03\uE902\x03\uE945" +
- "\x03\uEE02\x03\uEE05\x03\uEE07\x03\uEE21\x03\uEE23\x03\uEE24\x03\uEE26" +
- "\x03\uEE26\x03\uEE29\x03\uEE29\x03\uEE2B\x03\uEE34\x03\uEE36\x03\uEE39" +
- "\x03\uEE3B\x03\uEE3B\x03\uEE3D\x03\uEE3D\x03\uEE44\x03\uEE44\x03\uEE49" +
- "\x03\uEE49\x03\uEE4B\x03\uEE4B\x03\uEE4D\x03\uEE4D\x03\uEE4F\x03\uEE51" +
- "\x03\uEE53\x03\uEE54\x03\uEE56\x03\uEE56\x03\uEE59\x03\uEE59\x03\uEE5B" +
- "\x03\uEE5B\x03\uEE5D\x03\uEE5D\x03\uEE5F\x03\uEE5F\x03\uEE61\x03\uEE61" +
- "\x03\uEE63\x03\uEE64\x03\uEE66\x03\uEE66\x03\uEE69\x03\uEE6C\x03\uEE6E" +
- "\x03\uEE74\x03\uEE76\x03\uEE79\x03\uEE7B\x03\uEE7E\x03\uEE80\x03\uEE80" +
- "\x03\uEE82\x03\uEE8B\x03\uEE8D\x03\uEE9D\x03\uEEA3\x03\uEEA5\x03\uEEA7" +
- "\x03\uEEAB\x03\uEEAD\x03\uEEBD\x03\x02\x04\uA6D8\x04\uA702\x04\uB736\x04" +
- "\uB742\x04\uB81F\x04\uB822\x04\uCEA3\x04\uF802\x04\uFA1F\x04\u02A7\x02" +
- "&\x02&\x022\x02;\x02C\x02\\\x02a\x02a\x02c\x02|\x02\xAC\x02\xAC\x02\xB7" +
- "\x02\xB7\x02\xB9\x02\xB9\x02\xBC\x02\xBC\x02\xC2\x02\xD8\x02\xDA\x02\xF8" +
- "\x02\xFA\x02\u02C3\x02\u02C8\x02\u02D3\x02\u02E2\x02\u02E6\x02\u02EE\x02" +
- "\u02EE\x02\u02F0\x02\u02F0\x02\u0302\x02\u0376\x02\u0378\x02\u0379\x02" +
- "\u037C\x02\u037F\x02\u0381\x02\u0381\x02\u0388\x02\u038C\x02\u038E\x02" +
+ "\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x03\x02\x03" +
+ "\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03" +
+ "\x03\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x05\x03\x05\x03\x05\x03" +
+ "\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x06\x03\x06\x03" +
+ "\x07\x03\x07\x03\b\x03\b\x03\t\x03\t\x03\n\x03\n\x03\v\x03\v\x03\f\x03" +
+ "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x05\f\\\n\f\x03\r\x03\r\x03\r\x07" +
+ "\ra\n\r\f\r\x0E\rd\v\r\x03\x0E\x03\x0E\x03\x0E\x07\x0Ei\n\x0E\f\x0E\x0E" +
+ "\x0El\v\x0E\x03\x0F\x05\x0Fo\n\x0F\x03\x0F\x03\x0F\x03\x0F\x06\x0Ft\n" +
+ "\x0F\r\x0F\x0E\x0Fu\x05\x0Fx\n\x0F\x03\x0F\x05\x0F{\n\x0F\x03\x10\x03" +
+ "\x10\x03\x10\x07\x10\x80\n\x10\f\x10\x0E\x10\x83\v\x10\x05\x10\x85\n\x10" +
+ "\x03\x11\x03\x11\x05\x11\x89\n\x11\x03\x11\x03\x11\x03\x12\x06\x12\x8E" +
+ "\n\x12\r\x12\x0E\x12\x8F\x03\x12\x03\x12\x03\x13\x03\x13\x07\x13\x96\n" +
+ "\x13\f\x13\x0E\x13\x99\v\x13\x03\x14\x03\x14\x03\x14\x03\x14\x07\x14\x9F" +
+ "\n\x14\f\x14\x0E\x14\xA2\v\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15" +
+ "\x03\x15\x07\x15\xAA\n\x15\f\x15\x0E\x15\xAD\v\x15\x03\x15\x03\x15\x03" +
+ "\x15\x03\x15\x03\x15\x03\x16\x03\x16\x03\xAB\x02\x02\x17\x03\x02\x03\x05" +
+ "\x02\x04\x07\x02\x05\t\x02\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13" +
+ "\x02\v\x15\x02\f\x17\x02\r\x19\x02\x02\x1B\x02\x02\x1D\x02\x0E\x1F\x02" +
+ "\x02!\x02\x02#\x02\x0F%\x02\x10\'\x02\x11)\x02\x12+\x02\x13\x03\x02\n" +
+ "\x03\x02$$\x03\x02))\x03\x022;\x03\x023;\x04\x02GGgg\x04\x02--//\r\x02" +
+ "\v\x0F\"\"\x87\x87\xA2\xA2\u1682\u1682\u2002\u200C\u202A\u202B\u2031\u2031" +
+ "\u2061\u2061\u3002\u3002\uFF01\uFF01\x04\x02\f\f\x0F\x0F\x04\u023F\x02" +
+ "&\x02&\x02C\x02\\\x02a\x02a\x02c\x02|\x02\xAC\x02\xAC\x02\xB7\x02\xB7" +
+ "\x02\xBC\x02\xBC\x02\xC2\x02\xD8\x02\xDA\x02\xF8\x02\xFA\x02\u02C3\x02" +
+ "\u02C8\x02\u02D3\x02\u02E2\x02\u02E6\x02\u02EE\x02\u02EE\x02\u02F0\x02" +
+ "\u02F0\x02\u0372\x02\u0376\x02\u0378\x02\u0379\x02\u037C\x02\u037F\x02" +
+ "\u0381\x02\u0381\x02\u0388\x02\u0388\x02\u038A\x02\u038C\x02\u038E\x02" +
"\u038E\x02\u0390\x02\u03A3\x02\u03A5\x02\u03F7\x02\u03F9\x02\u0483\x02" +
- "\u0485\x02\u0489\x02\u048C\x02\u0531\x02\u0533\x02\u0558\x02\u055B\x02" +
- "\u055B\x02\u0563\x02\u0589\x02\u0593\x02\u05BF\x02\u05C1\x02\u05C1\x02" +
- "\u05C3\x02\u05C4\x02\u05C6\x02\u05C7\x02\u05C9\x02\u05C9\x02\u05D2\x02" +
- "\u05EC\x02\u05F2\x02\u05F4\x02\u0612\x02\u061C\x02\u0622\x02\u066B\x02" +
- "\u0670\x02\u06D5\x02\u06D7\x02\u06DE\x02\u06E1\x02\u06EA\x02\u06EC\x02" +
- "\u06FE\x02\u0701\x02\u0701\x02\u0712\x02\u074C\x02\u074F\x02\u07B3\x02" +
- "\u07C2\x02\u07F7\x02\u07FC\x02\u07FC\x02\u0802\x02\u082F\x02\u0842\x02" +
- "\u085D\x02\u08A2\x02\u08B6\x02\u08B8\x02\u08BF\x02\u08D6\x02\u08E3\x02" +
- "\u08E5\x02\u0965\x02\u0968\x02\u0971\x02\u0973\x02\u0985\x02\u0987\x02" +
- "\u098E\x02\u0991\x02\u0992\x02\u0995\x02\u09AA\x02\u09AC\x02\u09B2\x02" +
- "\u09B4\x02\u09B4\x02\u09B8\x02\u09BB\x02\u09BE\x02\u09C6\x02\u09C9\x02" +
- "\u09CA\x02\u09CD\x02\u09D0\x02\u09D9\x02\u09D9\x02\u09DE\x02\u09DF\x02" +
- "\u09E1\x02\u09E5\x02\u09E8\x02\u09F3\x02\u0A03\x02\u0A05\x02\u0A07\x02" +
- "\u0A0C\x02\u0A11\x02\u0A12\x02\u0A15\x02\u0A2A\x02\u0A2C\x02\u0A32\x02" +
- "\u0A34\x02\u0A35\x02\u0A37\x02\u0A38\x02\u0A3A\x02\u0A3B\x02\u0A3E\x02" +
- "\u0A3E\x02\u0A40\x02\u0A44\x02\u0A49\x02\u0A4A\x02\u0A4D\x02\u0A4F\x02" +
- "\u0A53\x02\u0A53\x02\u0A5B\x02\u0A5E\x02\u0A60\x02\u0A60\x02\u0A68\x02" +
- "\u0A77\x02\u0A83\x02\u0A85\x02\u0A87\x02\u0A8F\x02\u0A91\x02\u0A93\x02" +
+ "\u048C\x02\u0531\x02\u0533\x02\u0558\x02\u055B\x02\u055B\x02\u0563\x02" +
+ "\u0589\x02\u05D2\x02\u05EC\x02\u05F2\x02\u05F4\x02\u0622\x02\u064C\x02" +
+ "\u0670\x02\u0671\x02\u0673\x02\u06D5\x02\u06D7\x02\u06D7\x02\u06E7\x02" +
+ "\u06E8\x02\u06F0\x02\u06F1\x02\u06FC\x02\u06FE\x02\u0701\x02\u0701\x02" +
+ "\u0712\x02\u0712\x02\u0714\x02\u0731\x02\u074F\x02\u07A7\x02\u07B3\x02" +
+ "\u07B3\x02\u07CC\x02\u07EC\x02\u07F6\x02\u07F7\x02\u07FC\x02\u07FC\x02" +
+ "\u0802\x02\u0817\x02\u081C\x02\u081C\x02\u0826\x02\u0826\x02\u082A\x02" +
+ "\u082A\x02\u0842\x02\u085A\x02\u08A2\x02\u08B6\x02\u08B8\x02\u08BF\x02" +
+ "\u0906\x02\u093B\x02\u093F\x02\u093F\x02\u0952\x02\u0952\x02\u095A\x02" +
+ "\u0963\x02\u0973\x02\u0982\x02\u0987\x02\u098E\x02\u0991\x02\u0992\x02" +
+ "\u0995\x02\u09AA\x02\u09AC\x02\u09B2\x02\u09B4\x02\u09B4\x02\u09B8\x02" +
+ "\u09BB\x02\u09BF\x02\u09BF\x02\u09D0\x02\u09D0\x02\u09DE\x02\u09DF\x02" +
+ "\u09E1\x02\u09E3\x02\u09F2\x02\u09F3\x02\u0A07\x02\u0A0C\x02\u0A11\x02" +
+ "\u0A12\x02\u0A15\x02\u0A2A\x02\u0A2C\x02\u0A32\x02\u0A34\x02\u0A35\x02" +
+ "\u0A37\x02\u0A38\x02\u0A3A\x02\u0A3B\x02\u0A5B\x02\u0A5E\x02\u0A60\x02" +
+ "\u0A60\x02\u0A74\x02\u0A76\x02\u0A87\x02\u0A8F\x02\u0A91\x02\u0A93\x02" +
"\u0A95\x02\u0AAA\x02\u0AAC\x02\u0AB2\x02\u0AB4\x02\u0AB5\x02\u0AB7\x02" +
- "\u0ABB\x02\u0ABE\x02\u0AC7\x02\u0AC9\x02\u0ACB\x02\u0ACD\x02\u0ACF\x02" +
- "\u0AD2\x02\u0AD2\x02\u0AE2\x02\u0AE5\x02\u0AE8\x02\u0AF1\x02\u0AFB\x02" +
- "\u0AFB\x02\u0B03\x02\u0B05\x02\u0B07\x02\u0B0E\x02\u0B11\x02\u0B12\x02" +
- "\u0B15\x02\u0B2A\x02\u0B2C\x02\u0B32\x02\u0B34\x02\u0B35\x02\u0B37\x02" +
- "\u0B3B\x02\u0B3E\x02\u0B46\x02\u0B49\x02\u0B4A\x02\u0B4D\x02\u0B4F\x02" +
- "\u0B58\x02\u0B59\x02\u0B5E\x02\u0B5F\x02\u0B61\x02\u0B65\x02\u0B68\x02" +
- "\u0B71\x02\u0B73\x02\u0B73\x02\u0B84\x02\u0B85\x02\u0B87\x02\u0B8C\x02" +
- "\u0B90\x02\u0B92\x02\u0B94\x02\u0B97\x02\u0B9B\x02\u0B9C\x02\u0B9E\x02" +
- "\u0B9E\x02\u0BA0\x02\u0BA1\x02\u0BA5\x02\u0BA6\x02\u0BAA\x02\u0BAC\x02" +
- "\u0BB0\x02\u0BBB\x02\u0BC0\x02\u0BC4\x02\u0BC8\x02\u0BCA\x02\u0BCC\x02" +
- "\u0BCF\x02\u0BD2\x02\u0BD2\x02\u0BD9\x02\u0BD9\x02\u0BE8\x02\u0BF1\x02" +
- "\u0C02\x02\u0C05\x02\u0C07\x02\u0C0E\x02\u0C10\x02\u0C12\x02\u0C14\x02" +
- "\u0C2A\x02\u0C2C\x02\u0C3B\x02\u0C3F\x02\u0C46\x02\u0C48\x02\u0C4A\x02" +
- "\u0C4C\x02\u0C4F\x02\u0C57\x02\u0C58\x02\u0C5A\x02\u0C5C\x02\u0C62\x02" +
- "\u0C65\x02\u0C68\x02\u0C71\x02\u0C82\x02\u0C85\x02\u0C87\x02\u0C8E\x02" +
- "\u0C90\x02\u0C92\x02\u0C94\x02\u0CAA\x02\u0CAC\x02\u0CB5\x02\u0CB7\x02" +
- "\u0CBB\x02\u0CBE\x02\u0CC6\x02\u0CC8\x02\u0CCA\x02\u0CCC\x02\u0CCF\x02" +
- "\u0CD7\x02\u0CD8\x02\u0CE0\x02\u0CE0\x02\u0CE2\x02\u0CE5\x02\u0CE8\x02" +
- "\u0CF1\x02\u0CF3\x02\u0CF4\x02\u0D03\x02\u0D05\x02\u0D07\x02\u0D0E\x02" +
- "\u0D10\x02\u0D12\x02\u0D14\x02\u0D3C\x02\u0D3F\x02\u0D46\x02\u0D48\x02" +
- "\u0D4A\x02\u0D4C\x02\u0D50\x02\u0D56\x02\u0D59\x02\u0D61\x02\u0D65\x02" +
- "\u0D68\x02\u0D71\x02\u0D7C\x02\u0D81\x02\u0D84\x02\u0D85\x02\u0D87\x02" +
- "\u0D98\x02\u0D9C\x02\u0DB3\x02\u0DB5\x02\u0DBD\x02\u0DBF\x02\u0DBF\x02" +
- "\u0DC2\x02\u0DC8\x02\u0DCC\x02\u0DCC\x02\u0DD1\x02\u0DD6\x02\u0DD8\x02" +
- "\u0DD8\x02\u0DDA\x02\u0DE1\x02\u0DE8\x02\u0DF1\x02\u0DF4\x02\u0DF5\x02" +
- "\u0E03\x02\u0E3C\x02\u0E42\x02\u0E50\x02\u0E52\x02\u0E5B\x02\u0E83\x02" +
- "\u0E84\x02\u0E86\x02\u0E86\x02\u0E89\x02\u0E8A\x02\u0E8C\x02\u0E8C\x02" +
- "\u0E8F\x02\u0E8F\x02\u0E96\x02\u0E99\x02\u0E9B\x02\u0EA1\x02\u0EA3\x02" +
- "\u0EA5\x02\u0EA7\x02\u0EA7\x02\u0EA9\x02\u0EA9\x02\u0EAC\x02\u0EAD\x02" +
- "\u0EAF\x02\u0EBB\x02\u0EBD\x02\u0EBF\x02\u0EC2\x02\u0EC6\x02\u0EC8\x02" +
- "\u0EC8\x02\u0ECA\x02\u0ECF\x02\u0ED2\x02\u0EDB\x02\u0EDE\x02\u0EE1\x02" +
- "\u0F02\x02\u0F02\x02\u0F1A\x02\u0F1B\x02\u0F22\x02\u0F2B\x02\u0F37\x02" +
- "\u0F37\x02\u0F39\x02\u0F39\x02\u0F3B\x02\u0F3B\x02\u0F40\x02\u0F49\x02" +
- "\u0F4B\x02\u0F6E\x02\u0F73\x02\u0F86\x02\u0F88\x02\u0F99\x02\u0F9B\x02" +
- "\u0FBE\x02\u0FC8\x02\u0FC8\x02\u1002\x02\u104B\x02\u1052\x02\u109F\x02" +
- "\u10A2\x02\u10C7\x02\u10C9\x02\u10C9\x02\u10CF\x02\u10CF\x02\u10D2\x02" +
- "\u10FC\x02\u10FE\x02\u124A\x02\u124C\x02\u124F\x02\u1252\x02\u1258\x02" +
- "\u125A\x02\u125A\x02\u125C\x02\u125F\x02\u1262\x02\u128A\x02\u128C\x02" +
- "\u128F\x02\u1292\x02\u12B2\x02\u12B4\x02\u12B7\x02\u12BA\x02\u12C0\x02" +
- "\u12C2\x02\u12C2\x02\u12C4\x02\u12C7\x02\u12CA\x02\u12D8\x02\u12DA\x02" +
- "\u1312\x02\u1314\x02\u1317\x02\u131A\x02\u135C\x02\u135F\x02\u1361\x02" +
- "\u136B\x02\u1373\x02\u1382\x02\u1391\x02\u13A2\x02\u13F7\x02\u13FA\x02" +
- "\u13FF\x02\u1403\x02\u166E\x02\u1671\x02\u1681\x02\u1683\x02\u169C\x02" +
- "\u16A2\x02\u16EC\x02\u16F0\x02\u16FA\x02\u1702\x02\u170E\x02\u1710\x02" +
- "\u1716\x02\u1722\x02\u1736\x02\u1742\x02\u1755\x02\u1762\x02\u176E\x02" +
- "\u1770\x02\u1772\x02\u1774\x02\u1775\x02\u1782\x02\u17D5\x02\u17D9\x02" +
- "\u17D9\x02\u17DE\x02\u17DF\x02\u17E2\x02\u17EB\x02\u180D\x02\u180F\x02" +
- "\u1812\x02\u181B\x02\u1822\x02\u1879\x02\u1882\x02\u18AC\x02\u18B2\x02" +
- "\u18F7\x02\u1902\x02\u1920\x02\u1922\x02\u192D\x02\u1932\x02\u193D\x02" +
- "\u1948\x02\u196F\x02\u1972\x02\u1976\x02\u1982\x02\u19AD\x02\u19B2\x02" +
- "\u19CB\x02\u19D2\x02\u19DC\x02\u1A02\x02\u1A1D\x02\u1A22\x02\u1A60\x02" +
- "\u1A62\x02\u1A7E\x02\u1A81\x02\u1A8B\x02\u1A92\x02\u1A9B\x02\u1AA9\x02" +
- "\u1AA9\x02\u1AB2\x02\u1ABF\x02\u1B02\x02\u1B4D\x02\u1B52\x02\u1B5B\x02" +
- "\u1B6D\x02\u1B75\x02\u1B82\x02\u1BF5\x02\u1C02\x02\u1C39\x02\u1C42\x02" +
- "\u1C4B\x02\u1C4F\x02\u1C7F\x02\u1C82\x02\u1C8A\x02\u1CD2\x02\u1CD4\x02" +
- "\u1CD6\x02\u1CF8\x02\u1CFA\x02\u1CFB\x02\u1D02\x02\u1DF7\x02\u1DFD\x02" +
- "\u1F17\x02\u1F1A\x02\u1F1F\x02\u1F22\x02\u1F47\x02\u1F4A\x02\u1F4F\x02" +
- "\u1F52\x02\u1F59\x02\u1F5B\x02\u1F5B\x02\u1F5D\x02\u1F5D\x02\u1F5F\x02" +
- "\u1F5F\x02\u1F61\x02\u1F7F\x02\u1F82\x02\u1FB6\x02\u1FB8\x02\u1FBE\x02" +
- "\u1FC0\x02\u1FC0\x02\u1FC4\x02\u1FC6\x02\u1FC8\x02\u1FCE\x02\u1FD2\x02" +
- "\u1FD5\x02\u1FD8\x02\u1FDD\x02\u1FE2\x02\u1FEE\x02\u1FF4\x02\u1FF6\x02" +
- "\u1FF8\x02\u1FFE\x02\u2041\x02\u2042\x02\u2056\x02\u2056\x02\u2073\x02" +
- "\u2073\x02\u2081\x02\u2081\x02\u2092\x02\u209E\x02\u20D2\x02\u20DE\x02" +
- "\u20E3\x02\u20E3\x02\u20E7\x02\u20F2\x02\u2104\x02\u2104\x02\u2109\x02" +
- "\u2109\x02\u210C\x02\u2115\x02\u2117\x02\u2117\x02\u211A\x02\u211F\x02" +
- "\u2126\x02\u2126\x02\u2128\x02\u2128\x02\u212A\x02\u212A\x02\u212C\x02" +
- "\u213B\x02\u213E\x02\u2141\x02\u2147\x02\u214B\x02\u2150\x02\u2150\x02" +
- "\u2162\x02\u218A\x02\u2C02\x02\u2C30\x02\u2C32\x02\u2C60\x02\u2C62\x02" +
- "\u2CE6\x02\u2CED\x02\u2CF5\x02\u2D02\x02\u2D27\x02\u2D29\x02\u2D29\x02" +
- "\u2D2F\x02\u2D2F\x02\u2D32\x02\u2D69\x02\u2D71\x02\u2D71\x02\u2D81\x02" +
+ "\u0ABB\x02\u0ABF\x02\u0ABF\x02\u0AD2\x02\u0AD2\x02\u0AE2\x02\u0AE3\x02" +
+ "\u0AFB\x02\u0AFB\x02\u0B07\x02\u0B0E\x02\u0B11\x02\u0B12\x02\u0B15\x02" +
+ "\u0B2A\x02\u0B2C\x02\u0B32\x02\u0B34\x02\u0B35\x02\u0B37\x02\u0B3B\x02" +
+ "\u0B3F\x02\u0B3F\x02\u0B5E\x02\u0B5F\x02\u0B61\x02\u0B63\x02\u0B73\x02" +
+ "\u0B73\x02\u0B85\x02\u0B85\x02\u0B87\x02\u0B8C\x02\u0B90\x02\u0B92\x02" +
+ "\u0B94\x02\u0B97\x02\u0B9B\x02\u0B9C\x02\u0B9E\x02\u0B9E\x02\u0BA0\x02" +
+ "\u0BA1\x02\u0BA5\x02\u0BA6\x02\u0BAA\x02\u0BAC\x02\u0BB0\x02\u0BBB\x02" +
+ "\u0BD2\x02\u0BD2\x02\u0C07\x02\u0C0E\x02\u0C10\x02\u0C12\x02\u0C14\x02" +
+ "\u0C2A\x02\u0C2C\x02\u0C3B\x02\u0C3F\x02\u0C3F\x02\u0C5A\x02\u0C5C\x02" +
+ "\u0C62\x02\u0C63\x02\u0C82\x02\u0C82\x02\u0C87\x02\u0C8E\x02\u0C90\x02" +
+ "\u0C92\x02\u0C94\x02\u0CAA\x02\u0CAC\x02\u0CB5\x02\u0CB7\x02\u0CBB\x02" +
+ "\u0CBF\x02\u0CBF\x02\u0CE0\x02\u0CE0\x02\u0CE2\x02\u0CE3\x02\u0CF3\x02" +
+ "\u0CF4\x02\u0D07\x02\u0D0E\x02\u0D10\x02\u0D12\x02\u0D14\x02\u0D3C\x02" +
+ "\u0D3F\x02\u0D3F\x02\u0D50\x02\u0D50\x02\u0D56\x02\u0D58\x02\u0D61\x02" +
+ "\u0D63\x02\u0D7C\x02\u0D81\x02\u0D87\x02\u0D98\x02\u0D9C\x02\u0DB3\x02" +
+ "\u0DB5\x02\u0DBD\x02\u0DBF\x02\u0DBF\x02\u0DC2\x02\u0DC8\x02\u0E03\x02" +
+ "\u0E32\x02\u0E34\x02\u0E35\x02\u0E42\x02\u0E48\x02\u0E83\x02\u0E84\x02" +
+ "\u0E86\x02\u0E86\x02\u0E89\x02\u0E8A\x02\u0E8C\x02\u0E8C\x02\u0E8F\x02" +
+ "\u0E8F\x02\u0E96\x02\u0E99\x02\u0E9B\x02\u0EA1\x02\u0EA3\x02\u0EA5\x02" +
+ "\u0EA7\x02\u0EA7\x02\u0EA9\x02\u0EA9\x02\u0EAC\x02\u0EAD\x02\u0EAF\x02" +
+ "\u0EB2\x02\u0EB4\x02\u0EB5\x02\u0EBF\x02\u0EBF\x02\u0EC2\x02\u0EC6\x02" +
+ "\u0EC8\x02\u0EC8\x02\u0EDE\x02\u0EE1\x02\u0F02\x02\u0F02\x02\u0F42\x02" +
+ "\u0F49\x02\u0F4B\x02\u0F6E\x02\u0F8A\x02\u0F8E\x02\u1002\x02\u102C\x02" +
+ "\u1041\x02\u1041\x02\u1052\x02\u1057\x02\u105C\x02\u105F\x02\u1063\x02" +
+ "\u1063\x02\u1067\x02\u1068\x02\u1070\x02\u1072\x02\u1077\x02\u1083\x02" +
+ "\u1090\x02\u1090\x02\u10A2\x02\u10C7\x02\u10C9\x02\u10C9\x02\u10CF\x02" +
+ "\u10CF\x02\u10D2\x02\u10FC\x02\u10FE\x02\u124A\x02\u124C\x02\u124F\x02" +
+ "\u1252\x02\u1258\x02\u125A\x02\u125A\x02\u125C\x02\u125F\x02\u1262\x02" +
+ "\u128A\x02\u128C\x02\u128F\x02\u1292\x02\u12B2\x02\u12B4\x02\u12B7\x02" +
+ "\u12BA\x02\u12C0\x02\u12C2\x02\u12C2\x02\u12C4\x02\u12C7\x02\u12CA\x02" +
+ "\u12D8\x02\u12DA\x02\u1312\x02\u1314\x02\u1317\x02\u131A\x02\u135C\x02" +
+ "\u1382\x02\u1391\x02\u13A2\x02\u13F7\x02\u13FA\x02\u13FF\x02\u1403\x02" +
+ "\u166E\x02\u1671\x02\u1681\x02\u1683\x02\u169C\x02\u16A2\x02\u16EC\x02" +
+ "\u16F0\x02\u16FA\x02\u1702\x02\u170E\x02\u1710\x02\u1713\x02\u1722\x02" +
+ "\u1733\x02\u1742\x02\u1753\x02\u1762\x02\u176E\x02\u1770\x02\u1772\x02" +
+ "\u1782\x02\u17B5\x02\u17D9\x02\u17D9\x02\u17DE\x02\u17DE\x02\u1822\x02" +
+ "\u1879\x02\u1882\x02\u18AA\x02\u18AC\x02\u18AC\x02\u18B2\x02\u18F7\x02" +
+ "\u1902\x02\u1920\x02\u1952\x02\u196F\x02\u1972\x02\u1976\x02\u1982\x02" +
+ "\u19AD\x02\u19B2\x02\u19CB\x02\u1A02\x02\u1A18\x02\u1A22\x02\u1A56\x02" +
+ "\u1AA9\x02\u1AA9\x02\u1B07\x02\u1B35\x02\u1B47\x02\u1B4D\x02\u1B85\x02" +
+ "\u1BA2\x02\u1BB0\x02\u1BB1\x02\u1BBC\x02\u1BE7\x02\u1C02\x02\u1C25\x02" +
+ "\u1C4F\x02\u1C51\x02\u1C5C\x02\u1C7F\x02\u1C82\x02\u1C8A\x02\u1CEB\x02" +
+ "\u1CEE\x02\u1CF0\x02\u1CF3\x02\u1CF7\x02\u1CF8\x02\u1D02\x02\u1DC1\x02" +
+ "\u1E02\x02\u1F17\x02\u1F1A\x02\u1F1F\x02\u1F22\x02\u1F47\x02\u1F4A\x02" +
+ "\u1F4F\x02\u1F52\x02\u1F59\x02\u1F5B\x02\u1F5B\x02\u1F5D\x02\u1F5D\x02" +
+ "\u1F5F\x02\u1F5F\x02\u1F61\x02\u1F7F\x02\u1F82\x02\u1FB6\x02\u1FB8\x02" +
+ "\u1FBE\x02\u1FC0\x02\u1FC0\x02\u1FC4\x02\u1FC6\x02\u1FC8\x02\u1FCE\x02" +
+ "\u1FD2\x02\u1FD5\x02\u1FD8\x02\u1FDD\x02\u1FE2\x02\u1FEE\x02\u1FF4\x02" +
+ "\u1FF6\x02\u1FF8\x02\u1FFE\x02\u2073\x02\u2073\x02\u2081\x02\u2081\x02" +
+ "\u2092\x02\u209E\x02\u2104\x02\u2104\x02\u2109\x02\u2109\x02\u210C\x02" +
+ "\u2115\x02\u2117\x02\u2117\x02\u211A\x02\u211F\x02\u2126\x02\u2126\x02" +
+ "\u2128\x02\u2128\x02\u212A\x02\u212A\x02\u212C\x02\u213B\x02\u213E\x02" +
+ "\u2141\x02\u2147\x02\u214B\x02\u2150\x02\u2150\x02\u2162\x02\u218A\x02" +
+ "\u2C02\x02\u2C30\x02\u2C32\x02\u2C60\x02\u2C62\x02\u2CE6\x02\u2CED\x02" +
+ "\u2CF0\x02\u2CF4\x02\u2CF5\x02\u2D02\x02\u2D27\x02\u2D29\x02\u2D29\x02" +
+ "\u2D2F\x02\u2D2F\x02\u2D32\x02\u2D69\x02\u2D71\x02\u2D71\x02\u2D82\x02" +
"\u2D98\x02\u2DA2\x02\u2DA8\x02\u2DAA\x02\u2DB0\x02\u2DB2\x02\u2DB8\x02" +
"\u2DBA\x02\u2DC0\x02\u2DC2\x02\u2DC8\x02\u2DCA\x02\u2DD0\x02\u2DD2\x02" +
- "\u2DD8\x02\u2DDA\x02\u2DE0\x02\u2DE2\x02\u2E01\x02\u3007\x02\u3009\x02" +
- "\u3023\x02\u3031\x02\u3033\x02\u3037\x02\u303A\x02\u303E\x02\u3043\x02" +
- "\u3098\x02\u309B\x02\u30A1\x02\u30A3\x02\u30FC\x02\u30FE\x02\u3101\x02" +
- "\u3107\x02\u312F\x02\u3133\x02\u3190\x02\u31A2\x02\u31BC\x02\u31F2\x02" +
- "\u3201\x02\u3402\x02\u4DB7\x02\u4E02\x02\u9FD7\x02\uA002\x02\uA48E\x02" +
- "\uA4D2\x02\uA4FF\x02\uA502\x02\uA60E\x02\uA612\x02\uA62D\x02\uA642\x02" +
- "\uA671\x02\uA676\x02\uA67F\x02\uA681\x02\uA6F3\x02\uA719\x02\uA721\x02" +
+ "\u2DD8\x02\u2DDA\x02\u2DE0\x02\u3007\x02\u3009\x02\u3023\x02\u302B\x02" +
+ "\u3033\x02\u3037\x02\u303A\x02\u303E\x02\u3043\x02\u3098\x02\u309D\x02" +
+ "\u30A1\x02\u30A3\x02\u30FC\x02\u30FE\x02\u3101\x02\u3107\x02\u312F\x02" +
+ "\u3133\x02\u3190\x02\u31A2\x02\u31BC\x02\u31F2\x02\u3201\x02\u3402\x02" +
+ "\u4DB7\x02\u4E02\x02\u9FD7\x02\uA002\x02\uA48E\x02\uA4D2\x02\uA4FF\x02" +
+ "\uA502\x02\uA60E\x02\uA612\x02\uA621\x02\uA62C\x02\uA62D\x02\uA642\x02" +
+ "\uA670\x02\uA681\x02\uA69F\x02\uA6A2\x02\uA6F1\x02\uA719\x02\uA721\x02" +
"\uA724\x02\uA78A\x02\uA78D\x02\uA7B0\x02\uA7B2\x02\uA7B9\x02\uA7F9\x02" +
- "\uA829\x02\uA842\x02\uA875\x02\uA882\x02\uA8C7\x02\uA8D2\x02\uA8DB\x02" +
- "\uA8E2\x02\uA8F9\x02\uA8FD\x02\uA8FD\x02\uA8FF\x02\uA8FF\x02\uA902\x02" +
- "\uA92F\x02\uA932\x02\uA955\x02\uA962\x02\uA97E\x02\uA982\x02\uA9C2\x02" +
- "\uA9D1\x02\uA9DB\x02\uA9E2\x02\uAA00\x02\uAA02\x02\uAA38\x02\uAA42\x02" +
- "\uAA4F\x02\uAA52\x02\uAA5B\x02\uAA62\x02\uAA78\x02\uAA7C\x02\uAAC4\x02" +
- "\uAADD\x02\uAADF\x02\uAAE2\x02\uAAF1\x02\uAAF4\x02\uAAF8\x02\uAB03\x02" +
- "\uAB08\x02\uAB0B\x02\uAB10\x02\uAB13\x02\uAB18\x02\uAB22\x02\uAB28\x02" +
- "\uAB2A\x02\uAB30\x02\uAB32\x02\uAB5C\x02\uAB5E\x02\uAB67\x02\uAB72\x02" +
- "\uABEC\x02\uABEE\x02\uABEF\x02\uABF2\x02\uABFB\x02\uAC02\x02\uD7A5\x02" +
- "\uD7B2\x02\uD7C8\x02\uD7CD\x02\uD7FD\x02\uF902\x02\uFA6F\x02\uFA72\x02" +
- "\uFADB\x02\uFB02\x02\uFB08\x02\uFB15\x02\uFB19\x02\uFB1F\x02\uFB2A\x02" +
- "\uFB2C\x02\uFB38\x02\uFB3A\x02\uFB3E\x02\uFB40\x02\uFB40\x02\uFB42\x02" +
- "\uFB43\x02\uFB45\x02\uFB46\x02\uFB48\x02\uFBB3\x02\uFBD5\x02\uFD3F\x02" +
- "\uFD52\x02\uFD91\x02\uFD94\x02\uFDC9\x02\uFDF2\x02\uFDFD\x02\uFE02\x02" +
- "\uFE11\x02\uFE22\x02\uFE31\x02\uFE35\x02\uFE36\x02\uFE4F\x02\uFE51\x02" +
- "\uFE72\x02\uFE76\x02\uFE78\x02\uFEFE\x02\uFF12\x02\uFF1B\x02\uFF23\x02" +
- "\uFF3C\x02\uFF41\x02\uFF41\x02\uFF43\x02\uFF5C\x02\uFF68\x02\uFFC0\x02" +
- "\uFFC4\x02\uFFC9\x02\uFFCC\x02\uFFD1\x02\uFFD4\x02\uFFD9\x02\uFFDC\x02" +
- "\uFFDE\x02\x02\x03\r\x03\x0F\x03(\x03*\x03<\x03>\x03?\x03A\x03O\x03R\x03" +
- "_\x03\x82\x03\xFC\x03\u0142\x03\u0176\x03\u01FF\x03\u01FF\x03\u0282\x03" +
- "\u029E\x03\u02A2\x03\u02D2\x03\u02E2\x03\u02E2\x03\u0302\x03\u0321\x03" +
- "\u0332\x03\u034C\x03\u0352\x03\u037C\x03\u0382\x03\u039F\x03\u03A2\x03" +
- "\u03C5\x03\u03CA\x03\u03D1\x03\u03D3\x03\u03D7\x03\u0402\x03\u049F\x03" +
- "\u04A2\x03\u04AB\x03\u04B2\x03\u04D5\x03\u04DA\x03\u04FD\x03\u0502\x03" +
+ "\uA803\x02\uA805\x02\uA807\x02\uA809\x02\uA80C\x02\uA80E\x02\uA824\x02" +
+ "\uA842\x02\uA875\x02\uA884\x02\uA8B5\x02\uA8F4\x02\uA8F9\x02\uA8FD\x02" +
+ "\uA8FD\x02\uA8FF\x02\uA8FF\x02\uA90C\x02\uA927\x02\uA932\x02\uA948\x02" +
+ "\uA962\x02\uA97E\x02\uA986\x02\uA9B4\x02\uA9D1\x02\uA9D1\x02\uA9E2\x02" +
+ "\uA9E6\x02\uA9E8\x02\uA9F1\x02\uA9FC\x02\uAA00\x02\uAA02\x02\uAA2A\x02" +
+ "\uAA42\x02\uAA44\x02\uAA46\x02\uAA4D\x02\uAA62\x02\uAA78\x02\uAA7C\x02" +
+ "\uAA7C\x02\uAA80\x02\uAAB1\x02\uAAB3\x02\uAAB3\x02\uAAB7\x02\uAAB8\x02" +
+ "\uAABB\x02\uAABF\x02\uAAC2\x02\uAAC2\x02\uAAC4\x02\uAAC4\x02\uAADD\x02" +
+ "\uAADF\x02\uAAE2\x02\uAAEC\x02\uAAF4\x02\uAAF6\x02\uAB03\x02\uAB08\x02" +
+ "\uAB0B\x02\uAB10\x02\uAB13\x02\uAB18\x02\uAB22\x02\uAB28\x02\uAB2A\x02" +
+ "\uAB30\x02\uAB32\x02\uAB5C\x02\uAB5E\x02\uAB67\x02\uAB72\x02\uABE4\x02" +
+ "\uAC02\x02\uD7A5\x02\uD7B2\x02\uD7C8\x02\uD7CD\x02\uD7FD\x02\uF902\x02" +
+ "\uFA6F\x02\uFA72\x02\uFADB\x02\uFB02\x02\uFB08\x02\uFB15\x02\uFB19\x02" +
+ "\uFB1F\x02\uFB1F\x02\uFB21\x02\uFB2A\x02\uFB2C\x02\uFB38\x02\uFB3A\x02" +
+ "\uFB3E\x02\uFB40\x02\uFB40\x02\uFB42\x02\uFB43\x02\uFB45\x02\uFB46\x02" +
+ "\uFB48\x02\uFBB3\x02\uFBD5\x02\uFD3F\x02\uFD52\x02\uFD91\x02\uFD94\x02" +
+ "\uFDC9\x02\uFDF2\x02\uFDFD\x02\uFE72\x02\uFE76\x02\uFE78\x02\uFEFE\x02" +
+ "\uFF23\x02\uFF3C\x02\uFF43\x02\uFF5C\x02\uFF68\x02\uFFC0\x02\uFFC4\x02" +
+ "\uFFC9\x02\uFFCC\x02\uFFD1\x02\uFFD4\x02\uFFD9\x02\uFFDC\x02\uFFDE\x02" +
+ "\x02\x03\r\x03\x0F\x03(\x03*\x03<\x03>\x03?\x03A\x03O\x03R\x03_\x03\x82" +
+ "\x03\xFC\x03\u0142\x03\u0176\x03\u0282\x03\u029E\x03\u02A2\x03\u02D2\x03" +
+ "\u0302\x03\u0321\x03\u0332\x03\u034C\x03\u0352\x03\u0377\x03\u0382\x03" +
+ "\u039F\x03\u03A2\x03\u03C5\x03\u03CA\x03\u03D1\x03\u03D3\x03\u03D7\x03" +
+ "\u0402\x03\u049F\x03\u04B2\x03\u04D5\x03\u04DA\x03\u04FD\x03\u0502\x03" +
"\u0529\x03\u0532\x03\u0565\x03\u0602\x03\u0738\x03\u0742\x03\u0757\x03" +
"\u0762\x03\u0769\x03\u0802\x03\u0807\x03\u080A\x03\u080A\x03\u080C\x03" +
"\u0837\x03\u0839\x03\u083A\x03\u083E\x03\u083E\x03\u0841\x03\u0857\x03" +
"\u0862\x03\u0878\x03\u0882\x03\u08A0\x03\u08E2\x03\u08F4\x03\u08F6\x03" +
"\u08F7\x03\u0902\x03\u0917\x03\u0922\x03\u093B\x03\u0982\x03\u09B9\x03" +
- "\u09C0\x03\u09C1\x03\u0A02\x03\u0A05\x03\u0A07\x03\u0A08\x03\u0A0E\x03" +
- "\u0A15\x03\u0A17\x03\u0A19\x03\u0A1B\x03\u0A35\x03\u0A3A\x03\u0A3C\x03" +
- "\u0A41\x03\u0A41\x03\u0A62\x03\u0A7E\x03\u0A82\x03\u0A9E\x03\u0AC2\x03" +
- "\u0AC9\x03\u0ACB\x03\u0AE8\x03\u0B02\x03\u0B37\x03\u0B42\x03\u0B57\x03" +
- "\u0B62\x03\u0B74\x03\u0B82\x03\u0B93\x03\u0C02\x03\u0C4A\x03\u0C82\x03" +
- "\u0CB4\x03\u0CC2\x03\u0CF4\x03\u1002\x03\u1048\x03\u1068\x03\u1071\x03" +
- "\u1081\x03\u10BC\x03\u10D2\x03\u10EA\x03\u10F2\x03\u10FB\x03\u1102\x03" +
- "\u1136\x03\u1138\x03\u1141\x03\u1152\x03\u1175\x03\u1178\x03\u1178\x03" +
- "\u1182\x03\u11C6\x03\u11CC\x03\u11CE\x03\u11D2\x03\u11DC\x03\u11DE\x03" +
- "\u11DE\x03\u1202\x03\u1213\x03\u1215\x03\u1239\x03\u1240\x03\u1240\x03" +
+ "\u09C0\x03\u09C1\x03\u0A02\x03\u0A02\x03\u0A12\x03\u0A15\x03\u0A17\x03" +
+ "\u0A19\x03\u0A1B\x03\u0A35\x03\u0A62\x03\u0A7E\x03\u0A82\x03\u0A9E\x03" +
+ "\u0AC2\x03\u0AC9\x03\u0ACB\x03\u0AE6\x03\u0B02\x03\u0B37\x03\u0B42\x03" +
+ "\u0B57\x03\u0B62\x03\u0B74\x03\u0B82\x03\u0B93\x03\u0C02\x03\u0C4A\x03" +
+ "\u0C82\x03\u0CB4\x03\u0CC2\x03\u0CF4\x03\u1005\x03\u1039\x03\u1085\x03" +
+ "\u10B1\x03\u10D2\x03\u10EA\x03\u1105\x03\u1128\x03\u1152\x03\u1174\x03" +
+ "\u1178\x03\u1178\x03\u1185\x03\u11B4\x03\u11C3\x03\u11C6\x03\u11DC\x03" +
+ "\u11DC\x03\u11DE\x03\u11DE\x03\u1202\x03\u1213\x03\u1215\x03\u122D\x03" +
"\u1282\x03\u1288\x03\u128A\x03\u128A\x03\u128C\x03\u128F\x03\u1291\x03" +
- "\u129F\x03\u12A1\x03\u12AA\x03\u12B2\x03\u12EC\x03\u12F2\x03\u12FB\x03" +
- "\u1302\x03\u1305\x03\u1307\x03\u130E\x03\u1311\x03\u1312\x03\u1315\x03" +
- "\u132A\x03\u132C\x03\u1332\x03\u1334\x03\u1335\x03\u1337\x03\u133B\x03" +
- "\u133E\x03\u1346\x03\u1349\x03\u134A\x03\u134D\x03\u134F\x03\u1352\x03" +
- "\u1352\x03\u1359\x03\u1359\x03\u135F\x03\u1365\x03\u1368\x03\u136E\x03" +
- "\u1372\x03\u1376\x03\u1402\x03\u144C\x03\u1452\x03\u145B\x03\u1482\x03" +
- "\u14C7\x03\u14C9\x03\u14C9\x03\u14D2\x03\u14DB\x03\u1582\x03\u15B7\x03" +
- "\u15BA\x03\u15C2\x03\u15DA\x03\u15DF\x03\u1602\x03\u1642\x03\u1646\x03" +
- "\u1646\x03\u1652\x03\u165B\x03\u1682\x03\u16B9\x03\u16C2\x03\u16CB\x03" +
- "\u1702\x03\u171B\x03\u171F\x03\u172D\x03\u1732\x03\u173B\x03\u18A2\x03" +
- "\u18EB\x03\u1901\x03\u1901\x03\u1AC2\x03\u1AFA\x03\u1C02\x03\u1C0A\x03" +
- "\u1C0C\x03\u1C38\x03\u1C3A\x03\u1C42\x03";
+ "\u129F\x03\u12A1\x03\u12AA\x03\u12B2\x03\u12E0\x03\u1307\x03\u130E\x03" +
+ "\u1311\x03\u1312\x03\u1315\x03\u132A\x03\u132C\x03\u1332\x03\u1334\x03" +
+ "\u1335\x03\u1337\x03\u133B\x03\u133F\x03\u133F\x03\u1352\x03\u1352\x03" +
+ "\u135F\x03\u1363\x03\u1402\x03\u1436\x03\u1449\x03\u144C\x03\u1482\x03" +
+ "\u14B1\x03\u14C6\x03\u14C7\x03\u14C9\x03\u14C9\x03\u1582\x03\u15B0\x03" +
+ "\u15DA\x03\u15DD\x03\u1602\x03\u1631\x03\u1646\x03\u1646\x03\u1682\x03" +
+ "\u16AC\x03\u1702\x03\u171B\x03\u18A2\x03\u18E1\x03\u1901\x03\u1901\x03" +
+ "\u1AC2\x03\u1AFA\x03\u1C02\x03\u1C0A\x03\u1C0C\x03\u1C30\x03\u1C42\x03" +
+ "\u1C42\x03\u1C74\x03\u1C91\x03\u2002\x03\u239B\x03\u2402\x03\u2470\x03" +
+ "\u2482\x03\u2545\x03\u3002\x03\u3430\x03\u4402\x03\u4648\x03\u6802\x03" +
+ "\u6A3A\x03\u6A42\x03\u6A60\x03\u6AD2\x03\u6AEF\x03\u6B02\x03\u6B31\x03" +
+ "\u6B42\x03\u6B45\x03\u6B65\x03\u6B79\x03\u6B7F\x03\u6B91\x03\u6F02\x03" +
+ "\u6F46\x03\u6F52\x03\u6F52\x03\u6F95\x03\u6FA1\x03\u6FE2\x03\u6FE2\x03" +
+ "\u7002\x03\u87EE\x03\u8802\x03\u8AF4\x03\uB002\x03\uB003\x03\uBC02\x03" +
+ "\uBC6C\x03\uBC72\x03\uBC7E\x03\uBC82\x03\uBC8A\x03\uBC92\x03\uBC9B\x03" +
+ "\uD402\x03\uD456\x03\uD458\x03\uD49E\x03\uD4A0\x03\uD4A1\x03\uD4A4\x03" +
+ "\uD4A4\x03\uD4A7\x03\uD4A8\x03\uD4AB\x03\uD4AE\x03\uD4B0\x03\uD4BB\x03" +
+ "\uD4BD\x03\uD4BD\x03\uD4BF\x03\uD4C5\x03\uD4C7\x03\uD507\x03\uD509\x03" +
+ "\uD50C\x03\uD50F\x03\uD516\x03\uD518\x03\uD51E\x03\uD520\x03\uD53B\x03" +
+ "\uD53D\x03\uD540\x03\uD542\x03\uD546\x03\uD548\x03\uD548\x03\uD54C\x03" +
+ "\uD552\x03\uD554\x03\uD6A7\x03\uD6AA\x03\uD6C2\x03\uD6C4\x03\uD6DC\x03" +
+ "\uD6DE\x03\uD6FC\x03\uD6FE\x03\uD716\x03\uD718\x03\uD736\x03\uD738\x03" +
+ "\uD750\x03\uD752\x03\uD770\x03\uD772\x03\uD78A\x03\uD78C\x03\uD7AA\x03" +
+ "\uD7AC\x03\uD7C4\x03\uD7C6\x03\uD7CD\x03\uE802\x03\uE8C6\x03\uE902\x03" +
+ "\uE945\x03\uEE02\x03\uEE05\x03\uEE07\x03\uEE21\x03\uEE23\x03\uEE24\x03" +
+ "\uEE26\x03\uEE26\x03\uEE29\x03\uEE29\x03\uEE2B\x03\uEE34\x03\uEE36\x03" +
+ "\uEE39\x03\uEE3B\x03\uEE3B\x03\uEE3D\x03\uEE3D\x03\uEE44\x03\uEE44\x03" +
+ "\uEE49\x03\uEE49\x03\uEE4B\x03\uEE4B\x03\uEE4D\x03\uEE4D\x03\uEE4F\x03" +
+ "\uEE51\x03\uEE53\x03\uEE54\x03\uEE56\x03\uEE56\x03\uEE59\x03\uEE59\x03" +
+ "\uEE5B\x03\uEE5B\x03\uEE5D\x03\uEE5D\x03\uEE5F\x03\uEE5F\x03\uEE61\x03" +
+ "\uEE61\x03\uEE63\x03\uEE64\x03\uEE66\x03\uEE66\x03\uEE69\x03\uEE6C\x03" +
+ "\uEE6E\x03\uEE74\x03\uEE76\x03\uEE79\x03\uEE7B\x03\uEE7E\x03\uEE80\x03" +
+ "\uEE80\x03\uEE82\x03\uEE8B\x03\uEE8D\x03\uEE9D\x03\uEEA3\x03\uEEA5\x03" +
+ "\uEEA7\x03\uEEAB\x03\uEEAD\x03\uEEBD\x03\x02\x04\uA6D8\x04\uA702\x04\uB736" +
+ "\x04\uB742\x04\uB81F\x04\uB822\x04\uCEA3\x04\uF802\x04\uFA1F\x04\u02A7" +
+ "\x02&\x02&\x022\x02;\x02C\x02\\\x02a\x02a\x02c\x02|\x02\xAC\x02\xAC\x02" +
+ "\xB7\x02\xB7\x02\xB9\x02\xB9\x02\xBC\x02\xBC\x02\xC2\x02\xD8\x02\xDA\x02" +
+ "\xF8\x02\xFA\x02\u02C3\x02\u02C8\x02\u02D3\x02\u02E2\x02\u02E6\x02\u02EE" +
+ "\x02\u02EE\x02\u02F0\x02\u02F0\x02\u0302\x02\u0376\x02\u0378\x02\u0379" +
+ "\x02\u037C\x02\u037F\x02\u0381\x02\u0381\x02\u0388\x02\u038C\x02\u038E" +
+ "\x02\u038E\x02\u0390\x02\u03A3\x02\u03A5\x02\u03F7\x02\u03F9\x02\u0483" +
+ "\x02\u0485\x02\u0489\x02\u048C\x02\u0531\x02\u0533\x02\u0558\x02\u055B" +
+ "\x02\u055B\x02\u0563\x02\u0589\x02\u0593\x02\u05BF\x02\u05C1\x02\u05C1" +
+ "\x02\u05C3\x02\u05C4\x02\u05C6\x02\u05C7\x02\u05C9\x02\u05C9\x02\u05D2" +
+ "\x02\u05EC\x02\u05F2\x02\u05F4\x02\u0612\x02\u061C\x02\u0622\x02\u066B" +
+ "\x02\u0670\x02\u06D5\x02\u06D7\x02\u06DE\x02\u06E1\x02\u06EA\x02\u06EC" +
+ "\x02\u06FE\x02\u0701\x02\u0701\x02\u0712\x02\u074C\x02\u074F\x02\u07B3" +
+ "\x02\u07C2\x02\u07F7\x02\u07FC\x02\u07FC\x02\u0802\x02\u082F\x02\u0842" +
+ "\x02\u085D\x02\u08A2\x02\u08B6\x02\u08B8\x02\u08BF\x02\u08D6\x02\u08E3" +
+ "\x02\u08E5\x02\u0965\x02\u0968\x02\u0971\x02\u0973\x02\u0985\x02\u0987" +
+ "\x02\u098E\x02\u0991\x02\u0992\x02\u0995\x02\u09AA\x02\u09AC\x02\u09B2" +
+ "\x02\u09B4\x02\u09B4\x02\u09B8\x02\u09BB\x02\u09BE\x02\u09C6\x02\u09C9" +
+ "\x02\u09CA\x02\u09CD\x02\u09D0\x02\u09D9\x02\u09D9\x02\u09DE\x02\u09DF" +
+ "\x02\u09E1\x02\u09E5\x02\u09E8\x02\u09F3\x02\u0A03\x02\u0A05\x02\u0A07" +
+ "\x02\u0A0C\x02\u0A11\x02\u0A12\x02\u0A15\x02\u0A2A\x02\u0A2C\x02\u0A32" +
+ "\x02\u0A34\x02\u0A35\x02\u0A37\x02\u0A38\x02\u0A3A\x02\u0A3B\x02\u0A3E" +
+ "\x02\u0A3E\x02\u0A40\x02\u0A44\x02\u0A49\x02\u0A4A\x02\u0A4D\x02\u0A4F" +
+ "\x02\u0A53\x02\u0A53\x02\u0A5B\x02\u0A5E\x02\u0A60\x02\u0A60\x02\u0A68" +
+ "\x02\u0A77\x02\u0A83\x02\u0A85\x02\u0A87\x02\u0A8F\x02\u0A91\x02\u0A93" +
+ "\x02\u0A95\x02\u0AAA\x02\u0AAC\x02\u0AB2\x02\u0AB4\x02\u0AB5\x02\u0AB7" +
+ "\x02\u0ABB\x02\u0ABE\x02\u0AC7\x02\u0AC9\x02\u0ACB\x02\u0ACD\x02\u0ACF" +
+ "\x02\u0AD2\x02\u0AD2\x02\u0AE2\x02\u0AE5\x02\u0AE8\x02\u0AF1\x02\u0AFB" +
+ "\x02\u0AFB\x02\u0B03\x02\u0B05\x02\u0B07\x02\u0B0E\x02\u0B11\x02\u0B12" +
+ "\x02\u0B15\x02\u0B2A\x02\u0B2C\x02\u0B32\x02\u0B34\x02\u0B35\x02\u0B37" +
+ "\x02\u0B3B\x02\u0B3E\x02\u0B46\x02\u0B49\x02\u0B4A\x02\u0B4D\x02\u0B4F" +
+ "\x02\u0B58\x02\u0B59\x02\u0B5E\x02\u0B5F\x02\u0B61\x02\u0B65\x02\u0B68" +
+ "\x02\u0B71\x02\u0B73\x02\u0B73\x02\u0B84\x02\u0B85\x02\u0B87\x02\u0B8C" +
+ "\x02\u0B90\x02\u0B92\x02\u0B94\x02\u0B97\x02\u0B9B\x02\u0B9C\x02\u0B9E" +
+ "\x02\u0B9E\x02\u0BA0\x02\u0BA1\x02\u0BA5\x02\u0BA6\x02\u0BAA\x02\u0BAC" +
+ "\x02\u0BB0\x02\u0BBB\x02\u0BC0\x02\u0BC4\x02\u0BC8\x02\u0BCA\x02\u0BCC" +
+ "\x02\u0BCF\x02\u0BD2\x02\u0BD2\x02\u0BD9\x02\u0BD9\x02\u0BE8\x02\u0BF1" +
+ "\x02\u0C02\x02\u0C05\x02\u0C07\x02\u0C0E\x02\u0C10\x02\u0C12\x02\u0C14" +
+ "\x02\u0C2A\x02\u0C2C\x02\u0C3B\x02\u0C3F\x02\u0C46\x02\u0C48\x02\u0C4A" +
+ "\x02\u0C4C\x02\u0C4F\x02\u0C57\x02\u0C58\x02\u0C5A\x02\u0C5C\x02\u0C62" +
+ "\x02\u0C65\x02\u0C68\x02\u0C71\x02\u0C82\x02\u0C85\x02\u0C87\x02\u0C8E" +
+ "\x02\u0C90\x02\u0C92\x02\u0C94\x02\u0CAA\x02\u0CAC\x02\u0CB5\x02\u0CB7" +
+ "\x02\u0CBB\x02\u0CBE\x02\u0CC6\x02\u0CC8\x02\u0CCA\x02\u0CCC\x02\u0CCF" +
+ "\x02\u0CD7\x02\u0CD8\x02\u0CE0\x02\u0CE0\x02\u0CE2\x02\u0CE5\x02\u0CE8" +
+ "\x02\u0CF1\x02\u0CF3\x02\u0CF4\x02\u0D03\x02\u0D05\x02\u0D07\x02\u0D0E" +
+ "\x02\u0D10\x02\u0D12\x02\u0D14\x02\u0D3C\x02\u0D3F\x02\u0D46\x02\u0D48" +
+ "\x02\u0D4A\x02\u0D4C\x02\u0D50\x02\u0D56\x02\u0D59\x02\u0D61\x02\u0D65" +
+ "\x02\u0D68\x02\u0D71\x02\u0D7C\x02\u0D81\x02\u0D84\x02\u0D85\x02\u0D87" +
+ "\x02\u0D98\x02\u0D9C\x02\u0DB3\x02\u0DB5\x02\u0DBD\x02\u0DBF\x02\u0DBF" +
+ "\x02\u0DC2\x02\u0DC8\x02\u0DCC\x02\u0DCC\x02\u0DD1\x02\u0DD6\x02\u0DD8" +
+ "\x02\u0DD8\x02\u0DDA\x02\u0DE1\x02\u0DE8\x02\u0DF1\x02\u0DF4\x02\u0DF5" +
+ "\x02\u0E03\x02\u0E3C\x02\u0E42\x02\u0E50\x02\u0E52\x02\u0E5B\x02\u0E83" +
+ "\x02\u0E84\x02\u0E86\x02\u0E86\x02\u0E89\x02\u0E8A\x02\u0E8C\x02\u0E8C" +
+ "\x02\u0E8F\x02\u0E8F\x02\u0E96\x02\u0E99\x02\u0E9B\x02\u0EA1\x02\u0EA3" +
+ "\x02\u0EA5\x02\u0EA7\x02\u0EA7\x02\u0EA9\x02\u0EA9\x02\u0EAC\x02\u0EAD" +
+ "\x02\u0EAF\x02\u0EBB\x02\u0EBD\x02\u0EBF\x02\u0EC2\x02\u0EC6\x02\u0EC8" +
+ "\x02\u0EC8\x02\u0ECA\x02\u0ECF\x02\u0ED2\x02\u0EDB\x02\u0EDE\x02\u0EE1" +
+ "\x02\u0F02\x02\u0F02\x02\u0F1A\x02\u0F1B\x02\u0F22\x02\u0F2B\x02\u0F37" +
+ "\x02\u0F37\x02\u0F39\x02\u0F39\x02\u0F3B\x02\u0F3B\x02\u0F40\x02\u0F49" +
+ "\x02\u0F4B\x02\u0F6E\x02\u0F73\x02\u0F86\x02\u0F88\x02\u0F99\x02\u0F9B" +
+ "\x02\u0FBE\x02\u0FC8\x02\u0FC8\x02\u1002\x02\u104B\x02\u1052\x02\u109F" +
+ "\x02\u10A2\x02\u10C7\x02\u10C9\x02\u10C9\x02\u10CF\x02\u10CF\x02\u10D2" +
+ "\x02\u10FC\x02\u10FE\x02\u124A\x02\u124C\x02\u124F\x02\u1252\x02\u1258" +
+ "\x02\u125A\x02\u125A\x02\u125C\x02\u125F\x02\u1262\x02\u128A\x02\u128C" +
+ "\x02\u128F\x02\u1292\x02\u12B2\x02\u12B4\x02\u12B7\x02\u12BA\x02\u12C0" +
+ "\x02\u12C2\x02\u12C2\x02\u12C4\x02\u12C7\x02\u12CA\x02\u12D8\x02\u12DA" +
+ "\x02\u1312\x02\u1314\x02\u1317\x02\u131A\x02\u135C\x02\u135F\x02\u1361" +
+ "\x02\u136B\x02\u1373\x02\u1382\x02\u1391\x02\u13A2\x02\u13F7\x02\u13FA" +
+ "\x02\u13FF\x02\u1403\x02\u166E\x02\u1671\x02\u1681\x02\u1683\x02\u169C" +
+ "\x02\u16A2\x02\u16EC\x02\u16F0\x02\u16FA\x02\u1702\x02\u170E\x02\u1710" +
+ "\x02\u1716\x02\u1722\x02\u1736\x02\u1742\x02\u1755\x02\u1762\x02\u176E" +
+ "\x02\u1770\x02\u1772\x02\u1774\x02\u1775\x02\u1782\x02\u17D5\x02\u17D9" +
+ "\x02\u17D9\x02\u17DE\x02\u17DF\x02\u17E2\x02\u17EB\x02\u180D\x02\u180F" +
+ "\x02\u1812\x02\u181B\x02\u1822\x02\u1879\x02\u1882\x02\u18AC\x02\u18B2" +
+ "\x02\u18F7\x02\u1902\x02\u1920\x02\u1922\x02\u192D\x02\u1932\x02\u193D" +
+ "\x02\u1948\x02\u196F\x02\u1972\x02\u1976\x02\u1982\x02\u19AD\x02\u19B2" +
+ "\x02\u19CB\x02\u19D2\x02\u19DC\x02\u1A02\x02\u1A1D\x02\u1A22\x02\u1A60" +
+ "\x02\u1A62\x02\u1A7E\x02\u1A81\x02\u1A8B\x02\u1A92\x02\u1A9B\x02\u1AA9" +
+ "\x02\u1AA9\x02\u1AB2\x02\u1ABF\x02\u1B02\x02\u1B4D\x02\u1B52\x02\u1B5B" +
+ "\x02\u1B6D\x02\u1B75\x02\u1B82\x02\u1BF5\x02\u1C02\x02\u1C39\x02\u1C42" +
+ "\x02\u1C4B\x02\u1C4F\x02\u1C7F\x02\u1C82\x02\u1C8A\x02\u1CD2\x02\u1CD4" +
+ "\x02\u1CD6\x02\u1CF8\x02\u1CFA\x02\u1CFB\x02\u1D02\x02\u1DF7\x02\u1DFD" +
+ "\x02\u1F17\x02\u1F1A\x02\u1F1F\x02\u1F22\x02\u1F47\x02\u1F4A\x02\u1F4F" +
+ "\x02\u1F52\x02\u1F59\x02\u1F5B\x02\u1F5B\x02\u1F5D\x02\u1F5D\x02\u1F5F" +
+ "\x02\u1F5F\x02\u1F61\x02\u1F7F\x02\u1F82\x02\u1FB6\x02\u1FB8\x02\u1FBE" +
+ "\x02\u1FC0\x02\u1FC0\x02\u1FC4\x02\u1FC6\x02\u1FC8\x02\u1FCE\x02\u1FD2" +
+ "\x02\u1FD5\x02\u1FD8\x02\u1FDD\x02\u1FE2\x02\u1FEE\x02\u1FF4\x02\u1FF6" +
+ "\x02\u1FF8\x02\u1FFE\x02\u2041\x02\u2042\x02\u2056\x02\u2056\x02\u2073" +
+ "\x02\u2073\x02\u2081\x02\u2081\x02\u2092\x02\u209E\x02\u20D2\x02\u20DE" +
+ "\x02\u20E3\x02\u20E3\x02\u20E7\x02\u20F2\x02\u2104\x02\u2104\x02\u2109" +
+ "\x02\u2109\x02\u210C\x02\u2115\x02\u2117\x02\u2117\x02\u211A\x02\u211F" +
+ "\x02\u2126\x02\u2126\x02\u2128\x02\u2128\x02\u212A\x02\u212A\x02\u212C" +
+ "\x02\u213B\x02\u213E\x02\u2141\x02\u2147\x02\u214B\x02\u2150\x02\u2150" +
+ "\x02\u2162\x02\u218A\x02\u2C02\x02\u2C30\x02\u2C32\x02\u2C60\x02\u2C62" +
+ "\x02\u2CE6\x02\u2CED\x02\u2CF5\x02\u2D02\x02\u2D27\x02\u2D29\x02\u2D29" +
+ "\x02\u2D2F\x02\u2D2F\x02\u2D32\x02\u2D69\x02\u2D71\x02\u2D71\x02\u2D81" +
+ "\x02\u2D98\x02\u2DA2\x02\u2DA8\x02\u2DAA\x02\u2DB0\x02\u2DB2\x02\u2DB8" +
+ "\x02\u2DBA\x02\u2DC0\x02\u2DC2\x02\u2DC8\x02\u2DCA\x02\u2DD0\x02\u2DD2" +
+ "\x02\u2DD8\x02\u2DDA\x02\u2DE0\x02\u2DE2\x02\u2E01\x02\u3007\x02\u3009" +
+ "\x02\u3023\x02\u3031\x02\u3033\x02\u3037\x02\u303A\x02\u303E\x02\u3043" +
+ "\x02\u3098\x02\u309B\x02\u30A1\x02\u30A3\x02\u30FC\x02\u30FE\x02\u3101" +
+ "\x02\u3107\x02\u312F\x02\u3133\x02\u3190\x02\u31A2\x02\u31BC\x02\u31F2" +
+ "\x02\u3201\x02\u3402\x02\u4DB7\x02\u4E02\x02\u9FD7\x02\uA002\x02\uA48E" +
+ "\x02\uA4D2\x02\uA4FF\x02\uA502\x02\uA60E\x02\uA612\x02\uA62D\x02\uA642" +
+ "\x02\uA671\x02\uA676\x02\uA67F\x02\uA681\x02\uA6F3\x02\uA719\x02\uA721" +
+ "\x02\uA724\x02\uA78A\x02\uA78D\x02\uA7B0\x02\uA7B2\x02\uA7B9\x02\uA7F9" +
+ "\x02\uA829\x02\uA842\x02\uA875\x02\uA882\x02\uA8C7\x02\uA8D2\x02\uA8DB" +
+ "\x02\uA8E2\x02\uA8F9\x02\uA8FD\x02\uA8FD\x02\uA8FF\x02\uA8FF\x02\uA902" +
+ "\x02\uA92F\x02\uA932\x02\uA955\x02\uA962\x02\uA97E\x02\uA982\x02\uA9C2" +
+ "\x02\uA9D1\x02\uA9DB\x02\uA9E2\x02\uAA00\x02\uAA02\x02\uAA38\x02\uAA42" +
+ "\x02\uAA4F\x02\uAA52\x02\uAA5B\x02\uAA62\x02\uAA78\x02\uAA7C\x02\uAAC4" +
+ "\x02\uAADD\x02\uAADF\x02\uAAE2\x02\uAAF1\x02\uAAF4\x02\uAAF8\x02\uAB03" +
+ "\x02\uAB08\x02\uAB0B\x02\uAB10\x02\uAB13\x02\uAB18\x02\uAB22\x02\uAB28" +
+ "\x02\uAB2A\x02\uAB30\x02\uAB32\x02\uAB5C\x02\uAB5E\x02\uAB67\x02\uAB72" +
+ "\x02\uABEC\x02\uABEE\x02\uABEF\x02\uABF2\x02\uABFB\x02\uAC02\x02\uD7A5" +
+ "\x02\uD7B2\x02\uD7C8\x02\uD7CD\x02\uD7FD\x02\uF902\x02\uFA6F\x02\uFA72" +
+ "\x02\uFADB\x02\uFB02\x02\uFB08\x02\uFB15\x02\uFB19\x02\uFB1F\x02\uFB2A" +
+ "\x02\uFB2C\x02\uFB38\x02\uFB3A\x02\uFB3E\x02\uFB40\x02\uFB40\x02\uFB42" +
+ "\x02\uFB43\x02\uFB45\x02\uFB46\x02\uFB48\x02\uFBB3\x02\uFBD5\x02\uFD3F" +
+ "\x02\uFD52\x02\uFD91\x02\uFD94\x02\uFDC9\x02\uFDF2\x02\uFDFD\x02\uFE02" +
+ "\x02\uFE11\x02\uFE22\x02\uFE31\x02\uFE35\x02\uFE36\x02\uFE4F\x02\uFE51" +
+ "\x02\uFE72\x02\uFE76\x02\uFE78\x02\uFEFE\x02\uFF12\x02\uFF1B\x02\uFF23" +
+ "\x02\uFF3C\x02\uFF41\x02\uFF41\x02\uFF43\x02\uFF5C\x02\uFF68\x02\uFFC0" +
+ "\x02\uFFC4\x02\uFFC9\x02\uFFCC\x02\uFFD1\x02\uFFD4\x02\uFFD9\x02\uFFDC" +
+ "\x02\uFFDE\x02\x02\x03\r\x03\x0F\x03(\x03*\x03<\x03>\x03?\x03A\x03O\x03" +
+ "R\x03_\x03\x82\x03\xFC\x03\u0142\x03\u0176\x03\u01FF\x03\u01FF\x03\u0282" +
+ "\x03\u029E\x03\u02A2\x03\u02D2\x03\u02E2\x03\u02E2\x03\u0302\x03\u0321" +
+ "\x03\u0332\x03\u034C\x03\u0352\x03\u037C\x03\u0382\x03\u039F\x03\u03A2" +
+ "\x03\u03C5\x03\u03CA\x03\u03D1\x03\u03D3\x03\u03D7\x03\u0402\x03\u049F" +
+ "\x03\u04A2\x03\u04AB\x03\u04B2\x03\u04D5\x03\u04DA\x03\u04FD\x03\u0502" +
+ "\x03\u0529\x03\u0532\x03\u0565\x03\u0602\x03\u0738\x03\u0742\x03\u0757" +
+ "\x03\u0762\x03\u0769\x03\u0802\x03\u0807\x03\u080A\x03\u080A\x03\u080C" +
+ "\x03\u0837\x03\u0839\x03\u083A\x03\u083E\x03\u083E\x03\u0841\x03\u0857" +
+ "\x03\u0862\x03\u0878\x03\u0882\x03\u08A0\x03\u08E2\x03\u08F4\x03\u08F6" +
+ "\x03\u08F7\x03\u0902\x03\u0917\x03\u0922\x03\u093B\x03\u0982\x03\u09B9" +
+ "\x03\u09C0\x03\u09C1\x03\u0A02\x03\u0A05\x03\u0A07\x03\u0A08\x03\u0A0E" +
+ "\x03\u0A15\x03\u0A17\x03\u0A19\x03\u0A1B\x03\u0A35\x03\u0A3A\x03\u0A3C" +
+ "\x03\u0A41\x03\u0A41\x03\u0A62\x03\u0A7E\x03\u0A82\x03\u0A9E\x03\u0AC2" +
+ "\x03\u0AC9\x03\u0ACB\x03\u0AE8\x03\u0B02\x03\u0B37\x03\u0B42\x03\u0B57" +
+ "\x03\u0B62\x03\u0B74\x03\u0B82\x03\u0B93\x03\u0C02\x03\u0C4A\x03\u0C82" +
+ "\x03\u0CB4\x03\u0CC2\x03\u0CF4\x03\u1002\x03\u1048\x03\u1068\x03\u1071" +
+ "\x03\u1081\x03\u10BC\x03\u10D2\x03\u10EA\x03\u10F2\x03\u10FB\x03\u1102" +
+ "\x03\u1136\x03\u1138\x03\u1141\x03\u1152\x03\u1175\x03\u1178\x03\u1178" +
+ "\x03\u1182\x03\u11C6\x03\u11CC\x03\u11CE\x03\u11D2\x03\u11DC\x03\u11DE" +
+ "\x03\u11DE\x03\u1202\x03\u1213\x03\u1215\x03\u1239\x03\u1240\x03\u1240" +
+ "\x03\u1282\x03\u1288\x03\u128A\x03\u128A\x03\u128C\x03\u128F\x03\u1291" +
+ "\x03\u129F\x03\u12A1\x03\u12AA\x03\u12B2\x03\u12EC\x03\u12F2\x03\u12FB" +
+ "\x03\u1302\x03\u1305\x03\u1307\x03\u130E\x03\u1311\x03\u1312\x03\u1315" +
+ "\x03\u132A\x03\u132C\x03\u1332\x03\u1334\x03\u1335\x03\u1337\x03\u133B" +
+ "\x03\u133E\x03\u1346\x03\u1349\x03\u134A\x03\u134D\x03\u134F\x03\u1352" +
+ "\x03\u1352\x03\u1359\x03\u1359\x03\u135F\x03\u1365\x03\u1368\x03\u136E" +
+ "\x03\u1372\x03\u1376\x03\u1402\x03\u144C\x03\u1452\x03\u145B\x03\u1482" +
+ "\x03\u14C7\x03\u14C9\x03\u14C9\x03\u14D2\x03\u14DB\x03\u1582\x03\u15B7" +
+ "\x03\u15BA\x03\u15C2\x03\u15DA\x03\u15DF\x03\u1602\x03\u1642\x03\u1646" +
+ "\x03\u1646\x03\u1652\x03\u165B\x03\u1682\x03\u16B9\x03\u16C2\x03";
private static readonly _serializedATNSegment1: string =
- "\u1C52\x03\u1C5B\x03\u1C74\x03\u1C91\x03\u1C94\x03\u1CA9\x03\u1CAB\x03" +
- "\u1CB8\x03\u2002\x03\u239B\x03\u2402\x03\u2470\x03\u2482\x03\u2545\x03" +
- "\u3002\x03\u3430\x03\u4402\x03\u4648\x03\u6802\x03\u6A3A\x03\u6A42\x03" +
- "\u6A60\x03\u6A62\x03\u6A6B\x03\u6AD2\x03\u6AEF\x03\u6AF2\x03\u6AF6\x03" +
- "\u6B02\x03\u6B38\x03\u6B42\x03\u6B45\x03\u6B52\x03\u6B5B\x03\u6B65\x03" +
- "\u6B79\x03\u6B7F\x03\u6B91\x03\u6F02\x03\u6F46\x03\u6F52\x03\u6F80\x03" +
- "\u6F91\x03\u6FA1\x03\u6FE2\x03\u6FE2\x03\u7002\x03\u87EE\x03\u8802\x03" +
- "\u8AF4\x03\uB002\x03\uB003\x03\uBC02\x03\uBC6C\x03\uBC72\x03\uBC7E\x03" +
- "\uBC82\x03\uBC8A\x03\uBC92\x03\uBC9B\x03\uBC9F\x03\uBCA0\x03\uD167\x03" +
- "\uD16B\x03\uD16F\x03\uD174\x03\uD17D\x03\uD184\x03\uD187\x03\uD18D\x03" +
- "\uD1AC\x03\uD1AF\x03\uD244\x03\uD246\x03\uD402\x03\uD456\x03\uD458\x03" +
- "\uD49E\x03\uD4A0\x03\uD4A1\x03\uD4A4\x03\uD4A4\x03\uD4A7\x03\uD4A8\x03" +
- "\uD4AB\x03\uD4AE\x03\uD4B0\x03\uD4BB\x03\uD4BD\x03\uD4BD\x03\uD4BF\x03" +
- "\uD4C5\x03\uD4C7\x03\uD507\x03\uD509\x03\uD50C\x03\uD50F\x03\uD516\x03" +
- "\uD518\x03\uD51E\x03\uD520\x03\uD53B\x03\uD53D\x03\uD540\x03\uD542\x03" +
- "\uD546\x03\uD548\x03\uD548\x03\uD54C\x03\uD552\x03\uD554\x03\uD6A7\x03" +
- "\uD6AA\x03\uD6C2\x03\uD6C4\x03\uD6DC\x03\uD6DE\x03\uD6FC\x03\uD6FE\x03" +
- "\uD716\x03\uD718\x03\uD736\x03\uD738\x03\uD750\x03\uD752\x03\uD770\x03" +
- "\uD772\x03\uD78A\x03\uD78C\x03\uD7AA\x03\uD7AC\x03\uD7C4\x03\uD7C6\x03" +
- "\uD7CD\x03\uD7D0\x03\uD801\x03\uDA02\x03\uDA38\x03\uDA3D\x03\uDA6E\x03" +
- "\uDA77\x03\uDA77\x03\uDA86\x03\uDA86\x03\uDA9D\x03\uDAA1\x03\uDAA3\x03" +
- "\uDAB1\x03\uE002\x03\uE008\x03\uE00A\x03\uE01A\x03\uE01D\x03\uE023\x03" +
- "\uE025\x03\uE026\x03\uE028\x03\uE02C\x03\uE802\x03\uE8C6\x03\uE8D2\x03" +
- "\uE8D8\x03\uE902\x03\uE94C\x03\uE952\x03\uE95B\x03\uEE02\x03\uEE05\x03" +
- "\uEE07\x03\uEE21\x03\uEE23\x03\uEE24\x03\uEE26\x03\uEE26\x03\uEE29\x03" +
- "\uEE29\x03\uEE2B\x03\uEE34\x03\uEE36\x03\uEE39\x03\uEE3B\x03\uEE3B\x03" +
- "\uEE3D\x03\uEE3D\x03\uEE44\x03\uEE44\x03\uEE49\x03\uEE49\x03\uEE4B\x03" +
- "\uEE4B\x03\uEE4D\x03\uEE4D\x03\uEE4F\x03\uEE51\x03\uEE53\x03\uEE54\x03" +
- "\uEE56\x03\uEE56\x03\uEE59\x03\uEE59\x03\uEE5B\x03\uEE5B\x03\uEE5D\x03" +
- "\uEE5D\x03\uEE5F\x03\uEE5F\x03\uEE61\x03\uEE61\x03\uEE63\x03\uEE64\x03" +
- "\uEE66\x03\uEE66\x03\uEE69\x03\uEE6C\x03\uEE6E\x03\uEE74\x03\uEE76\x03" +
- "\uEE79\x03\uEE7B\x03\uEE7E\x03\uEE80\x03\uEE80\x03\uEE82\x03\uEE8B\x03" +
- "\uEE8D\x03\uEE9D\x03\uEEA3\x03\uEEA5\x03\uEEA7\x03\uEEAB\x03\uEEAD\x03" +
- "\uEEBD\x03\x02\x04\uA6D8\x04\uA702\x04\uB736\x04\uB742\x04\uB81F\x04\uB822" +
- "\x04\uCEA3\x04\uF802\x04\uFA1F\x04\u0102\x10\u01F1\x10\xAF\x02\x03\x03" +
- "\x02\x02\x02\x02\x05\x03\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03" +
- "\x02\x02\x02\x02\v\x03\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03\x02" +
- "\x02\x02\x02\x11\x03\x02\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02" +
- "\x02\x02\x02\x17\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02#\x03\x02" +
- "\x02\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02\x02\x02\x02)\x03\x02\x02\x02" +
- "\x03+\x03\x02\x02\x02\x050\x03\x02\x02\x02\x076\x03\x02\x02\x02\t;\x03" +
- "\x02\x02\x02\vE\x03\x02\x02\x02\rG\x03\x02\x02\x02\x0FI\x03\x02\x02\x02" +
- "\x11K\x03\x02\x02\x02\x13M\x03\x02\x02\x02\x15O\x03\x02\x02\x02\x17Y\x03" +
- "\x02\x02\x02\x19`\x03\x02\x02\x02\x1Bh\x03\x02\x02\x02\x1Dl\x03\x02\x02" +
- "\x02\x1F\x82\x03\x02\x02\x02!\x84\x03\x02\x02\x02#\x8B\x03\x02\x02\x02" +
- "%\x91\x03\x02\x02\x02\'\x98\x03\x02\x02\x02)\xA3\x03\x02\x02\x02+,\x07" +
- "v\x02\x02,-\x07t\x02\x02-.\x07w\x02\x02./\x07g\x02\x02/\x04\x03\x02\x02" +
- "\x0201\x07h\x02\x0212\x07c\x02\x0223\x07n\x02\x0234\x07u\x02\x0245\x07" +
- "g\x02\x025\x06\x03\x02\x02\x0267\x07p\x02\x0278\x07w\x02\x0289\x07n\x02" +
- "\x029:\x07n\x02\x02:\b\x03\x02\x02\x02;<\x07w\x02\x02<=\x07p\x02\x02=" +
- ">\x07f\x02\x02>?\x07g\x02\x02?@\x07h\x02\x02@A\x07k\x02\x02AB\x07p\x02" +
- "\x02BC\x07g\x02\x02CD\x07f\x02\x02D\n\x03\x02\x02\x02EF\x07.\x02\x02F" +
- "\f\x03\x02\x02\x02GH\x07]\x02\x02H\x0E\x03\x02\x02\x02IJ\x07_\x02\x02" +
- "J\x10\x03\x02\x02\x02KL\x07\x7F\x02\x02L\x12\x03\x02\x02\x02MN\x07}\x02" +
- "\x02N\x14\x03\x02\x02\x02OP\x07<\x02\x02P\x16\x03\x02\x02\x02QR\x07$\x02" +
- "\x02RS\x05\x19\r\x02ST\x07$\x02\x02TZ\x03\x02\x02\x02UV\x07)\x02\x02V" +
- "W\x05\x1B\x0E\x02WX\x07)\x02\x02XZ\x03\x02\x02\x02YQ\x03\x02\x02\x02Y" +
- "U\x03\x02\x02\x02Z\x18\x03\x02\x02\x02[\\\x07^\x02\x02\\_\x07$\x02\x02" +
- "]_\n\x02\x02\x02^[\x03\x02\x02\x02^]\x03\x02\x02\x02_b\x03\x02\x02\x02" +
- "`^\x03\x02\x02\x02`a\x03\x02\x02\x02a\x1A\x03\x02\x02\x02b`\x03\x02\x02" +
- "\x02cd\x07^\x02\x02dg\x07)\x02\x02eg\n\x03\x02\x02fc\x03\x02\x02\x02f" +
- "e\x03\x02\x02\x02gj\x03\x02\x02\x02hf\x03\x02\x02\x02hi\x03\x02\x02\x02" +
- "i\x1C\x03\x02\x02\x02jh\x03\x02\x02\x02km\x07/\x02\x02lk\x03\x02\x02\x02" +
- "lm\x03\x02\x02\x02mn\x03\x02\x02\x02nu\x05\x1F\x10\x02oq\x070\x02\x02" +
- "pr\t\x04\x02\x02qp\x03\x02\x02\x02rs\x03\x02\x02\x02sq\x03\x02\x02\x02" +
- "st\x03\x02\x02\x02tv\x03\x02\x02\x02uo\x03\x02\x02\x02uv\x03\x02\x02\x02" +
- "vx\x03\x02\x02\x02wy\x05!\x11\x02xw\x03\x02\x02\x02xy\x03\x02\x02\x02" +
- "y\x1E\x03\x02\x02\x02z\x83\x072\x02\x02{\x7F\t\x05\x02\x02|~\t\x04\x02" +
- "\x02}|\x03\x02\x02\x02~\x81\x03\x02\x02\x02\x7F}\x03\x02\x02\x02\x7F\x80" +
- "\x03\x02\x02\x02\x80\x83\x03\x02\x02\x02\x81\x7F\x03\x02\x02\x02\x82z" +
- "\x03\x02\x02\x02\x82{\x03\x02\x02\x02\x83 \x03\x02\x02\x02\x84\x86\t\x06" +
- "\x02\x02\x85\x87\t\x07\x02\x02\x86\x85\x03\x02\x02\x02\x86\x87\x03\x02" +
- "\x02\x02\x87\x88\x03\x02\x02\x02\x88\x89\x05\x1F\x10\x02\x89\"\x03\x02" +
- "\x02\x02\x8A\x8C\t\b\x02\x02\x8B\x8A\x03\x02\x02\x02\x8C\x8D\x03\x02\x02" +
- "\x02\x8D\x8B\x03\x02\x02\x02\x8D\x8E\x03\x02\x02\x02\x8E\x8F\x03\x02\x02" +
- "\x02\x8F\x90\b\x12\x02\x02\x90$\x03\x02\x02\x02\x91\x95\t\n\x02\x02\x92" +
- "\x94\t\v\x02\x02\x93\x92\x03\x02\x02\x02\x94\x97\x03\x02\x02\x02\x95\x93" +
- "\x03\x02\x02\x02\x95\x96\x03\x02\x02\x02\x96&\x03\x02\x02\x02\x97\x95" +
- "\x03\x02\x02\x02\x98\x99\x071\x02\x02\x99\x9A\x071\x02\x02\x9A\x9E\x03" +
- "\x02\x02\x02\x9B\x9D\n\t\x02\x02\x9C\x9B\x03\x02\x02\x02\x9D\xA0\x03\x02" +
- "\x02\x02\x9E\x9C\x03\x02\x02\x02\x9E\x9F\x03\x02\x02\x02\x9F\xA1\x03\x02" +
- "\x02\x02\xA0\x9E\x03\x02\x02\x02\xA1\xA2\b\x14\x03\x02\xA2(\x03\x02\x02" +
- "\x02\xA3\xA4\v\x02\x02\x02\xA4*\x03\x02\x02\x02\x12\x02Y^`fhlsux\x7F\x82" +
- "\x86\x8D\x95\x9E\x04\b\x02\x02\x02\x03\x02";
+ "\u16CB\x03\u1702\x03\u171B\x03\u171F\x03\u172D\x03\u1732\x03\u173B\x03" +
+ "\u18A2\x03\u18EB\x03\u1901\x03\u1901\x03\u1AC2\x03\u1AFA\x03\u1C02\x03" +
+ "\u1C0A\x03\u1C0C\x03\u1C38\x03\u1C3A\x03\u1C42\x03\u1C52\x03\u1C5B\x03" +
+ "\u1C74\x03\u1C91\x03\u1C94\x03\u1CA9\x03\u1CAB\x03\u1CB8\x03\u2002\x03" +
+ "\u239B\x03\u2402\x03\u2470\x03\u2482\x03\u2545\x03\u3002\x03\u3430\x03" +
+ "\u4402\x03\u4648\x03\u6802\x03\u6A3A\x03\u6A42\x03\u6A60\x03\u6A62\x03" +
+ "\u6A6B\x03\u6AD2\x03\u6AEF\x03\u6AF2\x03\u6AF6\x03\u6B02\x03\u6B38\x03" +
+ "\u6B42\x03\u6B45\x03\u6B52\x03\u6B5B\x03\u6B65\x03\u6B79\x03\u6B7F\x03" +
+ "\u6B91\x03\u6F02\x03\u6F46\x03\u6F52\x03\u6F80\x03\u6F91\x03\u6FA1\x03" +
+ "\u6FE2\x03\u6FE2\x03\u7002\x03\u87EE\x03\u8802\x03\u8AF4\x03\uB002\x03" +
+ "\uB003\x03\uBC02\x03\uBC6C\x03\uBC72\x03\uBC7E\x03\uBC82\x03\uBC8A\x03" +
+ "\uBC92\x03\uBC9B\x03\uBC9F\x03\uBCA0\x03\uD167\x03\uD16B\x03\uD16F\x03" +
+ "\uD174\x03\uD17D\x03\uD184\x03\uD187\x03\uD18D\x03\uD1AC\x03\uD1AF\x03" +
+ "\uD244\x03\uD246\x03\uD402\x03\uD456\x03\uD458\x03\uD49E\x03\uD4A0\x03" +
+ "\uD4A1\x03\uD4A4\x03\uD4A4\x03\uD4A7\x03\uD4A8\x03\uD4AB\x03\uD4AE\x03" +
+ "\uD4B0\x03\uD4BB\x03\uD4BD\x03\uD4BD\x03\uD4BF\x03\uD4C5\x03\uD4C7\x03" +
+ "\uD507\x03\uD509\x03\uD50C\x03\uD50F\x03\uD516\x03\uD518\x03\uD51E\x03" +
+ "\uD520\x03\uD53B\x03\uD53D\x03\uD540\x03\uD542\x03\uD546\x03\uD548\x03" +
+ "\uD548\x03\uD54C\x03\uD552\x03\uD554\x03\uD6A7\x03\uD6AA\x03\uD6C2\x03" +
+ "\uD6C4\x03\uD6DC\x03\uD6DE\x03\uD6FC\x03\uD6FE\x03\uD716\x03\uD718\x03" +
+ "\uD736\x03\uD738\x03\uD750\x03\uD752\x03\uD770\x03\uD772\x03\uD78A\x03" +
+ "\uD78C\x03\uD7AA\x03\uD7AC\x03\uD7C4\x03\uD7C6\x03\uD7CD\x03\uD7D0\x03" +
+ "\uD801\x03\uDA02\x03\uDA38\x03\uDA3D\x03\uDA6E\x03\uDA77\x03\uDA77\x03" +
+ "\uDA86\x03\uDA86\x03\uDA9D\x03\uDAA1\x03\uDAA3\x03\uDAB1\x03\uE002\x03" +
+ "\uE008\x03\uE00A\x03\uE01A\x03\uE01D\x03\uE023\x03\uE025\x03\uE026\x03" +
+ "\uE028\x03\uE02C\x03\uE802\x03\uE8C6\x03\uE8D2\x03\uE8D8\x03\uE902\x03" +
+ "\uE94C\x03\uE952\x03\uE95B\x03\uEE02\x03\uEE05\x03\uEE07\x03\uEE21\x03" +
+ "\uEE23\x03\uEE24\x03\uEE26\x03\uEE26\x03\uEE29\x03\uEE29\x03\uEE2B\x03" +
+ "\uEE34\x03\uEE36\x03\uEE39\x03\uEE3B\x03\uEE3B\x03\uEE3D\x03\uEE3D\x03" +
+ "\uEE44\x03\uEE44\x03\uEE49\x03\uEE49\x03\uEE4B\x03\uEE4B\x03\uEE4D\x03" +
+ "\uEE4D\x03\uEE4F\x03\uEE51\x03\uEE53\x03\uEE54\x03\uEE56\x03\uEE56\x03" +
+ "\uEE59\x03\uEE59\x03\uEE5B\x03\uEE5B\x03\uEE5D\x03\uEE5D\x03\uEE5F\x03" +
+ "\uEE5F\x03\uEE61\x03\uEE61\x03\uEE63\x03\uEE64\x03\uEE66\x03\uEE66\x03" +
+ "\uEE69\x03\uEE6C\x03\uEE6E\x03\uEE74\x03\uEE76\x03\uEE79\x03\uEE7B\x03" +
+ "\uEE7E\x03\uEE80\x03\uEE80\x03\uEE82\x03\uEE8B\x03\uEE8D\x03\uEE9D\x03" +
+ "\uEEA3\x03\uEEA5\x03\uEEA7\x03\uEEAB\x03\uEEAD\x03\uEEBD\x03\x02\x04\uA6D8" +
+ "\x04\uA702\x04\uB736\x04\uB742\x04\uB81F\x04\uB822\x04\uCEA3\x04\uF802" +
+ "\x04\uFA1F\x04\u0102\x10\u01F1\x10\xC0\x02\x03\x03\x02\x02\x02\x02\x05" +
+ "\x03\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03" +
+ "\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03" +
+ "\x02\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03" +
+ "\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02" +
+ "\x02\x02\x02\'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02" +
+ "\x03-\x03\x02\x02\x02\x052\x03\x02\x02\x02\x078\x03\x02\x02\x02\t=\x03" +
+ "\x02\x02\x02\vG\x03\x02\x02\x02\rI\x03\x02\x02\x02\x0FK\x03\x02\x02\x02" +
+ "\x11M\x03\x02\x02\x02\x13O\x03\x02\x02\x02\x15Q\x03\x02\x02\x02\x17[\x03" +
+ "\x02\x02\x02\x19b\x03\x02\x02\x02\x1Bj\x03\x02\x02\x02\x1Dn\x03\x02\x02" +
+ "\x02\x1F\x84\x03\x02\x02\x02!\x86\x03\x02\x02\x02#\x8D\x03\x02\x02\x02" +
+ "%\x93\x03\x02\x02\x02\'\x9A\x03\x02\x02\x02)\xA5\x03\x02\x02\x02+\xB3" +
+ "\x03\x02\x02\x02-.\x07v\x02\x02./\x07t\x02\x02/0\x07w\x02\x0201\x07g\x02" +
+ "\x021\x04\x03\x02\x02\x0223\x07h\x02\x0234\x07c\x02\x0245\x07n\x02\x02" +
+ "56\x07u\x02\x0267\x07g\x02\x027\x06\x03\x02\x02\x0289\x07p\x02\x029:\x07" +
+ "w\x02\x02:;\x07n\x02\x02;<\x07n\x02\x02<\b\x03\x02\x02\x02=>\x07w\x02" +
+ "\x02>?\x07p\x02\x02?@\x07f\x02\x02@A\x07g\x02\x02AB\x07h\x02\x02BC\x07" +
+ "k\x02\x02CD\x07p\x02\x02DE\x07g\x02\x02EF\x07f\x02\x02F\n\x03\x02\x02" +
+ "\x02GH\x07.\x02\x02H\f\x03\x02\x02\x02IJ\x07]\x02\x02J\x0E\x03\x02\x02" +
+ "\x02KL\x07_\x02\x02L\x10\x03\x02\x02\x02MN\x07\x7F\x02\x02N\x12\x03\x02" +
+ "\x02\x02OP\x07}\x02\x02P\x14\x03\x02\x02\x02QR\x07<\x02\x02R\x16\x03\x02" +
+ "\x02\x02ST\x07$\x02\x02TU\x05\x19\r\x02UV\x07$\x02\x02V\\\x03\x02\x02" +
+ "\x02WX\x07)\x02\x02XY\x05\x1B\x0E\x02YZ\x07)\x02\x02Z\\\x03\x02\x02\x02" +
+ "[S\x03\x02\x02\x02[W\x03\x02\x02\x02\\\x18\x03\x02\x02\x02]^\x07^\x02" +
+ "\x02^a\x07$\x02\x02_a\n\x02\x02\x02`]\x03\x02\x02\x02`_\x03\x02\x02\x02" +
+ "ad\x03\x02\x02\x02b`\x03\x02\x02\x02bc\x03\x02\x02\x02c\x1A\x03\x02\x02" +
+ "\x02db\x03\x02\x02\x02ef\x07^\x02\x02fi\x07)\x02\x02gi\n\x03\x02\x02h" +
+ "e\x03\x02\x02\x02hg\x03\x02\x02\x02il\x03\x02\x02\x02jh\x03\x02\x02\x02" +
+ "jk\x03\x02\x02\x02k\x1C\x03\x02\x02\x02lj\x03\x02\x02\x02mo\x07/\x02\x02" +
+ "nm\x03\x02\x02\x02no\x03\x02\x02\x02op\x03\x02\x02\x02pw\x05\x1F\x10\x02" +
+ "qs\x070\x02\x02rt\t\x04\x02\x02sr\x03\x02\x02\x02tu\x03\x02\x02\x02us" +
+ "\x03\x02\x02\x02uv\x03\x02\x02\x02vx\x03\x02\x02\x02wq\x03\x02\x02\x02" +
+ "wx\x03\x02\x02\x02xz\x03\x02\x02\x02y{\x05!\x11\x02zy\x03\x02\x02\x02" +
+ "z{\x03\x02\x02\x02{\x1E\x03\x02\x02\x02|\x85\x072\x02\x02}\x81\t\x05\x02" +
+ "\x02~\x80\t\x04\x02\x02\x7F~\x03\x02\x02\x02\x80\x83\x03\x02\x02\x02\x81" +
+ "\x7F\x03\x02\x02\x02\x81\x82\x03\x02\x02\x02\x82\x85\x03\x02\x02\x02\x83" +
+ "\x81\x03\x02\x02\x02\x84|\x03\x02\x02\x02\x84}\x03\x02\x02\x02\x85 \x03" +
+ "\x02\x02\x02\x86\x88\t\x06\x02\x02\x87\x89\t\x07\x02\x02\x88\x87\x03\x02" +
+ "\x02\x02\x88\x89\x03\x02\x02\x02\x89\x8A\x03\x02\x02\x02\x8A\x8B\x05\x1F" +
+ "\x10\x02\x8B\"\x03\x02\x02\x02\x8C\x8E\t\b\x02\x02\x8D\x8C\x03\x02\x02" +
+ "\x02\x8E\x8F\x03\x02\x02\x02\x8F\x8D\x03\x02\x02\x02\x8F\x90\x03\x02\x02" +
+ "\x02\x90\x91\x03\x02\x02\x02\x91\x92\b\x12\x02\x02\x92$\x03\x02\x02\x02" +
+ "\x93\x97\t\n\x02\x02\x94\x96\t\v\x02\x02\x95\x94\x03\x02\x02\x02\x96\x99" +
+ "\x03\x02\x02\x02\x97\x95\x03\x02\x02\x02\x97\x98\x03\x02\x02\x02\x98&" +
+ "\x03\x02\x02\x02\x99\x97\x03\x02\x02\x02\x9A\x9B\x071\x02\x02\x9B\x9C" +
+ "\x071\x02\x02\x9C\xA0\x03\x02\x02\x02\x9D\x9F\n\t\x02\x02\x9E\x9D\x03" +
+ "\x02\x02\x02\x9F\xA2\x03\x02\x02\x02\xA0\x9E\x03\x02\x02\x02\xA0\xA1\x03" +
+ "\x02\x02\x02\xA1\xA3\x03\x02\x02\x02\xA2\xA0\x03\x02\x02\x02\xA3\xA4\b" +
+ "\x14\x03\x02\xA4(\x03\x02\x02\x02\xA5\xA6\x071\x02\x02\xA6\xA7\x07,\x02" +
+ "\x02\xA7\xAB\x03\x02\x02\x02\xA8\xAA\v\x02\x02\x02\xA9\xA8\x03\x02\x02" +
+ "\x02\xAA\xAD\x03\x02\x02\x02\xAB\xAC\x03\x02\x02\x02\xAB\xA9\x03\x02\x02" +
+ "\x02\xAC\xAE\x03\x02\x02\x02\xAD\xAB\x03\x02\x02\x02\xAE\xAF\x07,\x02" +
+ "\x02\xAF\xB0\x071\x02\x02\xB0\xB1\x03\x02\x02\x02\xB1\xB2\b\x15\x03\x02" +
+ "\xB2*\x03\x02\x02\x02\xB3\xB4\v\x02\x02\x02\xB4,\x03\x02\x02\x02\x13\x02" +
+ "[`bhjnuwz\x81\x84\x88\x8F\x97\xA0\xAB\x04\b\x02\x02\x02\x03\x02";
public static readonly _serializedATN: string = Utils.join(
[
JSONLexer._serializedATNSegment0,
diff --git a/src/parser/generated/JSONParser.ts b/src/parser/generated/JSONParser.ts
index 7e715d6..b0a6e5d 100644
--- a/src/parser/generated/JSONParser.ts
+++ b/src/parser/generated/JSONParser.ts
@@ -42,7 +42,8 @@ export class JSONParser extends Parser {
public static readonly WS = 13;
public static readonly IDENTIFIER = 14;
public static readonly LINE_COMMENT = 15;
- public static readonly ErrorCharacter = 16;
+ public static readonly BLOCK_COMMENT = 16;
+ public static readonly ErrorCharacter = 17;
public static readonly RULE_json = 0;
public static readonly RULE_value = 1;
public static readonly RULE_obj = 2;
@@ -60,7 +61,7 @@ export class JSONParser extends Parser {
private static readonly _SYMBOLIC_NAMES: Array = [
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, "CLOSING_CURLIES", "OPENING_CURLIES", "COLON", "STRING", "NUMBER",
- "WS", "IDENTIFIER", "LINE_COMMENT", "ErrorCharacter",
+ "WS", "IDENTIFIER", "LINE_COMMENT", "BLOCK_COMMENT", "ErrorCharacter",
];
public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(JSONParser._LITERAL_NAMES, JSONParser._SYMBOLIC_NAMES, []);
@@ -389,7 +390,7 @@ export class JSONParser extends Parser {
}
public static readonly _serializedATN: string =
- "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03\x12B\x04\x02" +
+ "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03\x13B\x04\x02" +
"\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x03\x02" +
"\x03\x02\x03\x02\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03" +
"\x03\x03\x05\x03\x18\n\x03\x03\x04\x03\x04\x03\x04\x03\x04\x07\x04\x1E" +
diff --git a/src/parser/parseArray.ts b/src/parser/parseArray.ts
index a52b4fe..dbeb866 100644
--- a/src/parser/parseArray.ts
+++ b/src/parser/parseArray.ts
@@ -10,14 +10,27 @@ export type Pair = [string, unknown];
export const contextSymbol = Symbol("context");
export const predecessorLineStopSymbol = Symbol("predecessorLineStop");
-export interface CommentInfo {
+
+export interface LineCommentInfo {
+ type: 'inline';
text: string;
line: number;
column: number;
}
-// The array needs to consist of one type to be sorted:
-// So only object, string, numbers are supported array items.
+export interface BlockCommentInfo {
+ type: 'block';
+ text: string;
+ startLine: number;
+ startColumn: number;
+ endLine: number;
+ endColumn: number;
+}
+
+export type CommentInfo = LineCommentInfo | BlockCommentInfo;
+
+// The array needs to consist of one type to be sorted:
+// So only object, string, numbers are supported array items.
// [null], [undefined] or [true, false] doesn't make any sense
// eslint-disable-next-line @typescript-eslint/ban-types
export type ArrayItem = (object | String | Number) & {[contextSymbol]: ValueContext & { [predecessorLineStopSymbol]: number}}
@@ -162,7 +175,7 @@ export default function parseArray(text: string): ParseResult {
parser.addErrorListener({
// eslint-disable-next-line @typescript-eslint/no-unused-vars
syntaxError(recognizer: Recognizer, offendingSymbol, line, charPositionInLine, msg, e) {
- errors.push(new Error(msg));
+ errors.push(new Error(`Error in ${line}, ${charPositionInLine}: ${msg})`));
},
});
const jsonContext = parser.json();
@@ -171,17 +184,37 @@ export default function parseArray(text: string): ParseResult {
}
const comments: CommentInfo[] = tokenStream.getTokens().filter(token =>
- token.channel === Token.HIDDEN_CHANNEL && token.type === JSONLexer.LINE_COMMENT
- ).map(token => ({
- text: typeof token.text !== 'undefined' ? token.text : "",
- line: token.line,
- column: token.charPositionInLine
- }))
+ token.channel === Token.HIDDEN_CHANNEL && (token.type === JSONLexer.LINE_COMMENT || token.type === JSONLexer.BLOCK_COMMENT)
+ ).map(token => {
+ if (token.type === JSONLexer.LINE_COMMENT) {
+ return {
+ type: 'inline',
+ text: typeof token.text !== 'undefined' ? token.text : "",
+ line: token.line,
+ column: token.charPositionInLine
+ } as LineCommentInfo;
+ } else { // JSONLexer.BLOCK_COMMENT
+ const text = typeof token.text !== 'undefined' ? token.text : "";
+ const lines = text.split(/\r?\n/);
+ const endLine = token.line + lines.length - 1;
+ const endColumn = lines.length === 1 ? token.charPositionInLine + text.length : lines[lines.length - 1].length;
+ return {
+ type: 'block',
+ text: text,
+ startLine: token.line,
+ startColumn: token.charPositionInLine,
+ endLine: endLine,
+ endColumn: endColumn
+ } as BlockCommentInfo;
+ }
+ })
.sort((a, b) => {
- if (a.line === b.line) {
- throw new Error(`Found two comments on the same line: ${a.text} and ${b.text} on line ${a.line}`);
+ const aLine = a.type === 'inline' ? a.line : a.startLine;
+ const bLine = b.type === 'inline' ? b.line : b.startLine;
+ if (aLine === bLine) {
+ throw new Error(`Found two comments on the same line: ${a.text} and ${b.text} on line ${aLine}`);
}
- return a.line - b.line
+ return aLine - bLine
});
diff --git a/src/serializeArray.ts b/src/serializeArray.ts
index 7e9fae8..1c9cf94 100644
--- a/src/serializeArray.ts
+++ b/src/serializeArray.ts
@@ -5,6 +5,9 @@ import { FileExtension } from './fileExtension';
import { TerminalNode } from 'antlr4ts/tree';
import { ParserRuleContext } from 'antlr4ts';
+
+const NEWLINE = /\r?\n/;
+
class ArraySerializer {
private makeIndent(indentLevel: number): string {
@@ -120,7 +123,7 @@ class ArraySerializer {
}
private addInlineComment(line: number): string {
- const comments = this.consumeComments(c => c.line === line);
+ const comments = this.consumeComments(c => (c.type === 'inline' && c.line === line) || (c.type == 'block' && c.startLine == line && c.endLine == line));
if (comments.length > 1) {
throw new Error(`Found two inline comments in line ${line}`);
}
@@ -133,8 +136,28 @@ class ArraySerializer {
end: number,
indentLevel: number
): string {
- const comments = this.consumeComments((c) => (c.line > start && c.line < end))
- .map( c => `${c.text}`).map(c => this.makeIndent(indentLevel + 1) + c);
+ const comments = this.consumeComments((c) => {
+ if (c.type === 'inline') {
+ return c.line > start && c.line < end;
+ } else { // block comment
+ return c.startLine > start && c.endLine < end;
+ }
+ })
+ .map( c => {
+ if (c.type == 'inline') {
+ return this.makeIndent(indentLevel + 1) + c.text;
+ } else {
+ const commonTrailingWhitespace = new RegExp(`^\\s{0,${c.startColumn}}`);
+ return c.text.split(NEWLINE).map((l, i) => {
+ if (i == 0) {
+ return this.makeIndent(indentLevel + 1) + l;
+ } else {
+ return this.makeIndent(indentLevel + 1) + l.replace(commonTrailingWhitespace, "");
+ }
+ }).join("\n");
+ }
+
+ })
if (comments.length > 0) {
return comments.join("\n") + "\n";
} else {
@@ -157,13 +180,14 @@ class ArraySerializer {
}
}
+
export default function serializeArrayFromTree(parseResult: ParseResult, fileExtension: FileExtension, text: string,
{indentLevel, newIndent}: {indentLevel: number, newIndent: string}): string {
const { items, comments: allCommentTokens } = parseResult;
if (fileExtension === FileExtension.JSONL) {
- const lines = text.split(/\r?\n/);
+ const lines = text.split(NEWLINE);
const serializedArrayItems = items.map(value => {
const valueContext = value[contextSymbol];
const startToken = valueContext.start;
diff --git a/src/test/suite/commentHandling.vsc-test.ts b/src/test/suite/commentHandling.vsc-test.ts
index 6fd0738..0a7dab9 100644
--- a/src/test/suite/commentHandling.vsc-test.ts
+++ b/src/test/suite/commentHandling.vsc-test.ts
@@ -4,7 +4,6 @@ import * as vscode from "vscode";
import {closeActiveEditor, openNewDocument} from './textEditorUtils';
import { triggerSortExpectSuccess } from './triggerSortExpectSuccess';
-import { expect } from 'chai';
import { undent } from './undent';
import { expectErrorMessage, setupSpies } from './setupSpies';
@@ -97,6 +96,83 @@ suite('Comment Handling Integration Tests', function() {
} // comment end of id 2
// comment at the end
]`;
+ await triggerSortExpectSuccess({
+ command: 'extension.sortJsonArrayAscending', // Sorts by id
+ code: originalJson,
+ expectedCode: expectedJson,
+ position: new vscode.Position(0, 0),
+ fileExtension: '.json'
+
+ });
+ });
+
+ test('should sort object array and preserve multi-line comments', async function() {
+ const originalJson = undent`
+ [ /* start of array */
+ /* comment 1 before id 2 object */
+ /*
+ * comment 2 before id 2 object
+ */
+ { /* comment start of id 2 */
+ /* comment before id 2 */
+ "id": 2, /* comment for id 2 */
+ /*
+ * comment between id 2 and array2
+ */
+ "array2": [ /* comment start of array2 */
+ 1, /* inline comment array2 1 */
+ 2, /* inline comment array2 2 */
+ 3 /* inline comment array2 3 */
+ ], /* comment end of array 2 */
+ /* comment between array2 and dataId2 */
+ "dataId2": { /* comment start of dataId2 */
+ "value": "zeta" /* comment for zeta */
+ } /* comment end of dataId2 */
+ }, /* comment end of id 2 */
+ /* comment before id 1 object */
+ { /* comment start of id 1 */
+ /* comment before id 1 */
+ "id": 1, /* comment for id 1 */
+ /* comment between id 1 and dataId1 */
+ "dataId1": { /* comment start of dataId1 */
+ "value": "alpha" /* comment for alpha */
+ } /* comment end of dataId1 */
+ } /* comment end of id 1 object */
+ /* comment at the end */
+ ]`;
+ const expectedJson = undent`
+ [ /* start of array */
+ /* comment before id 1 object */
+ { /* comment start of id 1 */
+ /* comment before id 1 */
+ "id": 1, /* comment for id 1 */
+ /* comment between id 1 and dataId1 */
+ "dataId1": { /* comment start of dataId1 */
+ "value": "alpha" /* comment for alpha */
+ } /* comment end of dataId1 */
+ }, /* comment end of id 1 object */
+ /* comment 1 before id 2 object */
+ /*
+ * comment 2 before id 2 object
+ */
+ { /* comment start of id 2 */
+ /* comment before id 2 */
+ "id": 2, /* comment for id 2 */
+ /*
+ * comment between id 2 and array2
+ */
+ "array2": [ /* comment start of array2 */
+ 1, /* inline comment array2 1 */
+ 2, /* inline comment array2 2 */
+ 3 /* inline comment array2 3 */
+ ], /* comment end of array 2 */
+ /* comment between array2 and dataId2 */
+ "dataId2": { /* comment start of dataId2 */
+ "value": "zeta" /* comment for zeta */
+ } /* comment end of dataId2 */
+ } /* comment end of id 2 */
+ /* comment at the end */
+ ]`;
await triggerSortExpectSuccess({
command: 'extension.sortJsonArrayAscending', // Sorts by id
code: originalJson,
diff --git a/src/test/suite/extension.vsc-test.ts b/src/test/suite/extension.vsc-test.ts
index 3855f3c..26a582d 100644
--- a/src/test/suite/extension.vsc-test.ts
+++ b/src/test/suite/extension.vsc-test.ts
@@ -16,7 +16,7 @@ suite('Extension Test Suite', function() {
});
test('Invalid json', async function() {
- await triggerSortExpectFailure('[\'foo, 2, 3]', /Cannot parse selection as JSON array. Reason: no viable alternative at input '\['/)
+ await triggerSortExpectFailure('[\'foo, 2, 3]', /Cannot parse selection as JSON array. Reason: Error in 1, 1: no viable alternative at input '\['/)
});
test('Valid json', async function() {
diff --git a/src/test/suite/parser/parseArray.test.ts b/src/test/suite/parser/parseArray.test.ts
index 3ef9c89..59282b6 100644
--- a/src/test/suite/parser/parseArray.test.ts
+++ b/src/test/suite/parser/parseArray.test.ts
@@ -99,8 +99,8 @@ suite('parseArray', function() {
const result = parseArray(json);
expect(result.items.length).to.equal(2);
const expectedComments: Partial[] = [
- { text: '// comment1', line: 2, column: 7 },
- { text: '// comment2', line: 3, column: 6 }
+ { type: 'inline', text: '// comment1', line: 2, column: 7 },
+ { type: 'inline', text: '// comment2', line: 3, column: 6 }
];
expect(result.comments).to.deep.members(expectedComments);
});
@@ -110,8 +110,8 @@ suite('parseArray', function() {
const result = parseArray(json);
expect(result.items.length).to.equal(1);
const expectedComments: Partial[] = [
- { text: '// commentA', line: 2, column: 12 },
- { text: '// commentB', line: 3, column: 11 }
+ { type: 'inline', text: '// commentA', line: 2, column: 12 },
+ { type: 'inline', text: '// commentB', line: 3, column: 11 }
];
expect(result.comments).to.deep.members(expectedComments);
});
@@ -121,8 +121,8 @@ suite('parseArray', function() {
const result = parseArray(json);
expect(result.items.length).to.equal(2);
const expectedComments: Partial[] = [
- { text: '// comment1', line: 2, column: 2 },
- { text: '// comment2', line: 4, column: 2 }
+ { type: 'inline', text: '// comment1', line: 2, column: 2 },
+ { type: 'inline', text: '// comment2', line: 4, column: 2 }
];
expect(result.comments).to.deep.members(expectedComments);
});
@@ -132,8 +132,8 @@ suite('parseArray', function() {
const result = parseArray(json);
expect(result.items.length).to.equal(1);
const expectedComments: Partial[] = [
- { text: '// commentA', line: 3, column: 4 },
- { text: '// commentB', line: 5, column: 4 }
+ { type: 'inline', text: '// commentA', line: 3, column: 4 },
+ { type: 'inline', text: '// commentB', line: 5, column: 4 }
];
expect(result.comments).to.deep.members(expectedComments);
});
@@ -143,8 +143,8 @@ suite('parseArray', function() {
const result = parseArray(json);
expect(result.items.length).to.equal(2);
const expectedComments: Partial[] = [
- { text: '// comment after last 1', line: 4, column: 2 },
- { text: '// comment after last 2', line: 5, column: 2 }
+ { type: 'inline', text: '// comment after last 1', line: 4, column: 2 },
+ { type: 'inline', text: '// comment after last 2', line: 5, column: 2 }
];
expect(result.comments).to.deep.members(expectedComments);
});
@@ -165,15 +165,104 @@ suite('parseArray', function() {
// Check properties of each comment
const expectedComments: Partial[] = [
- { text: '// before1', line: 2, column: 2 },
- { text: '// inline1', line: 3, column: 7 },
- { text: '// before2', line: 4, column: 2 },
- { text: '// inline2', line: 5, column: 7 },
- { text: '// after last1', line: 6, column: 2 },
- { text: '// after last2', line: 7, column: 2 }
+ { type: 'inline', text: '// before1', line: 2, column: 2 },
+ { type: 'inline', text: '// inline1', line: 3, column: 7 },
+ { type: 'inline', text: '// before2', line: 4, column: 2 },
+ { type: 'inline', text: '// inline2', line: 5, column: 7 },
+ { type: 'inline', text: '// after last1', line: 6, column: 2 },
+ { type: 'inline', text: '// after last2', line: 7, column: 2 }
];
expect(result.comments).to.deep.members(expectedComments);
+
});
+
+ test('should collect multi-line inline comments from array elements', function() {
+ const json = '[\n "a", /* comment1 */\n "b" /* comment2 */\n]';
+ const result = parseArray(json);
+ expect(result.items.length).to.equal(2);
+ const expectedComments: Partial[] = [
+ { type: 'block', text: '/* comment1 */', startLine: 2, startColumn: 7, endLine: 2, endColumn: 21 },
+ { type: 'block', text: '/* comment2 */', startLine: 3, startColumn: 6, endLine: 3, endColumn: 20 }
+ ];
+ expect(result.comments).to.deep.members(expectedComments);
+ });
+
+ test('should collect multi-line comments on lines before array elements', function() {
+ const json = '[\n /*\n * comment1\n */\n "a",\n /* comment2 */\n "b"\n]';
+ const result = parseArray(json);
+ expect(result.items.length).to.equal(2);
+ const expectedComments: Partial[] = [
+ { type: 'block', text: '/*\n * comment1\n */', startLine: 2, startColumn: 2, endLine: 4, endColumn: 5 },
+ { type: 'block', text: '/* comment2 */', startLine: 6, startColumn: 2, endLine: 6, endColumn: 16 }
+ ];
+ expect(result.comments).to.deep.members(expectedComments);
+ });
+
+ test('should collect multi-line comments after the last array element (within the array brackets)', function() {
+ const json = '[\n "a",\n "b"\n /* comment after last 1 */\n /*\n * comment after last 2\n */\n]';
+ const result = parseArray(json);
+ expect(result.items.length).to.equal(2);
+ const expectedComments: Partial[] = [
+ { type: 'block', text: '/* comment after last 1 */', startLine: 4, startColumn: 2, endLine: 4, endColumn: 28 },
+ { type: 'block', text: '/*\n * comment after last 2\n */', startLine: 5, startColumn: 2, endLine: 7, endColumn: 5 }
+ ];
+ expect(result.comments).to.deep.members(expectedComments);
+ });
+
+ test('should handle a mix of single and multi-line comment types and collect them all', function() {
+ const json = undent`
+ [
+ // before1
+ /* multi-line
+ * comment 1 */
+ "a", // inline1
+ /* multi-line comment 2 */
+ "b", // inline2
+ // after last1
+ /* after last2 */
+ ]`;
+ const result = parseArray(json);
+ expect(result.items.length).to.equal(2);
+ expect(result.comments.length).to.equal(7);
+
+ const expectedComments: Partial[] = [
+ { type: 'inline', text: '// before1', line: 2, column: 2 },
+ { type: 'block', text: '/* multi-line\n * comment 1 */', startLine: 3, startColumn: 2, endLine: 4, endColumn: 17 },
+ { type: 'inline', text: '// inline1', line: 5, column: 7 },
+ { type: 'block', text: '/* multi-line comment 2 */', startLine: 6, startColumn: 2, endLine: 6, endColumn: 28 },
+ { type: 'inline', text: '// inline2', line: 7, column: 7 },
+ { type: 'inline', text: '// after last1', line: 8, column: 2 },
+ { type: 'block', text: '/* after last2 */', startLine: 9, startColumn: 2, endLine: 9, endColumn: 19 }
+ ];
+
+ expect(result.comments).to.deep.members(expectedComments);
+ });
+
+ test('should handle nested comments in various configurations and collect them all', function() {
+ const json = undent`
+ [
+ // Line comment with /* block inside */
+ /* Block with // line inside */
+ "a",
+ // Line /* with block */ inside
+ // Line // with another line comment inside
+ /* Block with
+ // line inside */
+ "b"
+ ]`;
+ const result = parseArray(json);
+ expect(result.items.length).to.equal(2);
+ expect(result.comments.length).to.equal(5);
+ const expectedComments: Partial[] = [
+ { type: 'inline', text: '// Line comment with /* block inside */', line: 2, column: 2 },
+ { type: 'block', text: '/* Block with // line inside */', startLine: 3, startColumn: 2, endLine: 3, endColumn: 33 },
+ { type: 'inline', text: '// Line /* with block */ inside', line: 5, column: 2 },
+ { type: 'inline', text: '// Line // with another line comment inside', line: 6, column: 2 },
+ { type: 'block', text: '/* Block with\n // line inside */', startLine: 7, startColumn: 2, endLine: 8, endColumn: 19 }
+ ];
+
+ expect(result.comments).to.deep.members(expectedComments);
+ });
});
diff --git a/src/test/suite/processAndParseArray.test.ts b/src/test/suite/processAndParseArray.test.ts
index 9e2eefe..7e85234 100644
--- a/src/test/suite/processAndParseArray.test.ts
+++ b/src/test/suite/processAndParseArray.test.ts
@@ -1,9 +1,8 @@
import processAndParseArray from '../../processAndParseArray';
import chai = require('chai');
import {FileExtension} from '../../fileExtension';
-import { convertToLiteralValues, CommentInfo } from '../../parser/parseArray'; // Removed metadataSymbol, added CommentInfo
+import { convertToLiteralValues } from '../../parser/parseArray'; // Removed metadataSymbol, added CommentInfo
import {suite, test} from 'mocha';
-import { Token } from 'antlr4ts';
const expect = chai.expect;
diff --git a/src/test/suite/serializeArray.test.ts b/src/test/suite/serializeArray.test.ts
index 92a59f4..d2e59cf 100644
--- a/src/test/suite/serializeArray.test.ts
+++ b/src/test/suite/serializeArray.test.ts
@@ -255,4 +255,209 @@ suite('serializeArray', function() {
expectSerializedArray(original, expected, {sortFn: (a, b) => a.id - b.id});
})
+ test('multi-line comments in string array', function() {
+ const original = undent`
+ [ /* arrayInline */
+ /* before1 */
+ "a", /* inline1 */
+ /* before2 */
+ "b", /* inline2 */
+ /*
+ * before 3
+ * before 4
+ */
+ "c",
+ /* after last1 */
+ /* after last2 */
+ ]`;
+ const expected = undent`
+ [ /* arrayInline */
+ /* before1 */
+ "a", /* inline1 */
+ /* before2 */
+ "b", /* inline2 */
+ /*
+ * before 3
+ * before 4
+ */
+ "c"
+ /* after last1 */
+ /* after last2 */
+ ]
+ `;
+ expectSerializedArray(original, expected, { indentLevel: 0, newIndent: ' ' });
+ });
+
+ test('multi-line comments in object array', function() {
+ const original = undent`
+ [
+ { /* objInlineBefore */
+ /* objBefore1 */
+ /* objBefore2 */
+ "a": 1, /* objInline1 */
+ /* objBefore2 */
+ "b": 2 /* objInline2 */
+ /* objAfter 1 */
+ /* objAfter 2 */
+ } /* objInlineAfter */
+ /* after last 1 */
+ /* after last 2 */
+ ]
+ `;
+ const expected = undent`
+ [
+ { /* objInlineBefore */
+ /* objBefore1 */
+ /* objBefore2 */
+ "a": 1, /* objInline1 */
+ /* objBefore2 */
+ "b": 2 /* objInline2 */
+ /* objAfter 1 */
+ /* objAfter 2 */
+ } /* objInlineAfter */
+ /* after last 1 */
+ /* after last 2 */
+ ]
+ `;
+ expectSerializedArray(original, expected);
+ });
+
+ test('multi-line comments in nested array', function() {
+ const original = undent`
+ [
+ [
+ /* nestedBefore1 */
+ "x", /* nestedInline1 */
+ /* nestedBefore2 */
+ "y" /* nestedInline2 */
+ ], /* itemInline */
+ /* after last */
+ ]
+ `;
+ const expected = undent`
+ [
+ [
+ /* nestedBefore1 */
+ "x", /* nestedInline1 */
+ /* nestedBefore2 */
+ "y" /* nestedInline2 */
+ ] /* itemInline */
+ /* after last */
+ ]
+ `;
+ expectSerializedArray(original, expected);
+ });
+
+ test('multi-line comments in empty objects and arrays', function() {
+ const original = undent`
+ [
+ {
+ "array": [
+ /* array comment */
+ /* array comment comment */
+ ],
+ "object": {
+ /* object comment 1 */
+ /* object comment 2 */
+ /* object comment 3 */
+ /* object comment 4 */
+ }
+ }
+ ]
+ `;
+ const expected = undent`
+ [
+ {
+ "array": [
+ /* array comment */
+ /* array comment comment */
+ ],
+ "object": {
+ /* object comment 1 */
+ /* object comment 2 */
+ /* object comment 3 */
+ /* object comment 4 */
+ }
+ }
+ ]
+ `;
+ expectSerializedArray(original, expected);
+ });
+
+ test('multi-line comments after sorting', function() {
+ const original = undent`
+ [
+ {
+ "id": 2 /* id 2 */
+ /* end 2 */
+ },
+ {
+ "id": 1 /* id 1 */
+ /* end 1 */
+ }
+ ]
+ `;
+ const expected = undent`
+ [
+ {
+ "id": 1 /* id 1 */
+ /* end 1 */
+ },
+ {
+ "id": 2 /* id 2 */
+ /* end 2 */
+ }
+ ]
+ `;
+
+ expectSerializedArray(original, expected, {sortFn: (a, b) => a.id - b.id});
+ });
+
+ test('indentation of block comments', function() {
+ const original = undent`
+ [
+ /*
+ Normal indentation
+ */
+ /*
+ Too much indentation
+ */
+ /*
+ Too little indentation
+ */
+ /* In this example, we're commenting out the addTwoNumbers
+ function, therefore preventing it from executing. Only the
+ multiplyTwoNumbers function will run */
+ /**
+ * Initialize constant with an array of strings.
+ * Loop through each item in the array and print
+ * it to the console.
+ */
+ ]
+ `;
+ const expected = undent`
+ [
+ /*
+ Normal indentation
+ */
+ /*
+ Too much indentation
+ */
+ /*
+ Too little indentation
+ */
+ /* In this example, we're commenting out the addTwoNumbers
+ function, therefore preventing it from executing. Only the
+ multiplyTwoNumbers function will run */
+ /**
+ * Initialize constant with an array of strings.
+ * Loop through each item in the array and print
+ * it to the console.
+ */
+ ]
+ `;
+
+ expectSerializedArray(original, expected, {sortFn: (a, b) => a.id - b.id});
+ })
+
});
diff --git a/src/test/suite/setupSpies.ts b/src/test/suite/setupSpies.ts
index 2a5e67e..614858f 100644
--- a/src/test/suite/setupSpies.ts
+++ b/src/test/suite/setupSpies.ts
@@ -18,7 +18,8 @@ export function setupSpies(): {showErrorMessageSpy: typeof showErrorMessageSpy,
export async function expectErrorMessage(msg: RegExp): Promise {
expect(showErrorMessageSpy.called, 'Expected vscode.window.showErrorMessage to be called').to.be.true;
- expect(showErrorMessageSpy.lastCall.args[0]).to.satisfy((actualErrorMessage: string) => msg.test(actualErrorMessage));
+ const lastArg = showErrorMessageSpy.lastCall.args[0];
+ expect(lastArg).to.satisfy((actualErrorMessage: string) => msg.test(actualErrorMessage), `${lastArg} does not match ${msg}`);
const timeout = 5000;
const interval = 10;
const startTime = Date.now();
diff --git a/src/test/suite/sortOrder/sortObjects/sortObjects.vsc-test.ts b/src/test/suite/sortOrder/sortObjects/sortObjects.vsc-test.ts
index 19646cd..ac4869e 100644
--- a/src/test/suite/sortOrder/sortObjects/sortObjects.vsc-test.ts
+++ b/src/test/suite/sortOrder/sortObjects/sortObjects.vsc-test.ts
@@ -10,9 +10,12 @@ import nextTick from '../../nextTick';
import {closeActiveEditor} from '../../textEditorUtils';
import { undent } from '../../undent';
import { selectQuickOpenItems } from '../../sortCustom/selectQuickOpenItem';
+import { sleep } from '../../sleep';
async function changeToCRLF(): Promise {
await vscode.commands.executeCommand("workbench.action.showCommands");
+ // Pipeline fails for 1.172.0 without sleep
+ // await sleep(2000);
await selectQuickOpenItems("Change End of Line Sequence", "CRLF");
}