diff --git a/.vscode/launch.json b/.vscode/launch.json index d6da0302..3fc9d2b8 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -67,6 +67,15 @@ "cwd": "${workspaceFolder}/examples", "args": ["run", "2_hello_world/3_with_literal_sender"] }, + { + "name": "Neva CLI 24", + "type": "go", + "request": "launch", + "mode": "auto", + "program": "${workspaceFolder}/cmd/cli", + "cwd": "${workspaceFolder}/examples", + "args": ["run", "2_hello_world/4_with_unnamed_node"] + }, { "name": "Neva CLI 30", "type": "go", diff --git a/README.md b/README.md index 291c500d..538ef262 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Website: https://nevalang.org/ ```neva component Main(start any) (stop any) { - nodes { printer Printer } + nodes { Printer } net { :start -> ('Hello, World!' -> printer:data) printer:sig -> :stop diff --git a/examples/2_hello_world/4_with_unnamed_node/main.neva b/examples/2_hello_world/4_with_unnamed_node/main.neva new file mode 100644 index 00000000..4f7f3c6e --- /dev/null +++ b/examples/2_hello_world/4_with_unnamed_node/main.neva @@ -0,0 +1,14 @@ +// Finally, the shortest "hello world" with "literal senders". +// Why have const senders then, one might ask? +// First of all, only primitive messages such as bool, int, float and string +// could be used as network senders. So no structs, lists or maps senders. +// Secondly, what if you wanna use your message in several places? +// Finally, you might wanna move your message to const just because it's big! + +component Main(start any) (stop any) { + nodes { Printer } + net { + :start -> ('Hello, World!' -> printer:data) + printer:sig -> :stop + } +} \ No newline at end of file diff --git a/examples/3_interfaces/main.neva b/examples/3_interfaces/main.neva index bc0aa593..99bc5fea 100644 --- a/examples/3_interfaces/main.neva +++ b/examples/3_interfaces/main.neva @@ -1,5 +1,5 @@ import { - nevalang/main/x + github.com/nevalang/x:main } interface IPrinter(data T) (sig T) @@ -8,7 +8,7 @@ component { Main(start any) (stop any) { nodes { subNode SecondComponent { - depNode x.Printer + depNode main.Printer } } net { diff --git a/examples/neva.yml b/examples/neva.yml index f4ccb10f..41d5bcf6 100644 --- a/examples/neva.yml +++ b/examples/neva.yml @@ -1,5 +1,5 @@ neva: 0.6.0 deps: - nevalang/x: + github.com/nevalang/x: path: github.com/nevalang/x - version: 0.0.6 + version: 0.0.7 diff --git a/internal/compiler/parser/generated/neva.interp b/internal/compiler/parser/generated/neva.interp index 0657ef08..b61cab0b 100644 --- a/internal/compiler/parser/generated/neva.interp +++ b/internal/compiler/parser/generated/neva.interp @@ -7,8 +7,9 @@ null 'import' '{' '}' -'/' +':' '@' +'/' '.' 'type' '<' @@ -24,7 +25,6 @@ null 'true' 'false' 'nil' -':' 'component' 'nodes' 'net' @@ -94,6 +94,8 @@ importDef importAlias importPath importPathMod +importMod +importModeDelim importPathPkg entityRef localEntityRef @@ -169,4 +171,4 @@ multipleReceiverSide atn: -[4, 1, 39, 1031, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 1, 0, 1, 0, 1, 0, 5, 0, 170, 8, 0, 10, 0, 12, 0, 173, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 182, 8, 1, 1, 2, 1, 2, 1, 2, 4, 2, 187, 8, 2, 11, 2, 12, 2, 188, 1, 3, 1, 3, 1, 3, 3, 3, 194, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 200, 8, 4, 10, 4, 12, 4, 203, 9, 4, 1, 4, 1, 4, 1, 5, 4, 5, 208, 8, 5, 11, 5, 12, 5, 209, 1, 6, 1, 6, 5, 6, 214, 8, 6, 10, 6, 12, 6, 217, 9, 6, 1, 6, 1, 6, 5, 6, 221, 8, 6, 10, 6, 12, 6, 224, 9, 6, 1, 6, 5, 6, 227, 8, 6, 10, 6, 12, 6, 230, 9, 6, 1, 6, 1, 6, 1, 7, 3, 7, 235, 8, 7, 1, 7, 1, 7, 5, 7, 239, 8, 7, 10, 7, 12, 7, 242, 9, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 3, 9, 249, 8, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 5, 11, 258, 8, 11, 10, 11, 12, 11, 261, 9, 11, 1, 12, 1, 12, 3, 12, 265, 8, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 3, 14, 272, 8, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 3, 17, 280, 8, 17, 1, 18, 3, 18, 283, 8, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 5, 19, 290, 8, 19, 10, 19, 12, 19, 293, 9, 19, 1, 19, 1, 19, 5, 19, 297, 8, 19, 10, 19, 12, 19, 300, 9, 19, 1, 19, 3, 19, 303, 8, 19, 1, 19, 1, 19, 5, 19, 307, 8, 19, 10, 19, 12, 19, 310, 9, 19, 5, 19, 312, 8, 19, 10, 19, 12, 19, 315, 9, 19, 1, 19, 1, 19, 1, 20, 1, 20, 3, 20, 321, 8, 20, 1, 20, 3, 20, 324, 8, 20, 1, 21, 1, 21, 5, 21, 328, 8, 21, 10, 21, 12, 21, 331, 9, 21, 1, 21, 3, 21, 334, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 5, 22, 341, 8, 22, 10, 22, 12, 22, 344, 9, 22, 1, 22, 5, 22, 347, 8, 22, 10, 22, 12, 22, 350, 9, 22, 1, 23, 1, 23, 3, 23, 354, 8, 23, 1, 23, 5, 23, 357, 8, 23, 10, 23, 12, 23, 360, 9, 23, 1, 24, 1, 24, 1, 24, 3, 24, 365, 8, 24, 1, 25, 1, 25, 3, 25, 369, 8, 25, 1, 26, 1, 26, 5, 26, 373, 8, 26, 10, 26, 12, 26, 376, 9, 26, 1, 26, 1, 26, 1, 26, 5, 26, 381, 8, 26, 10, 26, 12, 26, 384, 9, 26, 1, 26, 5, 26, 387, 8, 26, 10, 26, 12, 26, 390, 9, 26, 1, 26, 5, 26, 393, 8, 26, 10, 26, 12, 26, 396, 9, 26, 1, 26, 1, 26, 1, 27, 1, 27, 3, 27, 402, 8, 27, 1, 28, 1, 28, 5, 28, 406, 8, 28, 10, 28, 12, 28, 409, 9, 28, 1, 28, 1, 28, 5, 28, 413, 8, 28, 10, 28, 12, 28, 416, 9, 28, 1, 28, 1, 28, 1, 28, 5, 28, 421, 8, 28, 10, 28, 12, 28, 424, 9, 28, 1, 28, 5, 28, 427, 8, 28, 10, 28, 12, 28, 430, 9, 28, 1, 28, 5, 28, 433, 8, 28, 10, 28, 12, 28, 436, 9, 28, 1, 28, 1, 28, 1, 29, 1, 29, 5, 29, 442, 8, 29, 10, 29, 12, 29, 445, 9, 29, 1, 29, 1, 29, 5, 29, 449, 8, 29, 10, 29, 12, 29, 452, 9, 29, 1, 29, 3, 29, 455, 8, 29, 1, 29, 1, 29, 1, 30, 1, 30, 4, 30, 461, 8, 30, 11, 30, 12, 30, 462, 1, 30, 5, 30, 466, 8, 30, 10, 30, 12, 30, 469, 9, 30, 1, 31, 1, 31, 1, 31, 5, 31, 474, 8, 31, 10, 31, 12, 31, 477, 9, 31, 1, 32, 1, 32, 5, 32, 481, 8, 32, 10, 32, 12, 32, 484, 9, 32, 1, 32, 1, 32, 5, 32, 488, 8, 32, 10, 32, 12, 32, 491, 9, 32, 1, 32, 4, 32, 494, 8, 32, 11, 32, 12, 32, 495, 1, 33, 1, 33, 3, 33, 500, 8, 33, 1, 34, 1, 34, 3, 34, 504, 8, 34, 1, 35, 3, 35, 507, 8, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 5, 36, 514, 8, 36, 10, 36, 12, 36, 517, 9, 36, 1, 36, 1, 36, 5, 36, 521, 8, 36, 10, 36, 12, 36, 524, 9, 36, 1, 36, 3, 36, 527, 8, 36, 1, 36, 5, 36, 530, 8, 36, 10, 36, 12, 36, 533, 9, 36, 1, 36, 1, 36, 1, 37, 1, 37, 3, 37, 539, 8, 37, 1, 37, 1, 37, 1, 37, 5, 37, 544, 8, 37, 10, 37, 12, 37, 547, 9, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 5, 40, 555, 8, 40, 10, 40, 12, 40, 558, 9, 40, 1, 40, 3, 40, 561, 8, 40, 1, 40, 1, 40, 1, 40, 5, 40, 566, 8, 40, 10, 40, 12, 40, 569, 9, 40, 3, 40, 571, 8, 40, 1, 40, 1, 40, 1, 41, 1, 41, 3, 41, 577, 8, 41, 1, 42, 5, 42, 580, 8, 42, 10, 42, 12, 42, 583, 9, 42, 1, 42, 1, 42, 1, 42, 5, 42, 588, 8, 42, 10, 42, 12, 42, 591, 9, 42, 1, 43, 5, 43, 594, 8, 43, 10, 43, 12, 43, 597, 9, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 5, 43, 604, 8, 43, 10, 43, 12, 43, 607, 9, 43, 1, 44, 1, 44, 3, 44, 611, 8, 44, 1, 45, 3, 45, 614, 8, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 5, 46, 621, 8, 46, 10, 46, 12, 46, 624, 9, 46, 1, 46, 1, 46, 5, 46, 628, 8, 46, 10, 46, 12, 46, 631, 9, 46, 1, 46, 3, 46, 634, 8, 46, 1, 46, 5, 46, 637, 8, 46, 10, 46, 12, 46, 640, 9, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 649, 8, 47, 10, 47, 12, 47, 652, 9, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 661, 8, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 5, 51, 669, 8, 51, 10, 51, 12, 51, 672, 9, 51, 1, 51, 3, 51, 675, 8, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 683, 8, 52, 10, 52, 12, 52, 686, 9, 52, 1, 52, 1, 52, 5, 52, 690, 8, 52, 10, 52, 12, 52, 693, 9, 52, 5, 52, 695, 8, 52, 10, 52, 12, 52, 698, 9, 52, 3, 52, 700, 8, 52, 1, 53, 1, 53, 5, 53, 704, 8, 53, 10, 53, 12, 53, 707, 9, 53, 1, 53, 3, 53, 710, 8, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 5, 54, 717, 8, 54, 10, 54, 12, 54, 720, 9, 54, 1, 54, 5, 54, 723, 8, 54, 10, 54, 12, 54, 726, 9, 54, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 732, 8, 55, 10, 55, 12, 55, 735, 9, 55, 1, 56, 1, 56, 3, 56, 739, 8, 56, 1, 57, 3, 57, 742, 8, 57, 1, 57, 3, 57, 745, 8, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 5, 58, 752, 8, 58, 10, 58, 12, 58, 755, 9, 58, 1, 58, 1, 58, 5, 58, 759, 8, 58, 10, 58, 12, 58, 762, 9, 58, 1, 58, 3, 58, 765, 8, 58, 1, 58, 3, 58, 768, 8, 58, 1, 58, 5, 58, 771, 8, 58, 10, 58, 12, 58, 774, 9, 58, 1, 58, 1, 58, 1, 59, 1, 59, 3, 59, 780, 8, 59, 1, 59, 5, 59, 783, 8, 59, 10, 59, 12, 59, 786, 9, 59, 1, 60, 1, 60, 5, 60, 790, 8, 60, 10, 60, 12, 60, 793, 9, 60, 1, 60, 1, 60, 5, 60, 797, 8, 60, 10, 60, 12, 60, 800, 9, 60, 3, 60, 802, 8, 60, 1, 60, 1, 60, 5, 60, 806, 8, 60, 10, 60, 12, 60, 809, 9, 60, 3, 60, 811, 8, 60, 1, 60, 1, 60, 1, 61, 1, 61, 5, 61, 817, 8, 61, 10, 61, 12, 61, 820, 9, 61, 1, 61, 1, 61, 1, 62, 1, 62, 5, 62, 826, 8, 62, 10, 62, 12, 62, 829, 9, 62, 1, 62, 1, 62, 5, 62, 833, 8, 62, 10, 62, 12, 62, 836, 9, 62, 5, 62, 838, 8, 62, 10, 62, 12, 62, 841, 9, 62, 1, 62, 1, 62, 1, 63, 3, 63, 846, 8, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 5, 64, 853, 8, 64, 10, 64, 12, 64, 856, 9, 64, 1, 64, 3, 64, 859, 8, 64, 1, 64, 5, 64, 862, 8, 64, 10, 64, 12, 64, 865, 9, 64, 1, 64, 3, 64, 868, 8, 64, 1, 65, 1, 65, 1, 66, 1, 66, 5, 66, 874, 8, 66, 10, 66, 12, 66, 877, 9, 66, 1, 66, 1, 66, 5, 66, 881, 8, 66, 10, 66, 12, 66, 884, 9, 66, 1, 66, 3, 66, 887, 8, 66, 1, 66, 5, 66, 890, 8, 66, 10, 66, 12, 66, 893, 9, 66, 1, 66, 1, 66, 1, 67, 1, 67, 5, 67, 899, 8, 67, 10, 67, 12, 67, 902, 9, 67, 1, 67, 5, 67, 905, 8, 67, 10, 67, 12, 67, 908, 9, 67, 1, 68, 1, 68, 3, 68, 912, 8, 68, 1, 69, 1, 69, 1, 69, 1, 69, 3, 69, 918, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 3, 71, 927, 8, 71, 1, 71, 3, 71, 930, 8, 71, 1, 72, 1, 72, 3, 72, 934, 8, 72, 1, 73, 1, 73, 5, 73, 938, 8, 73, 10, 73, 12, 73, 941, 9, 73, 1, 73, 1, 73, 1, 73, 5, 73, 946, 8, 73, 10, 73, 12, 73, 949, 9, 73, 1, 73, 5, 73, 952, 8, 73, 10, 73, 12, 73, 955, 9, 73, 1, 73, 5, 73, 958, 8, 73, 10, 73, 12, 73, 961, 9, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 3, 75, 970, 8, 75, 1, 76, 3, 76, 973, 8, 76, 1, 76, 1, 76, 1, 76, 1, 77, 3, 77, 979, 8, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 997, 8, 81, 10, 81, 12, 81, 1000, 9, 81, 1, 82, 1, 82, 5, 82, 1004, 8, 82, 10, 82, 12, 82, 1007, 9, 82, 1, 82, 1, 82, 1, 82, 5, 82, 1012, 8, 82, 10, 82, 12, 82, 1015, 9, 82, 1, 82, 1, 82, 5, 82, 1019, 8, 82, 10, 82, 12, 82, 1022, 9, 82, 5, 82, 1024, 8, 82, 10, 82, 12, 82, 1027, 9, 82, 1, 82, 1, 82, 1, 82, 0, 0, 83, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 0, 2, 2, 0, 9, 9, 34, 34, 1, 0, 22, 23, 1095, 0, 171, 1, 0, 0, 0, 2, 181, 1, 0, 0, 0, 4, 186, 1, 0, 0, 0, 6, 190, 1, 0, 0, 0, 8, 195, 1, 0, 0, 0, 10, 207, 1, 0, 0, 0, 12, 211, 1, 0, 0, 0, 14, 234, 1, 0, 0, 0, 16, 243, 1, 0, 0, 0, 18, 248, 1, 0, 0, 0, 20, 252, 1, 0, 0, 0, 22, 254, 1, 0, 0, 0, 24, 264, 1, 0, 0, 0, 26, 266, 1, 0, 0, 0, 28, 268, 1, 0, 0, 0, 30, 273, 1, 0, 0, 0, 32, 275, 1, 0, 0, 0, 34, 279, 1, 0, 0, 0, 36, 282, 1, 0, 0, 0, 38, 287, 1, 0, 0, 0, 40, 318, 1, 0, 0, 0, 42, 325, 1, 0, 0, 0, 44, 337, 1, 0, 0, 0, 46, 351, 1, 0, 0, 0, 48, 364, 1, 0, 0, 0, 50, 366, 1, 0, 0, 0, 52, 370, 1, 0, 0, 0, 54, 401, 1, 0, 0, 0, 56, 403, 1, 0, 0, 0, 58, 439, 1, 0, 0, 0, 60, 458, 1, 0, 0, 0, 62, 470, 1, 0, 0, 0, 64, 478, 1, 0, 0, 0, 66, 499, 1, 0, 0, 0, 68, 503, 1, 0, 0, 0, 70, 506, 1, 0, 0, 0, 72, 511, 1, 0, 0, 0, 74, 536, 1, 0, 0, 0, 76, 548, 1, 0, 0, 0, 78, 550, 1, 0, 0, 0, 80, 552, 1, 0, 0, 0, 82, 576, 1, 0, 0, 0, 84, 581, 1, 0, 0, 0, 86, 595, 1, 0, 0, 0, 88, 610, 1, 0, 0, 0, 90, 613, 1, 0, 0, 0, 92, 618, 1, 0, 0, 0, 94, 643, 1, 0, 0, 0, 96, 660, 1, 0, 0, 0, 98, 662, 1, 0, 0, 0, 100, 664, 1, 0, 0, 0, 102, 666, 1, 0, 0, 0, 104, 699, 1, 0, 0, 0, 106, 701, 1, 0, 0, 0, 108, 713, 1, 0, 0, 0, 110, 727, 1, 0, 0, 0, 112, 738, 1, 0, 0, 0, 114, 741, 1, 0, 0, 0, 116, 749, 1, 0, 0, 0, 118, 777, 1, 0, 0, 0, 120, 787, 1, 0, 0, 0, 122, 814, 1, 0, 0, 0, 124, 823, 1, 0, 0, 0, 126, 845, 1, 0, 0, 0, 128, 850, 1, 0, 0, 0, 130, 869, 1, 0, 0, 0, 132, 871, 1, 0, 0, 0, 134, 896, 1, 0, 0, 0, 136, 911, 1, 0, 0, 0, 138, 913, 1, 0, 0, 0, 140, 919, 1, 0, 0, 0, 142, 926, 1, 0, 0, 0, 144, 933, 1, 0, 0, 0, 146, 935, 1, 0, 0, 0, 148, 964, 1, 0, 0, 0, 150, 969, 1, 0, 0, 0, 152, 972, 1, 0, 0, 0, 154, 978, 1, 0, 0, 0, 156, 984, 1, 0, 0, 0, 158, 986, 1, 0, 0, 0, 160, 988, 1, 0, 0, 0, 162, 992, 1, 0, 0, 0, 164, 1001, 1, 0, 0, 0, 166, 170, 5, 38, 0, 0, 167, 170, 5, 32, 0, 0, 168, 170, 3, 2, 1, 0, 169, 166, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 169, 168, 1, 0, 0, 0, 170, 173, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 171, 172, 1, 0, 0, 0, 172, 174, 1, 0, 0, 0, 173, 171, 1, 0, 0, 0, 174, 175, 5, 0, 0, 1, 175, 1, 1, 0, 0, 0, 176, 182, 3, 12, 6, 0, 177, 182, 3, 34, 17, 0, 178, 182, 3, 68, 34, 0, 179, 182, 3, 88, 44, 0, 180, 182, 3, 112, 56, 0, 181, 176, 1, 0, 0, 0, 181, 177, 1, 0, 0, 0, 181, 178, 1, 0, 0, 0, 181, 179, 1, 0, 0, 0, 181, 180, 1, 0, 0, 0, 182, 3, 1, 0, 0, 0, 183, 184, 3, 6, 3, 0, 184, 185, 5, 38, 0, 0, 185, 187, 1, 0, 0, 0, 186, 183, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 186, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 5, 1, 0, 0, 0, 190, 191, 5, 1, 0, 0, 191, 193, 5, 34, 0, 0, 192, 194, 3, 8, 4, 0, 193, 192, 1, 0, 0, 0, 193, 194, 1, 0, 0, 0, 194, 7, 1, 0, 0, 0, 195, 196, 5, 2, 0, 0, 196, 201, 3, 10, 5, 0, 197, 198, 5, 3, 0, 0, 198, 200, 3, 10, 5, 0, 199, 197, 1, 0, 0, 0, 200, 203, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 204, 1, 0, 0, 0, 203, 201, 1, 0, 0, 0, 204, 205, 5, 4, 0, 0, 205, 9, 1, 0, 0, 0, 206, 208, 5, 34, 0, 0, 207, 206, 1, 0, 0, 0, 208, 209, 1, 0, 0, 0, 209, 207, 1, 0, 0, 0, 209, 210, 1, 0, 0, 0, 210, 11, 1, 0, 0, 0, 211, 215, 5, 5, 0, 0, 212, 214, 5, 38, 0, 0, 213, 212, 1, 0, 0, 0, 214, 217, 1, 0, 0, 0, 215, 213, 1, 0, 0, 0, 215, 216, 1, 0, 0, 0, 216, 218, 1, 0, 0, 0, 217, 215, 1, 0, 0, 0, 218, 222, 5, 6, 0, 0, 219, 221, 5, 38, 0, 0, 220, 219, 1, 0, 0, 0, 221, 224, 1, 0, 0, 0, 222, 220, 1, 0, 0, 0, 222, 223, 1, 0, 0, 0, 223, 228, 1, 0, 0, 0, 224, 222, 1, 0, 0, 0, 225, 227, 3, 14, 7, 0, 226, 225, 1, 0, 0, 0, 227, 230, 1, 0, 0, 0, 228, 226, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 231, 1, 0, 0, 0, 230, 228, 1, 0, 0, 0, 231, 232, 5, 7, 0, 0, 232, 13, 1, 0, 0, 0, 233, 235, 3, 16, 8, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 236, 1, 0, 0, 0, 236, 240, 3, 18, 9, 0, 237, 239, 5, 38, 0, 0, 238, 237, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 240, 241, 1, 0, 0, 0, 241, 15, 1, 0, 0, 0, 242, 240, 1, 0, 0, 0, 243, 244, 5, 34, 0, 0, 244, 17, 1, 0, 0, 0, 245, 246, 3, 20, 10, 0, 246, 247, 5, 8, 0, 0, 247, 249, 1, 0, 0, 0, 248, 245, 1, 0, 0, 0, 248, 249, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 251, 3, 22, 11, 0, 251, 19, 1, 0, 0, 0, 252, 253, 7, 0, 0, 0, 253, 21, 1, 0, 0, 0, 254, 259, 5, 34, 0, 0, 255, 256, 5, 8, 0, 0, 256, 258, 5, 34, 0, 0, 257, 255, 1, 0, 0, 0, 258, 261, 1, 0, 0, 0, 259, 257, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 23, 1, 0, 0, 0, 261, 259, 1, 0, 0, 0, 262, 265, 3, 26, 13, 0, 263, 265, 3, 28, 14, 0, 264, 262, 1, 0, 0, 0, 264, 263, 1, 0, 0, 0, 265, 25, 1, 0, 0, 0, 266, 267, 5, 34, 0, 0, 267, 27, 1, 0, 0, 0, 268, 271, 3, 30, 15, 0, 269, 270, 5, 10, 0, 0, 270, 272, 3, 32, 16, 0, 271, 269, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 29, 1, 0, 0, 0, 273, 274, 5, 34, 0, 0, 274, 31, 1, 0, 0, 0, 275, 276, 5, 34, 0, 0, 276, 33, 1, 0, 0, 0, 277, 280, 3, 36, 18, 0, 278, 280, 3, 38, 19, 0, 279, 277, 1, 0, 0, 0, 279, 278, 1, 0, 0, 0, 280, 35, 1, 0, 0, 0, 281, 283, 5, 33, 0, 0, 282, 281, 1, 0, 0, 0, 282, 283, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 5, 11, 0, 0, 285, 286, 3, 40, 20, 0, 286, 37, 1, 0, 0, 0, 287, 291, 5, 11, 0, 0, 288, 290, 5, 38, 0, 0, 289, 288, 1, 0, 0, 0, 290, 293, 1, 0, 0, 0, 291, 289, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 294, 1, 0, 0, 0, 293, 291, 1, 0, 0, 0, 294, 298, 5, 6, 0, 0, 295, 297, 5, 38, 0, 0, 296, 295, 1, 0, 0, 0, 297, 300, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 313, 1, 0, 0, 0, 300, 298, 1, 0, 0, 0, 301, 303, 5, 33, 0, 0, 302, 301, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 308, 3, 40, 20, 0, 305, 307, 5, 38, 0, 0, 306, 305, 1, 0, 0, 0, 307, 310, 1, 0, 0, 0, 308, 306, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 312, 1, 0, 0, 0, 310, 308, 1, 0, 0, 0, 311, 302, 1, 0, 0, 0, 312, 315, 1, 0, 0, 0, 313, 311, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 316, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, 316, 317, 5, 7, 0, 0, 317, 39, 1, 0, 0, 0, 318, 320, 5, 34, 0, 0, 319, 321, 3, 42, 21, 0, 320, 319, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 323, 1, 0, 0, 0, 322, 324, 3, 48, 24, 0, 323, 322, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 41, 1, 0, 0, 0, 325, 329, 5, 12, 0, 0, 326, 328, 5, 38, 0, 0, 327, 326, 1, 0, 0, 0, 328, 331, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 329, 330, 1, 0, 0, 0, 330, 333, 1, 0, 0, 0, 331, 329, 1, 0, 0, 0, 332, 334, 3, 44, 22, 0, 333, 332, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 336, 5, 13, 0, 0, 336, 43, 1, 0, 0, 0, 337, 348, 3, 46, 23, 0, 338, 342, 5, 3, 0, 0, 339, 341, 5, 38, 0, 0, 340, 339, 1, 0, 0, 0, 341, 344, 1, 0, 0, 0, 342, 340, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 345, 1, 0, 0, 0, 344, 342, 1, 0, 0, 0, 345, 347, 3, 46, 23, 0, 346, 338, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 45, 1, 0, 0, 0, 350, 348, 1, 0, 0, 0, 351, 353, 5, 34, 0, 0, 352, 354, 3, 48, 24, 0, 353, 352, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 358, 1, 0, 0, 0, 355, 357, 5, 38, 0, 0, 356, 355, 1, 0, 0, 0, 357, 360, 1, 0, 0, 0, 358, 356, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 47, 1, 0, 0, 0, 360, 358, 1, 0, 0, 0, 361, 365, 3, 50, 25, 0, 362, 365, 3, 54, 27, 0, 363, 365, 3, 64, 32, 0, 364, 361, 1, 0, 0, 0, 364, 362, 1, 0, 0, 0, 364, 363, 1, 0, 0, 0, 365, 49, 1, 0, 0, 0, 366, 368, 3, 24, 12, 0, 367, 369, 3, 52, 26, 0, 368, 367, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 369, 51, 1, 0, 0, 0, 370, 374, 5, 12, 0, 0, 371, 373, 5, 38, 0, 0, 372, 371, 1, 0, 0, 0, 373, 376, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 377, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 377, 388, 3, 48, 24, 0, 378, 382, 5, 3, 0, 0, 379, 381, 5, 38, 0, 0, 380, 379, 1, 0, 0, 0, 381, 384, 1, 0, 0, 0, 382, 380, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 385, 1, 0, 0, 0, 384, 382, 1, 0, 0, 0, 385, 387, 3, 48, 24, 0, 386, 378, 1, 0, 0, 0, 387, 390, 1, 0, 0, 0, 388, 386, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 394, 1, 0, 0, 0, 390, 388, 1, 0, 0, 0, 391, 393, 5, 38, 0, 0, 392, 391, 1, 0, 0, 0, 393, 396, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 397, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 398, 5, 13, 0, 0, 398, 53, 1, 0, 0, 0, 399, 402, 3, 56, 28, 0, 400, 402, 3, 58, 29, 0, 401, 399, 1, 0, 0, 0, 401, 400, 1, 0, 0, 0, 402, 55, 1, 0, 0, 0, 403, 407, 5, 14, 0, 0, 404, 406, 5, 38, 0, 0, 405, 404, 1, 0, 0, 0, 406, 409, 1, 0, 0, 0, 407, 405, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 410, 1, 0, 0, 0, 409, 407, 1, 0, 0, 0, 410, 414, 5, 6, 0, 0, 411, 413, 5, 38, 0, 0, 412, 411, 1, 0, 0, 0, 413, 416, 1, 0, 0, 0, 414, 412, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, 415, 417, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 417, 428, 5, 34, 0, 0, 418, 422, 5, 3, 0, 0, 419, 421, 5, 38, 0, 0, 420, 419, 1, 0, 0, 0, 421, 424, 1, 0, 0, 0, 422, 420, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 425, 1, 0, 0, 0, 424, 422, 1, 0, 0, 0, 425, 427, 5, 34, 0, 0, 426, 418, 1, 0, 0, 0, 427, 430, 1, 0, 0, 0, 428, 426, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 434, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 431, 433, 5, 38, 0, 0, 432, 431, 1, 0, 0, 0, 433, 436, 1, 0, 0, 0, 434, 432, 1, 0, 0, 0, 434, 435, 1, 0, 0, 0, 435, 437, 1, 0, 0, 0, 436, 434, 1, 0, 0, 0, 437, 438, 5, 7, 0, 0, 438, 57, 1, 0, 0, 0, 439, 443, 5, 15, 0, 0, 440, 442, 5, 38, 0, 0, 441, 440, 1, 0, 0, 0, 442, 445, 1, 0, 0, 0, 443, 441, 1, 0, 0, 0, 443, 444, 1, 0, 0, 0, 444, 446, 1, 0, 0, 0, 445, 443, 1, 0, 0, 0, 446, 450, 5, 6, 0, 0, 447, 449, 5, 38, 0, 0, 448, 447, 1, 0, 0, 0, 449, 452, 1, 0, 0, 0, 450, 448, 1, 0, 0, 0, 450, 451, 1, 0, 0, 0, 451, 454, 1, 0, 0, 0, 452, 450, 1, 0, 0, 0, 453, 455, 3, 60, 30, 0, 454, 453, 1, 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 456, 1, 0, 0, 0, 456, 457, 5, 7, 0, 0, 457, 59, 1, 0, 0, 0, 458, 467, 3, 62, 31, 0, 459, 461, 5, 38, 0, 0, 460, 459, 1, 0, 0, 0, 461, 462, 1, 0, 0, 0, 462, 460, 1, 0, 0, 0, 462, 463, 1, 0, 0, 0, 463, 464, 1, 0, 0, 0, 464, 466, 3, 62, 31, 0, 465, 460, 1, 0, 0, 0, 466, 469, 1, 0, 0, 0, 467, 465, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 61, 1, 0, 0, 0, 469, 467, 1, 0, 0, 0, 470, 471, 5, 34, 0, 0, 471, 475, 3, 48, 24, 0, 472, 474, 5, 38, 0, 0, 473, 472, 1, 0, 0, 0, 474, 477, 1, 0, 0, 0, 475, 473, 1, 0, 0, 0, 475, 476, 1, 0, 0, 0, 476, 63, 1, 0, 0, 0, 477, 475, 1, 0, 0, 0, 478, 493, 3, 66, 33, 0, 479, 481, 5, 38, 0, 0, 480, 479, 1, 0, 0, 0, 481, 484, 1, 0, 0, 0, 482, 480, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 485, 1, 0, 0, 0, 484, 482, 1, 0, 0, 0, 485, 489, 5, 16, 0, 0, 486, 488, 5, 38, 0, 0, 487, 486, 1, 0, 0, 0, 488, 491, 1, 0, 0, 0, 489, 487, 1, 0, 0, 0, 489, 490, 1, 0, 0, 0, 490, 492, 1, 0, 0, 0, 491, 489, 1, 0, 0, 0, 492, 494, 3, 66, 33, 0, 493, 482, 1, 0, 0, 0, 494, 495, 1, 0, 0, 0, 495, 493, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 65, 1, 0, 0, 0, 497, 500, 3, 50, 25, 0, 498, 500, 3, 54, 27, 0, 499, 497, 1, 0, 0, 0, 499, 498, 1, 0, 0, 0, 500, 67, 1, 0, 0, 0, 501, 504, 3, 70, 35, 0, 502, 504, 3, 72, 36, 0, 503, 501, 1, 0, 0, 0, 503, 502, 1, 0, 0, 0, 504, 69, 1, 0, 0, 0, 505, 507, 5, 33, 0, 0, 506, 505, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 508, 1, 0, 0, 0, 508, 509, 5, 17, 0, 0, 509, 510, 3, 74, 37, 0, 510, 71, 1, 0, 0, 0, 511, 515, 5, 17, 0, 0, 512, 514, 5, 38, 0, 0, 513, 512, 1, 0, 0, 0, 514, 517, 1, 0, 0, 0, 515, 513, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 518, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 518, 522, 5, 6, 0, 0, 519, 521, 5, 38, 0, 0, 520, 519, 1, 0, 0, 0, 521, 524, 1, 0, 0, 0, 522, 520, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 531, 1, 0, 0, 0, 524, 522, 1, 0, 0, 0, 525, 527, 5, 33, 0, 0, 526, 525, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 528, 1, 0, 0, 0, 528, 530, 3, 74, 37, 0, 529, 526, 1, 0, 0, 0, 530, 533, 1, 0, 0, 0, 531, 529, 1, 0, 0, 0, 531, 532, 1, 0, 0, 0, 532, 534, 1, 0, 0, 0, 533, 531, 1, 0, 0, 0, 534, 535, 5, 7, 0, 0, 535, 73, 1, 0, 0, 0, 536, 538, 5, 34, 0, 0, 537, 539, 3, 42, 21, 0, 538, 537, 1, 0, 0, 0, 538, 539, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 541, 3, 76, 38, 0, 541, 545, 3, 78, 39, 0, 542, 544, 5, 38, 0, 0, 543, 542, 1, 0, 0, 0, 544, 547, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 75, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 548, 549, 3, 80, 40, 0, 549, 77, 1, 0, 0, 0, 550, 551, 3, 80, 40, 0, 551, 79, 1, 0, 0, 0, 552, 570, 5, 2, 0, 0, 553, 555, 5, 38, 0, 0, 554, 553, 1, 0, 0, 0, 555, 558, 1, 0, 0, 0, 556, 554, 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 571, 1, 0, 0, 0, 558, 556, 1, 0, 0, 0, 559, 561, 3, 82, 41, 0, 560, 559, 1, 0, 0, 0, 560, 561, 1, 0, 0, 0, 561, 571, 1, 0, 0, 0, 562, 567, 3, 82, 41, 0, 563, 564, 5, 3, 0, 0, 564, 566, 3, 82, 41, 0, 565, 563, 1, 0, 0, 0, 566, 569, 1, 0, 0, 0, 567, 565, 1, 0, 0, 0, 567, 568, 1, 0, 0, 0, 568, 571, 1, 0, 0, 0, 569, 567, 1, 0, 0, 0, 570, 556, 1, 0, 0, 0, 570, 560, 1, 0, 0, 0, 570, 562, 1, 0, 0, 0, 571, 572, 1, 0, 0, 0, 572, 573, 5, 4, 0, 0, 573, 81, 1, 0, 0, 0, 574, 577, 3, 84, 42, 0, 575, 577, 3, 86, 43, 0, 576, 574, 1, 0, 0, 0, 576, 575, 1, 0, 0, 0, 577, 83, 1, 0, 0, 0, 578, 580, 5, 38, 0, 0, 579, 578, 1, 0, 0, 0, 580, 583, 1, 0, 0, 0, 581, 579, 1, 0, 0, 0, 581, 582, 1, 0, 0, 0, 582, 584, 1, 0, 0, 0, 583, 581, 1, 0, 0, 0, 584, 585, 5, 34, 0, 0, 585, 589, 3, 48, 24, 0, 586, 588, 5, 38, 0, 0, 587, 586, 1, 0, 0, 0, 588, 591, 1, 0, 0, 0, 589, 587, 1, 0, 0, 0, 589, 590, 1, 0, 0, 0, 590, 85, 1, 0, 0, 0, 591, 589, 1, 0, 0, 0, 592, 594, 5, 38, 0, 0, 593, 592, 1, 0, 0, 0, 594, 597, 1, 0, 0, 0, 595, 593, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 598, 1, 0, 0, 0, 597, 595, 1, 0, 0, 0, 598, 599, 5, 18, 0, 0, 599, 600, 5, 34, 0, 0, 600, 601, 5, 19, 0, 0, 601, 605, 3, 48, 24, 0, 602, 604, 5, 38, 0, 0, 603, 602, 1, 0, 0, 0, 604, 607, 1, 0, 0, 0, 605, 603, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 87, 1, 0, 0, 0, 607, 605, 1, 0, 0, 0, 608, 611, 3, 90, 45, 0, 609, 611, 3, 92, 46, 0, 610, 608, 1, 0, 0, 0, 610, 609, 1, 0, 0, 0, 611, 89, 1, 0, 0, 0, 612, 614, 5, 33, 0, 0, 613, 612, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 616, 5, 20, 0, 0, 616, 617, 3, 94, 47, 0, 617, 91, 1, 0, 0, 0, 618, 622, 5, 20, 0, 0, 619, 621, 5, 38, 0, 0, 620, 619, 1, 0, 0, 0, 621, 624, 1, 0, 0, 0, 622, 620, 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 625, 1, 0, 0, 0, 624, 622, 1, 0, 0, 0, 625, 629, 5, 6, 0, 0, 626, 628, 5, 38, 0, 0, 627, 626, 1, 0, 0, 0, 628, 631, 1, 0, 0, 0, 629, 627, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 638, 1, 0, 0, 0, 631, 629, 1, 0, 0, 0, 632, 634, 5, 33, 0, 0, 633, 632, 1, 0, 0, 0, 633, 634, 1, 0, 0, 0, 634, 635, 1, 0, 0, 0, 635, 637, 3, 94, 47, 0, 636, 633, 1, 0, 0, 0, 637, 640, 1, 0, 0, 0, 638, 636, 1, 0, 0, 0, 638, 639, 1, 0, 0, 0, 639, 641, 1, 0, 0, 0, 640, 638, 1, 0, 0, 0, 641, 642, 5, 7, 0, 0, 642, 93, 1, 0, 0, 0, 643, 644, 5, 34, 0, 0, 644, 645, 3, 48, 24, 0, 645, 646, 5, 21, 0, 0, 646, 650, 3, 96, 48, 0, 647, 649, 5, 38, 0, 0, 648, 647, 1, 0, 0, 0, 649, 652, 1, 0, 0, 0, 650, 648, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 95, 1, 0, 0, 0, 652, 650, 1, 0, 0, 0, 653, 661, 3, 100, 50, 0, 654, 661, 3, 98, 49, 0, 655, 661, 5, 35, 0, 0, 656, 661, 5, 36, 0, 0, 657, 661, 5, 37, 0, 0, 658, 661, 3, 102, 51, 0, 659, 661, 3, 106, 53, 0, 660, 653, 1, 0, 0, 0, 660, 654, 1, 0, 0, 0, 660, 655, 1, 0, 0, 0, 660, 656, 1, 0, 0, 0, 660, 657, 1, 0, 0, 0, 660, 658, 1, 0, 0, 0, 660, 659, 1, 0, 0, 0, 661, 97, 1, 0, 0, 0, 662, 663, 7, 1, 0, 0, 663, 99, 1, 0, 0, 0, 664, 665, 5, 24, 0, 0, 665, 101, 1, 0, 0, 0, 666, 670, 5, 18, 0, 0, 667, 669, 5, 38, 0, 0, 668, 667, 1, 0, 0, 0, 669, 672, 1, 0, 0, 0, 670, 668, 1, 0, 0, 0, 670, 671, 1, 0, 0, 0, 671, 674, 1, 0, 0, 0, 672, 670, 1, 0, 0, 0, 673, 675, 3, 104, 52, 0, 674, 673, 1, 0, 0, 0, 674, 675, 1, 0, 0, 0, 675, 676, 1, 0, 0, 0, 676, 677, 5, 19, 0, 0, 677, 103, 1, 0, 0, 0, 678, 700, 3, 96, 48, 0, 679, 696, 3, 96, 48, 0, 680, 684, 5, 3, 0, 0, 681, 683, 5, 38, 0, 0, 682, 681, 1, 0, 0, 0, 683, 686, 1, 0, 0, 0, 684, 682, 1, 0, 0, 0, 684, 685, 1, 0, 0, 0, 685, 687, 1, 0, 0, 0, 686, 684, 1, 0, 0, 0, 687, 691, 3, 96, 48, 0, 688, 690, 5, 38, 0, 0, 689, 688, 1, 0, 0, 0, 690, 693, 1, 0, 0, 0, 691, 689, 1, 0, 0, 0, 691, 692, 1, 0, 0, 0, 692, 695, 1, 0, 0, 0, 693, 691, 1, 0, 0, 0, 694, 680, 1, 0, 0, 0, 695, 698, 1, 0, 0, 0, 696, 694, 1, 0, 0, 0, 696, 697, 1, 0, 0, 0, 697, 700, 1, 0, 0, 0, 698, 696, 1, 0, 0, 0, 699, 678, 1, 0, 0, 0, 699, 679, 1, 0, 0, 0, 700, 105, 1, 0, 0, 0, 701, 705, 5, 6, 0, 0, 702, 704, 5, 38, 0, 0, 703, 702, 1, 0, 0, 0, 704, 707, 1, 0, 0, 0, 705, 703, 1, 0, 0, 0, 705, 706, 1, 0, 0, 0, 706, 709, 1, 0, 0, 0, 707, 705, 1, 0, 0, 0, 708, 710, 3, 108, 54, 0, 709, 708, 1, 0, 0, 0, 709, 710, 1, 0, 0, 0, 710, 711, 1, 0, 0, 0, 711, 712, 5, 7, 0, 0, 712, 107, 1, 0, 0, 0, 713, 724, 3, 110, 55, 0, 714, 718, 5, 3, 0, 0, 715, 717, 5, 38, 0, 0, 716, 715, 1, 0, 0, 0, 717, 720, 1, 0, 0, 0, 718, 716, 1, 0, 0, 0, 718, 719, 1, 0, 0, 0, 719, 721, 1, 0, 0, 0, 720, 718, 1, 0, 0, 0, 721, 723, 3, 110, 55, 0, 722, 714, 1, 0, 0, 0, 723, 726, 1, 0, 0, 0, 724, 722, 1, 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 109, 1, 0, 0, 0, 726, 724, 1, 0, 0, 0, 727, 728, 5, 34, 0, 0, 728, 729, 5, 25, 0, 0, 729, 733, 3, 96, 48, 0, 730, 732, 5, 38, 0, 0, 731, 730, 1, 0, 0, 0, 732, 735, 1, 0, 0, 0, 733, 731, 1, 0, 0, 0, 733, 734, 1, 0, 0, 0, 734, 111, 1, 0, 0, 0, 735, 733, 1, 0, 0, 0, 736, 739, 3, 114, 57, 0, 737, 739, 3, 116, 58, 0, 738, 736, 1, 0, 0, 0, 738, 737, 1, 0, 0, 0, 739, 113, 1, 0, 0, 0, 740, 742, 3, 4, 2, 0, 741, 740, 1, 0, 0, 0, 741, 742, 1, 0, 0, 0, 742, 744, 1, 0, 0, 0, 743, 745, 5, 33, 0, 0, 744, 743, 1, 0, 0, 0, 744, 745, 1, 0, 0, 0, 745, 746, 1, 0, 0, 0, 746, 747, 5, 26, 0, 0, 747, 748, 3, 118, 59, 0, 748, 115, 1, 0, 0, 0, 749, 753, 5, 26, 0, 0, 750, 752, 5, 38, 0, 0, 751, 750, 1, 0, 0, 0, 752, 755, 1, 0, 0, 0, 753, 751, 1, 0, 0, 0, 753, 754, 1, 0, 0, 0, 754, 756, 1, 0, 0, 0, 755, 753, 1, 0, 0, 0, 756, 760, 5, 6, 0, 0, 757, 759, 5, 38, 0, 0, 758, 757, 1, 0, 0, 0, 759, 762, 1, 0, 0, 0, 760, 758, 1, 0, 0, 0, 760, 761, 1, 0, 0, 0, 761, 772, 1, 0, 0, 0, 762, 760, 1, 0, 0, 0, 763, 765, 3, 4, 2, 0, 764, 763, 1, 0, 0, 0, 764, 765, 1, 0, 0, 0, 765, 767, 1, 0, 0, 0, 766, 768, 5, 33, 0, 0, 767, 766, 1, 0, 0, 0, 767, 768, 1, 0, 0, 0, 768, 769, 1, 0, 0, 0, 769, 771, 3, 118, 59, 0, 770, 764, 1, 0, 0, 0, 771, 774, 1, 0, 0, 0, 772, 770, 1, 0, 0, 0, 772, 773, 1, 0, 0, 0, 773, 775, 1, 0, 0, 0, 774, 772, 1, 0, 0, 0, 775, 776, 5, 7, 0, 0, 776, 117, 1, 0, 0, 0, 777, 779, 3, 74, 37, 0, 778, 780, 3, 120, 60, 0, 779, 778, 1, 0, 0, 0, 779, 780, 1, 0, 0, 0, 780, 784, 1, 0, 0, 0, 781, 783, 5, 38, 0, 0, 782, 781, 1, 0, 0, 0, 783, 786, 1, 0, 0, 0, 784, 782, 1, 0, 0, 0, 784, 785, 1, 0, 0, 0, 785, 119, 1, 0, 0, 0, 786, 784, 1, 0, 0, 0, 787, 791, 5, 6, 0, 0, 788, 790, 5, 38, 0, 0, 789, 788, 1, 0, 0, 0, 790, 793, 1, 0, 0, 0, 791, 789, 1, 0, 0, 0, 791, 792, 1, 0, 0, 0, 792, 801, 1, 0, 0, 0, 793, 791, 1, 0, 0, 0, 794, 798, 3, 122, 61, 0, 795, 797, 5, 38, 0, 0, 796, 795, 1, 0, 0, 0, 797, 800, 1, 0, 0, 0, 798, 796, 1, 0, 0, 0, 798, 799, 1, 0, 0, 0, 799, 802, 1, 0, 0, 0, 800, 798, 1, 0, 0, 0, 801, 794, 1, 0, 0, 0, 801, 802, 1, 0, 0, 0, 802, 810, 1, 0, 0, 0, 803, 807, 3, 132, 66, 0, 804, 806, 5, 38, 0, 0, 805, 804, 1, 0, 0, 0, 806, 809, 1, 0, 0, 0, 807, 805, 1, 0, 0, 0, 807, 808, 1, 0, 0, 0, 808, 811, 1, 0, 0, 0, 809, 807, 1, 0, 0, 0, 810, 803, 1, 0, 0, 0, 810, 811, 1, 0, 0, 0, 811, 812, 1, 0, 0, 0, 812, 813, 5, 7, 0, 0, 813, 121, 1, 0, 0, 0, 814, 818, 5, 27, 0, 0, 815, 817, 5, 38, 0, 0, 816, 815, 1, 0, 0, 0, 817, 820, 1, 0, 0, 0, 818, 816, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 821, 1, 0, 0, 0, 820, 818, 1, 0, 0, 0, 821, 822, 3, 124, 62, 0, 822, 123, 1, 0, 0, 0, 823, 827, 5, 6, 0, 0, 824, 826, 5, 38, 0, 0, 825, 824, 1, 0, 0, 0, 826, 829, 1, 0, 0, 0, 827, 825, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 839, 1, 0, 0, 0, 829, 827, 1, 0, 0, 0, 830, 834, 3, 126, 63, 0, 831, 833, 5, 38, 0, 0, 832, 831, 1, 0, 0, 0, 833, 836, 1, 0, 0, 0, 834, 832, 1, 0, 0, 0, 834, 835, 1, 0, 0, 0, 835, 838, 1, 0, 0, 0, 836, 834, 1, 0, 0, 0, 837, 830, 1, 0, 0, 0, 838, 841, 1, 0, 0, 0, 839, 837, 1, 0, 0, 0, 839, 840, 1, 0, 0, 0, 840, 842, 1, 0, 0, 0, 841, 839, 1, 0, 0, 0, 842, 843, 5, 7, 0, 0, 843, 125, 1, 0, 0, 0, 844, 846, 3, 4, 2, 0, 845, 844, 1, 0, 0, 0, 845, 846, 1, 0, 0, 0, 846, 847, 1, 0, 0, 0, 847, 848, 5, 34, 0, 0, 848, 849, 3, 128, 64, 0, 849, 127, 1, 0, 0, 0, 850, 854, 3, 24, 12, 0, 851, 853, 5, 38, 0, 0, 852, 851, 1, 0, 0, 0, 853, 856, 1, 0, 0, 0, 854, 852, 1, 0, 0, 0, 854, 855, 1, 0, 0, 0, 855, 858, 1, 0, 0, 0, 856, 854, 1, 0, 0, 0, 857, 859, 3, 52, 26, 0, 858, 857, 1, 0, 0, 0, 858, 859, 1, 0, 0, 0, 859, 863, 1, 0, 0, 0, 860, 862, 5, 38, 0, 0, 861, 860, 1, 0, 0, 0, 862, 865, 1, 0, 0, 0, 863, 861, 1, 0, 0, 0, 863, 864, 1, 0, 0, 0, 864, 867, 1, 0, 0, 0, 865, 863, 1, 0, 0, 0, 866, 868, 3, 130, 65, 0, 867, 866, 1, 0, 0, 0, 867, 868, 1, 0, 0, 0, 868, 129, 1, 0, 0, 0, 869, 870, 3, 124, 62, 0, 870, 131, 1, 0, 0, 0, 871, 875, 5, 28, 0, 0, 872, 874, 5, 38, 0, 0, 873, 872, 1, 0, 0, 0, 874, 877, 1, 0, 0, 0, 875, 873, 1, 0, 0, 0, 875, 876, 1, 0, 0, 0, 876, 878, 1, 0, 0, 0, 877, 875, 1, 0, 0, 0, 878, 882, 5, 6, 0, 0, 879, 881, 5, 38, 0, 0, 880, 879, 1, 0, 0, 0, 881, 884, 1, 0, 0, 0, 882, 880, 1, 0, 0, 0, 882, 883, 1, 0, 0, 0, 883, 886, 1, 0, 0, 0, 884, 882, 1, 0, 0, 0, 885, 887, 3, 134, 67, 0, 886, 885, 1, 0, 0, 0, 886, 887, 1, 0, 0, 0, 887, 891, 1, 0, 0, 0, 888, 890, 5, 38, 0, 0, 889, 888, 1, 0, 0, 0, 890, 893, 1, 0, 0, 0, 891, 889, 1, 0, 0, 0, 891, 892, 1, 0, 0, 0, 892, 894, 1, 0, 0, 0, 893, 891, 1, 0, 0, 0, 894, 895, 5, 7, 0, 0, 895, 133, 1, 0, 0, 0, 896, 906, 3, 136, 68, 0, 897, 899, 5, 38, 0, 0, 898, 897, 1, 0, 0, 0, 899, 902, 1, 0, 0, 0, 900, 898, 1, 0, 0, 0, 900, 901, 1, 0, 0, 0, 901, 903, 1, 0, 0, 0, 902, 900, 1, 0, 0, 0, 903, 905, 3, 136, 68, 0, 904, 900, 1, 0, 0, 0, 905, 908, 1, 0, 0, 0, 906, 904, 1, 0, 0, 0, 906, 907, 1, 0, 0, 0, 907, 135, 1, 0, 0, 0, 908, 906, 1, 0, 0, 0, 909, 912, 3, 138, 69, 0, 910, 912, 3, 140, 70, 0, 911, 909, 1, 0, 0, 0, 911, 910, 1, 0, 0, 0, 912, 137, 1, 0, 0, 0, 913, 914, 3, 142, 71, 0, 914, 917, 5, 29, 0, 0, 915, 918, 3, 144, 72, 0, 916, 918, 3, 164, 82, 0, 917, 915, 1, 0, 0, 0, 917, 916, 1, 0, 0, 0, 918, 139, 1, 0, 0, 0, 919, 920, 3, 152, 76, 0, 920, 921, 5, 30, 0, 0, 921, 922, 3, 152, 76, 0, 922, 141, 1, 0, 0, 0, 923, 927, 3, 150, 75, 0, 924, 927, 3, 148, 74, 0, 925, 927, 3, 96, 48, 0, 926, 923, 1, 0, 0, 0, 926, 924, 1, 0, 0, 0, 926, 925, 1, 0, 0, 0, 927, 929, 1, 0, 0, 0, 928, 930, 3, 162, 81, 0, 929, 928, 1, 0, 0, 0, 929, 930, 1, 0, 0, 0, 930, 143, 1, 0, 0, 0, 931, 934, 3, 150, 75, 0, 932, 934, 3, 146, 73, 0, 933, 931, 1, 0, 0, 0, 933, 932, 1, 0, 0, 0, 934, 145, 1, 0, 0, 0, 935, 939, 5, 2, 0, 0, 936, 938, 5, 38, 0, 0, 937, 936, 1, 0, 0, 0, 938, 941, 1, 0, 0, 0, 939, 937, 1, 0, 0, 0, 939, 940, 1, 0, 0, 0, 940, 942, 1, 0, 0, 0, 941, 939, 1, 0, 0, 0, 942, 953, 3, 136, 68, 0, 943, 947, 5, 3, 0, 0, 944, 946, 5, 38, 0, 0, 945, 944, 1, 0, 0, 0, 946, 949, 1, 0, 0, 0, 947, 945, 1, 0, 0, 0, 947, 948, 1, 0, 0, 0, 948, 950, 1, 0, 0, 0, 949, 947, 1, 0, 0, 0, 950, 952, 3, 136, 68, 0, 951, 943, 1, 0, 0, 0, 952, 955, 1, 0, 0, 0, 953, 951, 1, 0, 0, 0, 953, 954, 1, 0, 0, 0, 954, 959, 1, 0, 0, 0, 955, 953, 1, 0, 0, 0, 956, 958, 5, 38, 0, 0, 957, 956, 1, 0, 0, 0, 958, 961, 1, 0, 0, 0, 959, 957, 1, 0, 0, 0, 959, 960, 1, 0, 0, 0, 960, 962, 1, 0, 0, 0, 961, 959, 1, 0, 0, 0, 962, 963, 5, 4, 0, 0, 963, 147, 1, 0, 0, 0, 964, 965, 5, 31, 0, 0, 965, 966, 3, 24, 12, 0, 966, 149, 1, 0, 0, 0, 967, 970, 3, 152, 76, 0, 968, 970, 3, 154, 77, 0, 969, 967, 1, 0, 0, 0, 969, 968, 1, 0, 0, 0, 970, 151, 1, 0, 0, 0, 971, 973, 3, 156, 78, 0, 972, 971, 1, 0, 0, 0, 972, 973, 1, 0, 0, 0, 973, 974, 1, 0, 0, 0, 974, 975, 5, 25, 0, 0, 975, 976, 3, 158, 79, 0, 976, 153, 1, 0, 0, 0, 977, 979, 3, 156, 78, 0, 978, 977, 1, 0, 0, 0, 978, 979, 1, 0, 0, 0, 979, 980, 1, 0, 0, 0, 980, 981, 5, 25, 0, 0, 981, 982, 3, 158, 79, 0, 982, 983, 3, 160, 80, 0, 983, 155, 1, 0, 0, 0, 984, 985, 5, 34, 0, 0, 985, 157, 1, 0, 0, 0, 986, 987, 5, 34, 0, 0, 987, 159, 1, 0, 0, 0, 988, 989, 5, 18, 0, 0, 989, 990, 5, 35, 0, 0, 990, 991, 5, 19, 0, 0, 991, 161, 1, 0, 0, 0, 992, 993, 5, 10, 0, 0, 993, 998, 5, 34, 0, 0, 994, 995, 5, 10, 0, 0, 995, 997, 5, 34, 0, 0, 996, 994, 1, 0, 0, 0, 997, 1000, 1, 0, 0, 0, 998, 996, 1, 0, 0, 0, 998, 999, 1, 0, 0, 0, 999, 163, 1, 0, 0, 0, 1000, 998, 1, 0, 0, 0, 1001, 1005, 5, 18, 0, 0, 1002, 1004, 5, 38, 0, 0, 1003, 1002, 1, 0, 0, 0, 1004, 1007, 1, 0, 0, 0, 1005, 1003, 1, 0, 0, 0, 1005, 1006, 1, 0, 0, 0, 1006, 1008, 1, 0, 0, 0, 1007, 1005, 1, 0, 0, 0, 1008, 1025, 3, 144, 72, 0, 1009, 1013, 5, 3, 0, 0, 1010, 1012, 5, 38, 0, 0, 1011, 1010, 1, 0, 0, 0, 1012, 1015, 1, 0, 0, 0, 1013, 1011, 1, 0, 0, 0, 1013, 1014, 1, 0, 0, 0, 1014, 1016, 1, 0, 0, 0, 1015, 1013, 1, 0, 0, 0, 1016, 1020, 3, 144, 72, 0, 1017, 1019, 5, 38, 0, 0, 1018, 1017, 1, 0, 0, 0, 1019, 1022, 1, 0, 0, 0, 1020, 1018, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 1024, 1, 0, 0, 0, 1022, 1020, 1, 0, 0, 0, 1023, 1009, 1, 0, 0, 0, 1024, 1027, 1, 0, 0, 0, 1025, 1023, 1, 0, 0, 0, 1025, 1026, 1, 0, 0, 0, 1026, 1028, 1, 0, 0, 0, 1027, 1025, 1, 0, 0, 0, 1028, 1029, 5, 19, 0, 0, 1029, 165, 1, 0, 0, 0, 136, 169, 171, 181, 188, 193, 201, 209, 215, 222, 228, 234, 240, 248, 259, 264, 271, 279, 282, 291, 298, 302, 308, 313, 320, 323, 329, 333, 342, 348, 353, 358, 364, 368, 374, 382, 388, 394, 401, 407, 414, 422, 428, 434, 443, 450, 454, 462, 467, 475, 482, 489, 495, 499, 503, 506, 515, 522, 526, 531, 538, 545, 556, 560, 567, 570, 576, 581, 589, 595, 605, 610, 613, 622, 629, 633, 638, 650, 660, 670, 674, 684, 691, 696, 699, 705, 709, 718, 724, 733, 738, 741, 744, 753, 760, 764, 767, 772, 779, 784, 791, 798, 801, 807, 810, 818, 827, 834, 839, 845, 854, 858, 863, 867, 875, 882, 886, 891, 900, 906, 911, 917, 926, 929, 933, 939, 947, 953, 959, 969, 972, 978, 998, 1005, 1013, 1020, 1025] \ No newline at end of file +[4, 1, 39, 1050, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 1, 0, 1, 0, 1, 0, 5, 0, 174, 8, 0, 10, 0, 12, 0, 177, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 186, 8, 1, 1, 2, 1, 2, 1, 2, 4, 2, 191, 8, 2, 11, 2, 12, 2, 192, 1, 3, 1, 3, 1, 3, 3, 3, 198, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 204, 8, 4, 10, 4, 12, 4, 207, 9, 4, 1, 4, 1, 4, 1, 5, 4, 5, 212, 8, 5, 11, 5, 12, 5, 213, 1, 6, 1, 6, 5, 6, 218, 8, 6, 10, 6, 12, 6, 221, 9, 6, 1, 6, 1, 6, 5, 6, 225, 8, 6, 10, 6, 12, 6, 228, 9, 6, 1, 6, 5, 6, 231, 8, 6, 10, 6, 12, 6, 234, 9, 6, 1, 6, 1, 6, 1, 7, 3, 7, 239, 8, 7, 1, 7, 1, 7, 5, 7, 243, 8, 7, 10, 7, 12, 7, 246, 9, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 3, 9, 253, 8, 9, 1, 9, 1, 9, 1, 10, 1, 10, 3, 10, 259, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 265, 8, 11, 10, 11, 12, 11, 268, 9, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 5, 13, 275, 8, 13, 10, 13, 12, 13, 278, 9, 13, 1, 14, 1, 14, 3, 14, 282, 8, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 3, 16, 289, 8, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 3, 19, 297, 8, 19, 1, 20, 3, 20, 300, 8, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 5, 21, 307, 8, 21, 10, 21, 12, 21, 310, 9, 21, 1, 21, 1, 21, 5, 21, 314, 8, 21, 10, 21, 12, 21, 317, 9, 21, 1, 21, 3, 21, 320, 8, 21, 1, 21, 1, 21, 5, 21, 324, 8, 21, 10, 21, 12, 21, 327, 9, 21, 5, 21, 329, 8, 21, 10, 21, 12, 21, 332, 9, 21, 1, 21, 1, 21, 1, 22, 1, 22, 3, 22, 338, 8, 22, 1, 22, 3, 22, 341, 8, 22, 1, 23, 1, 23, 5, 23, 345, 8, 23, 10, 23, 12, 23, 348, 9, 23, 1, 23, 3, 23, 351, 8, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 5, 24, 358, 8, 24, 10, 24, 12, 24, 361, 9, 24, 1, 24, 5, 24, 364, 8, 24, 10, 24, 12, 24, 367, 9, 24, 1, 25, 1, 25, 3, 25, 371, 8, 25, 1, 25, 5, 25, 374, 8, 25, 10, 25, 12, 25, 377, 9, 25, 1, 26, 1, 26, 1, 26, 3, 26, 382, 8, 26, 1, 27, 1, 27, 3, 27, 386, 8, 27, 1, 28, 1, 28, 5, 28, 390, 8, 28, 10, 28, 12, 28, 393, 9, 28, 1, 28, 1, 28, 1, 28, 5, 28, 398, 8, 28, 10, 28, 12, 28, 401, 9, 28, 1, 28, 5, 28, 404, 8, 28, 10, 28, 12, 28, 407, 9, 28, 1, 28, 5, 28, 410, 8, 28, 10, 28, 12, 28, 413, 9, 28, 1, 28, 1, 28, 1, 29, 1, 29, 3, 29, 419, 8, 29, 1, 30, 1, 30, 5, 30, 423, 8, 30, 10, 30, 12, 30, 426, 9, 30, 1, 30, 1, 30, 5, 30, 430, 8, 30, 10, 30, 12, 30, 433, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 438, 8, 30, 10, 30, 12, 30, 441, 9, 30, 1, 30, 5, 30, 444, 8, 30, 10, 30, 12, 30, 447, 9, 30, 1, 30, 5, 30, 450, 8, 30, 10, 30, 12, 30, 453, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 5, 31, 459, 8, 31, 10, 31, 12, 31, 462, 9, 31, 1, 31, 1, 31, 5, 31, 466, 8, 31, 10, 31, 12, 31, 469, 9, 31, 1, 31, 3, 31, 472, 8, 31, 1, 31, 1, 31, 1, 32, 1, 32, 4, 32, 478, 8, 32, 11, 32, 12, 32, 479, 1, 32, 5, 32, 483, 8, 32, 10, 32, 12, 32, 486, 9, 32, 1, 33, 1, 33, 1, 33, 5, 33, 491, 8, 33, 10, 33, 12, 33, 494, 9, 33, 1, 34, 1, 34, 5, 34, 498, 8, 34, 10, 34, 12, 34, 501, 9, 34, 1, 34, 1, 34, 5, 34, 505, 8, 34, 10, 34, 12, 34, 508, 9, 34, 1, 34, 4, 34, 511, 8, 34, 11, 34, 12, 34, 512, 1, 35, 1, 35, 3, 35, 517, 8, 35, 1, 36, 1, 36, 3, 36, 521, 8, 36, 1, 37, 3, 37, 524, 8, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 5, 38, 531, 8, 38, 10, 38, 12, 38, 534, 9, 38, 1, 38, 1, 38, 5, 38, 538, 8, 38, 10, 38, 12, 38, 541, 9, 38, 1, 38, 3, 38, 544, 8, 38, 1, 38, 5, 38, 547, 8, 38, 10, 38, 12, 38, 550, 9, 38, 1, 38, 1, 38, 1, 39, 1, 39, 3, 39, 556, 8, 39, 1, 39, 1, 39, 1, 39, 5, 39, 561, 8, 39, 10, 39, 12, 39, 564, 9, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 5, 42, 572, 8, 42, 10, 42, 12, 42, 575, 9, 42, 1, 42, 3, 42, 578, 8, 42, 1, 42, 1, 42, 1, 42, 5, 42, 583, 8, 42, 10, 42, 12, 42, 586, 9, 42, 3, 42, 588, 8, 42, 1, 42, 1, 42, 1, 43, 1, 43, 3, 43, 594, 8, 43, 1, 44, 5, 44, 597, 8, 44, 10, 44, 12, 44, 600, 9, 44, 1, 44, 1, 44, 1, 44, 5, 44, 605, 8, 44, 10, 44, 12, 44, 608, 9, 44, 1, 45, 5, 45, 611, 8, 45, 10, 45, 12, 45, 614, 9, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 621, 8, 45, 10, 45, 12, 45, 624, 9, 45, 1, 46, 1, 46, 3, 46, 628, 8, 46, 1, 47, 3, 47, 631, 8, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 5, 48, 638, 8, 48, 10, 48, 12, 48, 641, 9, 48, 1, 48, 1, 48, 5, 48, 645, 8, 48, 10, 48, 12, 48, 648, 9, 48, 1, 48, 3, 48, 651, 8, 48, 1, 48, 5, 48, 654, 8, 48, 10, 48, 12, 48, 657, 9, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 5, 49, 666, 8, 49, 10, 49, 12, 49, 669, 9, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 678, 8, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 5, 53, 686, 8, 53, 10, 53, 12, 53, 689, 9, 53, 1, 53, 3, 53, 692, 8, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 5, 54, 700, 8, 54, 10, 54, 12, 54, 703, 9, 54, 1, 54, 1, 54, 5, 54, 707, 8, 54, 10, 54, 12, 54, 710, 9, 54, 5, 54, 712, 8, 54, 10, 54, 12, 54, 715, 9, 54, 3, 54, 717, 8, 54, 1, 55, 1, 55, 5, 55, 721, 8, 55, 10, 55, 12, 55, 724, 9, 55, 1, 55, 3, 55, 727, 8, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 5, 56, 734, 8, 56, 10, 56, 12, 56, 737, 9, 56, 1, 56, 5, 56, 740, 8, 56, 10, 56, 12, 56, 743, 9, 56, 1, 57, 1, 57, 1, 57, 1, 57, 5, 57, 749, 8, 57, 10, 57, 12, 57, 752, 9, 57, 1, 58, 1, 58, 3, 58, 756, 8, 58, 1, 59, 3, 59, 759, 8, 59, 1, 59, 3, 59, 762, 8, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 5, 60, 769, 8, 60, 10, 60, 12, 60, 772, 9, 60, 1, 60, 1, 60, 5, 60, 776, 8, 60, 10, 60, 12, 60, 779, 9, 60, 1, 60, 3, 60, 782, 8, 60, 1, 60, 3, 60, 785, 8, 60, 1, 60, 5, 60, 788, 8, 60, 10, 60, 12, 60, 791, 9, 60, 1, 60, 1, 60, 1, 61, 1, 61, 3, 61, 797, 8, 61, 1, 61, 5, 61, 800, 8, 61, 10, 61, 12, 61, 803, 9, 61, 1, 62, 1, 62, 5, 62, 807, 8, 62, 10, 62, 12, 62, 810, 9, 62, 1, 62, 1, 62, 5, 62, 814, 8, 62, 10, 62, 12, 62, 817, 9, 62, 3, 62, 819, 8, 62, 1, 62, 1, 62, 5, 62, 823, 8, 62, 10, 62, 12, 62, 826, 9, 62, 3, 62, 828, 8, 62, 1, 62, 1, 62, 1, 63, 1, 63, 5, 63, 834, 8, 63, 10, 63, 12, 63, 837, 9, 63, 1, 63, 1, 63, 1, 64, 1, 64, 5, 64, 843, 8, 64, 10, 64, 12, 64, 846, 9, 64, 1, 64, 1, 64, 5, 64, 850, 8, 64, 10, 64, 12, 64, 853, 9, 64, 5, 64, 855, 8, 64, 10, 64, 12, 64, 858, 9, 64, 1, 64, 1, 64, 1, 65, 3, 65, 863, 8, 65, 1, 65, 3, 65, 866, 8, 65, 1, 65, 1, 65, 1, 66, 1, 66, 5, 66, 872, 8, 66, 10, 66, 12, 66, 875, 9, 66, 1, 66, 3, 66, 878, 8, 66, 1, 66, 5, 66, 881, 8, 66, 10, 66, 12, 66, 884, 9, 66, 1, 66, 3, 66, 887, 8, 66, 1, 67, 1, 67, 1, 68, 1, 68, 5, 68, 893, 8, 68, 10, 68, 12, 68, 896, 9, 68, 1, 68, 1, 68, 5, 68, 900, 8, 68, 10, 68, 12, 68, 903, 9, 68, 1, 68, 3, 68, 906, 8, 68, 1, 68, 5, 68, 909, 8, 68, 10, 68, 12, 68, 912, 9, 68, 1, 68, 1, 68, 1, 69, 1, 69, 5, 69, 918, 8, 69, 10, 69, 12, 69, 921, 9, 69, 1, 69, 5, 69, 924, 8, 69, 10, 69, 12, 69, 927, 9, 69, 1, 70, 1, 70, 3, 70, 931, 8, 70, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 937, 8, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 3, 73, 946, 8, 73, 1, 73, 3, 73, 949, 8, 73, 1, 74, 1, 74, 3, 74, 953, 8, 74, 1, 75, 1, 75, 5, 75, 957, 8, 75, 10, 75, 12, 75, 960, 9, 75, 1, 75, 1, 75, 1, 75, 5, 75, 965, 8, 75, 10, 75, 12, 75, 968, 9, 75, 1, 75, 5, 75, 971, 8, 75, 10, 75, 12, 75, 974, 9, 75, 1, 75, 5, 75, 977, 8, 75, 10, 75, 12, 75, 980, 9, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 3, 77, 989, 8, 77, 1, 78, 3, 78, 992, 8, 78, 1, 78, 1, 78, 1, 78, 1, 79, 3, 79, 998, 8, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 5, 83, 1016, 8, 83, 10, 83, 12, 83, 1019, 9, 83, 1, 84, 1, 84, 5, 84, 1023, 8, 84, 10, 84, 12, 84, 1026, 9, 84, 1, 84, 1, 84, 1, 84, 5, 84, 1031, 8, 84, 10, 84, 12, 84, 1034, 9, 84, 1, 84, 1, 84, 5, 84, 1038, 8, 84, 10, 84, 12, 84, 1041, 9, 84, 5, 84, 1043, 8, 84, 10, 84, 12, 84, 1046, 9, 84, 1, 84, 1, 84, 1, 84, 0, 0, 85, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 0, 2, 1, 0, 10, 11, 1, 0, 23, 24, 1115, 0, 175, 1, 0, 0, 0, 2, 185, 1, 0, 0, 0, 4, 190, 1, 0, 0, 0, 6, 194, 1, 0, 0, 0, 8, 199, 1, 0, 0, 0, 10, 211, 1, 0, 0, 0, 12, 215, 1, 0, 0, 0, 14, 238, 1, 0, 0, 0, 16, 247, 1, 0, 0, 0, 18, 252, 1, 0, 0, 0, 20, 258, 1, 0, 0, 0, 22, 260, 1, 0, 0, 0, 24, 269, 1, 0, 0, 0, 26, 271, 1, 0, 0, 0, 28, 281, 1, 0, 0, 0, 30, 283, 1, 0, 0, 0, 32, 285, 1, 0, 0, 0, 34, 290, 1, 0, 0, 0, 36, 292, 1, 0, 0, 0, 38, 296, 1, 0, 0, 0, 40, 299, 1, 0, 0, 0, 42, 304, 1, 0, 0, 0, 44, 335, 1, 0, 0, 0, 46, 342, 1, 0, 0, 0, 48, 354, 1, 0, 0, 0, 50, 368, 1, 0, 0, 0, 52, 381, 1, 0, 0, 0, 54, 383, 1, 0, 0, 0, 56, 387, 1, 0, 0, 0, 58, 418, 1, 0, 0, 0, 60, 420, 1, 0, 0, 0, 62, 456, 1, 0, 0, 0, 64, 475, 1, 0, 0, 0, 66, 487, 1, 0, 0, 0, 68, 495, 1, 0, 0, 0, 70, 516, 1, 0, 0, 0, 72, 520, 1, 0, 0, 0, 74, 523, 1, 0, 0, 0, 76, 528, 1, 0, 0, 0, 78, 553, 1, 0, 0, 0, 80, 565, 1, 0, 0, 0, 82, 567, 1, 0, 0, 0, 84, 569, 1, 0, 0, 0, 86, 593, 1, 0, 0, 0, 88, 598, 1, 0, 0, 0, 90, 612, 1, 0, 0, 0, 92, 627, 1, 0, 0, 0, 94, 630, 1, 0, 0, 0, 96, 635, 1, 0, 0, 0, 98, 660, 1, 0, 0, 0, 100, 677, 1, 0, 0, 0, 102, 679, 1, 0, 0, 0, 104, 681, 1, 0, 0, 0, 106, 683, 1, 0, 0, 0, 108, 716, 1, 0, 0, 0, 110, 718, 1, 0, 0, 0, 112, 730, 1, 0, 0, 0, 114, 744, 1, 0, 0, 0, 116, 755, 1, 0, 0, 0, 118, 758, 1, 0, 0, 0, 120, 766, 1, 0, 0, 0, 122, 794, 1, 0, 0, 0, 124, 804, 1, 0, 0, 0, 126, 831, 1, 0, 0, 0, 128, 840, 1, 0, 0, 0, 130, 862, 1, 0, 0, 0, 132, 869, 1, 0, 0, 0, 134, 888, 1, 0, 0, 0, 136, 890, 1, 0, 0, 0, 138, 915, 1, 0, 0, 0, 140, 930, 1, 0, 0, 0, 142, 932, 1, 0, 0, 0, 144, 938, 1, 0, 0, 0, 146, 945, 1, 0, 0, 0, 148, 952, 1, 0, 0, 0, 150, 954, 1, 0, 0, 0, 152, 983, 1, 0, 0, 0, 154, 988, 1, 0, 0, 0, 156, 991, 1, 0, 0, 0, 158, 997, 1, 0, 0, 0, 160, 1003, 1, 0, 0, 0, 162, 1005, 1, 0, 0, 0, 164, 1007, 1, 0, 0, 0, 166, 1011, 1, 0, 0, 0, 168, 1020, 1, 0, 0, 0, 170, 174, 5, 38, 0, 0, 171, 174, 5, 32, 0, 0, 172, 174, 3, 2, 1, 0, 173, 170, 1, 0, 0, 0, 173, 171, 1, 0, 0, 0, 173, 172, 1, 0, 0, 0, 174, 177, 1, 0, 0, 0, 175, 173, 1, 0, 0, 0, 175, 176, 1, 0, 0, 0, 176, 178, 1, 0, 0, 0, 177, 175, 1, 0, 0, 0, 178, 179, 5, 0, 0, 1, 179, 1, 1, 0, 0, 0, 180, 186, 3, 12, 6, 0, 181, 186, 3, 38, 19, 0, 182, 186, 3, 72, 36, 0, 183, 186, 3, 92, 46, 0, 184, 186, 3, 116, 58, 0, 185, 180, 1, 0, 0, 0, 185, 181, 1, 0, 0, 0, 185, 182, 1, 0, 0, 0, 185, 183, 1, 0, 0, 0, 185, 184, 1, 0, 0, 0, 186, 3, 1, 0, 0, 0, 187, 188, 3, 6, 3, 0, 188, 189, 5, 38, 0, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 190, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 5, 1, 0, 0, 0, 194, 195, 5, 1, 0, 0, 195, 197, 5, 34, 0, 0, 196, 198, 3, 8, 4, 0, 197, 196, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 7, 1, 0, 0, 0, 199, 200, 5, 2, 0, 0, 200, 205, 3, 10, 5, 0, 201, 202, 5, 3, 0, 0, 202, 204, 3, 10, 5, 0, 203, 201, 1, 0, 0, 0, 204, 207, 1, 0, 0, 0, 205, 203, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 208, 1, 0, 0, 0, 207, 205, 1, 0, 0, 0, 208, 209, 5, 4, 0, 0, 209, 9, 1, 0, 0, 0, 210, 212, 5, 34, 0, 0, 211, 210, 1, 0, 0, 0, 212, 213, 1, 0, 0, 0, 213, 211, 1, 0, 0, 0, 213, 214, 1, 0, 0, 0, 214, 11, 1, 0, 0, 0, 215, 219, 5, 5, 0, 0, 216, 218, 5, 38, 0, 0, 217, 216, 1, 0, 0, 0, 218, 221, 1, 0, 0, 0, 219, 217, 1, 0, 0, 0, 219, 220, 1, 0, 0, 0, 220, 222, 1, 0, 0, 0, 221, 219, 1, 0, 0, 0, 222, 226, 5, 6, 0, 0, 223, 225, 5, 38, 0, 0, 224, 223, 1, 0, 0, 0, 225, 228, 1, 0, 0, 0, 226, 224, 1, 0, 0, 0, 226, 227, 1, 0, 0, 0, 227, 232, 1, 0, 0, 0, 228, 226, 1, 0, 0, 0, 229, 231, 3, 14, 7, 0, 230, 229, 1, 0, 0, 0, 231, 234, 1, 0, 0, 0, 232, 230, 1, 0, 0, 0, 232, 233, 1, 0, 0, 0, 233, 235, 1, 0, 0, 0, 234, 232, 1, 0, 0, 0, 235, 236, 5, 7, 0, 0, 236, 13, 1, 0, 0, 0, 237, 239, 3, 16, 8, 0, 238, 237, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 244, 3, 18, 9, 0, 241, 243, 5, 38, 0, 0, 242, 241, 1, 0, 0, 0, 243, 246, 1, 0, 0, 0, 244, 242, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, 15, 1, 0, 0, 0, 246, 244, 1, 0, 0, 0, 247, 248, 5, 34, 0, 0, 248, 17, 1, 0, 0, 0, 249, 250, 3, 20, 10, 0, 250, 251, 5, 8, 0, 0, 251, 253, 1, 0, 0, 0, 252, 249, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 255, 3, 26, 13, 0, 255, 19, 1, 0, 0, 0, 256, 259, 5, 9, 0, 0, 257, 259, 3, 22, 11, 0, 258, 256, 1, 0, 0, 0, 258, 257, 1, 0, 0, 0, 259, 21, 1, 0, 0, 0, 260, 266, 5, 34, 0, 0, 261, 262, 3, 24, 12, 0, 262, 263, 5, 34, 0, 0, 263, 265, 1, 0, 0, 0, 264, 261, 1, 0, 0, 0, 265, 268, 1, 0, 0, 0, 266, 264, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, 23, 1, 0, 0, 0, 268, 266, 1, 0, 0, 0, 269, 270, 7, 0, 0, 0, 270, 25, 1, 0, 0, 0, 271, 276, 5, 34, 0, 0, 272, 273, 5, 10, 0, 0, 273, 275, 5, 34, 0, 0, 274, 272, 1, 0, 0, 0, 275, 278, 1, 0, 0, 0, 276, 274, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 27, 1, 0, 0, 0, 278, 276, 1, 0, 0, 0, 279, 282, 3, 30, 15, 0, 280, 282, 3, 32, 16, 0, 281, 279, 1, 0, 0, 0, 281, 280, 1, 0, 0, 0, 282, 29, 1, 0, 0, 0, 283, 284, 5, 34, 0, 0, 284, 31, 1, 0, 0, 0, 285, 288, 3, 34, 17, 0, 286, 287, 5, 11, 0, 0, 287, 289, 3, 36, 18, 0, 288, 286, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 33, 1, 0, 0, 0, 290, 291, 5, 34, 0, 0, 291, 35, 1, 0, 0, 0, 292, 293, 5, 34, 0, 0, 293, 37, 1, 0, 0, 0, 294, 297, 3, 40, 20, 0, 295, 297, 3, 42, 21, 0, 296, 294, 1, 0, 0, 0, 296, 295, 1, 0, 0, 0, 297, 39, 1, 0, 0, 0, 298, 300, 5, 33, 0, 0, 299, 298, 1, 0, 0, 0, 299, 300, 1, 0, 0, 0, 300, 301, 1, 0, 0, 0, 301, 302, 5, 12, 0, 0, 302, 303, 3, 44, 22, 0, 303, 41, 1, 0, 0, 0, 304, 308, 5, 12, 0, 0, 305, 307, 5, 38, 0, 0, 306, 305, 1, 0, 0, 0, 307, 310, 1, 0, 0, 0, 308, 306, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 311, 1, 0, 0, 0, 310, 308, 1, 0, 0, 0, 311, 315, 5, 6, 0, 0, 312, 314, 5, 38, 0, 0, 313, 312, 1, 0, 0, 0, 314, 317, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, 315, 316, 1, 0, 0, 0, 316, 330, 1, 0, 0, 0, 317, 315, 1, 0, 0, 0, 318, 320, 5, 33, 0, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 325, 3, 44, 22, 0, 322, 324, 5, 38, 0, 0, 323, 322, 1, 0, 0, 0, 324, 327, 1, 0, 0, 0, 325, 323, 1, 0, 0, 0, 325, 326, 1, 0, 0, 0, 326, 329, 1, 0, 0, 0, 327, 325, 1, 0, 0, 0, 328, 319, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 328, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 333, 334, 5, 7, 0, 0, 334, 43, 1, 0, 0, 0, 335, 337, 5, 34, 0, 0, 336, 338, 3, 46, 23, 0, 337, 336, 1, 0, 0, 0, 337, 338, 1, 0, 0, 0, 338, 340, 1, 0, 0, 0, 339, 341, 3, 52, 26, 0, 340, 339, 1, 0, 0, 0, 340, 341, 1, 0, 0, 0, 341, 45, 1, 0, 0, 0, 342, 346, 5, 13, 0, 0, 343, 345, 5, 38, 0, 0, 344, 343, 1, 0, 0, 0, 345, 348, 1, 0, 0, 0, 346, 344, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 349, 351, 3, 48, 24, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 353, 5, 14, 0, 0, 353, 47, 1, 0, 0, 0, 354, 365, 3, 50, 25, 0, 355, 359, 5, 3, 0, 0, 356, 358, 5, 38, 0, 0, 357, 356, 1, 0, 0, 0, 358, 361, 1, 0, 0, 0, 359, 357, 1, 0, 0, 0, 359, 360, 1, 0, 0, 0, 360, 362, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 362, 364, 3, 50, 25, 0, 363, 355, 1, 0, 0, 0, 364, 367, 1, 0, 0, 0, 365, 363, 1, 0, 0, 0, 365, 366, 1, 0, 0, 0, 366, 49, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 368, 370, 5, 34, 0, 0, 369, 371, 3, 52, 26, 0, 370, 369, 1, 0, 0, 0, 370, 371, 1, 0, 0, 0, 371, 375, 1, 0, 0, 0, 372, 374, 5, 38, 0, 0, 373, 372, 1, 0, 0, 0, 374, 377, 1, 0, 0, 0, 375, 373, 1, 0, 0, 0, 375, 376, 1, 0, 0, 0, 376, 51, 1, 0, 0, 0, 377, 375, 1, 0, 0, 0, 378, 382, 3, 54, 27, 0, 379, 382, 3, 58, 29, 0, 380, 382, 3, 68, 34, 0, 381, 378, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 381, 380, 1, 0, 0, 0, 382, 53, 1, 0, 0, 0, 383, 385, 3, 28, 14, 0, 384, 386, 3, 56, 28, 0, 385, 384, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 55, 1, 0, 0, 0, 387, 391, 5, 13, 0, 0, 388, 390, 5, 38, 0, 0, 389, 388, 1, 0, 0, 0, 390, 393, 1, 0, 0, 0, 391, 389, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 394, 1, 0, 0, 0, 393, 391, 1, 0, 0, 0, 394, 405, 3, 52, 26, 0, 395, 399, 5, 3, 0, 0, 396, 398, 5, 38, 0, 0, 397, 396, 1, 0, 0, 0, 398, 401, 1, 0, 0, 0, 399, 397, 1, 0, 0, 0, 399, 400, 1, 0, 0, 0, 400, 402, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 402, 404, 3, 52, 26, 0, 403, 395, 1, 0, 0, 0, 404, 407, 1, 0, 0, 0, 405, 403, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 411, 1, 0, 0, 0, 407, 405, 1, 0, 0, 0, 408, 410, 5, 38, 0, 0, 409, 408, 1, 0, 0, 0, 410, 413, 1, 0, 0, 0, 411, 409, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 414, 1, 0, 0, 0, 413, 411, 1, 0, 0, 0, 414, 415, 5, 14, 0, 0, 415, 57, 1, 0, 0, 0, 416, 419, 3, 60, 30, 0, 417, 419, 3, 62, 31, 0, 418, 416, 1, 0, 0, 0, 418, 417, 1, 0, 0, 0, 419, 59, 1, 0, 0, 0, 420, 424, 5, 15, 0, 0, 421, 423, 5, 38, 0, 0, 422, 421, 1, 0, 0, 0, 423, 426, 1, 0, 0, 0, 424, 422, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 427, 1, 0, 0, 0, 426, 424, 1, 0, 0, 0, 427, 431, 5, 6, 0, 0, 428, 430, 5, 38, 0, 0, 429, 428, 1, 0, 0, 0, 430, 433, 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 434, 1, 0, 0, 0, 433, 431, 1, 0, 0, 0, 434, 445, 5, 34, 0, 0, 435, 439, 5, 3, 0, 0, 436, 438, 5, 38, 0, 0, 437, 436, 1, 0, 0, 0, 438, 441, 1, 0, 0, 0, 439, 437, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 442, 1, 0, 0, 0, 441, 439, 1, 0, 0, 0, 442, 444, 5, 34, 0, 0, 443, 435, 1, 0, 0, 0, 444, 447, 1, 0, 0, 0, 445, 443, 1, 0, 0, 0, 445, 446, 1, 0, 0, 0, 446, 451, 1, 0, 0, 0, 447, 445, 1, 0, 0, 0, 448, 450, 5, 38, 0, 0, 449, 448, 1, 0, 0, 0, 450, 453, 1, 0, 0, 0, 451, 449, 1, 0, 0, 0, 451, 452, 1, 0, 0, 0, 452, 454, 1, 0, 0, 0, 453, 451, 1, 0, 0, 0, 454, 455, 5, 7, 0, 0, 455, 61, 1, 0, 0, 0, 456, 460, 5, 16, 0, 0, 457, 459, 5, 38, 0, 0, 458, 457, 1, 0, 0, 0, 459, 462, 1, 0, 0, 0, 460, 458, 1, 0, 0, 0, 460, 461, 1, 0, 0, 0, 461, 463, 1, 0, 0, 0, 462, 460, 1, 0, 0, 0, 463, 467, 5, 6, 0, 0, 464, 466, 5, 38, 0, 0, 465, 464, 1, 0, 0, 0, 466, 469, 1, 0, 0, 0, 467, 465, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 471, 1, 0, 0, 0, 469, 467, 1, 0, 0, 0, 470, 472, 3, 64, 32, 0, 471, 470, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, 474, 5, 7, 0, 0, 474, 63, 1, 0, 0, 0, 475, 484, 3, 66, 33, 0, 476, 478, 5, 38, 0, 0, 477, 476, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 477, 1, 0, 0, 0, 479, 480, 1, 0, 0, 0, 480, 481, 1, 0, 0, 0, 481, 483, 3, 66, 33, 0, 482, 477, 1, 0, 0, 0, 483, 486, 1, 0, 0, 0, 484, 482, 1, 0, 0, 0, 484, 485, 1, 0, 0, 0, 485, 65, 1, 0, 0, 0, 486, 484, 1, 0, 0, 0, 487, 488, 5, 34, 0, 0, 488, 492, 3, 52, 26, 0, 489, 491, 5, 38, 0, 0, 490, 489, 1, 0, 0, 0, 491, 494, 1, 0, 0, 0, 492, 490, 1, 0, 0, 0, 492, 493, 1, 0, 0, 0, 493, 67, 1, 0, 0, 0, 494, 492, 1, 0, 0, 0, 495, 510, 3, 70, 35, 0, 496, 498, 5, 38, 0, 0, 497, 496, 1, 0, 0, 0, 498, 501, 1, 0, 0, 0, 499, 497, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 500, 502, 1, 0, 0, 0, 501, 499, 1, 0, 0, 0, 502, 506, 5, 17, 0, 0, 503, 505, 5, 38, 0, 0, 504, 503, 1, 0, 0, 0, 505, 508, 1, 0, 0, 0, 506, 504, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 509, 1, 0, 0, 0, 508, 506, 1, 0, 0, 0, 509, 511, 3, 70, 35, 0, 510, 499, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 510, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 69, 1, 0, 0, 0, 514, 517, 3, 54, 27, 0, 515, 517, 3, 58, 29, 0, 516, 514, 1, 0, 0, 0, 516, 515, 1, 0, 0, 0, 517, 71, 1, 0, 0, 0, 518, 521, 3, 74, 37, 0, 519, 521, 3, 76, 38, 0, 520, 518, 1, 0, 0, 0, 520, 519, 1, 0, 0, 0, 521, 73, 1, 0, 0, 0, 522, 524, 5, 33, 0, 0, 523, 522, 1, 0, 0, 0, 523, 524, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 526, 5, 18, 0, 0, 526, 527, 3, 78, 39, 0, 527, 75, 1, 0, 0, 0, 528, 532, 5, 18, 0, 0, 529, 531, 5, 38, 0, 0, 530, 529, 1, 0, 0, 0, 531, 534, 1, 0, 0, 0, 532, 530, 1, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 535, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 535, 539, 5, 6, 0, 0, 536, 538, 5, 38, 0, 0, 537, 536, 1, 0, 0, 0, 538, 541, 1, 0, 0, 0, 539, 537, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 548, 1, 0, 0, 0, 541, 539, 1, 0, 0, 0, 542, 544, 5, 33, 0, 0, 543, 542, 1, 0, 0, 0, 543, 544, 1, 0, 0, 0, 544, 545, 1, 0, 0, 0, 545, 547, 3, 78, 39, 0, 546, 543, 1, 0, 0, 0, 547, 550, 1, 0, 0, 0, 548, 546, 1, 0, 0, 0, 548, 549, 1, 0, 0, 0, 549, 551, 1, 0, 0, 0, 550, 548, 1, 0, 0, 0, 551, 552, 5, 7, 0, 0, 552, 77, 1, 0, 0, 0, 553, 555, 5, 34, 0, 0, 554, 556, 3, 46, 23, 0, 555, 554, 1, 0, 0, 0, 555, 556, 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 558, 3, 80, 40, 0, 558, 562, 3, 82, 41, 0, 559, 561, 5, 38, 0, 0, 560, 559, 1, 0, 0, 0, 561, 564, 1, 0, 0, 0, 562, 560, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 563, 79, 1, 0, 0, 0, 564, 562, 1, 0, 0, 0, 565, 566, 3, 84, 42, 0, 566, 81, 1, 0, 0, 0, 567, 568, 3, 84, 42, 0, 568, 83, 1, 0, 0, 0, 569, 587, 5, 2, 0, 0, 570, 572, 5, 38, 0, 0, 571, 570, 1, 0, 0, 0, 572, 575, 1, 0, 0, 0, 573, 571, 1, 0, 0, 0, 573, 574, 1, 0, 0, 0, 574, 588, 1, 0, 0, 0, 575, 573, 1, 0, 0, 0, 576, 578, 3, 86, 43, 0, 577, 576, 1, 0, 0, 0, 577, 578, 1, 0, 0, 0, 578, 588, 1, 0, 0, 0, 579, 584, 3, 86, 43, 0, 580, 581, 5, 3, 0, 0, 581, 583, 3, 86, 43, 0, 582, 580, 1, 0, 0, 0, 583, 586, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 588, 1, 0, 0, 0, 586, 584, 1, 0, 0, 0, 587, 573, 1, 0, 0, 0, 587, 577, 1, 0, 0, 0, 587, 579, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 590, 5, 4, 0, 0, 590, 85, 1, 0, 0, 0, 591, 594, 3, 88, 44, 0, 592, 594, 3, 90, 45, 0, 593, 591, 1, 0, 0, 0, 593, 592, 1, 0, 0, 0, 594, 87, 1, 0, 0, 0, 595, 597, 5, 38, 0, 0, 596, 595, 1, 0, 0, 0, 597, 600, 1, 0, 0, 0, 598, 596, 1, 0, 0, 0, 598, 599, 1, 0, 0, 0, 599, 601, 1, 0, 0, 0, 600, 598, 1, 0, 0, 0, 601, 602, 5, 34, 0, 0, 602, 606, 3, 52, 26, 0, 603, 605, 5, 38, 0, 0, 604, 603, 1, 0, 0, 0, 605, 608, 1, 0, 0, 0, 606, 604, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 89, 1, 0, 0, 0, 608, 606, 1, 0, 0, 0, 609, 611, 5, 38, 0, 0, 610, 609, 1, 0, 0, 0, 611, 614, 1, 0, 0, 0, 612, 610, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, 613, 615, 1, 0, 0, 0, 614, 612, 1, 0, 0, 0, 615, 616, 5, 19, 0, 0, 616, 617, 5, 34, 0, 0, 617, 618, 5, 20, 0, 0, 618, 622, 3, 52, 26, 0, 619, 621, 5, 38, 0, 0, 620, 619, 1, 0, 0, 0, 621, 624, 1, 0, 0, 0, 622, 620, 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 91, 1, 0, 0, 0, 624, 622, 1, 0, 0, 0, 625, 628, 3, 94, 47, 0, 626, 628, 3, 96, 48, 0, 627, 625, 1, 0, 0, 0, 627, 626, 1, 0, 0, 0, 628, 93, 1, 0, 0, 0, 629, 631, 5, 33, 0, 0, 630, 629, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, 632, 1, 0, 0, 0, 632, 633, 5, 21, 0, 0, 633, 634, 3, 98, 49, 0, 634, 95, 1, 0, 0, 0, 635, 639, 5, 21, 0, 0, 636, 638, 5, 38, 0, 0, 637, 636, 1, 0, 0, 0, 638, 641, 1, 0, 0, 0, 639, 637, 1, 0, 0, 0, 639, 640, 1, 0, 0, 0, 640, 642, 1, 0, 0, 0, 641, 639, 1, 0, 0, 0, 642, 646, 5, 6, 0, 0, 643, 645, 5, 38, 0, 0, 644, 643, 1, 0, 0, 0, 645, 648, 1, 0, 0, 0, 646, 644, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 655, 1, 0, 0, 0, 648, 646, 1, 0, 0, 0, 649, 651, 5, 33, 0, 0, 650, 649, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 652, 1, 0, 0, 0, 652, 654, 3, 98, 49, 0, 653, 650, 1, 0, 0, 0, 654, 657, 1, 0, 0, 0, 655, 653, 1, 0, 0, 0, 655, 656, 1, 0, 0, 0, 656, 658, 1, 0, 0, 0, 657, 655, 1, 0, 0, 0, 658, 659, 5, 7, 0, 0, 659, 97, 1, 0, 0, 0, 660, 661, 5, 34, 0, 0, 661, 662, 3, 52, 26, 0, 662, 663, 5, 22, 0, 0, 663, 667, 3, 100, 50, 0, 664, 666, 5, 38, 0, 0, 665, 664, 1, 0, 0, 0, 666, 669, 1, 0, 0, 0, 667, 665, 1, 0, 0, 0, 667, 668, 1, 0, 0, 0, 668, 99, 1, 0, 0, 0, 669, 667, 1, 0, 0, 0, 670, 678, 3, 104, 52, 0, 671, 678, 3, 102, 51, 0, 672, 678, 5, 35, 0, 0, 673, 678, 5, 36, 0, 0, 674, 678, 5, 37, 0, 0, 675, 678, 3, 106, 53, 0, 676, 678, 3, 110, 55, 0, 677, 670, 1, 0, 0, 0, 677, 671, 1, 0, 0, 0, 677, 672, 1, 0, 0, 0, 677, 673, 1, 0, 0, 0, 677, 674, 1, 0, 0, 0, 677, 675, 1, 0, 0, 0, 677, 676, 1, 0, 0, 0, 678, 101, 1, 0, 0, 0, 679, 680, 7, 1, 0, 0, 680, 103, 1, 0, 0, 0, 681, 682, 5, 25, 0, 0, 682, 105, 1, 0, 0, 0, 683, 687, 5, 19, 0, 0, 684, 686, 5, 38, 0, 0, 685, 684, 1, 0, 0, 0, 686, 689, 1, 0, 0, 0, 687, 685, 1, 0, 0, 0, 687, 688, 1, 0, 0, 0, 688, 691, 1, 0, 0, 0, 689, 687, 1, 0, 0, 0, 690, 692, 3, 108, 54, 0, 691, 690, 1, 0, 0, 0, 691, 692, 1, 0, 0, 0, 692, 693, 1, 0, 0, 0, 693, 694, 5, 20, 0, 0, 694, 107, 1, 0, 0, 0, 695, 717, 3, 100, 50, 0, 696, 713, 3, 100, 50, 0, 697, 701, 5, 3, 0, 0, 698, 700, 5, 38, 0, 0, 699, 698, 1, 0, 0, 0, 700, 703, 1, 0, 0, 0, 701, 699, 1, 0, 0, 0, 701, 702, 1, 0, 0, 0, 702, 704, 1, 0, 0, 0, 703, 701, 1, 0, 0, 0, 704, 708, 3, 100, 50, 0, 705, 707, 5, 38, 0, 0, 706, 705, 1, 0, 0, 0, 707, 710, 1, 0, 0, 0, 708, 706, 1, 0, 0, 0, 708, 709, 1, 0, 0, 0, 709, 712, 1, 0, 0, 0, 710, 708, 1, 0, 0, 0, 711, 697, 1, 0, 0, 0, 712, 715, 1, 0, 0, 0, 713, 711, 1, 0, 0, 0, 713, 714, 1, 0, 0, 0, 714, 717, 1, 0, 0, 0, 715, 713, 1, 0, 0, 0, 716, 695, 1, 0, 0, 0, 716, 696, 1, 0, 0, 0, 717, 109, 1, 0, 0, 0, 718, 722, 5, 6, 0, 0, 719, 721, 5, 38, 0, 0, 720, 719, 1, 0, 0, 0, 721, 724, 1, 0, 0, 0, 722, 720, 1, 0, 0, 0, 722, 723, 1, 0, 0, 0, 723, 726, 1, 0, 0, 0, 724, 722, 1, 0, 0, 0, 725, 727, 3, 112, 56, 0, 726, 725, 1, 0, 0, 0, 726, 727, 1, 0, 0, 0, 727, 728, 1, 0, 0, 0, 728, 729, 5, 7, 0, 0, 729, 111, 1, 0, 0, 0, 730, 741, 3, 114, 57, 0, 731, 735, 5, 3, 0, 0, 732, 734, 5, 38, 0, 0, 733, 732, 1, 0, 0, 0, 734, 737, 1, 0, 0, 0, 735, 733, 1, 0, 0, 0, 735, 736, 1, 0, 0, 0, 736, 738, 1, 0, 0, 0, 737, 735, 1, 0, 0, 0, 738, 740, 3, 114, 57, 0, 739, 731, 1, 0, 0, 0, 740, 743, 1, 0, 0, 0, 741, 739, 1, 0, 0, 0, 741, 742, 1, 0, 0, 0, 742, 113, 1, 0, 0, 0, 743, 741, 1, 0, 0, 0, 744, 745, 5, 34, 0, 0, 745, 746, 5, 8, 0, 0, 746, 750, 3, 100, 50, 0, 747, 749, 5, 38, 0, 0, 748, 747, 1, 0, 0, 0, 749, 752, 1, 0, 0, 0, 750, 748, 1, 0, 0, 0, 750, 751, 1, 0, 0, 0, 751, 115, 1, 0, 0, 0, 752, 750, 1, 0, 0, 0, 753, 756, 3, 118, 59, 0, 754, 756, 3, 120, 60, 0, 755, 753, 1, 0, 0, 0, 755, 754, 1, 0, 0, 0, 756, 117, 1, 0, 0, 0, 757, 759, 3, 4, 2, 0, 758, 757, 1, 0, 0, 0, 758, 759, 1, 0, 0, 0, 759, 761, 1, 0, 0, 0, 760, 762, 5, 33, 0, 0, 761, 760, 1, 0, 0, 0, 761, 762, 1, 0, 0, 0, 762, 763, 1, 0, 0, 0, 763, 764, 5, 26, 0, 0, 764, 765, 3, 122, 61, 0, 765, 119, 1, 0, 0, 0, 766, 770, 5, 26, 0, 0, 767, 769, 5, 38, 0, 0, 768, 767, 1, 0, 0, 0, 769, 772, 1, 0, 0, 0, 770, 768, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 771, 773, 1, 0, 0, 0, 772, 770, 1, 0, 0, 0, 773, 777, 5, 6, 0, 0, 774, 776, 5, 38, 0, 0, 775, 774, 1, 0, 0, 0, 776, 779, 1, 0, 0, 0, 777, 775, 1, 0, 0, 0, 777, 778, 1, 0, 0, 0, 778, 789, 1, 0, 0, 0, 779, 777, 1, 0, 0, 0, 780, 782, 3, 4, 2, 0, 781, 780, 1, 0, 0, 0, 781, 782, 1, 0, 0, 0, 782, 784, 1, 0, 0, 0, 783, 785, 5, 33, 0, 0, 784, 783, 1, 0, 0, 0, 784, 785, 1, 0, 0, 0, 785, 786, 1, 0, 0, 0, 786, 788, 3, 122, 61, 0, 787, 781, 1, 0, 0, 0, 788, 791, 1, 0, 0, 0, 789, 787, 1, 0, 0, 0, 789, 790, 1, 0, 0, 0, 790, 792, 1, 0, 0, 0, 791, 789, 1, 0, 0, 0, 792, 793, 5, 7, 0, 0, 793, 121, 1, 0, 0, 0, 794, 796, 3, 78, 39, 0, 795, 797, 3, 124, 62, 0, 796, 795, 1, 0, 0, 0, 796, 797, 1, 0, 0, 0, 797, 801, 1, 0, 0, 0, 798, 800, 5, 38, 0, 0, 799, 798, 1, 0, 0, 0, 800, 803, 1, 0, 0, 0, 801, 799, 1, 0, 0, 0, 801, 802, 1, 0, 0, 0, 802, 123, 1, 0, 0, 0, 803, 801, 1, 0, 0, 0, 804, 808, 5, 6, 0, 0, 805, 807, 5, 38, 0, 0, 806, 805, 1, 0, 0, 0, 807, 810, 1, 0, 0, 0, 808, 806, 1, 0, 0, 0, 808, 809, 1, 0, 0, 0, 809, 818, 1, 0, 0, 0, 810, 808, 1, 0, 0, 0, 811, 815, 3, 126, 63, 0, 812, 814, 5, 38, 0, 0, 813, 812, 1, 0, 0, 0, 814, 817, 1, 0, 0, 0, 815, 813, 1, 0, 0, 0, 815, 816, 1, 0, 0, 0, 816, 819, 1, 0, 0, 0, 817, 815, 1, 0, 0, 0, 818, 811, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 827, 1, 0, 0, 0, 820, 824, 3, 136, 68, 0, 821, 823, 5, 38, 0, 0, 822, 821, 1, 0, 0, 0, 823, 826, 1, 0, 0, 0, 824, 822, 1, 0, 0, 0, 824, 825, 1, 0, 0, 0, 825, 828, 1, 0, 0, 0, 826, 824, 1, 0, 0, 0, 827, 820, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 829, 1, 0, 0, 0, 829, 830, 5, 7, 0, 0, 830, 125, 1, 0, 0, 0, 831, 835, 5, 27, 0, 0, 832, 834, 5, 38, 0, 0, 833, 832, 1, 0, 0, 0, 834, 837, 1, 0, 0, 0, 835, 833, 1, 0, 0, 0, 835, 836, 1, 0, 0, 0, 836, 838, 1, 0, 0, 0, 837, 835, 1, 0, 0, 0, 838, 839, 3, 128, 64, 0, 839, 127, 1, 0, 0, 0, 840, 844, 5, 6, 0, 0, 841, 843, 5, 38, 0, 0, 842, 841, 1, 0, 0, 0, 843, 846, 1, 0, 0, 0, 844, 842, 1, 0, 0, 0, 844, 845, 1, 0, 0, 0, 845, 856, 1, 0, 0, 0, 846, 844, 1, 0, 0, 0, 847, 851, 3, 130, 65, 0, 848, 850, 5, 38, 0, 0, 849, 848, 1, 0, 0, 0, 850, 853, 1, 0, 0, 0, 851, 849, 1, 0, 0, 0, 851, 852, 1, 0, 0, 0, 852, 855, 1, 0, 0, 0, 853, 851, 1, 0, 0, 0, 854, 847, 1, 0, 0, 0, 855, 858, 1, 0, 0, 0, 856, 854, 1, 0, 0, 0, 856, 857, 1, 0, 0, 0, 857, 859, 1, 0, 0, 0, 858, 856, 1, 0, 0, 0, 859, 860, 5, 7, 0, 0, 860, 129, 1, 0, 0, 0, 861, 863, 3, 4, 2, 0, 862, 861, 1, 0, 0, 0, 862, 863, 1, 0, 0, 0, 863, 865, 1, 0, 0, 0, 864, 866, 5, 34, 0, 0, 865, 864, 1, 0, 0, 0, 865, 866, 1, 0, 0, 0, 866, 867, 1, 0, 0, 0, 867, 868, 3, 132, 66, 0, 868, 131, 1, 0, 0, 0, 869, 873, 3, 28, 14, 0, 870, 872, 5, 38, 0, 0, 871, 870, 1, 0, 0, 0, 872, 875, 1, 0, 0, 0, 873, 871, 1, 0, 0, 0, 873, 874, 1, 0, 0, 0, 874, 877, 1, 0, 0, 0, 875, 873, 1, 0, 0, 0, 876, 878, 3, 56, 28, 0, 877, 876, 1, 0, 0, 0, 877, 878, 1, 0, 0, 0, 878, 882, 1, 0, 0, 0, 879, 881, 5, 38, 0, 0, 880, 879, 1, 0, 0, 0, 881, 884, 1, 0, 0, 0, 882, 880, 1, 0, 0, 0, 882, 883, 1, 0, 0, 0, 883, 886, 1, 0, 0, 0, 884, 882, 1, 0, 0, 0, 885, 887, 3, 134, 67, 0, 886, 885, 1, 0, 0, 0, 886, 887, 1, 0, 0, 0, 887, 133, 1, 0, 0, 0, 888, 889, 3, 128, 64, 0, 889, 135, 1, 0, 0, 0, 890, 894, 5, 28, 0, 0, 891, 893, 5, 38, 0, 0, 892, 891, 1, 0, 0, 0, 893, 896, 1, 0, 0, 0, 894, 892, 1, 0, 0, 0, 894, 895, 1, 0, 0, 0, 895, 897, 1, 0, 0, 0, 896, 894, 1, 0, 0, 0, 897, 901, 5, 6, 0, 0, 898, 900, 5, 38, 0, 0, 899, 898, 1, 0, 0, 0, 900, 903, 1, 0, 0, 0, 901, 899, 1, 0, 0, 0, 901, 902, 1, 0, 0, 0, 902, 905, 1, 0, 0, 0, 903, 901, 1, 0, 0, 0, 904, 906, 3, 138, 69, 0, 905, 904, 1, 0, 0, 0, 905, 906, 1, 0, 0, 0, 906, 910, 1, 0, 0, 0, 907, 909, 5, 38, 0, 0, 908, 907, 1, 0, 0, 0, 909, 912, 1, 0, 0, 0, 910, 908, 1, 0, 0, 0, 910, 911, 1, 0, 0, 0, 911, 913, 1, 0, 0, 0, 912, 910, 1, 0, 0, 0, 913, 914, 5, 7, 0, 0, 914, 137, 1, 0, 0, 0, 915, 925, 3, 140, 70, 0, 916, 918, 5, 38, 0, 0, 917, 916, 1, 0, 0, 0, 918, 921, 1, 0, 0, 0, 919, 917, 1, 0, 0, 0, 919, 920, 1, 0, 0, 0, 920, 922, 1, 0, 0, 0, 921, 919, 1, 0, 0, 0, 922, 924, 3, 140, 70, 0, 923, 919, 1, 0, 0, 0, 924, 927, 1, 0, 0, 0, 925, 923, 1, 0, 0, 0, 925, 926, 1, 0, 0, 0, 926, 139, 1, 0, 0, 0, 927, 925, 1, 0, 0, 0, 928, 931, 3, 142, 71, 0, 929, 931, 3, 144, 72, 0, 930, 928, 1, 0, 0, 0, 930, 929, 1, 0, 0, 0, 931, 141, 1, 0, 0, 0, 932, 933, 3, 146, 73, 0, 933, 936, 5, 29, 0, 0, 934, 937, 3, 148, 74, 0, 935, 937, 3, 168, 84, 0, 936, 934, 1, 0, 0, 0, 936, 935, 1, 0, 0, 0, 937, 143, 1, 0, 0, 0, 938, 939, 3, 156, 78, 0, 939, 940, 5, 30, 0, 0, 940, 941, 3, 156, 78, 0, 941, 145, 1, 0, 0, 0, 942, 946, 3, 154, 77, 0, 943, 946, 3, 152, 76, 0, 944, 946, 3, 100, 50, 0, 945, 942, 1, 0, 0, 0, 945, 943, 1, 0, 0, 0, 945, 944, 1, 0, 0, 0, 946, 948, 1, 0, 0, 0, 947, 949, 3, 166, 83, 0, 948, 947, 1, 0, 0, 0, 948, 949, 1, 0, 0, 0, 949, 147, 1, 0, 0, 0, 950, 953, 3, 154, 77, 0, 951, 953, 3, 150, 75, 0, 952, 950, 1, 0, 0, 0, 952, 951, 1, 0, 0, 0, 953, 149, 1, 0, 0, 0, 954, 958, 5, 2, 0, 0, 955, 957, 5, 38, 0, 0, 956, 955, 1, 0, 0, 0, 957, 960, 1, 0, 0, 0, 958, 956, 1, 0, 0, 0, 958, 959, 1, 0, 0, 0, 959, 961, 1, 0, 0, 0, 960, 958, 1, 0, 0, 0, 961, 972, 3, 140, 70, 0, 962, 966, 5, 3, 0, 0, 963, 965, 5, 38, 0, 0, 964, 963, 1, 0, 0, 0, 965, 968, 1, 0, 0, 0, 966, 964, 1, 0, 0, 0, 966, 967, 1, 0, 0, 0, 967, 969, 1, 0, 0, 0, 968, 966, 1, 0, 0, 0, 969, 971, 3, 140, 70, 0, 970, 962, 1, 0, 0, 0, 971, 974, 1, 0, 0, 0, 972, 970, 1, 0, 0, 0, 972, 973, 1, 0, 0, 0, 973, 978, 1, 0, 0, 0, 974, 972, 1, 0, 0, 0, 975, 977, 5, 38, 0, 0, 976, 975, 1, 0, 0, 0, 977, 980, 1, 0, 0, 0, 978, 976, 1, 0, 0, 0, 978, 979, 1, 0, 0, 0, 979, 981, 1, 0, 0, 0, 980, 978, 1, 0, 0, 0, 981, 982, 5, 4, 0, 0, 982, 151, 1, 0, 0, 0, 983, 984, 5, 31, 0, 0, 984, 985, 3, 28, 14, 0, 985, 153, 1, 0, 0, 0, 986, 989, 3, 156, 78, 0, 987, 989, 3, 158, 79, 0, 988, 986, 1, 0, 0, 0, 988, 987, 1, 0, 0, 0, 989, 155, 1, 0, 0, 0, 990, 992, 3, 160, 80, 0, 991, 990, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, 994, 5, 8, 0, 0, 994, 995, 3, 162, 81, 0, 995, 157, 1, 0, 0, 0, 996, 998, 3, 160, 80, 0, 997, 996, 1, 0, 0, 0, 997, 998, 1, 0, 0, 0, 998, 999, 1, 0, 0, 0, 999, 1000, 5, 8, 0, 0, 1000, 1001, 3, 162, 81, 0, 1001, 1002, 3, 164, 82, 0, 1002, 159, 1, 0, 0, 0, 1003, 1004, 5, 34, 0, 0, 1004, 161, 1, 0, 0, 0, 1005, 1006, 5, 34, 0, 0, 1006, 163, 1, 0, 0, 0, 1007, 1008, 5, 19, 0, 0, 1008, 1009, 5, 35, 0, 0, 1009, 1010, 5, 20, 0, 0, 1010, 165, 1, 0, 0, 0, 1011, 1012, 5, 11, 0, 0, 1012, 1017, 5, 34, 0, 0, 1013, 1014, 5, 11, 0, 0, 1014, 1016, 5, 34, 0, 0, 1015, 1013, 1, 0, 0, 0, 1016, 1019, 1, 0, 0, 0, 1017, 1015, 1, 0, 0, 0, 1017, 1018, 1, 0, 0, 0, 1018, 167, 1, 0, 0, 0, 1019, 1017, 1, 0, 0, 0, 1020, 1024, 5, 19, 0, 0, 1021, 1023, 5, 38, 0, 0, 1022, 1021, 1, 0, 0, 0, 1023, 1026, 1, 0, 0, 0, 1024, 1022, 1, 0, 0, 0, 1024, 1025, 1, 0, 0, 0, 1025, 1027, 1, 0, 0, 0, 1026, 1024, 1, 0, 0, 0, 1027, 1044, 3, 148, 74, 0, 1028, 1032, 5, 3, 0, 0, 1029, 1031, 5, 38, 0, 0, 1030, 1029, 1, 0, 0, 0, 1031, 1034, 1, 0, 0, 0, 1032, 1030, 1, 0, 0, 0, 1032, 1033, 1, 0, 0, 0, 1033, 1035, 1, 0, 0, 0, 1034, 1032, 1, 0, 0, 0, 1035, 1039, 3, 148, 74, 0, 1036, 1038, 5, 38, 0, 0, 1037, 1036, 1, 0, 0, 0, 1038, 1041, 1, 0, 0, 0, 1039, 1037, 1, 0, 0, 0, 1039, 1040, 1, 0, 0, 0, 1040, 1043, 1, 0, 0, 0, 1041, 1039, 1, 0, 0, 0, 1042, 1028, 1, 0, 0, 0, 1043, 1046, 1, 0, 0, 0, 1044, 1042, 1, 0, 0, 0, 1044, 1045, 1, 0, 0, 0, 1045, 1047, 1, 0, 0, 0, 1046, 1044, 1, 0, 0, 0, 1047, 1048, 5, 20, 0, 0, 1048, 169, 1, 0, 0, 0, 139, 173, 175, 185, 192, 197, 205, 213, 219, 226, 232, 238, 244, 252, 258, 266, 276, 281, 288, 296, 299, 308, 315, 319, 325, 330, 337, 340, 346, 350, 359, 365, 370, 375, 381, 385, 391, 399, 405, 411, 418, 424, 431, 439, 445, 451, 460, 467, 471, 479, 484, 492, 499, 506, 512, 516, 520, 523, 532, 539, 543, 548, 555, 562, 573, 577, 584, 587, 593, 598, 606, 612, 622, 627, 630, 639, 646, 650, 655, 667, 677, 687, 691, 701, 708, 713, 716, 722, 726, 735, 741, 750, 755, 758, 761, 770, 777, 781, 784, 789, 796, 801, 808, 815, 818, 824, 827, 835, 844, 851, 856, 862, 865, 873, 877, 882, 886, 894, 901, 905, 910, 919, 925, 930, 936, 945, 948, 952, 958, 966, 972, 978, 988, 991, 997, 1017, 1024, 1032, 1039, 1044] \ No newline at end of file diff --git a/internal/compiler/parser/generated/neva.tokens b/internal/compiler/parser/generated/neva.tokens index e9270ce3..5ab72473 100644 --- a/internal/compiler/parser/generated/neva.tokens +++ b/internal/compiler/parser/generated/neva.tokens @@ -44,24 +44,24 @@ WS=39 'import'=5 '{'=6 '}'=7 -'/'=8 +':'=8 '@'=9 -'.'=10 -'type'=11 -'<'=12 -'>'=13 -'enum'=14 -'struct'=15 -'|'=16 -'interface'=17 -'['=18 -']'=19 -'const'=20 -'='=21 -'true'=22 -'false'=23 -'nil'=24 -':'=25 +'/'=10 +'.'=11 +'type'=12 +'<'=13 +'>'=14 +'enum'=15 +'struct'=16 +'|'=17 +'interface'=18 +'['=19 +']'=20 +'const'=21 +'='=22 +'true'=23 +'false'=24 +'nil'=25 'component'=26 'nodes'=27 'net'=28 diff --git a/internal/compiler/parser/generated/nevaLexer.interp b/internal/compiler/parser/generated/nevaLexer.interp index 8d3e19cd..7da76ea1 100644 --- a/internal/compiler/parser/generated/nevaLexer.interp +++ b/internal/compiler/parser/generated/nevaLexer.interp @@ -7,8 +7,9 @@ null 'import' '{' '}' -'/' +':' '@' +'/' '.' 'type' '<' @@ -24,7 +25,6 @@ null 'true' 'false' 'nil' -':' 'component' 'nodes' 'net' @@ -132,4 +132,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 39, 257, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 201, 8, 31, 10, 31, 12, 31, 204, 9, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 5, 33, 213, 8, 33, 10, 33, 12, 33, 216, 9, 33, 1, 34, 1, 34, 1, 35, 4, 35, 221, 8, 35, 11, 35, 12, 35, 222, 1, 36, 5, 36, 226, 8, 36, 10, 36, 12, 36, 229, 9, 36, 1, 36, 1, 36, 4, 36, 233, 8, 36, 11, 36, 12, 36, 234, 1, 37, 1, 37, 5, 37, 239, 8, 37, 10, 37, 12, 37, 242, 9, 37, 1, 37, 1, 37, 1, 38, 3, 38, 247, 8, 38, 1, 38, 1, 38, 1, 39, 4, 39, 252, 8, 39, 11, 39, 12, 39, 253, 1, 39, 1, 39, 1, 240, 0, 40, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 0, 71, 35, 73, 36, 75, 37, 77, 38, 79, 39, 1, 0, 4, 2, 0, 10, 10, 13, 13, 3, 0, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 2, 0, 9, 9, 32, 32, 264, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 1, 81, 1, 0, 0, 0, 3, 83, 1, 0, 0, 0, 5, 85, 1, 0, 0, 0, 7, 87, 1, 0, 0, 0, 9, 89, 1, 0, 0, 0, 11, 96, 1, 0, 0, 0, 13, 98, 1, 0, 0, 0, 15, 100, 1, 0, 0, 0, 17, 102, 1, 0, 0, 0, 19, 104, 1, 0, 0, 0, 21, 106, 1, 0, 0, 0, 23, 111, 1, 0, 0, 0, 25, 113, 1, 0, 0, 0, 27, 115, 1, 0, 0, 0, 29, 120, 1, 0, 0, 0, 31, 127, 1, 0, 0, 0, 33, 129, 1, 0, 0, 0, 35, 139, 1, 0, 0, 0, 37, 141, 1, 0, 0, 0, 39, 143, 1, 0, 0, 0, 41, 149, 1, 0, 0, 0, 43, 151, 1, 0, 0, 0, 45, 156, 1, 0, 0, 0, 47, 162, 1, 0, 0, 0, 49, 166, 1, 0, 0, 0, 51, 168, 1, 0, 0, 0, 53, 178, 1, 0, 0, 0, 55, 184, 1, 0, 0, 0, 57, 188, 1, 0, 0, 0, 59, 191, 1, 0, 0, 0, 61, 194, 1, 0, 0, 0, 63, 196, 1, 0, 0, 0, 65, 205, 1, 0, 0, 0, 67, 209, 1, 0, 0, 0, 69, 217, 1, 0, 0, 0, 71, 220, 1, 0, 0, 0, 73, 227, 1, 0, 0, 0, 75, 236, 1, 0, 0, 0, 77, 246, 1, 0, 0, 0, 79, 251, 1, 0, 0, 0, 81, 82, 5, 35, 0, 0, 82, 2, 1, 0, 0, 0, 83, 84, 5, 40, 0, 0, 84, 4, 1, 0, 0, 0, 85, 86, 5, 44, 0, 0, 86, 6, 1, 0, 0, 0, 87, 88, 5, 41, 0, 0, 88, 8, 1, 0, 0, 0, 89, 90, 5, 105, 0, 0, 90, 91, 5, 109, 0, 0, 91, 92, 5, 112, 0, 0, 92, 93, 5, 111, 0, 0, 93, 94, 5, 114, 0, 0, 94, 95, 5, 116, 0, 0, 95, 10, 1, 0, 0, 0, 96, 97, 5, 123, 0, 0, 97, 12, 1, 0, 0, 0, 98, 99, 5, 125, 0, 0, 99, 14, 1, 0, 0, 0, 100, 101, 5, 47, 0, 0, 101, 16, 1, 0, 0, 0, 102, 103, 5, 64, 0, 0, 103, 18, 1, 0, 0, 0, 104, 105, 5, 46, 0, 0, 105, 20, 1, 0, 0, 0, 106, 107, 5, 116, 0, 0, 107, 108, 5, 121, 0, 0, 108, 109, 5, 112, 0, 0, 109, 110, 5, 101, 0, 0, 110, 22, 1, 0, 0, 0, 111, 112, 5, 60, 0, 0, 112, 24, 1, 0, 0, 0, 113, 114, 5, 62, 0, 0, 114, 26, 1, 0, 0, 0, 115, 116, 5, 101, 0, 0, 116, 117, 5, 110, 0, 0, 117, 118, 5, 117, 0, 0, 118, 119, 5, 109, 0, 0, 119, 28, 1, 0, 0, 0, 120, 121, 5, 115, 0, 0, 121, 122, 5, 116, 0, 0, 122, 123, 5, 114, 0, 0, 123, 124, 5, 117, 0, 0, 124, 125, 5, 99, 0, 0, 125, 126, 5, 116, 0, 0, 126, 30, 1, 0, 0, 0, 127, 128, 5, 124, 0, 0, 128, 32, 1, 0, 0, 0, 129, 130, 5, 105, 0, 0, 130, 131, 5, 110, 0, 0, 131, 132, 5, 116, 0, 0, 132, 133, 5, 101, 0, 0, 133, 134, 5, 114, 0, 0, 134, 135, 5, 102, 0, 0, 135, 136, 5, 97, 0, 0, 136, 137, 5, 99, 0, 0, 137, 138, 5, 101, 0, 0, 138, 34, 1, 0, 0, 0, 139, 140, 5, 91, 0, 0, 140, 36, 1, 0, 0, 0, 141, 142, 5, 93, 0, 0, 142, 38, 1, 0, 0, 0, 143, 144, 5, 99, 0, 0, 144, 145, 5, 111, 0, 0, 145, 146, 5, 110, 0, 0, 146, 147, 5, 115, 0, 0, 147, 148, 5, 116, 0, 0, 148, 40, 1, 0, 0, 0, 149, 150, 5, 61, 0, 0, 150, 42, 1, 0, 0, 0, 151, 152, 5, 116, 0, 0, 152, 153, 5, 114, 0, 0, 153, 154, 5, 117, 0, 0, 154, 155, 5, 101, 0, 0, 155, 44, 1, 0, 0, 0, 156, 157, 5, 102, 0, 0, 157, 158, 5, 97, 0, 0, 158, 159, 5, 108, 0, 0, 159, 160, 5, 115, 0, 0, 160, 161, 5, 101, 0, 0, 161, 46, 1, 0, 0, 0, 162, 163, 5, 110, 0, 0, 163, 164, 5, 105, 0, 0, 164, 165, 5, 108, 0, 0, 165, 48, 1, 0, 0, 0, 166, 167, 5, 58, 0, 0, 167, 50, 1, 0, 0, 0, 168, 169, 5, 99, 0, 0, 169, 170, 5, 111, 0, 0, 170, 171, 5, 109, 0, 0, 171, 172, 5, 112, 0, 0, 172, 173, 5, 111, 0, 0, 173, 174, 5, 110, 0, 0, 174, 175, 5, 101, 0, 0, 175, 176, 5, 110, 0, 0, 176, 177, 5, 116, 0, 0, 177, 52, 1, 0, 0, 0, 178, 179, 5, 110, 0, 0, 179, 180, 5, 111, 0, 0, 180, 181, 5, 100, 0, 0, 181, 182, 5, 101, 0, 0, 182, 183, 5, 115, 0, 0, 183, 54, 1, 0, 0, 0, 184, 185, 5, 110, 0, 0, 185, 186, 5, 101, 0, 0, 186, 187, 5, 116, 0, 0, 187, 56, 1, 0, 0, 0, 188, 189, 5, 45, 0, 0, 189, 190, 5, 62, 0, 0, 190, 58, 1, 0, 0, 0, 191, 192, 5, 61, 0, 0, 192, 193, 5, 62, 0, 0, 193, 60, 1, 0, 0, 0, 194, 195, 5, 36, 0, 0, 195, 62, 1, 0, 0, 0, 196, 197, 5, 47, 0, 0, 197, 198, 5, 47, 0, 0, 198, 202, 1, 0, 0, 0, 199, 201, 8, 0, 0, 0, 200, 199, 1, 0, 0, 0, 201, 204, 1, 0, 0, 0, 202, 200, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 64, 1, 0, 0, 0, 204, 202, 1, 0, 0, 0, 205, 206, 5, 112, 0, 0, 206, 207, 5, 117, 0, 0, 207, 208, 5, 98, 0, 0, 208, 66, 1, 0, 0, 0, 209, 214, 3, 69, 34, 0, 210, 213, 3, 69, 34, 0, 211, 213, 3, 71, 35, 0, 212, 210, 1, 0, 0, 0, 212, 211, 1, 0, 0, 0, 213, 216, 1, 0, 0, 0, 214, 212, 1, 0, 0, 0, 214, 215, 1, 0, 0, 0, 215, 68, 1, 0, 0, 0, 216, 214, 1, 0, 0, 0, 217, 218, 7, 1, 0, 0, 218, 70, 1, 0, 0, 0, 219, 221, 7, 2, 0, 0, 220, 219, 1, 0, 0, 0, 221, 222, 1, 0, 0, 0, 222, 220, 1, 0, 0, 0, 222, 223, 1, 0, 0, 0, 223, 72, 1, 0, 0, 0, 224, 226, 7, 2, 0, 0, 225, 224, 1, 0, 0, 0, 226, 229, 1, 0, 0, 0, 227, 225, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 230, 1, 0, 0, 0, 229, 227, 1, 0, 0, 0, 230, 232, 5, 46, 0, 0, 231, 233, 7, 2, 0, 0, 232, 231, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 232, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 74, 1, 0, 0, 0, 236, 240, 5, 39, 0, 0, 237, 239, 9, 0, 0, 0, 238, 237, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 241, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 241, 243, 1, 0, 0, 0, 242, 240, 1, 0, 0, 0, 243, 244, 5, 39, 0, 0, 244, 76, 1, 0, 0, 0, 245, 247, 5, 13, 0, 0, 246, 245, 1, 0, 0, 0, 246, 247, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 249, 5, 10, 0, 0, 249, 78, 1, 0, 0, 0, 250, 252, 7, 3, 0, 0, 251, 250, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 251, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 255, 1, 0, 0, 0, 255, 256, 6, 39, 0, 0, 256, 80, 1, 0, 0, 0, 10, 0, 202, 212, 214, 222, 227, 234, 240, 246, 253, 1, 0, 1, 0] \ No newline at end of file +[4, 0, 39, 257, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 201, 8, 31, 10, 31, 12, 31, 204, 9, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 5, 33, 213, 8, 33, 10, 33, 12, 33, 216, 9, 33, 1, 34, 1, 34, 1, 35, 4, 35, 221, 8, 35, 11, 35, 12, 35, 222, 1, 36, 5, 36, 226, 8, 36, 10, 36, 12, 36, 229, 9, 36, 1, 36, 1, 36, 4, 36, 233, 8, 36, 11, 36, 12, 36, 234, 1, 37, 1, 37, 5, 37, 239, 8, 37, 10, 37, 12, 37, 242, 9, 37, 1, 37, 1, 37, 1, 38, 3, 38, 247, 8, 38, 1, 38, 1, 38, 1, 39, 4, 39, 252, 8, 39, 11, 39, 12, 39, 253, 1, 39, 1, 39, 1, 240, 0, 40, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 0, 71, 35, 73, 36, 75, 37, 77, 38, 79, 39, 1, 0, 4, 2, 0, 10, 10, 13, 13, 3, 0, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 2, 0, 9, 9, 32, 32, 264, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 1, 81, 1, 0, 0, 0, 3, 83, 1, 0, 0, 0, 5, 85, 1, 0, 0, 0, 7, 87, 1, 0, 0, 0, 9, 89, 1, 0, 0, 0, 11, 96, 1, 0, 0, 0, 13, 98, 1, 0, 0, 0, 15, 100, 1, 0, 0, 0, 17, 102, 1, 0, 0, 0, 19, 104, 1, 0, 0, 0, 21, 106, 1, 0, 0, 0, 23, 108, 1, 0, 0, 0, 25, 113, 1, 0, 0, 0, 27, 115, 1, 0, 0, 0, 29, 117, 1, 0, 0, 0, 31, 122, 1, 0, 0, 0, 33, 129, 1, 0, 0, 0, 35, 131, 1, 0, 0, 0, 37, 141, 1, 0, 0, 0, 39, 143, 1, 0, 0, 0, 41, 145, 1, 0, 0, 0, 43, 151, 1, 0, 0, 0, 45, 153, 1, 0, 0, 0, 47, 158, 1, 0, 0, 0, 49, 164, 1, 0, 0, 0, 51, 168, 1, 0, 0, 0, 53, 178, 1, 0, 0, 0, 55, 184, 1, 0, 0, 0, 57, 188, 1, 0, 0, 0, 59, 191, 1, 0, 0, 0, 61, 194, 1, 0, 0, 0, 63, 196, 1, 0, 0, 0, 65, 205, 1, 0, 0, 0, 67, 209, 1, 0, 0, 0, 69, 217, 1, 0, 0, 0, 71, 220, 1, 0, 0, 0, 73, 227, 1, 0, 0, 0, 75, 236, 1, 0, 0, 0, 77, 246, 1, 0, 0, 0, 79, 251, 1, 0, 0, 0, 81, 82, 5, 35, 0, 0, 82, 2, 1, 0, 0, 0, 83, 84, 5, 40, 0, 0, 84, 4, 1, 0, 0, 0, 85, 86, 5, 44, 0, 0, 86, 6, 1, 0, 0, 0, 87, 88, 5, 41, 0, 0, 88, 8, 1, 0, 0, 0, 89, 90, 5, 105, 0, 0, 90, 91, 5, 109, 0, 0, 91, 92, 5, 112, 0, 0, 92, 93, 5, 111, 0, 0, 93, 94, 5, 114, 0, 0, 94, 95, 5, 116, 0, 0, 95, 10, 1, 0, 0, 0, 96, 97, 5, 123, 0, 0, 97, 12, 1, 0, 0, 0, 98, 99, 5, 125, 0, 0, 99, 14, 1, 0, 0, 0, 100, 101, 5, 58, 0, 0, 101, 16, 1, 0, 0, 0, 102, 103, 5, 64, 0, 0, 103, 18, 1, 0, 0, 0, 104, 105, 5, 47, 0, 0, 105, 20, 1, 0, 0, 0, 106, 107, 5, 46, 0, 0, 107, 22, 1, 0, 0, 0, 108, 109, 5, 116, 0, 0, 109, 110, 5, 121, 0, 0, 110, 111, 5, 112, 0, 0, 111, 112, 5, 101, 0, 0, 112, 24, 1, 0, 0, 0, 113, 114, 5, 60, 0, 0, 114, 26, 1, 0, 0, 0, 115, 116, 5, 62, 0, 0, 116, 28, 1, 0, 0, 0, 117, 118, 5, 101, 0, 0, 118, 119, 5, 110, 0, 0, 119, 120, 5, 117, 0, 0, 120, 121, 5, 109, 0, 0, 121, 30, 1, 0, 0, 0, 122, 123, 5, 115, 0, 0, 123, 124, 5, 116, 0, 0, 124, 125, 5, 114, 0, 0, 125, 126, 5, 117, 0, 0, 126, 127, 5, 99, 0, 0, 127, 128, 5, 116, 0, 0, 128, 32, 1, 0, 0, 0, 129, 130, 5, 124, 0, 0, 130, 34, 1, 0, 0, 0, 131, 132, 5, 105, 0, 0, 132, 133, 5, 110, 0, 0, 133, 134, 5, 116, 0, 0, 134, 135, 5, 101, 0, 0, 135, 136, 5, 114, 0, 0, 136, 137, 5, 102, 0, 0, 137, 138, 5, 97, 0, 0, 138, 139, 5, 99, 0, 0, 139, 140, 5, 101, 0, 0, 140, 36, 1, 0, 0, 0, 141, 142, 5, 91, 0, 0, 142, 38, 1, 0, 0, 0, 143, 144, 5, 93, 0, 0, 144, 40, 1, 0, 0, 0, 145, 146, 5, 99, 0, 0, 146, 147, 5, 111, 0, 0, 147, 148, 5, 110, 0, 0, 148, 149, 5, 115, 0, 0, 149, 150, 5, 116, 0, 0, 150, 42, 1, 0, 0, 0, 151, 152, 5, 61, 0, 0, 152, 44, 1, 0, 0, 0, 153, 154, 5, 116, 0, 0, 154, 155, 5, 114, 0, 0, 155, 156, 5, 117, 0, 0, 156, 157, 5, 101, 0, 0, 157, 46, 1, 0, 0, 0, 158, 159, 5, 102, 0, 0, 159, 160, 5, 97, 0, 0, 160, 161, 5, 108, 0, 0, 161, 162, 5, 115, 0, 0, 162, 163, 5, 101, 0, 0, 163, 48, 1, 0, 0, 0, 164, 165, 5, 110, 0, 0, 165, 166, 5, 105, 0, 0, 166, 167, 5, 108, 0, 0, 167, 50, 1, 0, 0, 0, 168, 169, 5, 99, 0, 0, 169, 170, 5, 111, 0, 0, 170, 171, 5, 109, 0, 0, 171, 172, 5, 112, 0, 0, 172, 173, 5, 111, 0, 0, 173, 174, 5, 110, 0, 0, 174, 175, 5, 101, 0, 0, 175, 176, 5, 110, 0, 0, 176, 177, 5, 116, 0, 0, 177, 52, 1, 0, 0, 0, 178, 179, 5, 110, 0, 0, 179, 180, 5, 111, 0, 0, 180, 181, 5, 100, 0, 0, 181, 182, 5, 101, 0, 0, 182, 183, 5, 115, 0, 0, 183, 54, 1, 0, 0, 0, 184, 185, 5, 110, 0, 0, 185, 186, 5, 101, 0, 0, 186, 187, 5, 116, 0, 0, 187, 56, 1, 0, 0, 0, 188, 189, 5, 45, 0, 0, 189, 190, 5, 62, 0, 0, 190, 58, 1, 0, 0, 0, 191, 192, 5, 61, 0, 0, 192, 193, 5, 62, 0, 0, 193, 60, 1, 0, 0, 0, 194, 195, 5, 36, 0, 0, 195, 62, 1, 0, 0, 0, 196, 197, 5, 47, 0, 0, 197, 198, 5, 47, 0, 0, 198, 202, 1, 0, 0, 0, 199, 201, 8, 0, 0, 0, 200, 199, 1, 0, 0, 0, 201, 204, 1, 0, 0, 0, 202, 200, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 64, 1, 0, 0, 0, 204, 202, 1, 0, 0, 0, 205, 206, 5, 112, 0, 0, 206, 207, 5, 117, 0, 0, 207, 208, 5, 98, 0, 0, 208, 66, 1, 0, 0, 0, 209, 214, 3, 69, 34, 0, 210, 213, 3, 69, 34, 0, 211, 213, 3, 71, 35, 0, 212, 210, 1, 0, 0, 0, 212, 211, 1, 0, 0, 0, 213, 216, 1, 0, 0, 0, 214, 212, 1, 0, 0, 0, 214, 215, 1, 0, 0, 0, 215, 68, 1, 0, 0, 0, 216, 214, 1, 0, 0, 0, 217, 218, 7, 1, 0, 0, 218, 70, 1, 0, 0, 0, 219, 221, 7, 2, 0, 0, 220, 219, 1, 0, 0, 0, 221, 222, 1, 0, 0, 0, 222, 220, 1, 0, 0, 0, 222, 223, 1, 0, 0, 0, 223, 72, 1, 0, 0, 0, 224, 226, 7, 2, 0, 0, 225, 224, 1, 0, 0, 0, 226, 229, 1, 0, 0, 0, 227, 225, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 230, 1, 0, 0, 0, 229, 227, 1, 0, 0, 0, 230, 232, 5, 46, 0, 0, 231, 233, 7, 2, 0, 0, 232, 231, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 232, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 74, 1, 0, 0, 0, 236, 240, 5, 39, 0, 0, 237, 239, 9, 0, 0, 0, 238, 237, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 241, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 241, 243, 1, 0, 0, 0, 242, 240, 1, 0, 0, 0, 243, 244, 5, 39, 0, 0, 244, 76, 1, 0, 0, 0, 245, 247, 5, 13, 0, 0, 246, 245, 1, 0, 0, 0, 246, 247, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 249, 5, 10, 0, 0, 249, 78, 1, 0, 0, 0, 250, 252, 7, 3, 0, 0, 251, 250, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 251, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 255, 1, 0, 0, 0, 255, 256, 6, 39, 0, 0, 256, 80, 1, 0, 0, 0, 10, 0, 202, 212, 214, 222, 227, 234, 240, 246, 253, 1, 0, 1, 0] \ No newline at end of file diff --git a/internal/compiler/parser/generated/nevaLexer.tokens b/internal/compiler/parser/generated/nevaLexer.tokens index e9270ce3..5ab72473 100644 --- a/internal/compiler/parser/generated/nevaLexer.tokens +++ b/internal/compiler/parser/generated/nevaLexer.tokens @@ -44,24 +44,24 @@ WS=39 'import'=5 '{'=6 '}'=7 -'/'=8 +':'=8 '@'=9 -'.'=10 -'type'=11 -'<'=12 -'>'=13 -'enum'=14 -'struct'=15 -'|'=16 -'interface'=17 -'['=18 -']'=19 -'const'=20 -'='=21 -'true'=22 -'false'=23 -'nil'=24 -':'=25 +'/'=10 +'.'=11 +'type'=12 +'<'=13 +'>'=14 +'enum'=15 +'struct'=16 +'|'=17 +'interface'=18 +'['=19 +']'=20 +'const'=21 +'='=22 +'true'=23 +'false'=24 +'nil'=25 'component'=26 'nodes'=27 'net'=28 diff --git a/internal/compiler/parser/generated/neva_base_listener.go b/internal/compiler/parser/generated/neva_base_listener.go index 55595289..3befa807 100644 --- a/internal/compiler/parser/generated/neva_base_listener.go +++ b/internal/compiler/parser/generated/neva_base_listener.go @@ -86,6 +86,18 @@ func (s *BasenevaListener) EnterImportPathMod(ctx *ImportPathModContext) {} // ExitImportPathMod is called when production importPathMod is exited. func (s *BasenevaListener) ExitImportPathMod(ctx *ImportPathModContext) {} +// EnterImportMod is called when production importMod is entered. +func (s *BasenevaListener) EnterImportMod(ctx *ImportModContext) {} + +// ExitImportMod is called when production importMod is exited. +func (s *BasenevaListener) ExitImportMod(ctx *ImportModContext) {} + +// EnterImportModeDelim is called when production importModeDelim is entered. +func (s *BasenevaListener) EnterImportModeDelim(ctx *ImportModeDelimContext) {} + +// ExitImportModeDelim is called when production importModeDelim is exited. +func (s *BasenevaListener) ExitImportModeDelim(ctx *ImportModeDelimContext) {} + // EnterImportPathPkg is called when production importPathPkg is entered. func (s *BasenevaListener) EnterImportPathPkg(ctx *ImportPathPkgContext) {} diff --git a/internal/compiler/parser/generated/neva_lexer.go b/internal/compiler/parser/generated/neva_lexer.go index 6f396bfc..0b11b390 100644 --- a/internal/compiler/parser/generated/neva_lexer.go +++ b/internal/compiler/parser/generated/neva_lexer.go @@ -43,10 +43,10 @@ func nevalexerLexerInit() { "DEFAULT_MODE", } staticData.LiteralNames = []string{ - "", "'#'", "'('", "','", "')'", "'import'", "'{'", "'}'", "'/'", "'@'", - "'.'", "'type'", "'<'", "'>'", "'enum'", "'struct'", "'|'", "'interface'", - "'['", "']'", "'const'", "'='", "'true'", "'false'", "'nil'", "':'", - "'component'", "'nodes'", "'net'", "'->'", "'=>'", "'$'", "", "'pub'", + "", "'#'", "'('", "','", "')'", "'import'", "'{'", "'}'", "':'", "'@'", + "'/'", "'.'", "'type'", "'<'", "'>'", "'enum'", "'struct'", "'|'", "'interface'", + "'['", "']'", "'const'", "'='", "'true'", "'false'", "'nil'", "'component'", + "'nodes'", "'net'", "'->'", "'=>'", "'$'", "", "'pub'", } staticData.SymbolicNames = []string{ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", @@ -72,12 +72,12 @@ func nevalexerLexerInit() { 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, - 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, - 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, - 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, - 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, - 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, - 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, + 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, + 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, + 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, + 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, + 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, + 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 201, 8, 31, @@ -106,11 +106,11 @@ func nevalexerLexerInit() { 0, 0, 0, 0, 79, 1, 0, 0, 0, 1, 81, 1, 0, 0, 0, 3, 83, 1, 0, 0, 0, 5, 85, 1, 0, 0, 0, 7, 87, 1, 0, 0, 0, 9, 89, 1, 0, 0, 0, 11, 96, 1, 0, 0, 0, 13, 98, 1, 0, 0, 0, 15, 100, 1, 0, 0, 0, 17, 102, 1, 0, 0, 0, 19, 104, 1, 0, - 0, 0, 21, 106, 1, 0, 0, 0, 23, 111, 1, 0, 0, 0, 25, 113, 1, 0, 0, 0, 27, - 115, 1, 0, 0, 0, 29, 120, 1, 0, 0, 0, 31, 127, 1, 0, 0, 0, 33, 129, 1, - 0, 0, 0, 35, 139, 1, 0, 0, 0, 37, 141, 1, 0, 0, 0, 39, 143, 1, 0, 0, 0, - 41, 149, 1, 0, 0, 0, 43, 151, 1, 0, 0, 0, 45, 156, 1, 0, 0, 0, 47, 162, - 1, 0, 0, 0, 49, 166, 1, 0, 0, 0, 51, 168, 1, 0, 0, 0, 53, 178, 1, 0, 0, + 0, 0, 21, 106, 1, 0, 0, 0, 23, 108, 1, 0, 0, 0, 25, 113, 1, 0, 0, 0, 27, + 115, 1, 0, 0, 0, 29, 117, 1, 0, 0, 0, 31, 122, 1, 0, 0, 0, 33, 129, 1, + 0, 0, 0, 35, 131, 1, 0, 0, 0, 37, 141, 1, 0, 0, 0, 39, 143, 1, 0, 0, 0, + 41, 145, 1, 0, 0, 0, 43, 151, 1, 0, 0, 0, 45, 153, 1, 0, 0, 0, 47, 158, + 1, 0, 0, 0, 49, 164, 1, 0, 0, 0, 51, 168, 1, 0, 0, 0, 53, 178, 1, 0, 0, 0, 55, 184, 1, 0, 0, 0, 57, 188, 1, 0, 0, 0, 59, 191, 1, 0, 0, 0, 61, 194, 1, 0, 0, 0, 63, 196, 1, 0, 0, 0, 65, 205, 1, 0, 0, 0, 67, 209, 1, 0, 0, 0, 69, 217, 1, 0, 0, 0, 71, 220, 1, 0, 0, 0, 73, 227, 1, 0, 0, 0, 75, 236, @@ -120,28 +120,28 @@ func nevalexerLexerInit() { 90, 5, 105, 0, 0, 90, 91, 5, 109, 0, 0, 91, 92, 5, 112, 0, 0, 92, 93, 5, 111, 0, 0, 93, 94, 5, 114, 0, 0, 94, 95, 5, 116, 0, 0, 95, 10, 1, 0, 0, 0, 96, 97, 5, 123, 0, 0, 97, 12, 1, 0, 0, 0, 98, 99, 5, 125, 0, 0, 99, - 14, 1, 0, 0, 0, 100, 101, 5, 47, 0, 0, 101, 16, 1, 0, 0, 0, 102, 103, 5, - 64, 0, 0, 103, 18, 1, 0, 0, 0, 104, 105, 5, 46, 0, 0, 105, 20, 1, 0, 0, - 0, 106, 107, 5, 116, 0, 0, 107, 108, 5, 121, 0, 0, 108, 109, 5, 112, 0, - 0, 109, 110, 5, 101, 0, 0, 110, 22, 1, 0, 0, 0, 111, 112, 5, 60, 0, 0, - 112, 24, 1, 0, 0, 0, 113, 114, 5, 62, 0, 0, 114, 26, 1, 0, 0, 0, 115, 116, - 5, 101, 0, 0, 116, 117, 5, 110, 0, 0, 117, 118, 5, 117, 0, 0, 118, 119, - 5, 109, 0, 0, 119, 28, 1, 0, 0, 0, 120, 121, 5, 115, 0, 0, 121, 122, 5, - 116, 0, 0, 122, 123, 5, 114, 0, 0, 123, 124, 5, 117, 0, 0, 124, 125, 5, - 99, 0, 0, 125, 126, 5, 116, 0, 0, 126, 30, 1, 0, 0, 0, 127, 128, 5, 124, - 0, 0, 128, 32, 1, 0, 0, 0, 129, 130, 5, 105, 0, 0, 130, 131, 5, 110, 0, - 0, 131, 132, 5, 116, 0, 0, 132, 133, 5, 101, 0, 0, 133, 134, 5, 114, 0, - 0, 134, 135, 5, 102, 0, 0, 135, 136, 5, 97, 0, 0, 136, 137, 5, 99, 0, 0, - 137, 138, 5, 101, 0, 0, 138, 34, 1, 0, 0, 0, 139, 140, 5, 91, 0, 0, 140, - 36, 1, 0, 0, 0, 141, 142, 5, 93, 0, 0, 142, 38, 1, 0, 0, 0, 143, 144, 5, - 99, 0, 0, 144, 145, 5, 111, 0, 0, 145, 146, 5, 110, 0, 0, 146, 147, 5, - 115, 0, 0, 147, 148, 5, 116, 0, 0, 148, 40, 1, 0, 0, 0, 149, 150, 5, 61, - 0, 0, 150, 42, 1, 0, 0, 0, 151, 152, 5, 116, 0, 0, 152, 153, 5, 114, 0, - 0, 153, 154, 5, 117, 0, 0, 154, 155, 5, 101, 0, 0, 155, 44, 1, 0, 0, 0, - 156, 157, 5, 102, 0, 0, 157, 158, 5, 97, 0, 0, 158, 159, 5, 108, 0, 0, - 159, 160, 5, 115, 0, 0, 160, 161, 5, 101, 0, 0, 161, 46, 1, 0, 0, 0, 162, - 163, 5, 110, 0, 0, 163, 164, 5, 105, 0, 0, 164, 165, 5, 108, 0, 0, 165, - 48, 1, 0, 0, 0, 166, 167, 5, 58, 0, 0, 167, 50, 1, 0, 0, 0, 168, 169, 5, + 14, 1, 0, 0, 0, 100, 101, 5, 58, 0, 0, 101, 16, 1, 0, 0, 0, 102, 103, 5, + 64, 0, 0, 103, 18, 1, 0, 0, 0, 104, 105, 5, 47, 0, 0, 105, 20, 1, 0, 0, + 0, 106, 107, 5, 46, 0, 0, 107, 22, 1, 0, 0, 0, 108, 109, 5, 116, 0, 0, + 109, 110, 5, 121, 0, 0, 110, 111, 5, 112, 0, 0, 111, 112, 5, 101, 0, 0, + 112, 24, 1, 0, 0, 0, 113, 114, 5, 60, 0, 0, 114, 26, 1, 0, 0, 0, 115, 116, + 5, 62, 0, 0, 116, 28, 1, 0, 0, 0, 117, 118, 5, 101, 0, 0, 118, 119, 5, + 110, 0, 0, 119, 120, 5, 117, 0, 0, 120, 121, 5, 109, 0, 0, 121, 30, 1, + 0, 0, 0, 122, 123, 5, 115, 0, 0, 123, 124, 5, 116, 0, 0, 124, 125, 5, 114, + 0, 0, 125, 126, 5, 117, 0, 0, 126, 127, 5, 99, 0, 0, 127, 128, 5, 116, + 0, 0, 128, 32, 1, 0, 0, 0, 129, 130, 5, 124, 0, 0, 130, 34, 1, 0, 0, 0, + 131, 132, 5, 105, 0, 0, 132, 133, 5, 110, 0, 0, 133, 134, 5, 116, 0, 0, + 134, 135, 5, 101, 0, 0, 135, 136, 5, 114, 0, 0, 136, 137, 5, 102, 0, 0, + 137, 138, 5, 97, 0, 0, 138, 139, 5, 99, 0, 0, 139, 140, 5, 101, 0, 0, 140, + 36, 1, 0, 0, 0, 141, 142, 5, 91, 0, 0, 142, 38, 1, 0, 0, 0, 143, 144, 5, + 93, 0, 0, 144, 40, 1, 0, 0, 0, 145, 146, 5, 99, 0, 0, 146, 147, 5, 111, + 0, 0, 147, 148, 5, 110, 0, 0, 148, 149, 5, 115, 0, 0, 149, 150, 5, 116, + 0, 0, 150, 42, 1, 0, 0, 0, 151, 152, 5, 61, 0, 0, 152, 44, 1, 0, 0, 0, + 153, 154, 5, 116, 0, 0, 154, 155, 5, 114, 0, 0, 155, 156, 5, 117, 0, 0, + 156, 157, 5, 101, 0, 0, 157, 46, 1, 0, 0, 0, 158, 159, 5, 102, 0, 0, 159, + 160, 5, 97, 0, 0, 160, 161, 5, 108, 0, 0, 161, 162, 5, 115, 0, 0, 162, + 163, 5, 101, 0, 0, 163, 48, 1, 0, 0, 0, 164, 165, 5, 110, 0, 0, 165, 166, + 5, 105, 0, 0, 166, 167, 5, 108, 0, 0, 167, 50, 1, 0, 0, 0, 168, 169, 5, 99, 0, 0, 169, 170, 5, 111, 0, 0, 170, 171, 5, 109, 0, 0, 171, 172, 5, 112, 0, 0, 172, 173, 5, 111, 0, 0, 173, 174, 5, 110, 0, 0, 174, 175, 5, 101, 0, 0, 175, 176, 5, 110, 0, 0, 176, 177, 5, 116, 0, 0, 177, 52, 1, diff --git a/internal/compiler/parser/generated/neva_listener.go b/internal/compiler/parser/generated/neva_listener.go index 7f4f8542..1bfca9de 100644 --- a/internal/compiler/parser/generated/neva_listener.go +++ b/internal/compiler/parser/generated/neva_listener.go @@ -40,6 +40,12 @@ type nevaListener interface { // EnterImportPathMod is called when entering the importPathMod production. EnterImportPathMod(c *ImportPathModContext) + // EnterImportMod is called when entering the importMod production. + EnterImportMod(c *ImportModContext) + + // EnterImportModeDelim is called when entering the importModeDelim production. + EnterImportModeDelim(c *ImportModeDelimContext) + // EnterImportPathPkg is called when entering the importPathPkg production. EnterImportPathPkg(c *ImportPathPkgContext) @@ -289,6 +295,12 @@ type nevaListener interface { // ExitImportPathMod is called when exiting the importPathMod production. ExitImportPathMod(c *ImportPathModContext) + // ExitImportMod is called when exiting the importMod production. + ExitImportMod(c *ImportModContext) + + // ExitImportModeDelim is called when exiting the importModeDelim production. + ExitImportModeDelim(c *ImportModeDelimContext) + // ExitImportPathPkg is called when exiting the importPathPkg production. ExitImportPathPkg(c *ImportPathPkgContext) diff --git a/internal/compiler/parser/generated/neva_parser.go b/internal/compiler/parser/generated/neva_parser.go index d5b1669f..4a6e60e0 100644 --- a/internal/compiler/parser/generated/neva_parser.go +++ b/internal/compiler/parser/generated/neva_parser.go @@ -32,10 +32,10 @@ var NevaParserStaticData struct { func nevaParserInit() { staticData := &NevaParserStaticData staticData.LiteralNames = []string{ - "", "'#'", "'('", "','", "')'", "'import'", "'{'", "'}'", "'/'", "'@'", - "'.'", "'type'", "'<'", "'>'", "'enum'", "'struct'", "'|'", "'interface'", - "'['", "']'", "'const'", "'='", "'true'", "'false'", "'nil'", "':'", - "'component'", "'nodes'", "'net'", "'->'", "'=>'", "'$'", "", "'pub'", + "", "'#'", "'('", "','", "')'", "'import'", "'{'", "'}'", "':'", "'@'", + "'/'", "'.'", "'type'", "'<'", "'>'", "'enum'", "'struct'", "'|'", "'interface'", + "'['", "']'", "'const'", "'='", "'true'", "'false'", "'nil'", "'component'", + "'nodes'", "'net'", "'->'", "'=>'", "'$'", "", "'pub'", } staticData.SymbolicNames = []string{ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", @@ -45,25 +45,26 @@ func nevaParserInit() { staticData.RuleNames = []string{ "prog", "stmt", "compilerDirectives", "compilerDirective", "compilerDirectivesArgs", "compiler_directive_arg", "importStmt", "importDef", "importAlias", - "importPath", "importPathMod", "importPathPkg", "entityRef", "localEntityRef", - "importedEntityRef", "pkgRef", "entityName", "typeStmt", "singleTypeStmt", - "groupTypeStmt", "typeDef", "typeParams", "typeParamList", "typeParam", - "typeExpr", "typeInstExpr", "typeArgs", "typeLitExpr", "enumTypeExpr", - "structTypeExpr", "structFields", "structField", "unionTypeExpr", "nonUnionTypeExpr", - "interfaceStmt", "singleInterfaceStmt", "groupInterfaceStmt", "interfaceDef", - "inPortsDef", "outPortsDef", "portsDef", "portDef", "singlePortDef", - "arrayPortDef", "constStmt", "singleConstStmt", "groupConstStmt", "constDef", - "constVal", "bool", "nil", "listLit", "listItems", "structLit", "structValueFields", - "structValueField", "compStmt", "singleCompStmt", "groupCompStmt", "compDef", - "compBody", "compNodesDef", "compNodesDefBody", "compNodeDef", "nodeInst", - "nodeDIArgs", "compNetDef", "connDefList", "connDef", "normConnDef", - "arrBypassConnDef", "senderSide", "receiverSide", "thenConnExpr", "senderConstRef", - "portAddr", "singlePortAddr", "arrPortAddr", "portAddrNode", "portAddrPort", - "portAddrIdx", "structSelectors", "multipleReceiverSide", + "importPath", "importPathMod", "importMod", "importModeDelim", "importPathPkg", + "entityRef", "localEntityRef", "importedEntityRef", "pkgRef", "entityName", + "typeStmt", "singleTypeStmt", "groupTypeStmt", "typeDef", "typeParams", + "typeParamList", "typeParam", "typeExpr", "typeInstExpr", "typeArgs", + "typeLitExpr", "enumTypeExpr", "structTypeExpr", "structFields", "structField", + "unionTypeExpr", "nonUnionTypeExpr", "interfaceStmt", "singleInterfaceStmt", + "groupInterfaceStmt", "interfaceDef", "inPortsDef", "outPortsDef", "portsDef", + "portDef", "singlePortDef", "arrayPortDef", "constStmt", "singleConstStmt", + "groupConstStmt", "constDef", "constVal", "bool", "nil", "listLit", + "listItems", "structLit", "structValueFields", "structValueField", "compStmt", + "singleCompStmt", "groupCompStmt", "compDef", "compBody", "compNodesDef", + "compNodesDefBody", "compNodeDef", "nodeInst", "nodeDIArgs", "compNetDef", + "connDefList", "connDef", "normConnDef", "arrBypassConnDef", "senderSide", + "receiverSide", "thenConnExpr", "senderConstRef", "portAddr", "singlePortAddr", + "arrPortAddr", "portAddrNode", "portAddrPort", "portAddrIdx", "structSelectors", + "multipleReceiverSide", } staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 1, 39, 1031, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, + 4, 1, 39, 1050, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, @@ -78,460 +79,469 @@ func nevaParserInit() { 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, - 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 1, 0, 1, 0, 1, - 0, 5, 0, 170, 8, 0, 10, 0, 12, 0, 173, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 3, 1, 182, 8, 1, 1, 2, 1, 2, 1, 2, 4, 2, 187, 8, 2, 11, - 2, 12, 2, 188, 1, 3, 1, 3, 1, 3, 3, 3, 194, 8, 3, 1, 4, 1, 4, 1, 4, 1, - 4, 5, 4, 200, 8, 4, 10, 4, 12, 4, 203, 9, 4, 1, 4, 1, 4, 1, 5, 4, 5, 208, - 8, 5, 11, 5, 12, 5, 209, 1, 6, 1, 6, 5, 6, 214, 8, 6, 10, 6, 12, 6, 217, - 9, 6, 1, 6, 1, 6, 5, 6, 221, 8, 6, 10, 6, 12, 6, 224, 9, 6, 1, 6, 5, 6, - 227, 8, 6, 10, 6, 12, 6, 230, 9, 6, 1, 6, 1, 6, 1, 7, 3, 7, 235, 8, 7, - 1, 7, 1, 7, 5, 7, 239, 8, 7, 10, 7, 12, 7, 242, 9, 7, 1, 8, 1, 8, 1, 9, - 1, 9, 1, 9, 3, 9, 249, 8, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, - 11, 5, 11, 258, 8, 11, 10, 11, 12, 11, 261, 9, 11, 1, 12, 1, 12, 3, 12, - 265, 8, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 3, 14, 272, 8, 14, 1, 15, - 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 3, 17, 280, 8, 17, 1, 18, 3, 18, 283, - 8, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 5, 19, 290, 8, 19, 10, 19, 12, - 19, 293, 9, 19, 1, 19, 1, 19, 5, 19, 297, 8, 19, 10, 19, 12, 19, 300, 9, - 19, 1, 19, 3, 19, 303, 8, 19, 1, 19, 1, 19, 5, 19, 307, 8, 19, 10, 19, - 12, 19, 310, 9, 19, 5, 19, 312, 8, 19, 10, 19, 12, 19, 315, 9, 19, 1, 19, - 1, 19, 1, 20, 1, 20, 3, 20, 321, 8, 20, 1, 20, 3, 20, 324, 8, 20, 1, 21, - 1, 21, 5, 21, 328, 8, 21, 10, 21, 12, 21, 331, 9, 21, 1, 21, 3, 21, 334, - 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 5, 22, 341, 8, 22, 10, 22, 12, - 22, 344, 9, 22, 1, 22, 5, 22, 347, 8, 22, 10, 22, 12, 22, 350, 9, 22, 1, - 23, 1, 23, 3, 23, 354, 8, 23, 1, 23, 5, 23, 357, 8, 23, 10, 23, 12, 23, - 360, 9, 23, 1, 24, 1, 24, 1, 24, 3, 24, 365, 8, 24, 1, 25, 1, 25, 3, 25, - 369, 8, 25, 1, 26, 1, 26, 5, 26, 373, 8, 26, 10, 26, 12, 26, 376, 9, 26, - 1, 26, 1, 26, 1, 26, 5, 26, 381, 8, 26, 10, 26, 12, 26, 384, 9, 26, 1, - 26, 5, 26, 387, 8, 26, 10, 26, 12, 26, 390, 9, 26, 1, 26, 5, 26, 393, 8, - 26, 10, 26, 12, 26, 396, 9, 26, 1, 26, 1, 26, 1, 27, 1, 27, 3, 27, 402, - 8, 27, 1, 28, 1, 28, 5, 28, 406, 8, 28, 10, 28, 12, 28, 409, 9, 28, 1, - 28, 1, 28, 5, 28, 413, 8, 28, 10, 28, 12, 28, 416, 9, 28, 1, 28, 1, 28, - 1, 28, 5, 28, 421, 8, 28, 10, 28, 12, 28, 424, 9, 28, 1, 28, 5, 28, 427, - 8, 28, 10, 28, 12, 28, 430, 9, 28, 1, 28, 5, 28, 433, 8, 28, 10, 28, 12, - 28, 436, 9, 28, 1, 28, 1, 28, 1, 29, 1, 29, 5, 29, 442, 8, 29, 10, 29, - 12, 29, 445, 9, 29, 1, 29, 1, 29, 5, 29, 449, 8, 29, 10, 29, 12, 29, 452, - 9, 29, 1, 29, 3, 29, 455, 8, 29, 1, 29, 1, 29, 1, 30, 1, 30, 4, 30, 461, - 8, 30, 11, 30, 12, 30, 462, 1, 30, 5, 30, 466, 8, 30, 10, 30, 12, 30, 469, - 9, 30, 1, 31, 1, 31, 1, 31, 5, 31, 474, 8, 31, 10, 31, 12, 31, 477, 9, - 31, 1, 32, 1, 32, 5, 32, 481, 8, 32, 10, 32, 12, 32, 484, 9, 32, 1, 32, - 1, 32, 5, 32, 488, 8, 32, 10, 32, 12, 32, 491, 9, 32, 1, 32, 4, 32, 494, - 8, 32, 11, 32, 12, 32, 495, 1, 33, 1, 33, 3, 33, 500, 8, 33, 1, 34, 1, - 34, 3, 34, 504, 8, 34, 1, 35, 3, 35, 507, 8, 35, 1, 35, 1, 35, 1, 35, 1, - 36, 1, 36, 5, 36, 514, 8, 36, 10, 36, 12, 36, 517, 9, 36, 1, 36, 1, 36, - 5, 36, 521, 8, 36, 10, 36, 12, 36, 524, 9, 36, 1, 36, 3, 36, 527, 8, 36, - 1, 36, 5, 36, 530, 8, 36, 10, 36, 12, 36, 533, 9, 36, 1, 36, 1, 36, 1, - 37, 1, 37, 3, 37, 539, 8, 37, 1, 37, 1, 37, 1, 37, 5, 37, 544, 8, 37, 10, - 37, 12, 37, 547, 9, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 5, 40, - 555, 8, 40, 10, 40, 12, 40, 558, 9, 40, 1, 40, 3, 40, 561, 8, 40, 1, 40, - 1, 40, 1, 40, 5, 40, 566, 8, 40, 10, 40, 12, 40, 569, 9, 40, 3, 40, 571, - 8, 40, 1, 40, 1, 40, 1, 41, 1, 41, 3, 41, 577, 8, 41, 1, 42, 5, 42, 580, - 8, 42, 10, 42, 12, 42, 583, 9, 42, 1, 42, 1, 42, 1, 42, 5, 42, 588, 8, - 42, 10, 42, 12, 42, 591, 9, 42, 1, 43, 5, 43, 594, 8, 43, 10, 43, 12, 43, - 597, 9, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 5, 43, 604, 8, 43, 10, 43, - 12, 43, 607, 9, 43, 1, 44, 1, 44, 3, 44, 611, 8, 44, 1, 45, 3, 45, 614, - 8, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 5, 46, 621, 8, 46, 10, 46, 12, - 46, 624, 9, 46, 1, 46, 1, 46, 5, 46, 628, 8, 46, 10, 46, 12, 46, 631, 9, - 46, 1, 46, 3, 46, 634, 8, 46, 1, 46, 5, 46, 637, 8, 46, 10, 46, 12, 46, - 640, 9, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 649, - 8, 47, 10, 47, 12, 47, 652, 9, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, - 48, 1, 48, 3, 48, 661, 8, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, - 5, 51, 669, 8, 51, 10, 51, 12, 51, 672, 9, 51, 1, 51, 3, 51, 675, 8, 51, - 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 683, 8, 52, 10, 52, 12, - 52, 686, 9, 52, 1, 52, 1, 52, 5, 52, 690, 8, 52, 10, 52, 12, 52, 693, 9, - 52, 5, 52, 695, 8, 52, 10, 52, 12, 52, 698, 9, 52, 3, 52, 700, 8, 52, 1, - 53, 1, 53, 5, 53, 704, 8, 53, 10, 53, 12, 53, 707, 9, 53, 1, 53, 3, 53, - 710, 8, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 5, 54, 717, 8, 54, 10, 54, - 12, 54, 720, 9, 54, 1, 54, 5, 54, 723, 8, 54, 10, 54, 12, 54, 726, 9, 54, - 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 732, 8, 55, 10, 55, 12, 55, 735, 9, - 55, 1, 56, 1, 56, 3, 56, 739, 8, 56, 1, 57, 3, 57, 742, 8, 57, 1, 57, 3, - 57, 745, 8, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 5, 58, 752, 8, 58, 10, - 58, 12, 58, 755, 9, 58, 1, 58, 1, 58, 5, 58, 759, 8, 58, 10, 58, 12, 58, - 762, 9, 58, 1, 58, 3, 58, 765, 8, 58, 1, 58, 3, 58, 768, 8, 58, 1, 58, - 5, 58, 771, 8, 58, 10, 58, 12, 58, 774, 9, 58, 1, 58, 1, 58, 1, 59, 1, - 59, 3, 59, 780, 8, 59, 1, 59, 5, 59, 783, 8, 59, 10, 59, 12, 59, 786, 9, - 59, 1, 60, 1, 60, 5, 60, 790, 8, 60, 10, 60, 12, 60, 793, 9, 60, 1, 60, - 1, 60, 5, 60, 797, 8, 60, 10, 60, 12, 60, 800, 9, 60, 3, 60, 802, 8, 60, - 1, 60, 1, 60, 5, 60, 806, 8, 60, 10, 60, 12, 60, 809, 9, 60, 3, 60, 811, - 8, 60, 1, 60, 1, 60, 1, 61, 1, 61, 5, 61, 817, 8, 61, 10, 61, 12, 61, 820, - 9, 61, 1, 61, 1, 61, 1, 62, 1, 62, 5, 62, 826, 8, 62, 10, 62, 12, 62, 829, - 9, 62, 1, 62, 1, 62, 5, 62, 833, 8, 62, 10, 62, 12, 62, 836, 9, 62, 5, - 62, 838, 8, 62, 10, 62, 12, 62, 841, 9, 62, 1, 62, 1, 62, 1, 63, 3, 63, - 846, 8, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 5, 64, 853, 8, 64, 10, 64, - 12, 64, 856, 9, 64, 1, 64, 3, 64, 859, 8, 64, 1, 64, 5, 64, 862, 8, 64, - 10, 64, 12, 64, 865, 9, 64, 1, 64, 3, 64, 868, 8, 64, 1, 65, 1, 65, 1, - 66, 1, 66, 5, 66, 874, 8, 66, 10, 66, 12, 66, 877, 9, 66, 1, 66, 1, 66, + 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, + 84, 7, 84, 1, 0, 1, 0, 1, 0, 5, 0, 174, 8, 0, 10, 0, 12, 0, 177, 9, 0, + 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 186, 8, 1, 1, 2, 1, 2, + 1, 2, 4, 2, 191, 8, 2, 11, 2, 12, 2, 192, 1, 3, 1, 3, 1, 3, 3, 3, 198, + 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 204, 8, 4, 10, 4, 12, 4, 207, 9, 4, + 1, 4, 1, 4, 1, 5, 4, 5, 212, 8, 5, 11, 5, 12, 5, 213, 1, 6, 1, 6, 5, 6, + 218, 8, 6, 10, 6, 12, 6, 221, 9, 6, 1, 6, 1, 6, 5, 6, 225, 8, 6, 10, 6, + 12, 6, 228, 9, 6, 1, 6, 5, 6, 231, 8, 6, 10, 6, 12, 6, 234, 9, 6, 1, 6, + 1, 6, 1, 7, 3, 7, 239, 8, 7, 1, 7, 1, 7, 5, 7, 243, 8, 7, 10, 7, 12, 7, + 246, 9, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 3, 9, 253, 8, 9, 1, 9, 1, 9, 1, + 10, 1, 10, 3, 10, 259, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 265, 8, + 11, 10, 11, 12, 11, 268, 9, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 5, 13, + 275, 8, 13, 10, 13, 12, 13, 278, 9, 13, 1, 14, 1, 14, 3, 14, 282, 8, 14, + 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 3, 16, 289, 8, 16, 1, 17, 1, 17, 1, + 18, 1, 18, 1, 19, 1, 19, 3, 19, 297, 8, 19, 1, 20, 3, 20, 300, 8, 20, 1, + 20, 1, 20, 1, 20, 1, 21, 1, 21, 5, 21, 307, 8, 21, 10, 21, 12, 21, 310, + 9, 21, 1, 21, 1, 21, 5, 21, 314, 8, 21, 10, 21, 12, 21, 317, 9, 21, 1, + 21, 3, 21, 320, 8, 21, 1, 21, 1, 21, 5, 21, 324, 8, 21, 10, 21, 12, 21, + 327, 9, 21, 5, 21, 329, 8, 21, 10, 21, 12, 21, 332, 9, 21, 1, 21, 1, 21, + 1, 22, 1, 22, 3, 22, 338, 8, 22, 1, 22, 3, 22, 341, 8, 22, 1, 23, 1, 23, + 5, 23, 345, 8, 23, 10, 23, 12, 23, 348, 9, 23, 1, 23, 3, 23, 351, 8, 23, + 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 5, 24, 358, 8, 24, 10, 24, 12, 24, 361, + 9, 24, 1, 24, 5, 24, 364, 8, 24, 10, 24, 12, 24, 367, 9, 24, 1, 25, 1, + 25, 3, 25, 371, 8, 25, 1, 25, 5, 25, 374, 8, 25, 10, 25, 12, 25, 377, 9, + 25, 1, 26, 1, 26, 1, 26, 3, 26, 382, 8, 26, 1, 27, 1, 27, 3, 27, 386, 8, + 27, 1, 28, 1, 28, 5, 28, 390, 8, 28, 10, 28, 12, 28, 393, 9, 28, 1, 28, + 1, 28, 1, 28, 5, 28, 398, 8, 28, 10, 28, 12, 28, 401, 9, 28, 1, 28, 5, + 28, 404, 8, 28, 10, 28, 12, 28, 407, 9, 28, 1, 28, 5, 28, 410, 8, 28, 10, + 28, 12, 28, 413, 9, 28, 1, 28, 1, 28, 1, 29, 1, 29, 3, 29, 419, 8, 29, + 1, 30, 1, 30, 5, 30, 423, 8, 30, 10, 30, 12, 30, 426, 9, 30, 1, 30, 1, + 30, 5, 30, 430, 8, 30, 10, 30, 12, 30, 433, 9, 30, 1, 30, 1, 30, 1, 30, + 5, 30, 438, 8, 30, 10, 30, 12, 30, 441, 9, 30, 1, 30, 5, 30, 444, 8, 30, + 10, 30, 12, 30, 447, 9, 30, 1, 30, 5, 30, 450, 8, 30, 10, 30, 12, 30, 453, + 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 5, 31, 459, 8, 31, 10, 31, 12, 31, 462, + 9, 31, 1, 31, 1, 31, 5, 31, 466, 8, 31, 10, 31, 12, 31, 469, 9, 31, 1, + 31, 3, 31, 472, 8, 31, 1, 31, 1, 31, 1, 32, 1, 32, 4, 32, 478, 8, 32, 11, + 32, 12, 32, 479, 1, 32, 5, 32, 483, 8, 32, 10, 32, 12, 32, 486, 9, 32, + 1, 33, 1, 33, 1, 33, 5, 33, 491, 8, 33, 10, 33, 12, 33, 494, 9, 33, 1, + 34, 1, 34, 5, 34, 498, 8, 34, 10, 34, 12, 34, 501, 9, 34, 1, 34, 1, 34, + 5, 34, 505, 8, 34, 10, 34, 12, 34, 508, 9, 34, 1, 34, 4, 34, 511, 8, 34, + 11, 34, 12, 34, 512, 1, 35, 1, 35, 3, 35, 517, 8, 35, 1, 36, 1, 36, 3, + 36, 521, 8, 36, 1, 37, 3, 37, 524, 8, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, + 38, 5, 38, 531, 8, 38, 10, 38, 12, 38, 534, 9, 38, 1, 38, 1, 38, 5, 38, + 538, 8, 38, 10, 38, 12, 38, 541, 9, 38, 1, 38, 3, 38, 544, 8, 38, 1, 38, + 5, 38, 547, 8, 38, 10, 38, 12, 38, 550, 9, 38, 1, 38, 1, 38, 1, 39, 1, + 39, 3, 39, 556, 8, 39, 1, 39, 1, 39, 1, 39, 5, 39, 561, 8, 39, 10, 39, + 12, 39, 564, 9, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 5, 42, 572, + 8, 42, 10, 42, 12, 42, 575, 9, 42, 1, 42, 3, 42, 578, 8, 42, 1, 42, 1, + 42, 1, 42, 5, 42, 583, 8, 42, 10, 42, 12, 42, 586, 9, 42, 3, 42, 588, 8, + 42, 1, 42, 1, 42, 1, 43, 1, 43, 3, 43, 594, 8, 43, 1, 44, 5, 44, 597, 8, + 44, 10, 44, 12, 44, 600, 9, 44, 1, 44, 1, 44, 1, 44, 5, 44, 605, 8, 44, + 10, 44, 12, 44, 608, 9, 44, 1, 45, 5, 45, 611, 8, 45, 10, 45, 12, 45, 614, + 9, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 621, 8, 45, 10, 45, 12, + 45, 624, 9, 45, 1, 46, 1, 46, 3, 46, 628, 8, 46, 1, 47, 3, 47, 631, 8, + 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 5, 48, 638, 8, 48, 10, 48, 12, 48, + 641, 9, 48, 1, 48, 1, 48, 5, 48, 645, 8, 48, 10, 48, 12, 48, 648, 9, 48, + 1, 48, 3, 48, 651, 8, 48, 1, 48, 5, 48, 654, 8, 48, 10, 48, 12, 48, 657, + 9, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 5, 49, 666, 8, + 49, 10, 49, 12, 49, 669, 9, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, + 1, 50, 3, 50, 678, 8, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 5, + 53, 686, 8, 53, 10, 53, 12, 53, 689, 9, 53, 1, 53, 3, 53, 692, 8, 53, 1, + 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 5, 54, 700, 8, 54, 10, 54, 12, 54, + 703, 9, 54, 1, 54, 1, 54, 5, 54, 707, 8, 54, 10, 54, 12, 54, 710, 9, 54, + 5, 54, 712, 8, 54, 10, 54, 12, 54, 715, 9, 54, 3, 54, 717, 8, 54, 1, 55, + 1, 55, 5, 55, 721, 8, 55, 10, 55, 12, 55, 724, 9, 55, 1, 55, 3, 55, 727, + 8, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 5, 56, 734, 8, 56, 10, 56, 12, + 56, 737, 9, 56, 1, 56, 5, 56, 740, 8, 56, 10, 56, 12, 56, 743, 9, 56, 1, + 57, 1, 57, 1, 57, 1, 57, 5, 57, 749, 8, 57, 10, 57, 12, 57, 752, 9, 57, + 1, 58, 1, 58, 3, 58, 756, 8, 58, 1, 59, 3, 59, 759, 8, 59, 1, 59, 3, 59, + 762, 8, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 5, 60, 769, 8, 60, 10, 60, + 12, 60, 772, 9, 60, 1, 60, 1, 60, 5, 60, 776, 8, 60, 10, 60, 12, 60, 779, + 9, 60, 1, 60, 3, 60, 782, 8, 60, 1, 60, 3, 60, 785, 8, 60, 1, 60, 5, 60, + 788, 8, 60, 10, 60, 12, 60, 791, 9, 60, 1, 60, 1, 60, 1, 61, 1, 61, 3, + 61, 797, 8, 61, 1, 61, 5, 61, 800, 8, 61, 10, 61, 12, 61, 803, 9, 61, 1, + 62, 1, 62, 5, 62, 807, 8, 62, 10, 62, 12, 62, 810, 9, 62, 1, 62, 1, 62, + 5, 62, 814, 8, 62, 10, 62, 12, 62, 817, 9, 62, 3, 62, 819, 8, 62, 1, 62, + 1, 62, 5, 62, 823, 8, 62, 10, 62, 12, 62, 826, 9, 62, 3, 62, 828, 8, 62, + 1, 62, 1, 62, 1, 63, 1, 63, 5, 63, 834, 8, 63, 10, 63, 12, 63, 837, 9, + 63, 1, 63, 1, 63, 1, 64, 1, 64, 5, 64, 843, 8, 64, 10, 64, 12, 64, 846, + 9, 64, 1, 64, 1, 64, 5, 64, 850, 8, 64, 10, 64, 12, 64, 853, 9, 64, 5, + 64, 855, 8, 64, 10, 64, 12, 64, 858, 9, 64, 1, 64, 1, 64, 1, 65, 3, 65, + 863, 8, 65, 1, 65, 3, 65, 866, 8, 65, 1, 65, 1, 65, 1, 66, 1, 66, 5, 66, + 872, 8, 66, 10, 66, 12, 66, 875, 9, 66, 1, 66, 3, 66, 878, 8, 66, 1, 66, 5, 66, 881, 8, 66, 10, 66, 12, 66, 884, 9, 66, 1, 66, 3, 66, 887, 8, 66, - 1, 66, 5, 66, 890, 8, 66, 10, 66, 12, 66, 893, 9, 66, 1, 66, 1, 66, 1, - 67, 1, 67, 5, 67, 899, 8, 67, 10, 67, 12, 67, 902, 9, 67, 1, 67, 5, 67, - 905, 8, 67, 10, 67, 12, 67, 908, 9, 67, 1, 68, 1, 68, 3, 68, 912, 8, 68, - 1, 69, 1, 69, 1, 69, 1, 69, 3, 69, 918, 8, 69, 1, 70, 1, 70, 1, 70, 1, - 70, 1, 71, 1, 71, 1, 71, 3, 71, 927, 8, 71, 1, 71, 3, 71, 930, 8, 71, 1, - 72, 1, 72, 3, 72, 934, 8, 72, 1, 73, 1, 73, 5, 73, 938, 8, 73, 10, 73, - 12, 73, 941, 9, 73, 1, 73, 1, 73, 1, 73, 5, 73, 946, 8, 73, 10, 73, 12, - 73, 949, 9, 73, 1, 73, 5, 73, 952, 8, 73, 10, 73, 12, 73, 955, 9, 73, 1, - 73, 5, 73, 958, 8, 73, 10, 73, 12, 73, 961, 9, 73, 1, 73, 1, 73, 1, 74, - 1, 74, 1, 74, 1, 75, 1, 75, 3, 75, 970, 8, 75, 1, 76, 3, 76, 973, 8, 76, - 1, 76, 1, 76, 1, 76, 1, 77, 3, 77, 979, 8, 77, 1, 77, 1, 77, 1, 77, 1, - 77, 1, 78, 1, 78, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, - 1, 81, 1, 81, 5, 81, 997, 8, 81, 10, 81, 12, 81, 1000, 9, 81, 1, 82, 1, - 82, 5, 82, 1004, 8, 82, 10, 82, 12, 82, 1007, 9, 82, 1, 82, 1, 82, 1, 82, - 5, 82, 1012, 8, 82, 10, 82, 12, 82, 1015, 9, 82, 1, 82, 1, 82, 5, 82, 1019, - 8, 82, 10, 82, 12, 82, 1022, 9, 82, 5, 82, 1024, 8, 82, 10, 82, 12, 82, - 1027, 9, 82, 1, 82, 1, 82, 1, 82, 0, 0, 83, 0, 2, 4, 6, 8, 10, 12, 14, - 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, - 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, - 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, - 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, - 150, 152, 154, 156, 158, 160, 162, 164, 0, 2, 2, 0, 9, 9, 34, 34, 1, 0, - 22, 23, 1095, 0, 171, 1, 0, 0, 0, 2, 181, 1, 0, 0, 0, 4, 186, 1, 0, 0, - 0, 6, 190, 1, 0, 0, 0, 8, 195, 1, 0, 0, 0, 10, 207, 1, 0, 0, 0, 12, 211, - 1, 0, 0, 0, 14, 234, 1, 0, 0, 0, 16, 243, 1, 0, 0, 0, 18, 248, 1, 0, 0, - 0, 20, 252, 1, 0, 0, 0, 22, 254, 1, 0, 0, 0, 24, 264, 1, 0, 0, 0, 26, 266, - 1, 0, 0, 0, 28, 268, 1, 0, 0, 0, 30, 273, 1, 0, 0, 0, 32, 275, 1, 0, 0, - 0, 34, 279, 1, 0, 0, 0, 36, 282, 1, 0, 0, 0, 38, 287, 1, 0, 0, 0, 40, 318, - 1, 0, 0, 0, 42, 325, 1, 0, 0, 0, 44, 337, 1, 0, 0, 0, 46, 351, 1, 0, 0, - 0, 48, 364, 1, 0, 0, 0, 50, 366, 1, 0, 0, 0, 52, 370, 1, 0, 0, 0, 54, 401, - 1, 0, 0, 0, 56, 403, 1, 0, 0, 0, 58, 439, 1, 0, 0, 0, 60, 458, 1, 0, 0, - 0, 62, 470, 1, 0, 0, 0, 64, 478, 1, 0, 0, 0, 66, 499, 1, 0, 0, 0, 68, 503, - 1, 0, 0, 0, 70, 506, 1, 0, 0, 0, 72, 511, 1, 0, 0, 0, 74, 536, 1, 0, 0, - 0, 76, 548, 1, 0, 0, 0, 78, 550, 1, 0, 0, 0, 80, 552, 1, 0, 0, 0, 82, 576, - 1, 0, 0, 0, 84, 581, 1, 0, 0, 0, 86, 595, 1, 0, 0, 0, 88, 610, 1, 0, 0, - 0, 90, 613, 1, 0, 0, 0, 92, 618, 1, 0, 0, 0, 94, 643, 1, 0, 0, 0, 96, 660, - 1, 0, 0, 0, 98, 662, 1, 0, 0, 0, 100, 664, 1, 0, 0, 0, 102, 666, 1, 0, - 0, 0, 104, 699, 1, 0, 0, 0, 106, 701, 1, 0, 0, 0, 108, 713, 1, 0, 0, 0, - 110, 727, 1, 0, 0, 0, 112, 738, 1, 0, 0, 0, 114, 741, 1, 0, 0, 0, 116, - 749, 1, 0, 0, 0, 118, 777, 1, 0, 0, 0, 120, 787, 1, 0, 0, 0, 122, 814, - 1, 0, 0, 0, 124, 823, 1, 0, 0, 0, 126, 845, 1, 0, 0, 0, 128, 850, 1, 0, - 0, 0, 130, 869, 1, 0, 0, 0, 132, 871, 1, 0, 0, 0, 134, 896, 1, 0, 0, 0, - 136, 911, 1, 0, 0, 0, 138, 913, 1, 0, 0, 0, 140, 919, 1, 0, 0, 0, 142, - 926, 1, 0, 0, 0, 144, 933, 1, 0, 0, 0, 146, 935, 1, 0, 0, 0, 148, 964, - 1, 0, 0, 0, 150, 969, 1, 0, 0, 0, 152, 972, 1, 0, 0, 0, 154, 978, 1, 0, - 0, 0, 156, 984, 1, 0, 0, 0, 158, 986, 1, 0, 0, 0, 160, 988, 1, 0, 0, 0, - 162, 992, 1, 0, 0, 0, 164, 1001, 1, 0, 0, 0, 166, 170, 5, 38, 0, 0, 167, - 170, 5, 32, 0, 0, 168, 170, 3, 2, 1, 0, 169, 166, 1, 0, 0, 0, 169, 167, - 1, 0, 0, 0, 169, 168, 1, 0, 0, 0, 170, 173, 1, 0, 0, 0, 171, 169, 1, 0, - 0, 0, 171, 172, 1, 0, 0, 0, 172, 174, 1, 0, 0, 0, 173, 171, 1, 0, 0, 0, - 174, 175, 5, 0, 0, 1, 175, 1, 1, 0, 0, 0, 176, 182, 3, 12, 6, 0, 177, 182, - 3, 34, 17, 0, 178, 182, 3, 68, 34, 0, 179, 182, 3, 88, 44, 0, 180, 182, - 3, 112, 56, 0, 181, 176, 1, 0, 0, 0, 181, 177, 1, 0, 0, 0, 181, 178, 1, - 0, 0, 0, 181, 179, 1, 0, 0, 0, 181, 180, 1, 0, 0, 0, 182, 3, 1, 0, 0, 0, - 183, 184, 3, 6, 3, 0, 184, 185, 5, 38, 0, 0, 185, 187, 1, 0, 0, 0, 186, - 183, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 186, 1, 0, 0, 0, 188, 189, - 1, 0, 0, 0, 189, 5, 1, 0, 0, 0, 190, 191, 5, 1, 0, 0, 191, 193, 5, 34, - 0, 0, 192, 194, 3, 8, 4, 0, 193, 192, 1, 0, 0, 0, 193, 194, 1, 0, 0, 0, - 194, 7, 1, 0, 0, 0, 195, 196, 5, 2, 0, 0, 196, 201, 3, 10, 5, 0, 197, 198, - 5, 3, 0, 0, 198, 200, 3, 10, 5, 0, 199, 197, 1, 0, 0, 0, 200, 203, 1, 0, - 0, 0, 201, 199, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 204, 1, 0, 0, 0, - 203, 201, 1, 0, 0, 0, 204, 205, 5, 4, 0, 0, 205, 9, 1, 0, 0, 0, 206, 208, - 5, 34, 0, 0, 207, 206, 1, 0, 0, 0, 208, 209, 1, 0, 0, 0, 209, 207, 1, 0, - 0, 0, 209, 210, 1, 0, 0, 0, 210, 11, 1, 0, 0, 0, 211, 215, 5, 5, 0, 0, - 212, 214, 5, 38, 0, 0, 213, 212, 1, 0, 0, 0, 214, 217, 1, 0, 0, 0, 215, - 213, 1, 0, 0, 0, 215, 216, 1, 0, 0, 0, 216, 218, 1, 0, 0, 0, 217, 215, - 1, 0, 0, 0, 218, 222, 5, 6, 0, 0, 219, 221, 5, 38, 0, 0, 220, 219, 1, 0, - 0, 0, 221, 224, 1, 0, 0, 0, 222, 220, 1, 0, 0, 0, 222, 223, 1, 0, 0, 0, - 223, 228, 1, 0, 0, 0, 224, 222, 1, 0, 0, 0, 225, 227, 3, 14, 7, 0, 226, - 225, 1, 0, 0, 0, 227, 230, 1, 0, 0, 0, 228, 226, 1, 0, 0, 0, 228, 229, - 1, 0, 0, 0, 229, 231, 1, 0, 0, 0, 230, 228, 1, 0, 0, 0, 231, 232, 5, 7, - 0, 0, 232, 13, 1, 0, 0, 0, 233, 235, 3, 16, 8, 0, 234, 233, 1, 0, 0, 0, - 234, 235, 1, 0, 0, 0, 235, 236, 1, 0, 0, 0, 236, 240, 3, 18, 9, 0, 237, - 239, 5, 38, 0, 0, 238, 237, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 238, - 1, 0, 0, 0, 240, 241, 1, 0, 0, 0, 241, 15, 1, 0, 0, 0, 242, 240, 1, 0, - 0, 0, 243, 244, 5, 34, 0, 0, 244, 17, 1, 0, 0, 0, 245, 246, 3, 20, 10, - 0, 246, 247, 5, 8, 0, 0, 247, 249, 1, 0, 0, 0, 248, 245, 1, 0, 0, 0, 248, - 249, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 251, 3, 22, 11, 0, 251, 19, - 1, 0, 0, 0, 252, 253, 7, 0, 0, 0, 253, 21, 1, 0, 0, 0, 254, 259, 5, 34, - 0, 0, 255, 256, 5, 8, 0, 0, 256, 258, 5, 34, 0, 0, 257, 255, 1, 0, 0, 0, - 258, 261, 1, 0, 0, 0, 259, 257, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, - 23, 1, 0, 0, 0, 261, 259, 1, 0, 0, 0, 262, 265, 3, 26, 13, 0, 263, 265, - 3, 28, 14, 0, 264, 262, 1, 0, 0, 0, 264, 263, 1, 0, 0, 0, 265, 25, 1, 0, - 0, 0, 266, 267, 5, 34, 0, 0, 267, 27, 1, 0, 0, 0, 268, 271, 3, 30, 15, - 0, 269, 270, 5, 10, 0, 0, 270, 272, 3, 32, 16, 0, 271, 269, 1, 0, 0, 0, - 271, 272, 1, 0, 0, 0, 272, 29, 1, 0, 0, 0, 273, 274, 5, 34, 0, 0, 274, - 31, 1, 0, 0, 0, 275, 276, 5, 34, 0, 0, 276, 33, 1, 0, 0, 0, 277, 280, 3, - 36, 18, 0, 278, 280, 3, 38, 19, 0, 279, 277, 1, 0, 0, 0, 279, 278, 1, 0, - 0, 0, 280, 35, 1, 0, 0, 0, 281, 283, 5, 33, 0, 0, 282, 281, 1, 0, 0, 0, - 282, 283, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 5, 11, 0, 0, 285, - 286, 3, 40, 20, 0, 286, 37, 1, 0, 0, 0, 287, 291, 5, 11, 0, 0, 288, 290, - 5, 38, 0, 0, 289, 288, 1, 0, 0, 0, 290, 293, 1, 0, 0, 0, 291, 289, 1, 0, - 0, 0, 291, 292, 1, 0, 0, 0, 292, 294, 1, 0, 0, 0, 293, 291, 1, 0, 0, 0, - 294, 298, 5, 6, 0, 0, 295, 297, 5, 38, 0, 0, 296, 295, 1, 0, 0, 0, 297, - 300, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 313, - 1, 0, 0, 0, 300, 298, 1, 0, 0, 0, 301, 303, 5, 33, 0, 0, 302, 301, 1, 0, - 0, 0, 302, 303, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 308, 3, 40, 20, - 0, 305, 307, 5, 38, 0, 0, 306, 305, 1, 0, 0, 0, 307, 310, 1, 0, 0, 0, 308, - 306, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 312, 1, 0, 0, 0, 310, 308, - 1, 0, 0, 0, 311, 302, 1, 0, 0, 0, 312, 315, 1, 0, 0, 0, 313, 311, 1, 0, - 0, 0, 313, 314, 1, 0, 0, 0, 314, 316, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, - 316, 317, 5, 7, 0, 0, 317, 39, 1, 0, 0, 0, 318, 320, 5, 34, 0, 0, 319, - 321, 3, 42, 21, 0, 320, 319, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 323, - 1, 0, 0, 0, 322, 324, 3, 48, 24, 0, 323, 322, 1, 0, 0, 0, 323, 324, 1, - 0, 0, 0, 324, 41, 1, 0, 0, 0, 325, 329, 5, 12, 0, 0, 326, 328, 5, 38, 0, - 0, 327, 326, 1, 0, 0, 0, 328, 331, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 329, - 330, 1, 0, 0, 0, 330, 333, 1, 0, 0, 0, 331, 329, 1, 0, 0, 0, 332, 334, - 3, 44, 22, 0, 333, 332, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 335, 1, - 0, 0, 0, 335, 336, 5, 13, 0, 0, 336, 43, 1, 0, 0, 0, 337, 348, 3, 46, 23, - 0, 338, 342, 5, 3, 0, 0, 339, 341, 5, 38, 0, 0, 340, 339, 1, 0, 0, 0, 341, - 344, 1, 0, 0, 0, 342, 340, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 345, - 1, 0, 0, 0, 344, 342, 1, 0, 0, 0, 345, 347, 3, 46, 23, 0, 346, 338, 1, - 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 348, 349, 1, 0, 0, - 0, 349, 45, 1, 0, 0, 0, 350, 348, 1, 0, 0, 0, 351, 353, 5, 34, 0, 0, 352, - 354, 3, 48, 24, 0, 353, 352, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 358, - 1, 0, 0, 0, 355, 357, 5, 38, 0, 0, 356, 355, 1, 0, 0, 0, 357, 360, 1, 0, - 0, 0, 358, 356, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 47, 1, 0, 0, 0, - 360, 358, 1, 0, 0, 0, 361, 365, 3, 50, 25, 0, 362, 365, 3, 54, 27, 0, 363, - 365, 3, 64, 32, 0, 364, 361, 1, 0, 0, 0, 364, 362, 1, 0, 0, 0, 364, 363, - 1, 0, 0, 0, 365, 49, 1, 0, 0, 0, 366, 368, 3, 24, 12, 0, 367, 369, 3, 52, - 26, 0, 368, 367, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 369, 51, 1, 0, 0, 0, - 370, 374, 5, 12, 0, 0, 371, 373, 5, 38, 0, 0, 372, 371, 1, 0, 0, 0, 373, - 376, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 377, - 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 377, 388, 3, 48, 24, 0, 378, 382, 5, - 3, 0, 0, 379, 381, 5, 38, 0, 0, 380, 379, 1, 0, 0, 0, 381, 384, 1, 0, 0, - 0, 382, 380, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 385, 1, 0, 0, 0, 384, - 382, 1, 0, 0, 0, 385, 387, 3, 48, 24, 0, 386, 378, 1, 0, 0, 0, 387, 390, - 1, 0, 0, 0, 388, 386, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 394, 1, 0, - 0, 0, 390, 388, 1, 0, 0, 0, 391, 393, 5, 38, 0, 0, 392, 391, 1, 0, 0, 0, - 393, 396, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, - 397, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 398, 5, 13, 0, 0, 398, 53, - 1, 0, 0, 0, 399, 402, 3, 56, 28, 0, 400, 402, 3, 58, 29, 0, 401, 399, 1, - 0, 0, 0, 401, 400, 1, 0, 0, 0, 402, 55, 1, 0, 0, 0, 403, 407, 5, 14, 0, - 0, 404, 406, 5, 38, 0, 0, 405, 404, 1, 0, 0, 0, 406, 409, 1, 0, 0, 0, 407, - 405, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 410, 1, 0, 0, 0, 409, 407, - 1, 0, 0, 0, 410, 414, 5, 6, 0, 0, 411, 413, 5, 38, 0, 0, 412, 411, 1, 0, - 0, 0, 413, 416, 1, 0, 0, 0, 414, 412, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, - 415, 417, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 417, 428, 5, 34, 0, 0, 418, - 422, 5, 3, 0, 0, 419, 421, 5, 38, 0, 0, 420, 419, 1, 0, 0, 0, 421, 424, - 1, 0, 0, 0, 422, 420, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 425, 1, 0, - 0, 0, 424, 422, 1, 0, 0, 0, 425, 427, 5, 34, 0, 0, 426, 418, 1, 0, 0, 0, - 427, 430, 1, 0, 0, 0, 428, 426, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, - 434, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 431, 433, 5, 38, 0, 0, 432, 431, - 1, 0, 0, 0, 433, 436, 1, 0, 0, 0, 434, 432, 1, 0, 0, 0, 434, 435, 1, 0, - 0, 0, 435, 437, 1, 0, 0, 0, 436, 434, 1, 0, 0, 0, 437, 438, 5, 7, 0, 0, - 438, 57, 1, 0, 0, 0, 439, 443, 5, 15, 0, 0, 440, 442, 5, 38, 0, 0, 441, - 440, 1, 0, 0, 0, 442, 445, 1, 0, 0, 0, 443, 441, 1, 0, 0, 0, 443, 444, - 1, 0, 0, 0, 444, 446, 1, 0, 0, 0, 445, 443, 1, 0, 0, 0, 446, 450, 5, 6, - 0, 0, 447, 449, 5, 38, 0, 0, 448, 447, 1, 0, 0, 0, 449, 452, 1, 0, 0, 0, - 450, 448, 1, 0, 0, 0, 450, 451, 1, 0, 0, 0, 451, 454, 1, 0, 0, 0, 452, - 450, 1, 0, 0, 0, 453, 455, 3, 60, 30, 0, 454, 453, 1, 0, 0, 0, 454, 455, - 1, 0, 0, 0, 455, 456, 1, 0, 0, 0, 456, 457, 5, 7, 0, 0, 457, 59, 1, 0, - 0, 0, 458, 467, 3, 62, 31, 0, 459, 461, 5, 38, 0, 0, 460, 459, 1, 0, 0, - 0, 461, 462, 1, 0, 0, 0, 462, 460, 1, 0, 0, 0, 462, 463, 1, 0, 0, 0, 463, - 464, 1, 0, 0, 0, 464, 466, 3, 62, 31, 0, 465, 460, 1, 0, 0, 0, 466, 469, - 1, 0, 0, 0, 467, 465, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 61, 1, 0, - 0, 0, 469, 467, 1, 0, 0, 0, 470, 471, 5, 34, 0, 0, 471, 475, 3, 48, 24, - 0, 472, 474, 5, 38, 0, 0, 473, 472, 1, 0, 0, 0, 474, 477, 1, 0, 0, 0, 475, - 473, 1, 0, 0, 0, 475, 476, 1, 0, 0, 0, 476, 63, 1, 0, 0, 0, 477, 475, 1, - 0, 0, 0, 478, 493, 3, 66, 33, 0, 479, 481, 5, 38, 0, 0, 480, 479, 1, 0, - 0, 0, 481, 484, 1, 0, 0, 0, 482, 480, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, - 483, 485, 1, 0, 0, 0, 484, 482, 1, 0, 0, 0, 485, 489, 5, 16, 0, 0, 486, - 488, 5, 38, 0, 0, 487, 486, 1, 0, 0, 0, 488, 491, 1, 0, 0, 0, 489, 487, - 1, 0, 0, 0, 489, 490, 1, 0, 0, 0, 490, 492, 1, 0, 0, 0, 491, 489, 1, 0, - 0, 0, 492, 494, 3, 66, 33, 0, 493, 482, 1, 0, 0, 0, 494, 495, 1, 0, 0, - 0, 495, 493, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 65, 1, 0, 0, 0, 497, - 500, 3, 50, 25, 0, 498, 500, 3, 54, 27, 0, 499, 497, 1, 0, 0, 0, 499, 498, - 1, 0, 0, 0, 500, 67, 1, 0, 0, 0, 501, 504, 3, 70, 35, 0, 502, 504, 3, 72, - 36, 0, 503, 501, 1, 0, 0, 0, 503, 502, 1, 0, 0, 0, 504, 69, 1, 0, 0, 0, - 505, 507, 5, 33, 0, 0, 506, 505, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, - 508, 1, 0, 0, 0, 508, 509, 5, 17, 0, 0, 509, 510, 3, 74, 37, 0, 510, 71, - 1, 0, 0, 0, 511, 515, 5, 17, 0, 0, 512, 514, 5, 38, 0, 0, 513, 512, 1, - 0, 0, 0, 514, 517, 1, 0, 0, 0, 515, 513, 1, 0, 0, 0, 515, 516, 1, 0, 0, - 0, 516, 518, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 518, 522, 5, 6, 0, 0, 519, - 521, 5, 38, 0, 0, 520, 519, 1, 0, 0, 0, 521, 524, 1, 0, 0, 0, 522, 520, - 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 531, 1, 0, 0, 0, 524, 522, 1, 0, - 0, 0, 525, 527, 5, 33, 0, 0, 526, 525, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, - 527, 528, 1, 0, 0, 0, 528, 530, 3, 74, 37, 0, 529, 526, 1, 0, 0, 0, 530, - 533, 1, 0, 0, 0, 531, 529, 1, 0, 0, 0, 531, 532, 1, 0, 0, 0, 532, 534, - 1, 0, 0, 0, 533, 531, 1, 0, 0, 0, 534, 535, 5, 7, 0, 0, 535, 73, 1, 0, - 0, 0, 536, 538, 5, 34, 0, 0, 537, 539, 3, 42, 21, 0, 538, 537, 1, 0, 0, - 0, 538, 539, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 541, 3, 76, 38, 0, - 541, 545, 3, 78, 39, 0, 542, 544, 5, 38, 0, 0, 543, 542, 1, 0, 0, 0, 544, - 547, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 75, 1, - 0, 0, 0, 547, 545, 1, 0, 0, 0, 548, 549, 3, 80, 40, 0, 549, 77, 1, 0, 0, - 0, 550, 551, 3, 80, 40, 0, 551, 79, 1, 0, 0, 0, 552, 570, 5, 2, 0, 0, 553, - 555, 5, 38, 0, 0, 554, 553, 1, 0, 0, 0, 555, 558, 1, 0, 0, 0, 556, 554, - 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 571, 1, 0, 0, 0, 558, 556, 1, 0, - 0, 0, 559, 561, 3, 82, 41, 0, 560, 559, 1, 0, 0, 0, 560, 561, 1, 0, 0, - 0, 561, 571, 1, 0, 0, 0, 562, 567, 3, 82, 41, 0, 563, 564, 5, 3, 0, 0, - 564, 566, 3, 82, 41, 0, 565, 563, 1, 0, 0, 0, 566, 569, 1, 0, 0, 0, 567, - 565, 1, 0, 0, 0, 567, 568, 1, 0, 0, 0, 568, 571, 1, 0, 0, 0, 569, 567, - 1, 0, 0, 0, 570, 556, 1, 0, 0, 0, 570, 560, 1, 0, 0, 0, 570, 562, 1, 0, - 0, 0, 571, 572, 1, 0, 0, 0, 572, 573, 5, 4, 0, 0, 573, 81, 1, 0, 0, 0, - 574, 577, 3, 84, 42, 0, 575, 577, 3, 86, 43, 0, 576, 574, 1, 0, 0, 0, 576, - 575, 1, 0, 0, 0, 577, 83, 1, 0, 0, 0, 578, 580, 5, 38, 0, 0, 579, 578, - 1, 0, 0, 0, 580, 583, 1, 0, 0, 0, 581, 579, 1, 0, 0, 0, 581, 582, 1, 0, - 0, 0, 582, 584, 1, 0, 0, 0, 583, 581, 1, 0, 0, 0, 584, 585, 5, 34, 0, 0, - 585, 589, 3, 48, 24, 0, 586, 588, 5, 38, 0, 0, 587, 586, 1, 0, 0, 0, 588, - 591, 1, 0, 0, 0, 589, 587, 1, 0, 0, 0, 589, 590, 1, 0, 0, 0, 590, 85, 1, - 0, 0, 0, 591, 589, 1, 0, 0, 0, 592, 594, 5, 38, 0, 0, 593, 592, 1, 0, 0, - 0, 594, 597, 1, 0, 0, 0, 595, 593, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, - 598, 1, 0, 0, 0, 597, 595, 1, 0, 0, 0, 598, 599, 5, 18, 0, 0, 599, 600, - 5, 34, 0, 0, 600, 601, 5, 19, 0, 0, 601, 605, 3, 48, 24, 0, 602, 604, 5, - 38, 0, 0, 603, 602, 1, 0, 0, 0, 604, 607, 1, 0, 0, 0, 605, 603, 1, 0, 0, - 0, 605, 606, 1, 0, 0, 0, 606, 87, 1, 0, 0, 0, 607, 605, 1, 0, 0, 0, 608, - 611, 3, 90, 45, 0, 609, 611, 3, 92, 46, 0, 610, 608, 1, 0, 0, 0, 610, 609, - 1, 0, 0, 0, 611, 89, 1, 0, 0, 0, 612, 614, 5, 33, 0, 0, 613, 612, 1, 0, - 0, 0, 613, 614, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 616, 5, 20, 0, 0, - 616, 617, 3, 94, 47, 0, 617, 91, 1, 0, 0, 0, 618, 622, 5, 20, 0, 0, 619, - 621, 5, 38, 0, 0, 620, 619, 1, 0, 0, 0, 621, 624, 1, 0, 0, 0, 622, 620, - 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 625, 1, 0, 0, 0, 624, 622, 1, 0, - 0, 0, 625, 629, 5, 6, 0, 0, 626, 628, 5, 38, 0, 0, 627, 626, 1, 0, 0, 0, - 628, 631, 1, 0, 0, 0, 629, 627, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, - 638, 1, 0, 0, 0, 631, 629, 1, 0, 0, 0, 632, 634, 5, 33, 0, 0, 633, 632, - 1, 0, 0, 0, 633, 634, 1, 0, 0, 0, 634, 635, 1, 0, 0, 0, 635, 637, 3, 94, - 47, 0, 636, 633, 1, 0, 0, 0, 637, 640, 1, 0, 0, 0, 638, 636, 1, 0, 0, 0, - 638, 639, 1, 0, 0, 0, 639, 641, 1, 0, 0, 0, 640, 638, 1, 0, 0, 0, 641, - 642, 5, 7, 0, 0, 642, 93, 1, 0, 0, 0, 643, 644, 5, 34, 0, 0, 644, 645, - 3, 48, 24, 0, 645, 646, 5, 21, 0, 0, 646, 650, 3, 96, 48, 0, 647, 649, - 5, 38, 0, 0, 648, 647, 1, 0, 0, 0, 649, 652, 1, 0, 0, 0, 650, 648, 1, 0, - 0, 0, 650, 651, 1, 0, 0, 0, 651, 95, 1, 0, 0, 0, 652, 650, 1, 0, 0, 0, - 653, 661, 3, 100, 50, 0, 654, 661, 3, 98, 49, 0, 655, 661, 5, 35, 0, 0, - 656, 661, 5, 36, 0, 0, 657, 661, 5, 37, 0, 0, 658, 661, 3, 102, 51, 0, - 659, 661, 3, 106, 53, 0, 660, 653, 1, 0, 0, 0, 660, 654, 1, 0, 0, 0, 660, - 655, 1, 0, 0, 0, 660, 656, 1, 0, 0, 0, 660, 657, 1, 0, 0, 0, 660, 658, - 1, 0, 0, 0, 660, 659, 1, 0, 0, 0, 661, 97, 1, 0, 0, 0, 662, 663, 7, 1, - 0, 0, 663, 99, 1, 0, 0, 0, 664, 665, 5, 24, 0, 0, 665, 101, 1, 0, 0, 0, - 666, 670, 5, 18, 0, 0, 667, 669, 5, 38, 0, 0, 668, 667, 1, 0, 0, 0, 669, - 672, 1, 0, 0, 0, 670, 668, 1, 0, 0, 0, 670, 671, 1, 0, 0, 0, 671, 674, - 1, 0, 0, 0, 672, 670, 1, 0, 0, 0, 673, 675, 3, 104, 52, 0, 674, 673, 1, - 0, 0, 0, 674, 675, 1, 0, 0, 0, 675, 676, 1, 0, 0, 0, 676, 677, 5, 19, 0, - 0, 677, 103, 1, 0, 0, 0, 678, 700, 3, 96, 48, 0, 679, 696, 3, 96, 48, 0, - 680, 684, 5, 3, 0, 0, 681, 683, 5, 38, 0, 0, 682, 681, 1, 0, 0, 0, 683, - 686, 1, 0, 0, 0, 684, 682, 1, 0, 0, 0, 684, 685, 1, 0, 0, 0, 685, 687, - 1, 0, 0, 0, 686, 684, 1, 0, 0, 0, 687, 691, 3, 96, 48, 0, 688, 690, 5, - 38, 0, 0, 689, 688, 1, 0, 0, 0, 690, 693, 1, 0, 0, 0, 691, 689, 1, 0, 0, - 0, 691, 692, 1, 0, 0, 0, 692, 695, 1, 0, 0, 0, 693, 691, 1, 0, 0, 0, 694, - 680, 1, 0, 0, 0, 695, 698, 1, 0, 0, 0, 696, 694, 1, 0, 0, 0, 696, 697, - 1, 0, 0, 0, 697, 700, 1, 0, 0, 0, 698, 696, 1, 0, 0, 0, 699, 678, 1, 0, - 0, 0, 699, 679, 1, 0, 0, 0, 700, 105, 1, 0, 0, 0, 701, 705, 5, 6, 0, 0, - 702, 704, 5, 38, 0, 0, 703, 702, 1, 0, 0, 0, 704, 707, 1, 0, 0, 0, 705, - 703, 1, 0, 0, 0, 705, 706, 1, 0, 0, 0, 706, 709, 1, 0, 0, 0, 707, 705, - 1, 0, 0, 0, 708, 710, 3, 108, 54, 0, 709, 708, 1, 0, 0, 0, 709, 710, 1, - 0, 0, 0, 710, 711, 1, 0, 0, 0, 711, 712, 5, 7, 0, 0, 712, 107, 1, 0, 0, - 0, 713, 724, 3, 110, 55, 0, 714, 718, 5, 3, 0, 0, 715, 717, 5, 38, 0, 0, - 716, 715, 1, 0, 0, 0, 717, 720, 1, 0, 0, 0, 718, 716, 1, 0, 0, 0, 718, - 719, 1, 0, 0, 0, 719, 721, 1, 0, 0, 0, 720, 718, 1, 0, 0, 0, 721, 723, - 3, 110, 55, 0, 722, 714, 1, 0, 0, 0, 723, 726, 1, 0, 0, 0, 724, 722, 1, - 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 109, 1, 0, 0, 0, 726, 724, 1, 0, 0, - 0, 727, 728, 5, 34, 0, 0, 728, 729, 5, 25, 0, 0, 729, 733, 3, 96, 48, 0, - 730, 732, 5, 38, 0, 0, 731, 730, 1, 0, 0, 0, 732, 735, 1, 0, 0, 0, 733, - 731, 1, 0, 0, 0, 733, 734, 1, 0, 0, 0, 734, 111, 1, 0, 0, 0, 735, 733, - 1, 0, 0, 0, 736, 739, 3, 114, 57, 0, 737, 739, 3, 116, 58, 0, 738, 736, - 1, 0, 0, 0, 738, 737, 1, 0, 0, 0, 739, 113, 1, 0, 0, 0, 740, 742, 3, 4, - 2, 0, 741, 740, 1, 0, 0, 0, 741, 742, 1, 0, 0, 0, 742, 744, 1, 0, 0, 0, - 743, 745, 5, 33, 0, 0, 744, 743, 1, 0, 0, 0, 744, 745, 1, 0, 0, 0, 745, - 746, 1, 0, 0, 0, 746, 747, 5, 26, 0, 0, 747, 748, 3, 118, 59, 0, 748, 115, - 1, 0, 0, 0, 749, 753, 5, 26, 0, 0, 750, 752, 5, 38, 0, 0, 751, 750, 1, - 0, 0, 0, 752, 755, 1, 0, 0, 0, 753, 751, 1, 0, 0, 0, 753, 754, 1, 0, 0, - 0, 754, 756, 1, 0, 0, 0, 755, 753, 1, 0, 0, 0, 756, 760, 5, 6, 0, 0, 757, - 759, 5, 38, 0, 0, 758, 757, 1, 0, 0, 0, 759, 762, 1, 0, 0, 0, 760, 758, - 1, 0, 0, 0, 760, 761, 1, 0, 0, 0, 761, 772, 1, 0, 0, 0, 762, 760, 1, 0, - 0, 0, 763, 765, 3, 4, 2, 0, 764, 763, 1, 0, 0, 0, 764, 765, 1, 0, 0, 0, - 765, 767, 1, 0, 0, 0, 766, 768, 5, 33, 0, 0, 767, 766, 1, 0, 0, 0, 767, - 768, 1, 0, 0, 0, 768, 769, 1, 0, 0, 0, 769, 771, 3, 118, 59, 0, 770, 764, - 1, 0, 0, 0, 771, 774, 1, 0, 0, 0, 772, 770, 1, 0, 0, 0, 772, 773, 1, 0, - 0, 0, 773, 775, 1, 0, 0, 0, 774, 772, 1, 0, 0, 0, 775, 776, 5, 7, 0, 0, - 776, 117, 1, 0, 0, 0, 777, 779, 3, 74, 37, 0, 778, 780, 3, 120, 60, 0, - 779, 778, 1, 0, 0, 0, 779, 780, 1, 0, 0, 0, 780, 784, 1, 0, 0, 0, 781, - 783, 5, 38, 0, 0, 782, 781, 1, 0, 0, 0, 783, 786, 1, 0, 0, 0, 784, 782, - 1, 0, 0, 0, 784, 785, 1, 0, 0, 0, 785, 119, 1, 0, 0, 0, 786, 784, 1, 0, - 0, 0, 787, 791, 5, 6, 0, 0, 788, 790, 5, 38, 0, 0, 789, 788, 1, 0, 0, 0, - 790, 793, 1, 0, 0, 0, 791, 789, 1, 0, 0, 0, 791, 792, 1, 0, 0, 0, 792, - 801, 1, 0, 0, 0, 793, 791, 1, 0, 0, 0, 794, 798, 3, 122, 61, 0, 795, 797, - 5, 38, 0, 0, 796, 795, 1, 0, 0, 0, 797, 800, 1, 0, 0, 0, 798, 796, 1, 0, - 0, 0, 798, 799, 1, 0, 0, 0, 799, 802, 1, 0, 0, 0, 800, 798, 1, 0, 0, 0, - 801, 794, 1, 0, 0, 0, 801, 802, 1, 0, 0, 0, 802, 810, 1, 0, 0, 0, 803, - 807, 3, 132, 66, 0, 804, 806, 5, 38, 0, 0, 805, 804, 1, 0, 0, 0, 806, 809, - 1, 0, 0, 0, 807, 805, 1, 0, 0, 0, 807, 808, 1, 0, 0, 0, 808, 811, 1, 0, - 0, 0, 809, 807, 1, 0, 0, 0, 810, 803, 1, 0, 0, 0, 810, 811, 1, 0, 0, 0, - 811, 812, 1, 0, 0, 0, 812, 813, 5, 7, 0, 0, 813, 121, 1, 0, 0, 0, 814, - 818, 5, 27, 0, 0, 815, 817, 5, 38, 0, 0, 816, 815, 1, 0, 0, 0, 817, 820, - 1, 0, 0, 0, 818, 816, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 821, 1, 0, - 0, 0, 820, 818, 1, 0, 0, 0, 821, 822, 3, 124, 62, 0, 822, 123, 1, 0, 0, - 0, 823, 827, 5, 6, 0, 0, 824, 826, 5, 38, 0, 0, 825, 824, 1, 0, 0, 0, 826, - 829, 1, 0, 0, 0, 827, 825, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 839, - 1, 0, 0, 0, 829, 827, 1, 0, 0, 0, 830, 834, 3, 126, 63, 0, 831, 833, 5, - 38, 0, 0, 832, 831, 1, 0, 0, 0, 833, 836, 1, 0, 0, 0, 834, 832, 1, 0, 0, - 0, 834, 835, 1, 0, 0, 0, 835, 838, 1, 0, 0, 0, 836, 834, 1, 0, 0, 0, 837, - 830, 1, 0, 0, 0, 838, 841, 1, 0, 0, 0, 839, 837, 1, 0, 0, 0, 839, 840, - 1, 0, 0, 0, 840, 842, 1, 0, 0, 0, 841, 839, 1, 0, 0, 0, 842, 843, 5, 7, - 0, 0, 843, 125, 1, 0, 0, 0, 844, 846, 3, 4, 2, 0, 845, 844, 1, 0, 0, 0, - 845, 846, 1, 0, 0, 0, 846, 847, 1, 0, 0, 0, 847, 848, 5, 34, 0, 0, 848, - 849, 3, 128, 64, 0, 849, 127, 1, 0, 0, 0, 850, 854, 3, 24, 12, 0, 851, - 853, 5, 38, 0, 0, 852, 851, 1, 0, 0, 0, 853, 856, 1, 0, 0, 0, 854, 852, - 1, 0, 0, 0, 854, 855, 1, 0, 0, 0, 855, 858, 1, 0, 0, 0, 856, 854, 1, 0, - 0, 0, 857, 859, 3, 52, 26, 0, 858, 857, 1, 0, 0, 0, 858, 859, 1, 0, 0, - 0, 859, 863, 1, 0, 0, 0, 860, 862, 5, 38, 0, 0, 861, 860, 1, 0, 0, 0, 862, - 865, 1, 0, 0, 0, 863, 861, 1, 0, 0, 0, 863, 864, 1, 0, 0, 0, 864, 867, - 1, 0, 0, 0, 865, 863, 1, 0, 0, 0, 866, 868, 3, 130, 65, 0, 867, 866, 1, - 0, 0, 0, 867, 868, 1, 0, 0, 0, 868, 129, 1, 0, 0, 0, 869, 870, 3, 124, - 62, 0, 870, 131, 1, 0, 0, 0, 871, 875, 5, 28, 0, 0, 872, 874, 5, 38, 0, - 0, 873, 872, 1, 0, 0, 0, 874, 877, 1, 0, 0, 0, 875, 873, 1, 0, 0, 0, 875, - 876, 1, 0, 0, 0, 876, 878, 1, 0, 0, 0, 877, 875, 1, 0, 0, 0, 878, 882, - 5, 6, 0, 0, 879, 881, 5, 38, 0, 0, 880, 879, 1, 0, 0, 0, 881, 884, 1, 0, - 0, 0, 882, 880, 1, 0, 0, 0, 882, 883, 1, 0, 0, 0, 883, 886, 1, 0, 0, 0, - 884, 882, 1, 0, 0, 0, 885, 887, 3, 134, 67, 0, 886, 885, 1, 0, 0, 0, 886, - 887, 1, 0, 0, 0, 887, 891, 1, 0, 0, 0, 888, 890, 5, 38, 0, 0, 889, 888, - 1, 0, 0, 0, 890, 893, 1, 0, 0, 0, 891, 889, 1, 0, 0, 0, 891, 892, 1, 0, - 0, 0, 892, 894, 1, 0, 0, 0, 893, 891, 1, 0, 0, 0, 894, 895, 5, 7, 0, 0, - 895, 133, 1, 0, 0, 0, 896, 906, 3, 136, 68, 0, 897, 899, 5, 38, 0, 0, 898, - 897, 1, 0, 0, 0, 899, 902, 1, 0, 0, 0, 900, 898, 1, 0, 0, 0, 900, 901, - 1, 0, 0, 0, 901, 903, 1, 0, 0, 0, 902, 900, 1, 0, 0, 0, 903, 905, 3, 136, - 68, 0, 904, 900, 1, 0, 0, 0, 905, 908, 1, 0, 0, 0, 906, 904, 1, 0, 0, 0, - 906, 907, 1, 0, 0, 0, 907, 135, 1, 0, 0, 0, 908, 906, 1, 0, 0, 0, 909, - 912, 3, 138, 69, 0, 910, 912, 3, 140, 70, 0, 911, 909, 1, 0, 0, 0, 911, - 910, 1, 0, 0, 0, 912, 137, 1, 0, 0, 0, 913, 914, 3, 142, 71, 0, 914, 917, - 5, 29, 0, 0, 915, 918, 3, 144, 72, 0, 916, 918, 3, 164, 82, 0, 917, 915, - 1, 0, 0, 0, 917, 916, 1, 0, 0, 0, 918, 139, 1, 0, 0, 0, 919, 920, 3, 152, - 76, 0, 920, 921, 5, 30, 0, 0, 921, 922, 3, 152, 76, 0, 922, 141, 1, 0, - 0, 0, 923, 927, 3, 150, 75, 0, 924, 927, 3, 148, 74, 0, 925, 927, 3, 96, - 48, 0, 926, 923, 1, 0, 0, 0, 926, 924, 1, 0, 0, 0, 926, 925, 1, 0, 0, 0, - 927, 929, 1, 0, 0, 0, 928, 930, 3, 162, 81, 0, 929, 928, 1, 0, 0, 0, 929, - 930, 1, 0, 0, 0, 930, 143, 1, 0, 0, 0, 931, 934, 3, 150, 75, 0, 932, 934, - 3, 146, 73, 0, 933, 931, 1, 0, 0, 0, 933, 932, 1, 0, 0, 0, 934, 145, 1, - 0, 0, 0, 935, 939, 5, 2, 0, 0, 936, 938, 5, 38, 0, 0, 937, 936, 1, 0, 0, - 0, 938, 941, 1, 0, 0, 0, 939, 937, 1, 0, 0, 0, 939, 940, 1, 0, 0, 0, 940, - 942, 1, 0, 0, 0, 941, 939, 1, 0, 0, 0, 942, 953, 3, 136, 68, 0, 943, 947, - 5, 3, 0, 0, 944, 946, 5, 38, 0, 0, 945, 944, 1, 0, 0, 0, 946, 949, 1, 0, - 0, 0, 947, 945, 1, 0, 0, 0, 947, 948, 1, 0, 0, 0, 948, 950, 1, 0, 0, 0, - 949, 947, 1, 0, 0, 0, 950, 952, 3, 136, 68, 0, 951, 943, 1, 0, 0, 0, 952, - 955, 1, 0, 0, 0, 953, 951, 1, 0, 0, 0, 953, 954, 1, 0, 0, 0, 954, 959, - 1, 0, 0, 0, 955, 953, 1, 0, 0, 0, 956, 958, 5, 38, 0, 0, 957, 956, 1, 0, - 0, 0, 958, 961, 1, 0, 0, 0, 959, 957, 1, 0, 0, 0, 959, 960, 1, 0, 0, 0, - 960, 962, 1, 0, 0, 0, 961, 959, 1, 0, 0, 0, 962, 963, 5, 4, 0, 0, 963, - 147, 1, 0, 0, 0, 964, 965, 5, 31, 0, 0, 965, 966, 3, 24, 12, 0, 966, 149, - 1, 0, 0, 0, 967, 970, 3, 152, 76, 0, 968, 970, 3, 154, 77, 0, 969, 967, - 1, 0, 0, 0, 969, 968, 1, 0, 0, 0, 970, 151, 1, 0, 0, 0, 971, 973, 3, 156, - 78, 0, 972, 971, 1, 0, 0, 0, 972, 973, 1, 0, 0, 0, 973, 974, 1, 0, 0, 0, - 974, 975, 5, 25, 0, 0, 975, 976, 3, 158, 79, 0, 976, 153, 1, 0, 0, 0, 977, - 979, 3, 156, 78, 0, 978, 977, 1, 0, 0, 0, 978, 979, 1, 0, 0, 0, 979, 980, - 1, 0, 0, 0, 980, 981, 5, 25, 0, 0, 981, 982, 3, 158, 79, 0, 982, 983, 3, - 160, 80, 0, 983, 155, 1, 0, 0, 0, 984, 985, 5, 34, 0, 0, 985, 157, 1, 0, - 0, 0, 986, 987, 5, 34, 0, 0, 987, 159, 1, 0, 0, 0, 988, 989, 5, 18, 0, - 0, 989, 990, 5, 35, 0, 0, 990, 991, 5, 19, 0, 0, 991, 161, 1, 0, 0, 0, - 992, 993, 5, 10, 0, 0, 993, 998, 5, 34, 0, 0, 994, 995, 5, 10, 0, 0, 995, - 997, 5, 34, 0, 0, 996, 994, 1, 0, 0, 0, 997, 1000, 1, 0, 0, 0, 998, 996, - 1, 0, 0, 0, 998, 999, 1, 0, 0, 0, 999, 163, 1, 0, 0, 0, 1000, 998, 1, 0, - 0, 0, 1001, 1005, 5, 18, 0, 0, 1002, 1004, 5, 38, 0, 0, 1003, 1002, 1, - 0, 0, 0, 1004, 1007, 1, 0, 0, 0, 1005, 1003, 1, 0, 0, 0, 1005, 1006, 1, - 0, 0, 0, 1006, 1008, 1, 0, 0, 0, 1007, 1005, 1, 0, 0, 0, 1008, 1025, 3, - 144, 72, 0, 1009, 1013, 5, 3, 0, 0, 1010, 1012, 5, 38, 0, 0, 1011, 1010, - 1, 0, 0, 0, 1012, 1015, 1, 0, 0, 0, 1013, 1011, 1, 0, 0, 0, 1013, 1014, - 1, 0, 0, 0, 1014, 1016, 1, 0, 0, 0, 1015, 1013, 1, 0, 0, 0, 1016, 1020, - 3, 144, 72, 0, 1017, 1019, 5, 38, 0, 0, 1018, 1017, 1, 0, 0, 0, 1019, 1022, - 1, 0, 0, 0, 1020, 1018, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 1024, - 1, 0, 0, 0, 1022, 1020, 1, 0, 0, 0, 1023, 1009, 1, 0, 0, 0, 1024, 1027, - 1, 0, 0, 0, 1025, 1023, 1, 0, 0, 0, 1025, 1026, 1, 0, 0, 0, 1026, 1028, - 1, 0, 0, 0, 1027, 1025, 1, 0, 0, 0, 1028, 1029, 5, 19, 0, 0, 1029, 165, - 1, 0, 0, 0, 136, 169, 171, 181, 188, 193, 201, 209, 215, 222, 228, 234, - 240, 248, 259, 264, 271, 279, 282, 291, 298, 302, 308, 313, 320, 323, 329, - 333, 342, 348, 353, 358, 364, 368, 374, 382, 388, 394, 401, 407, 414, 422, - 428, 434, 443, 450, 454, 462, 467, 475, 482, 489, 495, 499, 503, 506, 515, - 522, 526, 531, 538, 545, 556, 560, 567, 570, 576, 581, 589, 595, 605, 610, - 613, 622, 629, 633, 638, 650, 660, 670, 674, 684, 691, 696, 699, 705, 709, - 718, 724, 733, 738, 741, 744, 753, 760, 764, 767, 772, 779, 784, 791, 798, - 801, 807, 810, 818, 827, 834, 839, 845, 854, 858, 863, 867, 875, 882, 886, - 891, 900, 906, 911, 917, 926, 929, 933, 939, 947, 953, 959, 969, 972, 978, - 998, 1005, 1013, 1020, 1025, + 1, 67, 1, 67, 1, 68, 1, 68, 5, 68, 893, 8, 68, 10, 68, 12, 68, 896, 9, + 68, 1, 68, 1, 68, 5, 68, 900, 8, 68, 10, 68, 12, 68, 903, 9, 68, 1, 68, + 3, 68, 906, 8, 68, 1, 68, 5, 68, 909, 8, 68, 10, 68, 12, 68, 912, 9, 68, + 1, 68, 1, 68, 1, 69, 1, 69, 5, 69, 918, 8, 69, 10, 69, 12, 69, 921, 9, + 69, 1, 69, 5, 69, 924, 8, 69, 10, 69, 12, 69, 927, 9, 69, 1, 70, 1, 70, + 3, 70, 931, 8, 70, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 937, 8, 71, 1, 72, + 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 3, 73, 946, 8, 73, 1, 73, 3, + 73, 949, 8, 73, 1, 74, 1, 74, 3, 74, 953, 8, 74, 1, 75, 1, 75, 5, 75, 957, + 8, 75, 10, 75, 12, 75, 960, 9, 75, 1, 75, 1, 75, 1, 75, 5, 75, 965, 8, + 75, 10, 75, 12, 75, 968, 9, 75, 1, 75, 5, 75, 971, 8, 75, 10, 75, 12, 75, + 974, 9, 75, 1, 75, 5, 75, 977, 8, 75, 10, 75, 12, 75, 980, 9, 75, 1, 75, + 1, 75, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 3, 77, 989, 8, 77, 1, 78, 3, + 78, 992, 8, 78, 1, 78, 1, 78, 1, 78, 1, 79, 3, 79, 998, 8, 79, 1, 79, 1, + 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, + 1, 83, 1, 83, 1, 83, 1, 83, 5, 83, 1016, 8, 83, 10, 83, 12, 83, 1019, 9, + 83, 1, 84, 1, 84, 5, 84, 1023, 8, 84, 10, 84, 12, 84, 1026, 9, 84, 1, 84, + 1, 84, 1, 84, 5, 84, 1031, 8, 84, 10, 84, 12, 84, 1034, 9, 84, 1, 84, 1, + 84, 5, 84, 1038, 8, 84, 10, 84, 12, 84, 1041, 9, 84, 5, 84, 1043, 8, 84, + 10, 84, 12, 84, 1046, 9, 84, 1, 84, 1, 84, 1, 84, 0, 0, 85, 0, 2, 4, 6, + 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, + 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, + 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, + 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, + 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 0, 2, + 1, 0, 10, 11, 1, 0, 23, 24, 1115, 0, 175, 1, 0, 0, 0, 2, 185, 1, 0, 0, + 0, 4, 190, 1, 0, 0, 0, 6, 194, 1, 0, 0, 0, 8, 199, 1, 0, 0, 0, 10, 211, + 1, 0, 0, 0, 12, 215, 1, 0, 0, 0, 14, 238, 1, 0, 0, 0, 16, 247, 1, 0, 0, + 0, 18, 252, 1, 0, 0, 0, 20, 258, 1, 0, 0, 0, 22, 260, 1, 0, 0, 0, 24, 269, + 1, 0, 0, 0, 26, 271, 1, 0, 0, 0, 28, 281, 1, 0, 0, 0, 30, 283, 1, 0, 0, + 0, 32, 285, 1, 0, 0, 0, 34, 290, 1, 0, 0, 0, 36, 292, 1, 0, 0, 0, 38, 296, + 1, 0, 0, 0, 40, 299, 1, 0, 0, 0, 42, 304, 1, 0, 0, 0, 44, 335, 1, 0, 0, + 0, 46, 342, 1, 0, 0, 0, 48, 354, 1, 0, 0, 0, 50, 368, 1, 0, 0, 0, 52, 381, + 1, 0, 0, 0, 54, 383, 1, 0, 0, 0, 56, 387, 1, 0, 0, 0, 58, 418, 1, 0, 0, + 0, 60, 420, 1, 0, 0, 0, 62, 456, 1, 0, 0, 0, 64, 475, 1, 0, 0, 0, 66, 487, + 1, 0, 0, 0, 68, 495, 1, 0, 0, 0, 70, 516, 1, 0, 0, 0, 72, 520, 1, 0, 0, + 0, 74, 523, 1, 0, 0, 0, 76, 528, 1, 0, 0, 0, 78, 553, 1, 0, 0, 0, 80, 565, + 1, 0, 0, 0, 82, 567, 1, 0, 0, 0, 84, 569, 1, 0, 0, 0, 86, 593, 1, 0, 0, + 0, 88, 598, 1, 0, 0, 0, 90, 612, 1, 0, 0, 0, 92, 627, 1, 0, 0, 0, 94, 630, + 1, 0, 0, 0, 96, 635, 1, 0, 0, 0, 98, 660, 1, 0, 0, 0, 100, 677, 1, 0, 0, + 0, 102, 679, 1, 0, 0, 0, 104, 681, 1, 0, 0, 0, 106, 683, 1, 0, 0, 0, 108, + 716, 1, 0, 0, 0, 110, 718, 1, 0, 0, 0, 112, 730, 1, 0, 0, 0, 114, 744, + 1, 0, 0, 0, 116, 755, 1, 0, 0, 0, 118, 758, 1, 0, 0, 0, 120, 766, 1, 0, + 0, 0, 122, 794, 1, 0, 0, 0, 124, 804, 1, 0, 0, 0, 126, 831, 1, 0, 0, 0, + 128, 840, 1, 0, 0, 0, 130, 862, 1, 0, 0, 0, 132, 869, 1, 0, 0, 0, 134, + 888, 1, 0, 0, 0, 136, 890, 1, 0, 0, 0, 138, 915, 1, 0, 0, 0, 140, 930, + 1, 0, 0, 0, 142, 932, 1, 0, 0, 0, 144, 938, 1, 0, 0, 0, 146, 945, 1, 0, + 0, 0, 148, 952, 1, 0, 0, 0, 150, 954, 1, 0, 0, 0, 152, 983, 1, 0, 0, 0, + 154, 988, 1, 0, 0, 0, 156, 991, 1, 0, 0, 0, 158, 997, 1, 0, 0, 0, 160, + 1003, 1, 0, 0, 0, 162, 1005, 1, 0, 0, 0, 164, 1007, 1, 0, 0, 0, 166, 1011, + 1, 0, 0, 0, 168, 1020, 1, 0, 0, 0, 170, 174, 5, 38, 0, 0, 171, 174, 5, + 32, 0, 0, 172, 174, 3, 2, 1, 0, 173, 170, 1, 0, 0, 0, 173, 171, 1, 0, 0, + 0, 173, 172, 1, 0, 0, 0, 174, 177, 1, 0, 0, 0, 175, 173, 1, 0, 0, 0, 175, + 176, 1, 0, 0, 0, 176, 178, 1, 0, 0, 0, 177, 175, 1, 0, 0, 0, 178, 179, + 5, 0, 0, 1, 179, 1, 1, 0, 0, 0, 180, 186, 3, 12, 6, 0, 181, 186, 3, 38, + 19, 0, 182, 186, 3, 72, 36, 0, 183, 186, 3, 92, 46, 0, 184, 186, 3, 116, + 58, 0, 185, 180, 1, 0, 0, 0, 185, 181, 1, 0, 0, 0, 185, 182, 1, 0, 0, 0, + 185, 183, 1, 0, 0, 0, 185, 184, 1, 0, 0, 0, 186, 3, 1, 0, 0, 0, 187, 188, + 3, 6, 3, 0, 188, 189, 5, 38, 0, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, + 0, 0, 191, 192, 1, 0, 0, 0, 192, 190, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, + 193, 5, 1, 0, 0, 0, 194, 195, 5, 1, 0, 0, 195, 197, 5, 34, 0, 0, 196, 198, + 3, 8, 4, 0, 197, 196, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 7, 1, 0, 0, + 0, 199, 200, 5, 2, 0, 0, 200, 205, 3, 10, 5, 0, 201, 202, 5, 3, 0, 0, 202, + 204, 3, 10, 5, 0, 203, 201, 1, 0, 0, 0, 204, 207, 1, 0, 0, 0, 205, 203, + 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 208, 1, 0, 0, 0, 207, 205, 1, 0, + 0, 0, 208, 209, 5, 4, 0, 0, 209, 9, 1, 0, 0, 0, 210, 212, 5, 34, 0, 0, + 211, 210, 1, 0, 0, 0, 212, 213, 1, 0, 0, 0, 213, 211, 1, 0, 0, 0, 213, + 214, 1, 0, 0, 0, 214, 11, 1, 0, 0, 0, 215, 219, 5, 5, 0, 0, 216, 218, 5, + 38, 0, 0, 217, 216, 1, 0, 0, 0, 218, 221, 1, 0, 0, 0, 219, 217, 1, 0, 0, + 0, 219, 220, 1, 0, 0, 0, 220, 222, 1, 0, 0, 0, 221, 219, 1, 0, 0, 0, 222, + 226, 5, 6, 0, 0, 223, 225, 5, 38, 0, 0, 224, 223, 1, 0, 0, 0, 225, 228, + 1, 0, 0, 0, 226, 224, 1, 0, 0, 0, 226, 227, 1, 0, 0, 0, 227, 232, 1, 0, + 0, 0, 228, 226, 1, 0, 0, 0, 229, 231, 3, 14, 7, 0, 230, 229, 1, 0, 0, 0, + 231, 234, 1, 0, 0, 0, 232, 230, 1, 0, 0, 0, 232, 233, 1, 0, 0, 0, 233, + 235, 1, 0, 0, 0, 234, 232, 1, 0, 0, 0, 235, 236, 5, 7, 0, 0, 236, 13, 1, + 0, 0, 0, 237, 239, 3, 16, 8, 0, 238, 237, 1, 0, 0, 0, 238, 239, 1, 0, 0, + 0, 239, 240, 1, 0, 0, 0, 240, 244, 3, 18, 9, 0, 241, 243, 5, 38, 0, 0, + 242, 241, 1, 0, 0, 0, 243, 246, 1, 0, 0, 0, 244, 242, 1, 0, 0, 0, 244, + 245, 1, 0, 0, 0, 245, 15, 1, 0, 0, 0, 246, 244, 1, 0, 0, 0, 247, 248, 5, + 34, 0, 0, 248, 17, 1, 0, 0, 0, 249, 250, 3, 20, 10, 0, 250, 251, 5, 8, + 0, 0, 251, 253, 1, 0, 0, 0, 252, 249, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, + 253, 254, 1, 0, 0, 0, 254, 255, 3, 26, 13, 0, 255, 19, 1, 0, 0, 0, 256, + 259, 5, 9, 0, 0, 257, 259, 3, 22, 11, 0, 258, 256, 1, 0, 0, 0, 258, 257, + 1, 0, 0, 0, 259, 21, 1, 0, 0, 0, 260, 266, 5, 34, 0, 0, 261, 262, 3, 24, + 12, 0, 262, 263, 5, 34, 0, 0, 263, 265, 1, 0, 0, 0, 264, 261, 1, 0, 0, + 0, 265, 268, 1, 0, 0, 0, 266, 264, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, + 23, 1, 0, 0, 0, 268, 266, 1, 0, 0, 0, 269, 270, 7, 0, 0, 0, 270, 25, 1, + 0, 0, 0, 271, 276, 5, 34, 0, 0, 272, 273, 5, 10, 0, 0, 273, 275, 5, 34, + 0, 0, 274, 272, 1, 0, 0, 0, 275, 278, 1, 0, 0, 0, 276, 274, 1, 0, 0, 0, + 276, 277, 1, 0, 0, 0, 277, 27, 1, 0, 0, 0, 278, 276, 1, 0, 0, 0, 279, 282, + 3, 30, 15, 0, 280, 282, 3, 32, 16, 0, 281, 279, 1, 0, 0, 0, 281, 280, 1, + 0, 0, 0, 282, 29, 1, 0, 0, 0, 283, 284, 5, 34, 0, 0, 284, 31, 1, 0, 0, + 0, 285, 288, 3, 34, 17, 0, 286, 287, 5, 11, 0, 0, 287, 289, 3, 36, 18, + 0, 288, 286, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 33, 1, 0, 0, 0, 290, + 291, 5, 34, 0, 0, 291, 35, 1, 0, 0, 0, 292, 293, 5, 34, 0, 0, 293, 37, + 1, 0, 0, 0, 294, 297, 3, 40, 20, 0, 295, 297, 3, 42, 21, 0, 296, 294, 1, + 0, 0, 0, 296, 295, 1, 0, 0, 0, 297, 39, 1, 0, 0, 0, 298, 300, 5, 33, 0, + 0, 299, 298, 1, 0, 0, 0, 299, 300, 1, 0, 0, 0, 300, 301, 1, 0, 0, 0, 301, + 302, 5, 12, 0, 0, 302, 303, 3, 44, 22, 0, 303, 41, 1, 0, 0, 0, 304, 308, + 5, 12, 0, 0, 305, 307, 5, 38, 0, 0, 306, 305, 1, 0, 0, 0, 307, 310, 1, + 0, 0, 0, 308, 306, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 311, 1, 0, 0, + 0, 310, 308, 1, 0, 0, 0, 311, 315, 5, 6, 0, 0, 312, 314, 5, 38, 0, 0, 313, + 312, 1, 0, 0, 0, 314, 317, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, 315, 316, + 1, 0, 0, 0, 316, 330, 1, 0, 0, 0, 317, 315, 1, 0, 0, 0, 318, 320, 5, 33, + 0, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, + 321, 325, 3, 44, 22, 0, 322, 324, 5, 38, 0, 0, 323, 322, 1, 0, 0, 0, 324, + 327, 1, 0, 0, 0, 325, 323, 1, 0, 0, 0, 325, 326, 1, 0, 0, 0, 326, 329, + 1, 0, 0, 0, 327, 325, 1, 0, 0, 0, 328, 319, 1, 0, 0, 0, 329, 332, 1, 0, + 0, 0, 330, 328, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, + 332, 330, 1, 0, 0, 0, 333, 334, 5, 7, 0, 0, 334, 43, 1, 0, 0, 0, 335, 337, + 5, 34, 0, 0, 336, 338, 3, 46, 23, 0, 337, 336, 1, 0, 0, 0, 337, 338, 1, + 0, 0, 0, 338, 340, 1, 0, 0, 0, 339, 341, 3, 52, 26, 0, 340, 339, 1, 0, + 0, 0, 340, 341, 1, 0, 0, 0, 341, 45, 1, 0, 0, 0, 342, 346, 5, 13, 0, 0, + 343, 345, 5, 38, 0, 0, 344, 343, 1, 0, 0, 0, 345, 348, 1, 0, 0, 0, 346, + 344, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, + 1, 0, 0, 0, 349, 351, 3, 48, 24, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, + 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 353, 5, 14, 0, 0, 353, 47, 1, 0, 0, + 0, 354, 365, 3, 50, 25, 0, 355, 359, 5, 3, 0, 0, 356, 358, 5, 38, 0, 0, + 357, 356, 1, 0, 0, 0, 358, 361, 1, 0, 0, 0, 359, 357, 1, 0, 0, 0, 359, + 360, 1, 0, 0, 0, 360, 362, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 362, 364, + 3, 50, 25, 0, 363, 355, 1, 0, 0, 0, 364, 367, 1, 0, 0, 0, 365, 363, 1, + 0, 0, 0, 365, 366, 1, 0, 0, 0, 366, 49, 1, 0, 0, 0, 367, 365, 1, 0, 0, + 0, 368, 370, 5, 34, 0, 0, 369, 371, 3, 52, 26, 0, 370, 369, 1, 0, 0, 0, + 370, 371, 1, 0, 0, 0, 371, 375, 1, 0, 0, 0, 372, 374, 5, 38, 0, 0, 373, + 372, 1, 0, 0, 0, 374, 377, 1, 0, 0, 0, 375, 373, 1, 0, 0, 0, 375, 376, + 1, 0, 0, 0, 376, 51, 1, 0, 0, 0, 377, 375, 1, 0, 0, 0, 378, 382, 3, 54, + 27, 0, 379, 382, 3, 58, 29, 0, 380, 382, 3, 68, 34, 0, 381, 378, 1, 0, + 0, 0, 381, 379, 1, 0, 0, 0, 381, 380, 1, 0, 0, 0, 382, 53, 1, 0, 0, 0, + 383, 385, 3, 28, 14, 0, 384, 386, 3, 56, 28, 0, 385, 384, 1, 0, 0, 0, 385, + 386, 1, 0, 0, 0, 386, 55, 1, 0, 0, 0, 387, 391, 5, 13, 0, 0, 388, 390, + 5, 38, 0, 0, 389, 388, 1, 0, 0, 0, 390, 393, 1, 0, 0, 0, 391, 389, 1, 0, + 0, 0, 391, 392, 1, 0, 0, 0, 392, 394, 1, 0, 0, 0, 393, 391, 1, 0, 0, 0, + 394, 405, 3, 52, 26, 0, 395, 399, 5, 3, 0, 0, 396, 398, 5, 38, 0, 0, 397, + 396, 1, 0, 0, 0, 398, 401, 1, 0, 0, 0, 399, 397, 1, 0, 0, 0, 399, 400, + 1, 0, 0, 0, 400, 402, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 402, 404, 3, 52, + 26, 0, 403, 395, 1, 0, 0, 0, 404, 407, 1, 0, 0, 0, 405, 403, 1, 0, 0, 0, + 405, 406, 1, 0, 0, 0, 406, 411, 1, 0, 0, 0, 407, 405, 1, 0, 0, 0, 408, + 410, 5, 38, 0, 0, 409, 408, 1, 0, 0, 0, 410, 413, 1, 0, 0, 0, 411, 409, + 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 414, 1, 0, 0, 0, 413, 411, 1, 0, + 0, 0, 414, 415, 5, 14, 0, 0, 415, 57, 1, 0, 0, 0, 416, 419, 3, 60, 30, + 0, 417, 419, 3, 62, 31, 0, 418, 416, 1, 0, 0, 0, 418, 417, 1, 0, 0, 0, + 419, 59, 1, 0, 0, 0, 420, 424, 5, 15, 0, 0, 421, 423, 5, 38, 0, 0, 422, + 421, 1, 0, 0, 0, 423, 426, 1, 0, 0, 0, 424, 422, 1, 0, 0, 0, 424, 425, + 1, 0, 0, 0, 425, 427, 1, 0, 0, 0, 426, 424, 1, 0, 0, 0, 427, 431, 5, 6, + 0, 0, 428, 430, 5, 38, 0, 0, 429, 428, 1, 0, 0, 0, 430, 433, 1, 0, 0, 0, + 431, 429, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 434, 1, 0, 0, 0, 433, + 431, 1, 0, 0, 0, 434, 445, 5, 34, 0, 0, 435, 439, 5, 3, 0, 0, 436, 438, + 5, 38, 0, 0, 437, 436, 1, 0, 0, 0, 438, 441, 1, 0, 0, 0, 439, 437, 1, 0, + 0, 0, 439, 440, 1, 0, 0, 0, 440, 442, 1, 0, 0, 0, 441, 439, 1, 0, 0, 0, + 442, 444, 5, 34, 0, 0, 443, 435, 1, 0, 0, 0, 444, 447, 1, 0, 0, 0, 445, + 443, 1, 0, 0, 0, 445, 446, 1, 0, 0, 0, 446, 451, 1, 0, 0, 0, 447, 445, + 1, 0, 0, 0, 448, 450, 5, 38, 0, 0, 449, 448, 1, 0, 0, 0, 450, 453, 1, 0, + 0, 0, 451, 449, 1, 0, 0, 0, 451, 452, 1, 0, 0, 0, 452, 454, 1, 0, 0, 0, + 453, 451, 1, 0, 0, 0, 454, 455, 5, 7, 0, 0, 455, 61, 1, 0, 0, 0, 456, 460, + 5, 16, 0, 0, 457, 459, 5, 38, 0, 0, 458, 457, 1, 0, 0, 0, 459, 462, 1, + 0, 0, 0, 460, 458, 1, 0, 0, 0, 460, 461, 1, 0, 0, 0, 461, 463, 1, 0, 0, + 0, 462, 460, 1, 0, 0, 0, 463, 467, 5, 6, 0, 0, 464, 466, 5, 38, 0, 0, 465, + 464, 1, 0, 0, 0, 466, 469, 1, 0, 0, 0, 467, 465, 1, 0, 0, 0, 467, 468, + 1, 0, 0, 0, 468, 471, 1, 0, 0, 0, 469, 467, 1, 0, 0, 0, 470, 472, 3, 64, + 32, 0, 471, 470, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, + 473, 474, 5, 7, 0, 0, 474, 63, 1, 0, 0, 0, 475, 484, 3, 66, 33, 0, 476, + 478, 5, 38, 0, 0, 477, 476, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 477, + 1, 0, 0, 0, 479, 480, 1, 0, 0, 0, 480, 481, 1, 0, 0, 0, 481, 483, 3, 66, + 33, 0, 482, 477, 1, 0, 0, 0, 483, 486, 1, 0, 0, 0, 484, 482, 1, 0, 0, 0, + 484, 485, 1, 0, 0, 0, 485, 65, 1, 0, 0, 0, 486, 484, 1, 0, 0, 0, 487, 488, + 5, 34, 0, 0, 488, 492, 3, 52, 26, 0, 489, 491, 5, 38, 0, 0, 490, 489, 1, + 0, 0, 0, 491, 494, 1, 0, 0, 0, 492, 490, 1, 0, 0, 0, 492, 493, 1, 0, 0, + 0, 493, 67, 1, 0, 0, 0, 494, 492, 1, 0, 0, 0, 495, 510, 3, 70, 35, 0, 496, + 498, 5, 38, 0, 0, 497, 496, 1, 0, 0, 0, 498, 501, 1, 0, 0, 0, 499, 497, + 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 500, 502, 1, 0, 0, 0, 501, 499, 1, 0, + 0, 0, 502, 506, 5, 17, 0, 0, 503, 505, 5, 38, 0, 0, 504, 503, 1, 0, 0, + 0, 505, 508, 1, 0, 0, 0, 506, 504, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, + 509, 1, 0, 0, 0, 508, 506, 1, 0, 0, 0, 509, 511, 3, 70, 35, 0, 510, 499, + 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 510, 1, 0, 0, 0, 512, 513, 1, 0, + 0, 0, 513, 69, 1, 0, 0, 0, 514, 517, 3, 54, 27, 0, 515, 517, 3, 58, 29, + 0, 516, 514, 1, 0, 0, 0, 516, 515, 1, 0, 0, 0, 517, 71, 1, 0, 0, 0, 518, + 521, 3, 74, 37, 0, 519, 521, 3, 76, 38, 0, 520, 518, 1, 0, 0, 0, 520, 519, + 1, 0, 0, 0, 521, 73, 1, 0, 0, 0, 522, 524, 5, 33, 0, 0, 523, 522, 1, 0, + 0, 0, 523, 524, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 526, 5, 18, 0, 0, + 526, 527, 3, 78, 39, 0, 527, 75, 1, 0, 0, 0, 528, 532, 5, 18, 0, 0, 529, + 531, 5, 38, 0, 0, 530, 529, 1, 0, 0, 0, 531, 534, 1, 0, 0, 0, 532, 530, + 1, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 535, 1, 0, 0, 0, 534, 532, 1, 0, + 0, 0, 535, 539, 5, 6, 0, 0, 536, 538, 5, 38, 0, 0, 537, 536, 1, 0, 0, 0, + 538, 541, 1, 0, 0, 0, 539, 537, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, + 548, 1, 0, 0, 0, 541, 539, 1, 0, 0, 0, 542, 544, 5, 33, 0, 0, 543, 542, + 1, 0, 0, 0, 543, 544, 1, 0, 0, 0, 544, 545, 1, 0, 0, 0, 545, 547, 3, 78, + 39, 0, 546, 543, 1, 0, 0, 0, 547, 550, 1, 0, 0, 0, 548, 546, 1, 0, 0, 0, + 548, 549, 1, 0, 0, 0, 549, 551, 1, 0, 0, 0, 550, 548, 1, 0, 0, 0, 551, + 552, 5, 7, 0, 0, 552, 77, 1, 0, 0, 0, 553, 555, 5, 34, 0, 0, 554, 556, + 3, 46, 23, 0, 555, 554, 1, 0, 0, 0, 555, 556, 1, 0, 0, 0, 556, 557, 1, + 0, 0, 0, 557, 558, 3, 80, 40, 0, 558, 562, 3, 82, 41, 0, 559, 561, 5, 38, + 0, 0, 560, 559, 1, 0, 0, 0, 561, 564, 1, 0, 0, 0, 562, 560, 1, 0, 0, 0, + 562, 563, 1, 0, 0, 0, 563, 79, 1, 0, 0, 0, 564, 562, 1, 0, 0, 0, 565, 566, + 3, 84, 42, 0, 566, 81, 1, 0, 0, 0, 567, 568, 3, 84, 42, 0, 568, 83, 1, + 0, 0, 0, 569, 587, 5, 2, 0, 0, 570, 572, 5, 38, 0, 0, 571, 570, 1, 0, 0, + 0, 572, 575, 1, 0, 0, 0, 573, 571, 1, 0, 0, 0, 573, 574, 1, 0, 0, 0, 574, + 588, 1, 0, 0, 0, 575, 573, 1, 0, 0, 0, 576, 578, 3, 86, 43, 0, 577, 576, + 1, 0, 0, 0, 577, 578, 1, 0, 0, 0, 578, 588, 1, 0, 0, 0, 579, 584, 3, 86, + 43, 0, 580, 581, 5, 3, 0, 0, 581, 583, 3, 86, 43, 0, 582, 580, 1, 0, 0, + 0, 583, 586, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, + 588, 1, 0, 0, 0, 586, 584, 1, 0, 0, 0, 587, 573, 1, 0, 0, 0, 587, 577, + 1, 0, 0, 0, 587, 579, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 590, 5, 4, + 0, 0, 590, 85, 1, 0, 0, 0, 591, 594, 3, 88, 44, 0, 592, 594, 3, 90, 45, + 0, 593, 591, 1, 0, 0, 0, 593, 592, 1, 0, 0, 0, 594, 87, 1, 0, 0, 0, 595, + 597, 5, 38, 0, 0, 596, 595, 1, 0, 0, 0, 597, 600, 1, 0, 0, 0, 598, 596, + 1, 0, 0, 0, 598, 599, 1, 0, 0, 0, 599, 601, 1, 0, 0, 0, 600, 598, 1, 0, + 0, 0, 601, 602, 5, 34, 0, 0, 602, 606, 3, 52, 26, 0, 603, 605, 5, 38, 0, + 0, 604, 603, 1, 0, 0, 0, 605, 608, 1, 0, 0, 0, 606, 604, 1, 0, 0, 0, 606, + 607, 1, 0, 0, 0, 607, 89, 1, 0, 0, 0, 608, 606, 1, 0, 0, 0, 609, 611, 5, + 38, 0, 0, 610, 609, 1, 0, 0, 0, 611, 614, 1, 0, 0, 0, 612, 610, 1, 0, 0, + 0, 612, 613, 1, 0, 0, 0, 613, 615, 1, 0, 0, 0, 614, 612, 1, 0, 0, 0, 615, + 616, 5, 19, 0, 0, 616, 617, 5, 34, 0, 0, 617, 618, 5, 20, 0, 0, 618, 622, + 3, 52, 26, 0, 619, 621, 5, 38, 0, 0, 620, 619, 1, 0, 0, 0, 621, 624, 1, + 0, 0, 0, 622, 620, 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 91, 1, 0, 0, + 0, 624, 622, 1, 0, 0, 0, 625, 628, 3, 94, 47, 0, 626, 628, 3, 96, 48, 0, + 627, 625, 1, 0, 0, 0, 627, 626, 1, 0, 0, 0, 628, 93, 1, 0, 0, 0, 629, 631, + 5, 33, 0, 0, 630, 629, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, 632, 1, 0, + 0, 0, 632, 633, 5, 21, 0, 0, 633, 634, 3, 98, 49, 0, 634, 95, 1, 0, 0, + 0, 635, 639, 5, 21, 0, 0, 636, 638, 5, 38, 0, 0, 637, 636, 1, 0, 0, 0, + 638, 641, 1, 0, 0, 0, 639, 637, 1, 0, 0, 0, 639, 640, 1, 0, 0, 0, 640, + 642, 1, 0, 0, 0, 641, 639, 1, 0, 0, 0, 642, 646, 5, 6, 0, 0, 643, 645, + 5, 38, 0, 0, 644, 643, 1, 0, 0, 0, 645, 648, 1, 0, 0, 0, 646, 644, 1, 0, + 0, 0, 646, 647, 1, 0, 0, 0, 647, 655, 1, 0, 0, 0, 648, 646, 1, 0, 0, 0, + 649, 651, 5, 33, 0, 0, 650, 649, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, + 652, 1, 0, 0, 0, 652, 654, 3, 98, 49, 0, 653, 650, 1, 0, 0, 0, 654, 657, + 1, 0, 0, 0, 655, 653, 1, 0, 0, 0, 655, 656, 1, 0, 0, 0, 656, 658, 1, 0, + 0, 0, 657, 655, 1, 0, 0, 0, 658, 659, 5, 7, 0, 0, 659, 97, 1, 0, 0, 0, + 660, 661, 5, 34, 0, 0, 661, 662, 3, 52, 26, 0, 662, 663, 5, 22, 0, 0, 663, + 667, 3, 100, 50, 0, 664, 666, 5, 38, 0, 0, 665, 664, 1, 0, 0, 0, 666, 669, + 1, 0, 0, 0, 667, 665, 1, 0, 0, 0, 667, 668, 1, 0, 0, 0, 668, 99, 1, 0, + 0, 0, 669, 667, 1, 0, 0, 0, 670, 678, 3, 104, 52, 0, 671, 678, 3, 102, + 51, 0, 672, 678, 5, 35, 0, 0, 673, 678, 5, 36, 0, 0, 674, 678, 5, 37, 0, + 0, 675, 678, 3, 106, 53, 0, 676, 678, 3, 110, 55, 0, 677, 670, 1, 0, 0, + 0, 677, 671, 1, 0, 0, 0, 677, 672, 1, 0, 0, 0, 677, 673, 1, 0, 0, 0, 677, + 674, 1, 0, 0, 0, 677, 675, 1, 0, 0, 0, 677, 676, 1, 0, 0, 0, 678, 101, + 1, 0, 0, 0, 679, 680, 7, 1, 0, 0, 680, 103, 1, 0, 0, 0, 681, 682, 5, 25, + 0, 0, 682, 105, 1, 0, 0, 0, 683, 687, 5, 19, 0, 0, 684, 686, 5, 38, 0, + 0, 685, 684, 1, 0, 0, 0, 686, 689, 1, 0, 0, 0, 687, 685, 1, 0, 0, 0, 687, + 688, 1, 0, 0, 0, 688, 691, 1, 0, 0, 0, 689, 687, 1, 0, 0, 0, 690, 692, + 3, 108, 54, 0, 691, 690, 1, 0, 0, 0, 691, 692, 1, 0, 0, 0, 692, 693, 1, + 0, 0, 0, 693, 694, 5, 20, 0, 0, 694, 107, 1, 0, 0, 0, 695, 717, 3, 100, + 50, 0, 696, 713, 3, 100, 50, 0, 697, 701, 5, 3, 0, 0, 698, 700, 5, 38, + 0, 0, 699, 698, 1, 0, 0, 0, 700, 703, 1, 0, 0, 0, 701, 699, 1, 0, 0, 0, + 701, 702, 1, 0, 0, 0, 702, 704, 1, 0, 0, 0, 703, 701, 1, 0, 0, 0, 704, + 708, 3, 100, 50, 0, 705, 707, 5, 38, 0, 0, 706, 705, 1, 0, 0, 0, 707, 710, + 1, 0, 0, 0, 708, 706, 1, 0, 0, 0, 708, 709, 1, 0, 0, 0, 709, 712, 1, 0, + 0, 0, 710, 708, 1, 0, 0, 0, 711, 697, 1, 0, 0, 0, 712, 715, 1, 0, 0, 0, + 713, 711, 1, 0, 0, 0, 713, 714, 1, 0, 0, 0, 714, 717, 1, 0, 0, 0, 715, + 713, 1, 0, 0, 0, 716, 695, 1, 0, 0, 0, 716, 696, 1, 0, 0, 0, 717, 109, + 1, 0, 0, 0, 718, 722, 5, 6, 0, 0, 719, 721, 5, 38, 0, 0, 720, 719, 1, 0, + 0, 0, 721, 724, 1, 0, 0, 0, 722, 720, 1, 0, 0, 0, 722, 723, 1, 0, 0, 0, + 723, 726, 1, 0, 0, 0, 724, 722, 1, 0, 0, 0, 725, 727, 3, 112, 56, 0, 726, + 725, 1, 0, 0, 0, 726, 727, 1, 0, 0, 0, 727, 728, 1, 0, 0, 0, 728, 729, + 5, 7, 0, 0, 729, 111, 1, 0, 0, 0, 730, 741, 3, 114, 57, 0, 731, 735, 5, + 3, 0, 0, 732, 734, 5, 38, 0, 0, 733, 732, 1, 0, 0, 0, 734, 737, 1, 0, 0, + 0, 735, 733, 1, 0, 0, 0, 735, 736, 1, 0, 0, 0, 736, 738, 1, 0, 0, 0, 737, + 735, 1, 0, 0, 0, 738, 740, 3, 114, 57, 0, 739, 731, 1, 0, 0, 0, 740, 743, + 1, 0, 0, 0, 741, 739, 1, 0, 0, 0, 741, 742, 1, 0, 0, 0, 742, 113, 1, 0, + 0, 0, 743, 741, 1, 0, 0, 0, 744, 745, 5, 34, 0, 0, 745, 746, 5, 8, 0, 0, + 746, 750, 3, 100, 50, 0, 747, 749, 5, 38, 0, 0, 748, 747, 1, 0, 0, 0, 749, + 752, 1, 0, 0, 0, 750, 748, 1, 0, 0, 0, 750, 751, 1, 0, 0, 0, 751, 115, + 1, 0, 0, 0, 752, 750, 1, 0, 0, 0, 753, 756, 3, 118, 59, 0, 754, 756, 3, + 120, 60, 0, 755, 753, 1, 0, 0, 0, 755, 754, 1, 0, 0, 0, 756, 117, 1, 0, + 0, 0, 757, 759, 3, 4, 2, 0, 758, 757, 1, 0, 0, 0, 758, 759, 1, 0, 0, 0, + 759, 761, 1, 0, 0, 0, 760, 762, 5, 33, 0, 0, 761, 760, 1, 0, 0, 0, 761, + 762, 1, 0, 0, 0, 762, 763, 1, 0, 0, 0, 763, 764, 5, 26, 0, 0, 764, 765, + 3, 122, 61, 0, 765, 119, 1, 0, 0, 0, 766, 770, 5, 26, 0, 0, 767, 769, 5, + 38, 0, 0, 768, 767, 1, 0, 0, 0, 769, 772, 1, 0, 0, 0, 770, 768, 1, 0, 0, + 0, 770, 771, 1, 0, 0, 0, 771, 773, 1, 0, 0, 0, 772, 770, 1, 0, 0, 0, 773, + 777, 5, 6, 0, 0, 774, 776, 5, 38, 0, 0, 775, 774, 1, 0, 0, 0, 776, 779, + 1, 0, 0, 0, 777, 775, 1, 0, 0, 0, 777, 778, 1, 0, 0, 0, 778, 789, 1, 0, + 0, 0, 779, 777, 1, 0, 0, 0, 780, 782, 3, 4, 2, 0, 781, 780, 1, 0, 0, 0, + 781, 782, 1, 0, 0, 0, 782, 784, 1, 0, 0, 0, 783, 785, 5, 33, 0, 0, 784, + 783, 1, 0, 0, 0, 784, 785, 1, 0, 0, 0, 785, 786, 1, 0, 0, 0, 786, 788, + 3, 122, 61, 0, 787, 781, 1, 0, 0, 0, 788, 791, 1, 0, 0, 0, 789, 787, 1, + 0, 0, 0, 789, 790, 1, 0, 0, 0, 790, 792, 1, 0, 0, 0, 791, 789, 1, 0, 0, + 0, 792, 793, 5, 7, 0, 0, 793, 121, 1, 0, 0, 0, 794, 796, 3, 78, 39, 0, + 795, 797, 3, 124, 62, 0, 796, 795, 1, 0, 0, 0, 796, 797, 1, 0, 0, 0, 797, + 801, 1, 0, 0, 0, 798, 800, 5, 38, 0, 0, 799, 798, 1, 0, 0, 0, 800, 803, + 1, 0, 0, 0, 801, 799, 1, 0, 0, 0, 801, 802, 1, 0, 0, 0, 802, 123, 1, 0, + 0, 0, 803, 801, 1, 0, 0, 0, 804, 808, 5, 6, 0, 0, 805, 807, 5, 38, 0, 0, + 806, 805, 1, 0, 0, 0, 807, 810, 1, 0, 0, 0, 808, 806, 1, 0, 0, 0, 808, + 809, 1, 0, 0, 0, 809, 818, 1, 0, 0, 0, 810, 808, 1, 0, 0, 0, 811, 815, + 3, 126, 63, 0, 812, 814, 5, 38, 0, 0, 813, 812, 1, 0, 0, 0, 814, 817, 1, + 0, 0, 0, 815, 813, 1, 0, 0, 0, 815, 816, 1, 0, 0, 0, 816, 819, 1, 0, 0, + 0, 817, 815, 1, 0, 0, 0, 818, 811, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, + 827, 1, 0, 0, 0, 820, 824, 3, 136, 68, 0, 821, 823, 5, 38, 0, 0, 822, 821, + 1, 0, 0, 0, 823, 826, 1, 0, 0, 0, 824, 822, 1, 0, 0, 0, 824, 825, 1, 0, + 0, 0, 825, 828, 1, 0, 0, 0, 826, 824, 1, 0, 0, 0, 827, 820, 1, 0, 0, 0, + 827, 828, 1, 0, 0, 0, 828, 829, 1, 0, 0, 0, 829, 830, 5, 7, 0, 0, 830, + 125, 1, 0, 0, 0, 831, 835, 5, 27, 0, 0, 832, 834, 5, 38, 0, 0, 833, 832, + 1, 0, 0, 0, 834, 837, 1, 0, 0, 0, 835, 833, 1, 0, 0, 0, 835, 836, 1, 0, + 0, 0, 836, 838, 1, 0, 0, 0, 837, 835, 1, 0, 0, 0, 838, 839, 3, 128, 64, + 0, 839, 127, 1, 0, 0, 0, 840, 844, 5, 6, 0, 0, 841, 843, 5, 38, 0, 0, 842, + 841, 1, 0, 0, 0, 843, 846, 1, 0, 0, 0, 844, 842, 1, 0, 0, 0, 844, 845, + 1, 0, 0, 0, 845, 856, 1, 0, 0, 0, 846, 844, 1, 0, 0, 0, 847, 851, 3, 130, + 65, 0, 848, 850, 5, 38, 0, 0, 849, 848, 1, 0, 0, 0, 850, 853, 1, 0, 0, + 0, 851, 849, 1, 0, 0, 0, 851, 852, 1, 0, 0, 0, 852, 855, 1, 0, 0, 0, 853, + 851, 1, 0, 0, 0, 854, 847, 1, 0, 0, 0, 855, 858, 1, 0, 0, 0, 856, 854, + 1, 0, 0, 0, 856, 857, 1, 0, 0, 0, 857, 859, 1, 0, 0, 0, 858, 856, 1, 0, + 0, 0, 859, 860, 5, 7, 0, 0, 860, 129, 1, 0, 0, 0, 861, 863, 3, 4, 2, 0, + 862, 861, 1, 0, 0, 0, 862, 863, 1, 0, 0, 0, 863, 865, 1, 0, 0, 0, 864, + 866, 5, 34, 0, 0, 865, 864, 1, 0, 0, 0, 865, 866, 1, 0, 0, 0, 866, 867, + 1, 0, 0, 0, 867, 868, 3, 132, 66, 0, 868, 131, 1, 0, 0, 0, 869, 873, 3, + 28, 14, 0, 870, 872, 5, 38, 0, 0, 871, 870, 1, 0, 0, 0, 872, 875, 1, 0, + 0, 0, 873, 871, 1, 0, 0, 0, 873, 874, 1, 0, 0, 0, 874, 877, 1, 0, 0, 0, + 875, 873, 1, 0, 0, 0, 876, 878, 3, 56, 28, 0, 877, 876, 1, 0, 0, 0, 877, + 878, 1, 0, 0, 0, 878, 882, 1, 0, 0, 0, 879, 881, 5, 38, 0, 0, 880, 879, + 1, 0, 0, 0, 881, 884, 1, 0, 0, 0, 882, 880, 1, 0, 0, 0, 882, 883, 1, 0, + 0, 0, 883, 886, 1, 0, 0, 0, 884, 882, 1, 0, 0, 0, 885, 887, 3, 134, 67, + 0, 886, 885, 1, 0, 0, 0, 886, 887, 1, 0, 0, 0, 887, 133, 1, 0, 0, 0, 888, + 889, 3, 128, 64, 0, 889, 135, 1, 0, 0, 0, 890, 894, 5, 28, 0, 0, 891, 893, + 5, 38, 0, 0, 892, 891, 1, 0, 0, 0, 893, 896, 1, 0, 0, 0, 894, 892, 1, 0, + 0, 0, 894, 895, 1, 0, 0, 0, 895, 897, 1, 0, 0, 0, 896, 894, 1, 0, 0, 0, + 897, 901, 5, 6, 0, 0, 898, 900, 5, 38, 0, 0, 899, 898, 1, 0, 0, 0, 900, + 903, 1, 0, 0, 0, 901, 899, 1, 0, 0, 0, 901, 902, 1, 0, 0, 0, 902, 905, + 1, 0, 0, 0, 903, 901, 1, 0, 0, 0, 904, 906, 3, 138, 69, 0, 905, 904, 1, + 0, 0, 0, 905, 906, 1, 0, 0, 0, 906, 910, 1, 0, 0, 0, 907, 909, 5, 38, 0, + 0, 908, 907, 1, 0, 0, 0, 909, 912, 1, 0, 0, 0, 910, 908, 1, 0, 0, 0, 910, + 911, 1, 0, 0, 0, 911, 913, 1, 0, 0, 0, 912, 910, 1, 0, 0, 0, 913, 914, + 5, 7, 0, 0, 914, 137, 1, 0, 0, 0, 915, 925, 3, 140, 70, 0, 916, 918, 5, + 38, 0, 0, 917, 916, 1, 0, 0, 0, 918, 921, 1, 0, 0, 0, 919, 917, 1, 0, 0, + 0, 919, 920, 1, 0, 0, 0, 920, 922, 1, 0, 0, 0, 921, 919, 1, 0, 0, 0, 922, + 924, 3, 140, 70, 0, 923, 919, 1, 0, 0, 0, 924, 927, 1, 0, 0, 0, 925, 923, + 1, 0, 0, 0, 925, 926, 1, 0, 0, 0, 926, 139, 1, 0, 0, 0, 927, 925, 1, 0, + 0, 0, 928, 931, 3, 142, 71, 0, 929, 931, 3, 144, 72, 0, 930, 928, 1, 0, + 0, 0, 930, 929, 1, 0, 0, 0, 931, 141, 1, 0, 0, 0, 932, 933, 3, 146, 73, + 0, 933, 936, 5, 29, 0, 0, 934, 937, 3, 148, 74, 0, 935, 937, 3, 168, 84, + 0, 936, 934, 1, 0, 0, 0, 936, 935, 1, 0, 0, 0, 937, 143, 1, 0, 0, 0, 938, + 939, 3, 156, 78, 0, 939, 940, 5, 30, 0, 0, 940, 941, 3, 156, 78, 0, 941, + 145, 1, 0, 0, 0, 942, 946, 3, 154, 77, 0, 943, 946, 3, 152, 76, 0, 944, + 946, 3, 100, 50, 0, 945, 942, 1, 0, 0, 0, 945, 943, 1, 0, 0, 0, 945, 944, + 1, 0, 0, 0, 946, 948, 1, 0, 0, 0, 947, 949, 3, 166, 83, 0, 948, 947, 1, + 0, 0, 0, 948, 949, 1, 0, 0, 0, 949, 147, 1, 0, 0, 0, 950, 953, 3, 154, + 77, 0, 951, 953, 3, 150, 75, 0, 952, 950, 1, 0, 0, 0, 952, 951, 1, 0, 0, + 0, 953, 149, 1, 0, 0, 0, 954, 958, 5, 2, 0, 0, 955, 957, 5, 38, 0, 0, 956, + 955, 1, 0, 0, 0, 957, 960, 1, 0, 0, 0, 958, 956, 1, 0, 0, 0, 958, 959, + 1, 0, 0, 0, 959, 961, 1, 0, 0, 0, 960, 958, 1, 0, 0, 0, 961, 972, 3, 140, + 70, 0, 962, 966, 5, 3, 0, 0, 963, 965, 5, 38, 0, 0, 964, 963, 1, 0, 0, + 0, 965, 968, 1, 0, 0, 0, 966, 964, 1, 0, 0, 0, 966, 967, 1, 0, 0, 0, 967, + 969, 1, 0, 0, 0, 968, 966, 1, 0, 0, 0, 969, 971, 3, 140, 70, 0, 970, 962, + 1, 0, 0, 0, 971, 974, 1, 0, 0, 0, 972, 970, 1, 0, 0, 0, 972, 973, 1, 0, + 0, 0, 973, 978, 1, 0, 0, 0, 974, 972, 1, 0, 0, 0, 975, 977, 5, 38, 0, 0, + 976, 975, 1, 0, 0, 0, 977, 980, 1, 0, 0, 0, 978, 976, 1, 0, 0, 0, 978, + 979, 1, 0, 0, 0, 979, 981, 1, 0, 0, 0, 980, 978, 1, 0, 0, 0, 981, 982, + 5, 4, 0, 0, 982, 151, 1, 0, 0, 0, 983, 984, 5, 31, 0, 0, 984, 985, 3, 28, + 14, 0, 985, 153, 1, 0, 0, 0, 986, 989, 3, 156, 78, 0, 987, 989, 3, 158, + 79, 0, 988, 986, 1, 0, 0, 0, 988, 987, 1, 0, 0, 0, 989, 155, 1, 0, 0, 0, + 990, 992, 3, 160, 80, 0, 991, 990, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, + 993, 1, 0, 0, 0, 993, 994, 5, 8, 0, 0, 994, 995, 3, 162, 81, 0, 995, 157, + 1, 0, 0, 0, 996, 998, 3, 160, 80, 0, 997, 996, 1, 0, 0, 0, 997, 998, 1, + 0, 0, 0, 998, 999, 1, 0, 0, 0, 999, 1000, 5, 8, 0, 0, 1000, 1001, 3, 162, + 81, 0, 1001, 1002, 3, 164, 82, 0, 1002, 159, 1, 0, 0, 0, 1003, 1004, 5, + 34, 0, 0, 1004, 161, 1, 0, 0, 0, 1005, 1006, 5, 34, 0, 0, 1006, 163, 1, + 0, 0, 0, 1007, 1008, 5, 19, 0, 0, 1008, 1009, 5, 35, 0, 0, 1009, 1010, + 5, 20, 0, 0, 1010, 165, 1, 0, 0, 0, 1011, 1012, 5, 11, 0, 0, 1012, 1017, + 5, 34, 0, 0, 1013, 1014, 5, 11, 0, 0, 1014, 1016, 5, 34, 0, 0, 1015, 1013, + 1, 0, 0, 0, 1016, 1019, 1, 0, 0, 0, 1017, 1015, 1, 0, 0, 0, 1017, 1018, + 1, 0, 0, 0, 1018, 167, 1, 0, 0, 0, 1019, 1017, 1, 0, 0, 0, 1020, 1024, + 5, 19, 0, 0, 1021, 1023, 5, 38, 0, 0, 1022, 1021, 1, 0, 0, 0, 1023, 1026, + 1, 0, 0, 0, 1024, 1022, 1, 0, 0, 0, 1024, 1025, 1, 0, 0, 0, 1025, 1027, + 1, 0, 0, 0, 1026, 1024, 1, 0, 0, 0, 1027, 1044, 3, 148, 74, 0, 1028, 1032, + 5, 3, 0, 0, 1029, 1031, 5, 38, 0, 0, 1030, 1029, 1, 0, 0, 0, 1031, 1034, + 1, 0, 0, 0, 1032, 1030, 1, 0, 0, 0, 1032, 1033, 1, 0, 0, 0, 1033, 1035, + 1, 0, 0, 0, 1034, 1032, 1, 0, 0, 0, 1035, 1039, 3, 148, 74, 0, 1036, 1038, + 5, 38, 0, 0, 1037, 1036, 1, 0, 0, 0, 1038, 1041, 1, 0, 0, 0, 1039, 1037, + 1, 0, 0, 0, 1039, 1040, 1, 0, 0, 0, 1040, 1043, 1, 0, 0, 0, 1041, 1039, + 1, 0, 0, 0, 1042, 1028, 1, 0, 0, 0, 1043, 1046, 1, 0, 0, 0, 1044, 1042, + 1, 0, 0, 0, 1044, 1045, 1, 0, 0, 0, 1045, 1047, 1, 0, 0, 0, 1046, 1044, + 1, 0, 0, 0, 1047, 1048, 5, 20, 0, 0, 1048, 169, 1, 0, 0, 0, 139, 173, 175, + 185, 192, 197, 205, 213, 219, 226, 232, 238, 244, 252, 258, 266, 276, 281, + 288, 296, 299, 308, 315, 319, 325, 330, 337, 340, 346, 350, 359, 365, 370, + 375, 381, 385, 391, 399, 405, 411, 418, 424, 431, 439, 445, 451, 460, 467, + 471, 479, 484, 492, 499, 506, 512, 516, 520, 523, 532, 539, 543, 548, 555, + 562, 573, 577, 584, 587, 593, 598, 606, 612, 622, 627, 630, 639, 646, 650, + 655, 667, 677, 687, 691, 701, 708, 713, 716, 722, 726, 735, 741, 750, 755, + 758, 761, 770, 777, 781, 784, 789, 796, 801, 808, 815, 818, 824, 827, 835, + 844, 851, 856, 862, 865, 873, 877, 882, 886, 894, 901, 905, 910, 919, 925, + 930, 936, 945, 948, 952, 958, 966, 972, 978, 988, 991, 997, 1017, 1024, + 1032, 1039, 1044, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -624,78 +634,80 @@ const ( nevaParserRULE_importAlias = 8 nevaParserRULE_importPath = 9 nevaParserRULE_importPathMod = 10 - nevaParserRULE_importPathPkg = 11 - nevaParserRULE_entityRef = 12 - nevaParserRULE_localEntityRef = 13 - nevaParserRULE_importedEntityRef = 14 - nevaParserRULE_pkgRef = 15 - nevaParserRULE_entityName = 16 - nevaParserRULE_typeStmt = 17 - nevaParserRULE_singleTypeStmt = 18 - nevaParserRULE_groupTypeStmt = 19 - nevaParserRULE_typeDef = 20 - nevaParserRULE_typeParams = 21 - nevaParserRULE_typeParamList = 22 - nevaParserRULE_typeParam = 23 - nevaParserRULE_typeExpr = 24 - nevaParserRULE_typeInstExpr = 25 - nevaParserRULE_typeArgs = 26 - nevaParserRULE_typeLitExpr = 27 - nevaParserRULE_enumTypeExpr = 28 - nevaParserRULE_structTypeExpr = 29 - nevaParserRULE_structFields = 30 - nevaParserRULE_structField = 31 - nevaParserRULE_unionTypeExpr = 32 - nevaParserRULE_nonUnionTypeExpr = 33 - nevaParserRULE_interfaceStmt = 34 - nevaParserRULE_singleInterfaceStmt = 35 - nevaParserRULE_groupInterfaceStmt = 36 - nevaParserRULE_interfaceDef = 37 - nevaParserRULE_inPortsDef = 38 - nevaParserRULE_outPortsDef = 39 - nevaParserRULE_portsDef = 40 - nevaParserRULE_portDef = 41 - nevaParserRULE_singlePortDef = 42 - nevaParserRULE_arrayPortDef = 43 - nevaParserRULE_constStmt = 44 - nevaParserRULE_singleConstStmt = 45 - nevaParserRULE_groupConstStmt = 46 - nevaParserRULE_constDef = 47 - nevaParserRULE_constVal = 48 - nevaParserRULE_bool = 49 - nevaParserRULE_nil = 50 - nevaParserRULE_listLit = 51 - nevaParserRULE_listItems = 52 - nevaParserRULE_structLit = 53 - nevaParserRULE_structValueFields = 54 - nevaParserRULE_structValueField = 55 - nevaParserRULE_compStmt = 56 - nevaParserRULE_singleCompStmt = 57 - nevaParserRULE_groupCompStmt = 58 - nevaParserRULE_compDef = 59 - nevaParserRULE_compBody = 60 - nevaParserRULE_compNodesDef = 61 - nevaParserRULE_compNodesDefBody = 62 - nevaParserRULE_compNodeDef = 63 - nevaParserRULE_nodeInst = 64 - nevaParserRULE_nodeDIArgs = 65 - nevaParserRULE_compNetDef = 66 - nevaParserRULE_connDefList = 67 - nevaParserRULE_connDef = 68 - nevaParserRULE_normConnDef = 69 - nevaParserRULE_arrBypassConnDef = 70 - nevaParserRULE_senderSide = 71 - nevaParserRULE_receiverSide = 72 - nevaParserRULE_thenConnExpr = 73 - nevaParserRULE_senderConstRef = 74 - nevaParserRULE_portAddr = 75 - nevaParserRULE_singlePortAddr = 76 - nevaParserRULE_arrPortAddr = 77 - nevaParserRULE_portAddrNode = 78 - nevaParserRULE_portAddrPort = 79 - nevaParserRULE_portAddrIdx = 80 - nevaParserRULE_structSelectors = 81 - nevaParserRULE_multipleReceiverSide = 82 + nevaParserRULE_importMod = 11 + nevaParserRULE_importModeDelim = 12 + nevaParserRULE_importPathPkg = 13 + nevaParserRULE_entityRef = 14 + nevaParserRULE_localEntityRef = 15 + nevaParserRULE_importedEntityRef = 16 + nevaParserRULE_pkgRef = 17 + nevaParserRULE_entityName = 18 + nevaParserRULE_typeStmt = 19 + nevaParserRULE_singleTypeStmt = 20 + nevaParserRULE_groupTypeStmt = 21 + nevaParserRULE_typeDef = 22 + nevaParserRULE_typeParams = 23 + nevaParserRULE_typeParamList = 24 + nevaParserRULE_typeParam = 25 + nevaParserRULE_typeExpr = 26 + nevaParserRULE_typeInstExpr = 27 + nevaParserRULE_typeArgs = 28 + nevaParserRULE_typeLitExpr = 29 + nevaParserRULE_enumTypeExpr = 30 + nevaParserRULE_structTypeExpr = 31 + nevaParserRULE_structFields = 32 + nevaParserRULE_structField = 33 + nevaParserRULE_unionTypeExpr = 34 + nevaParserRULE_nonUnionTypeExpr = 35 + nevaParserRULE_interfaceStmt = 36 + nevaParserRULE_singleInterfaceStmt = 37 + nevaParserRULE_groupInterfaceStmt = 38 + nevaParserRULE_interfaceDef = 39 + nevaParserRULE_inPortsDef = 40 + nevaParserRULE_outPortsDef = 41 + nevaParserRULE_portsDef = 42 + nevaParserRULE_portDef = 43 + nevaParserRULE_singlePortDef = 44 + nevaParserRULE_arrayPortDef = 45 + nevaParserRULE_constStmt = 46 + nevaParserRULE_singleConstStmt = 47 + nevaParserRULE_groupConstStmt = 48 + nevaParserRULE_constDef = 49 + nevaParserRULE_constVal = 50 + nevaParserRULE_bool = 51 + nevaParserRULE_nil = 52 + nevaParserRULE_listLit = 53 + nevaParserRULE_listItems = 54 + nevaParserRULE_structLit = 55 + nevaParserRULE_structValueFields = 56 + nevaParserRULE_structValueField = 57 + nevaParserRULE_compStmt = 58 + nevaParserRULE_singleCompStmt = 59 + nevaParserRULE_groupCompStmt = 60 + nevaParserRULE_compDef = 61 + nevaParserRULE_compBody = 62 + nevaParserRULE_compNodesDef = 63 + nevaParserRULE_compNodesDefBody = 64 + nevaParserRULE_compNodeDef = 65 + nevaParserRULE_nodeInst = 66 + nevaParserRULE_nodeDIArgs = 67 + nevaParserRULE_compNetDef = 68 + nevaParserRULE_connDefList = 69 + nevaParserRULE_connDef = 70 + nevaParserRULE_normConnDef = 71 + nevaParserRULE_arrBypassConnDef = 72 + nevaParserRULE_senderSide = 73 + nevaParserRULE_receiverSide = 74 + nevaParserRULE_thenConnExpr = 75 + nevaParserRULE_senderConstRef = 76 + nevaParserRULE_portAddr = 77 + nevaParserRULE_singlePortAddr = 78 + nevaParserRULE_arrPortAddr = 79 + nevaParserRULE_portAddrNode = 80 + nevaParserRULE_portAddrPort = 81 + nevaParserRULE_portAddrIdx = 82 + nevaParserRULE_structSelectors = 83 + nevaParserRULE_multipleReceiverSide = 84 ) // IProgContext is an interface to support dynamic dispatch. @@ -837,15 +849,15 @@ func (p *nevaParser) Prog() (localctx IProgContext) { var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(171) + p.SetState(175) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - for (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&287831099426) != 0 { - p.SetState(169) + for (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&287832281122) != 0 { + p.SetState(173) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -854,7 +866,7 @@ func (p *nevaParser) Prog() (localctx IProgContext) { switch p.GetTokenStream().LA(1) { case nevaParserNEWLINE: { - p.SetState(166) + p.SetState(170) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -864,7 +876,7 @@ func (p *nevaParser) Prog() (localctx IProgContext) { case nevaParserCOMMENT: { - p.SetState(167) + p.SetState(171) p.Match(nevaParserCOMMENT) if p.HasError() { // Recognition error - abort rule @@ -872,9 +884,9 @@ func (p *nevaParser) Prog() (localctx IProgContext) { } } - case nevaParserT__0, nevaParserT__4, nevaParserT__10, nevaParserT__16, nevaParserT__19, nevaParserT__25, nevaParserPUB_KW: + case nevaParserT__0, nevaParserT__4, nevaParserT__11, nevaParserT__17, nevaParserT__20, nevaParserT__25, nevaParserPUB_KW: { - p.SetState(168) + p.SetState(172) p.Stmt() } @@ -883,7 +895,7 @@ func (p *nevaParser) Prog() (localctx IProgContext) { goto errorExit } - p.SetState(173) + p.SetState(177) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -891,7 +903,7 @@ func (p *nevaParser) Prog() (localctx IProgContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(174) + p.SetState(178) p.Match(nevaParserEOF) if p.HasError() { // Recognition error - abort rule @@ -1065,7 +1077,7 @@ func (s *StmtContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) Stmt() (localctx IStmtContext) { localctx = NewStmtContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 2, nevaParserRULE_stmt) - p.SetState(181) + p.SetState(185) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1075,35 +1087,35 @@ func (p *nevaParser) Stmt() (localctx IStmtContext) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(176) + p.SetState(180) p.ImportStmt() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(177) + p.SetState(181) p.TypeStmt() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(178) + p.SetState(182) p.InterfaceStmt() } case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(179) + p.SetState(183) p.ConstStmt() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(180) + p.SetState(184) p.CompStmt() } @@ -1248,7 +1260,7 @@ func (p *nevaParser) CompilerDirectives() (localctx ICompilerDirectivesContext) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(186) + p.SetState(190) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1257,11 +1269,11 @@ func (p *nevaParser) CompilerDirectives() (localctx ICompilerDirectivesContext) for ok := true; ok; ok = _la == nevaParserT__0 { { - p.SetState(183) + p.SetState(187) p.CompilerDirective() } { - p.SetState(184) + p.SetState(188) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -1269,7 +1281,7 @@ func (p *nevaParser) CompilerDirectives() (localctx ICompilerDirectivesContext) } } - p.SetState(188) + p.SetState(192) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1384,7 +1396,7 @@ func (p *nevaParser) CompilerDirective() (localctx ICompilerDirectiveContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(190) + p.SetState(194) p.Match(nevaParserT__0) if p.HasError() { // Recognition error - abort rule @@ -1392,14 +1404,14 @@ func (p *nevaParser) CompilerDirective() (localctx ICompilerDirectiveContext) { } } { - p.SetState(191) + p.SetState(195) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(193) + p.SetState(197) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1408,7 +1420,7 @@ func (p *nevaParser) CompilerDirective() (localctx ICompilerDirectiveContext) { if _la == nevaParserT__1 { { - p.SetState(192) + p.SetState(196) p.CompilerDirectivesArgs() } @@ -1542,7 +1554,7 @@ func (p *nevaParser) CompilerDirectivesArgs() (localctx ICompilerDirectivesArgsC p.EnterOuterAlt(localctx, 1) { - p.SetState(195) + p.SetState(199) p.Match(nevaParserT__1) if p.HasError() { // Recognition error - abort rule @@ -1550,10 +1562,10 @@ func (p *nevaParser) CompilerDirectivesArgs() (localctx ICompilerDirectivesArgsC } } { - p.SetState(196) + p.SetState(200) p.Compiler_directive_arg() } - p.SetState(201) + p.SetState(205) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1562,7 +1574,7 @@ func (p *nevaParser) CompilerDirectivesArgs() (localctx ICompilerDirectivesArgsC for _la == nevaParserT__2 { { - p.SetState(197) + p.SetState(201) p.Match(nevaParserT__2) if p.HasError() { // Recognition error - abort rule @@ -1570,11 +1582,11 @@ func (p *nevaParser) CompilerDirectivesArgs() (localctx ICompilerDirectivesArgsC } } { - p.SetState(198) + p.SetState(202) p.Compiler_directive_arg() } - p.SetState(203) + p.SetState(207) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1582,7 +1594,7 @@ func (p *nevaParser) CompilerDirectivesArgs() (localctx ICompilerDirectivesArgsC _la = p.GetTokenStream().LA(1) } { - p.SetState(204) + p.SetState(208) p.Match(nevaParserT__3) if p.HasError() { // Recognition error - abort rule @@ -1684,7 +1696,7 @@ func (p *nevaParser) Compiler_directive_arg() (localctx ICompiler_directive_argC var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(207) + p.SetState(211) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1693,7 +1705,7 @@ func (p *nevaParser) Compiler_directive_arg() (localctx ICompiler_directive_argC for ok := true; ok; ok = _la == nevaParserIDENTIFIER { { - p.SetState(206) + p.SetState(210) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -1701,7 +1713,7 @@ func (p *nevaParser) Compiler_directive_arg() (localctx ICompiler_directive_argC } } - p.SetState(209) + p.SetState(213) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1847,14 +1859,14 @@ func (p *nevaParser) ImportStmt() (localctx IImportStmtContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(211) + p.SetState(215) p.Match(nevaParserT__4) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(215) + p.SetState(219) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1863,7 +1875,7 @@ func (p *nevaParser) ImportStmt() (localctx IImportStmtContext) { for _la == nevaParserNEWLINE { { - p.SetState(212) + p.SetState(216) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -1871,7 +1883,7 @@ func (p *nevaParser) ImportStmt() (localctx IImportStmtContext) { } } - p.SetState(217) + p.SetState(221) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1879,14 +1891,14 @@ func (p *nevaParser) ImportStmt() (localctx IImportStmtContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(218) + p.SetState(222) p.Match(nevaParserT__5) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(222) + p.SetState(226) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1895,7 +1907,7 @@ func (p *nevaParser) ImportStmt() (localctx IImportStmtContext) { for _la == nevaParserNEWLINE { { - p.SetState(219) + p.SetState(223) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -1903,14 +1915,14 @@ func (p *nevaParser) ImportStmt() (localctx IImportStmtContext) { } } - p.SetState(224) + p.SetState(228) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(228) + p.SetState(232) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1919,11 +1931,11 @@ func (p *nevaParser) ImportStmt() (localctx IImportStmtContext) { for _la == nevaParserT__8 || _la == nevaParserIDENTIFIER { { - p.SetState(225) + p.SetState(229) p.ImportDef() } - p.SetState(230) + p.SetState(234) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1931,7 +1943,7 @@ func (p *nevaParser) ImportStmt() (localctx IImportStmtContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(231) + p.SetState(235) p.Match(nevaParserT__6) if p.HasError() { // Recognition error - abort rule @@ -2067,12 +2079,12 @@ func (p *nevaParser) ImportDef() (localctx IImportDefContext) { var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(234) + p.SetState(238) p.GetErrorHandler().Sync(p) if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 10, p.GetParserRuleContext()) == 1 { { - p.SetState(233) + p.SetState(237) p.ImportAlias() } @@ -2080,10 +2092,10 @@ func (p *nevaParser) ImportDef() (localctx IImportDefContext) { goto errorExit } { - p.SetState(236) + p.SetState(240) p.ImportPath() } - p.SetState(240) + p.SetState(244) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2092,7 +2104,7 @@ func (p *nevaParser) ImportDef() (localctx IImportDefContext) { for _la == nevaParserNEWLINE { { - p.SetState(237) + p.SetState(241) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -2100,7 +2112,7 @@ func (p *nevaParser) ImportDef() (localctx IImportDefContext) { } } - p.SetState(242) + p.SetState(246) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2196,7 +2208,7 @@ func (p *nevaParser) ImportAlias() (localctx IImportAliasContext) { p.EnterRule(localctx, 16, nevaParserRULE_importAlias) p.EnterOuterAlt(localctx, 1) { - p.SetState(243) + p.SetState(247) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -2320,16 +2332,16 @@ func (p *nevaParser) ImportPath() (localctx IImportPathContext) { localctx = NewImportPathContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 18, nevaParserRULE_importPath) p.EnterOuterAlt(localctx, 1) - p.SetState(248) + p.SetState(252) p.GetErrorHandler().Sync(p) if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 12, p.GetParserRuleContext()) == 1 { { - p.SetState(245) + p.SetState(249) p.ImportPathMod() } { - p.SetState(246) + p.SetState(250) p.Match(nevaParserT__7) if p.HasError() { // Recognition error - abort rule @@ -2341,7 +2353,7 @@ func (p *nevaParser) ImportPath() (localctx IImportPathContext) { goto errorExit } { - p.SetState(250) + p.SetState(254) p.ImportPathPkg() } @@ -2366,7 +2378,7 @@ type IImportPathModContext interface { GetParser() antlr.Parser // Getter signatures - IDENTIFIER() antlr.TerminalNode + ImportMod() IImportModContext // IsImportPathModContext differentiates from other interfaces. IsImportPathModContext() @@ -2404,8 +2416,20 @@ func NewImportPathModContext(parser antlr.Parser, parent antlr.ParserRuleContext func (s *ImportPathModContext) GetParser() antlr.Parser { return s.parser } -func (s *ImportPathModContext) IDENTIFIER() antlr.TerminalNode { - return s.GetToken(nevaParserIDENTIFIER, 0) +func (s *ImportPathModContext) ImportMod() IImportModContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IImportModContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IImportModContext) } func (s *ImportPathModContext) GetRuleContext() antlr.RuleContext { @@ -2431,14 +2455,295 @@ func (s *ImportPathModContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) ImportPathMod() (localctx IImportPathModContext) { localctx = NewImportPathModContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 20, nevaParserRULE_importPathMod) + p.SetState(258) + p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } + + switch p.GetTokenStream().LA(1) { + case nevaParserT__8: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(256) + p.Match(nevaParserT__8) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + + case nevaParserIDENTIFIER: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(257) + p.ImportMod() + } + + default: + p.SetError(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + goto errorExit + } + +errorExit: + if p.HasError() { + v := p.GetError() + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + p.SetError(nil) + } + p.ExitRule() + return localctx + goto errorExit // Trick to prevent compiler error if the label is not used +} + +// IImportModContext is an interface to support dynamic dispatch. +type IImportModContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // Getter signatures + AllIDENTIFIER() []antlr.TerminalNode + IDENTIFIER(i int) antlr.TerminalNode + AllImportModeDelim() []IImportModeDelimContext + ImportModeDelim(i int) IImportModeDelimContext + + // IsImportModContext differentiates from other interfaces. + IsImportModContext() +} + +type ImportModContext struct { + antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyImportModContext() *ImportModContext { + var p = new(ImportModContext) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = nevaParserRULE_importMod + return p +} + +func InitEmptyImportModContext(p *ImportModContext) { + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = nevaParserRULE_importMod +} + +func (*ImportModContext) IsImportModContext() {} + +func NewImportModContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ImportModContext { + var p = new(ImportModContext) + + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) + + p.parser = parser + p.RuleIndex = nevaParserRULE_importMod + + return p +} + +func (s *ImportModContext) GetParser() antlr.Parser { return s.parser } + +func (s *ImportModContext) AllIDENTIFIER() []antlr.TerminalNode { + return s.GetTokens(nevaParserIDENTIFIER) +} + +func (s *ImportModContext) IDENTIFIER(i int) antlr.TerminalNode { + return s.GetToken(nevaParserIDENTIFIER, i) +} + +func (s *ImportModContext) AllImportModeDelim() []IImportModeDelimContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IImportModeDelimContext); ok { + len++ + } + } + + tst := make([]IImportModeDelimContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IImportModeDelimContext); ok { + tst[i] = t.(IImportModeDelimContext) + i++ + } + } + + return tst +} + +func (s *ImportModContext) ImportModeDelim(i int) IImportModeDelimContext { + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IImportModeDelimContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IImportModeDelimContext) +} + +func (s *ImportModContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ImportModContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *ImportModContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(nevaListener); ok { + listenerT.EnterImportMod(s) + } +} + +func (s *ImportModContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(nevaListener); ok { + listenerT.ExitImportMod(s) + } +} + +func (p *nevaParser) ImportMod() (localctx IImportModContext) { + localctx = NewImportModContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 22, nevaParserRULE_importMod) + var _la int + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(260) + p.Match(nevaParserIDENTIFIER) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + p.SetState(266) + p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } + _la = p.GetTokenStream().LA(1) + + for _la == nevaParserT__9 || _la == nevaParserT__10 { + { + p.SetState(261) + p.ImportModeDelim() + } + { + p.SetState(262) + p.Match(nevaParserIDENTIFIER) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + + p.SetState(268) + p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } + _la = p.GetTokenStream().LA(1) + } + +errorExit: + if p.HasError() { + v := p.GetError() + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + p.SetError(nil) + } + p.ExitRule() + return localctx + goto errorExit // Trick to prevent compiler error if the label is not used +} + +// IImportModeDelimContext is an interface to support dynamic dispatch. +type IImportModeDelimContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + // IsImportModeDelimContext differentiates from other interfaces. + IsImportModeDelimContext() +} + +type ImportModeDelimContext struct { + antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyImportModeDelimContext() *ImportModeDelimContext { + var p = new(ImportModeDelimContext) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = nevaParserRULE_importModeDelim + return p +} + +func InitEmptyImportModeDelimContext(p *ImportModeDelimContext) { + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = nevaParserRULE_importModeDelim +} + +func (*ImportModeDelimContext) IsImportModeDelimContext() {} + +func NewImportModeDelimContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ImportModeDelimContext { + var p = new(ImportModeDelimContext) + + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) + + p.parser = parser + p.RuleIndex = nevaParserRULE_importModeDelim + + return p +} + +func (s *ImportModeDelimContext) GetParser() antlr.Parser { return s.parser } +func (s *ImportModeDelimContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ImportModeDelimContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *ImportModeDelimContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(nevaListener); ok { + listenerT.EnterImportModeDelim(s) + } +} + +func (s *ImportModeDelimContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(nevaListener); ok { + listenerT.ExitImportModeDelim(s) + } +} + +func (p *nevaParser) ImportModeDelim() (localctx IImportModeDelimContext) { + localctx = NewImportModeDelimContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 24, nevaParserRULE_importModeDelim) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(252) + p.SetState(269) _la = p.GetTokenStream().LA(1) - if !(_la == nevaParserT__8 || _la == nevaParserIDENTIFIER) { + if !(_la == nevaParserT__9 || _la == nevaParserT__10) { p.GetErrorHandler().RecoverInline(p) } else { p.GetErrorHandler().ReportMatch(p) @@ -2536,36 +2841,36 @@ func (s *ImportPathPkgContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) ImportPathPkg() (localctx IImportPathPkgContext) { localctx = NewImportPathPkgContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 22, nevaParserRULE_importPathPkg) + p.EnterRule(localctx, 26, nevaParserRULE_importPathPkg) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(254) + p.SetState(271) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(259) + p.SetState(276) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - for _la == nevaParserT__7 { + for _la == nevaParserT__9 { { - p.SetState(255) - p.Match(nevaParserT__7) + p.SetState(272) + p.Match(nevaParserT__9) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(256) + p.SetState(273) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -2573,7 +2878,7 @@ func (p *nevaParser) ImportPathPkg() (localctx IImportPathPkgContext) { } } - p.SetState(261) + p.SetState(278) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2695,25 +3000,25 @@ func (s *EntityRefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) EntityRef() (localctx IEntityRefContext) { localctx = NewEntityRefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 24, nevaParserRULE_entityRef) - p.SetState(264) + p.EnterRule(localctx, 28, nevaParserRULE_entityRef) + p.SetState(281) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 14, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 16, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(262) + p.SetState(279) p.LocalEntityRef() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(263) + p.SetState(280) p.ImportedEntityRef() } @@ -2806,10 +3111,10 @@ func (s *LocalEntityRefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) LocalEntityRef() (localctx ILocalEntityRefContext) { localctx = NewLocalEntityRefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 26, nevaParserRULE_localEntityRef) + p.EnterRule(localctx, 30, nevaParserRULE_localEntityRef) p.EnterOuterAlt(localctx, 1) { - p.SetState(266) + p.SetState(283) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -2931,26 +3236,26 @@ func (s *ImportedEntityRefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) ImportedEntityRef() (localctx IImportedEntityRefContext) { localctx = NewImportedEntityRefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 28, nevaParserRULE_importedEntityRef) + p.EnterRule(localctx, 32, nevaParserRULE_importedEntityRef) p.EnterOuterAlt(localctx, 1) { - p.SetState(268) + p.SetState(285) p.PkgRef() } - p.SetState(271) + p.SetState(288) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 15, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 17, p.GetParserRuleContext()) == 1 { { - p.SetState(269) - p.Match(nevaParserT__9) + p.SetState(286) + p.Match(nevaParserT__10) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(270) + p.SetState(287) p.EntityName() } @@ -3043,10 +3348,10 @@ func (s *PkgRefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) PkgRef() (localctx IPkgRefContext) { localctx = NewPkgRefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 30, nevaParserRULE_pkgRef) + p.EnterRule(localctx, 34, nevaParserRULE_pkgRef) p.EnterOuterAlt(localctx, 1) { - p.SetState(273) + p.SetState(290) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -3139,10 +3444,10 @@ func (s *EntityNameContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) EntityName() (localctx IEntityNameContext) { localctx = NewEntityNameContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 32, nevaParserRULE_entityName) + p.EnterRule(localctx, 36, nevaParserRULE_entityName) p.EnterOuterAlt(localctx, 1) { - p.SetState(275) + p.SetState(292) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -3264,25 +3569,25 @@ func (s *TypeStmtContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) TypeStmt() (localctx ITypeStmtContext) { localctx = NewTypeStmtContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 34, nevaParserRULE_typeStmt) - p.SetState(279) + p.EnterRule(localctx, 38, nevaParserRULE_typeStmt) + p.SetState(296) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 16, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 18, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(277) + p.SetState(294) p.SingleTypeStmt() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(278) + p.SetState(295) p.GroupTypeStmt() } @@ -3392,11 +3697,11 @@ func (s *SingleTypeStmtContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) SingleTypeStmt() (localctx ISingleTypeStmtContext) { localctx = NewSingleTypeStmtContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 36, nevaParserRULE_singleTypeStmt) + p.EnterRule(localctx, 40, nevaParserRULE_singleTypeStmt) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(282) + p.SetState(299) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3405,7 +3710,7 @@ func (p *nevaParser) SingleTypeStmt() (localctx ISingleTypeStmtContext) { if _la == nevaParserPUB_KW { { - p.SetState(281) + p.SetState(298) p.Match(nevaParserPUB_KW) if p.HasError() { // Recognition error - abort rule @@ -3415,15 +3720,15 @@ func (p *nevaParser) SingleTypeStmt() (localctx ISingleTypeStmtContext) { } { - p.SetState(284) - p.Match(nevaParserT__10) + p.SetState(301) + p.Match(nevaParserT__11) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(285) + p.SetState(302) p.TypeDef() } @@ -3570,19 +3875,19 @@ func (s *GroupTypeStmtContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) GroupTypeStmt() (localctx IGroupTypeStmtContext) { localctx = NewGroupTypeStmtContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 38, nevaParserRULE_groupTypeStmt) + p.EnterRule(localctx, 42, nevaParserRULE_groupTypeStmt) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(287) - p.Match(nevaParserT__10) + p.SetState(304) + p.Match(nevaParserT__11) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(291) + p.SetState(308) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3591,7 +3896,7 @@ func (p *nevaParser) GroupTypeStmt() (localctx IGroupTypeStmtContext) { for _la == nevaParserNEWLINE { { - p.SetState(288) + p.SetState(305) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -3599,7 +3904,7 @@ func (p *nevaParser) GroupTypeStmt() (localctx IGroupTypeStmtContext) { } } - p.SetState(293) + p.SetState(310) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3607,14 +3912,14 @@ func (p *nevaParser) GroupTypeStmt() (localctx IGroupTypeStmtContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(294) + p.SetState(311) p.Match(nevaParserT__5) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(298) + p.SetState(315) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3623,7 +3928,7 @@ func (p *nevaParser) GroupTypeStmt() (localctx IGroupTypeStmtContext) { for _la == nevaParserNEWLINE { { - p.SetState(295) + p.SetState(312) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -3631,14 +3936,14 @@ func (p *nevaParser) GroupTypeStmt() (localctx IGroupTypeStmtContext) { } } - p.SetState(300) + p.SetState(317) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(313) + p.SetState(330) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3646,7 +3951,7 @@ func (p *nevaParser) GroupTypeStmt() (localctx IGroupTypeStmtContext) { _la = p.GetTokenStream().LA(1) for _la == nevaParserPUB_KW || _la == nevaParserIDENTIFIER { - p.SetState(302) + p.SetState(319) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3655,7 +3960,7 @@ func (p *nevaParser) GroupTypeStmt() (localctx IGroupTypeStmtContext) { if _la == nevaParserPUB_KW { { - p.SetState(301) + p.SetState(318) p.Match(nevaParserPUB_KW) if p.HasError() { // Recognition error - abort rule @@ -3665,10 +3970,10 @@ func (p *nevaParser) GroupTypeStmt() (localctx IGroupTypeStmtContext) { } { - p.SetState(304) + p.SetState(321) p.TypeDef() } - p.SetState(308) + p.SetState(325) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3677,7 +3982,7 @@ func (p *nevaParser) GroupTypeStmt() (localctx IGroupTypeStmtContext) { for _la == nevaParserNEWLINE { { - p.SetState(305) + p.SetState(322) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -3685,7 +3990,7 @@ func (p *nevaParser) GroupTypeStmt() (localctx IGroupTypeStmtContext) { } } - p.SetState(310) + p.SetState(327) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3693,7 +3998,7 @@ func (p *nevaParser) GroupTypeStmt() (localctx IGroupTypeStmtContext) { _la = p.GetTokenStream().LA(1) } - p.SetState(315) + p.SetState(332) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3701,7 +4006,7 @@ func (p *nevaParser) GroupTypeStmt() (localctx IGroupTypeStmtContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(316) + p.SetState(333) p.Match(nevaParserT__6) if p.HasError() { // Recognition error - abort rule @@ -3828,38 +4133,38 @@ func (s *TypeDefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) TypeDef() (localctx ITypeDefContext) { localctx = NewTypeDefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 40, nevaParserRULE_typeDef) + p.EnterRule(localctx, 44, nevaParserRULE_typeDef) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(318) + p.SetState(335) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(320) + p.SetState(337) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - if _la == nevaParserT__11 { + if _la == nevaParserT__12 { { - p.SetState(319) + p.SetState(336) p.TypeParams() } } - p.SetState(323) + p.SetState(340) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 24, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 26, p.GetParserRuleContext()) == 1 { { - p.SetState(322) + p.SetState(339) p.TypeExpr() } @@ -3974,19 +4279,19 @@ func (s *TypeParamsContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) TypeParams() (localctx ITypeParamsContext) { localctx = NewTypeParamsContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 42, nevaParserRULE_typeParams) + p.EnterRule(localctx, 46, nevaParserRULE_typeParams) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(325) - p.Match(nevaParserT__11) + p.SetState(342) + p.Match(nevaParserT__12) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(329) + p.SetState(346) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3995,7 +4300,7 @@ func (p *nevaParser) TypeParams() (localctx ITypeParamsContext) { for _la == nevaParserNEWLINE { { - p.SetState(326) + p.SetState(343) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -4003,14 +4308,14 @@ func (p *nevaParser) TypeParams() (localctx ITypeParamsContext) { } } - p.SetState(331) + p.SetState(348) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(333) + p.SetState(350) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4019,14 +4324,14 @@ func (p *nevaParser) TypeParams() (localctx ITypeParamsContext) { if _la == nevaParserIDENTIFIER { { - p.SetState(332) + p.SetState(349) p.TypeParamList() } } { - p.SetState(335) - p.Match(nevaParserT__12) + p.SetState(352) + p.Match(nevaParserT__13) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -4166,15 +4471,15 @@ func (s *TypeParamListContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) TypeParamList() (localctx ITypeParamListContext) { localctx = NewTypeParamListContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 44, nevaParserRULE_typeParamList) + p.EnterRule(localctx, 48, nevaParserRULE_typeParamList) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(337) + p.SetState(354) p.TypeParam() } - p.SetState(348) + p.SetState(365) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4183,14 +4488,14 @@ func (p *nevaParser) TypeParamList() (localctx ITypeParamListContext) { for _la == nevaParserT__2 { { - p.SetState(338) + p.SetState(355) p.Match(nevaParserT__2) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(342) + p.SetState(359) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4199,7 +4504,7 @@ func (p *nevaParser) TypeParamList() (localctx ITypeParamListContext) { for _la == nevaParserNEWLINE { { - p.SetState(339) + p.SetState(356) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -4207,7 +4512,7 @@ func (p *nevaParser) TypeParamList() (localctx ITypeParamListContext) { } } - p.SetState(344) + p.SetState(361) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4215,11 +4520,11 @@ func (p *nevaParser) TypeParamList() (localctx ITypeParamListContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(345) + p.SetState(362) p.TypeParam() } - p.SetState(350) + p.SetState(367) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4339,33 +4644,33 @@ func (s *TypeParamContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) TypeParam() (localctx ITypeParamContext) { localctx = NewTypeParamContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 46, nevaParserRULE_typeParam) + p.EnterRule(localctx, 50, nevaParserRULE_typeParam) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(351) + p.SetState(368) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(353) + p.SetState(370) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&17179918336) != 0 { + if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&17179967488) != 0 { { - p.SetState(352) + p.SetState(369) p.TypeExpr() } } - p.SetState(358) + p.SetState(375) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4374,7 +4679,7 @@ func (p *nevaParser) TypeParam() (localctx ITypeParamContext) { for _la == nevaParserNEWLINE { { - p.SetState(355) + p.SetState(372) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -4382,7 +4687,7 @@ func (p *nevaParser) TypeParam() (localctx ITypeParamContext) { } } - p.SetState(360) + p.SetState(377) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4521,32 +4826,32 @@ func (s *TypeExprContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) TypeExpr() (localctx ITypeExprContext) { localctx = NewTypeExprContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 48, nevaParserRULE_typeExpr) - p.SetState(364) + p.EnterRule(localctx, 52, nevaParserRULE_typeExpr) + p.SetState(381) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 31, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 33, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(361) + p.SetState(378) p.TypeInstExpr() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(362) + p.SetState(379) p.TypeLitExpr() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(363) + p.SetState(380) p.UnionTypeExpr() } @@ -4668,24 +4973,24 @@ func (s *TypeInstExprContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) TypeInstExpr() (localctx ITypeInstExprContext) { localctx = NewTypeInstExprContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 50, nevaParserRULE_typeInstExpr) + p.EnterRule(localctx, 54, nevaParserRULE_typeInstExpr) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(366) + p.SetState(383) p.EntityRef() } - p.SetState(368) + p.SetState(385) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - if _la == nevaParserT__11 { + if _la == nevaParserT__12 { { - p.SetState(367) + p.SetState(384) p.TypeArgs() } @@ -4824,19 +5129,19 @@ func (s *TypeArgsContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) TypeArgs() (localctx ITypeArgsContext) { localctx = NewTypeArgsContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 52, nevaParserRULE_typeArgs) + p.EnterRule(localctx, 56, nevaParserRULE_typeArgs) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(370) - p.Match(nevaParserT__11) + p.SetState(387) + p.Match(nevaParserT__12) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(374) + p.SetState(391) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4845,7 +5150,7 @@ func (p *nevaParser) TypeArgs() (localctx ITypeArgsContext) { for _la == nevaParserNEWLINE { { - p.SetState(371) + p.SetState(388) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -4853,7 +5158,7 @@ func (p *nevaParser) TypeArgs() (localctx ITypeArgsContext) { } } - p.SetState(376) + p.SetState(393) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4861,10 +5166,10 @@ func (p *nevaParser) TypeArgs() (localctx ITypeArgsContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(377) + p.SetState(394) p.TypeExpr() } - p.SetState(388) + p.SetState(405) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4873,14 +5178,14 @@ func (p *nevaParser) TypeArgs() (localctx ITypeArgsContext) { for _la == nevaParserT__2 { { - p.SetState(378) + p.SetState(395) p.Match(nevaParserT__2) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(382) + p.SetState(399) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4889,7 +5194,7 @@ func (p *nevaParser) TypeArgs() (localctx ITypeArgsContext) { for _la == nevaParserNEWLINE { { - p.SetState(379) + p.SetState(396) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -4897,7 +5202,7 @@ func (p *nevaParser) TypeArgs() (localctx ITypeArgsContext) { } } - p.SetState(384) + p.SetState(401) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4905,18 +5210,18 @@ func (p *nevaParser) TypeArgs() (localctx ITypeArgsContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(385) + p.SetState(402) p.TypeExpr() } - p.SetState(390) + p.SetState(407) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(394) + p.SetState(411) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4925,7 +5230,7 @@ func (p *nevaParser) TypeArgs() (localctx ITypeArgsContext) { for _la == nevaParserNEWLINE { { - p.SetState(391) + p.SetState(408) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -4933,7 +5238,7 @@ func (p *nevaParser) TypeArgs() (localctx ITypeArgsContext) { } } - p.SetState(396) + p.SetState(413) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4941,8 +5246,8 @@ func (p *nevaParser) TypeArgs() (localctx ITypeArgsContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(397) - p.Match(nevaParserT__12) + p.SetState(414) + p.Match(nevaParserT__13) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -5063,25 +5368,25 @@ func (s *TypeLitExprContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) TypeLitExpr() (localctx ITypeLitExprContext) { localctx = NewTypeLitExprContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 54, nevaParserRULE_typeLitExpr) - p.SetState(401) + p.EnterRule(localctx, 58, nevaParserRULE_typeLitExpr) + p.SetState(418) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } switch p.GetTokenStream().LA(1) { - case nevaParserT__13: + case nevaParserT__14: p.EnterOuterAlt(localctx, 1) { - p.SetState(399) + p.SetState(416) p.EnumTypeExpr() } - case nevaParserT__14: + case nevaParserT__15: p.EnterOuterAlt(localctx, 2) { - p.SetState(400) + p.SetState(417) p.StructTypeExpr() } @@ -5190,19 +5495,19 @@ func (s *EnumTypeExprContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) EnumTypeExpr() (localctx IEnumTypeExprContext) { localctx = NewEnumTypeExprContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 56, nevaParserRULE_enumTypeExpr) + p.EnterRule(localctx, 60, nevaParserRULE_enumTypeExpr) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(403) - p.Match(nevaParserT__13) + p.SetState(420) + p.Match(nevaParserT__14) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(407) + p.SetState(424) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5211,7 +5516,7 @@ func (p *nevaParser) EnumTypeExpr() (localctx IEnumTypeExprContext) { for _la == nevaParserNEWLINE { { - p.SetState(404) + p.SetState(421) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -5219,7 +5524,7 @@ func (p *nevaParser) EnumTypeExpr() (localctx IEnumTypeExprContext) { } } - p.SetState(409) + p.SetState(426) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5227,14 +5532,14 @@ func (p *nevaParser) EnumTypeExpr() (localctx IEnumTypeExprContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(410) + p.SetState(427) p.Match(nevaParserT__5) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(414) + p.SetState(431) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5243,7 +5548,7 @@ func (p *nevaParser) EnumTypeExpr() (localctx IEnumTypeExprContext) { for _la == nevaParserNEWLINE { { - p.SetState(411) + p.SetState(428) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -5251,7 +5556,7 @@ func (p *nevaParser) EnumTypeExpr() (localctx IEnumTypeExprContext) { } } - p.SetState(416) + p.SetState(433) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5259,14 +5564,14 @@ func (p *nevaParser) EnumTypeExpr() (localctx IEnumTypeExprContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(417) + p.SetState(434) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(428) + p.SetState(445) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5275,14 +5580,14 @@ func (p *nevaParser) EnumTypeExpr() (localctx IEnumTypeExprContext) { for _la == nevaParserT__2 { { - p.SetState(418) + p.SetState(435) p.Match(nevaParserT__2) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(422) + p.SetState(439) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5291,7 +5596,7 @@ func (p *nevaParser) EnumTypeExpr() (localctx IEnumTypeExprContext) { for _la == nevaParserNEWLINE { { - p.SetState(419) + p.SetState(436) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -5299,7 +5604,7 @@ func (p *nevaParser) EnumTypeExpr() (localctx IEnumTypeExprContext) { } } - p.SetState(424) + p.SetState(441) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5307,7 +5612,7 @@ func (p *nevaParser) EnumTypeExpr() (localctx IEnumTypeExprContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(425) + p.SetState(442) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -5315,14 +5620,14 @@ func (p *nevaParser) EnumTypeExpr() (localctx IEnumTypeExprContext) { } } - p.SetState(430) + p.SetState(447) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(434) + p.SetState(451) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5331,7 +5636,7 @@ func (p *nevaParser) EnumTypeExpr() (localctx IEnumTypeExprContext) { for _la == nevaParserNEWLINE { { - p.SetState(431) + p.SetState(448) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -5339,7 +5644,7 @@ func (p *nevaParser) EnumTypeExpr() (localctx IEnumTypeExprContext) { } } - p.SetState(436) + p.SetState(453) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5347,7 +5652,7 @@ func (p *nevaParser) EnumTypeExpr() (localctx IEnumTypeExprContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(437) + p.SetState(454) p.Match(nevaParserT__6) if p.HasError() { // Recognition error - abort rule @@ -5462,19 +5767,19 @@ func (s *StructTypeExprContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) StructTypeExpr() (localctx IStructTypeExprContext) { localctx = NewStructTypeExprContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 58, nevaParserRULE_structTypeExpr) + p.EnterRule(localctx, 62, nevaParserRULE_structTypeExpr) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(439) - p.Match(nevaParserT__14) + p.SetState(456) + p.Match(nevaParserT__15) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(443) + p.SetState(460) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5483,7 +5788,7 @@ func (p *nevaParser) StructTypeExpr() (localctx IStructTypeExprContext) { for _la == nevaParserNEWLINE { { - p.SetState(440) + p.SetState(457) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -5491,7 +5796,7 @@ func (p *nevaParser) StructTypeExpr() (localctx IStructTypeExprContext) { } } - p.SetState(445) + p.SetState(462) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5499,14 +5804,14 @@ func (p *nevaParser) StructTypeExpr() (localctx IStructTypeExprContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(446) + p.SetState(463) p.Match(nevaParserT__5) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(450) + p.SetState(467) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5515,7 +5820,7 @@ func (p *nevaParser) StructTypeExpr() (localctx IStructTypeExprContext) { for _la == nevaParserNEWLINE { { - p.SetState(447) + p.SetState(464) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -5523,14 +5828,14 @@ func (p *nevaParser) StructTypeExpr() (localctx IStructTypeExprContext) { } } - p.SetState(452) + p.SetState(469) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(454) + p.SetState(471) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5539,13 +5844,13 @@ func (p *nevaParser) StructTypeExpr() (localctx IStructTypeExprContext) { if _la == nevaParserIDENTIFIER { { - p.SetState(453) + p.SetState(470) p.StructFields() } } { - p.SetState(456) + p.SetState(473) p.Match(nevaParserT__6) if p.HasError() { // Recognition error - abort rule @@ -5686,15 +5991,15 @@ func (s *StructFieldsContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) StructFields() (localctx IStructFieldsContext) { localctx = NewStructFieldsContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 60, nevaParserRULE_structFields) + p.EnterRule(localctx, 64, nevaParserRULE_structFields) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(458) + p.SetState(475) p.StructField() } - p.SetState(467) + p.SetState(484) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5702,7 +6007,7 @@ func (p *nevaParser) StructFields() (localctx IStructFieldsContext) { _la = p.GetTokenStream().LA(1) for _la == nevaParserNEWLINE { - p.SetState(460) + p.SetState(477) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5711,7 +6016,7 @@ func (p *nevaParser) StructFields() (localctx IStructFieldsContext) { for ok := true; ok; ok = _la == nevaParserNEWLINE { { - p.SetState(459) + p.SetState(476) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -5719,7 +6024,7 @@ func (p *nevaParser) StructFields() (localctx IStructFieldsContext) { } } - p.SetState(462) + p.SetState(479) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5727,11 +6032,11 @@ func (p *nevaParser) StructFields() (localctx IStructFieldsContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(464) + p.SetState(481) p.StructField() } - p.SetState(469) + p.SetState(486) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5851,12 +6156,12 @@ func (s *StructFieldContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) StructField() (localctx IStructFieldContext) { localctx = NewStructFieldContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 62, nevaParserRULE_structField) + p.EnterRule(localctx, 66, nevaParserRULE_structField) var _alt int p.EnterOuterAlt(localctx, 1) { - p.SetState(470) + p.SetState(487) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -5864,22 +6169,22 @@ func (p *nevaParser) StructField() (localctx IStructFieldContext) { } } { - p.SetState(471) + p.SetState(488) p.TypeExpr() } - p.SetState(475) + p.SetState(492) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 48, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 50, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(472) + p.SetState(489) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -5888,12 +6193,12 @@ func (p *nevaParser) StructField() (localctx IStructFieldContext) { } } - p.SetState(477) + p.SetState(494) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 48, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 50, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -6032,17 +6337,17 @@ func (s *UnionTypeExprContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) UnionTypeExpr() (localctx IUnionTypeExprContext) { localctx = NewUnionTypeExprContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 64, nevaParserRULE_unionTypeExpr) + p.EnterRule(localctx, 68, nevaParserRULE_unionTypeExpr) var _la int var _alt int p.EnterOuterAlt(localctx, 1) { - p.SetState(478) + p.SetState(495) p.NonUnionTypeExpr() } - p.SetState(493) + p.SetState(510) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -6051,7 +6356,7 @@ func (p *nevaParser) UnionTypeExpr() (localctx IUnionTypeExprContext) { for ok := true; ok; ok = _alt != 2 && _alt != antlr.ATNInvalidAltNumber { switch _alt { case 1: - p.SetState(482) + p.SetState(499) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -6060,7 +6365,7 @@ func (p *nevaParser) UnionTypeExpr() (localctx IUnionTypeExprContext) { for _la == nevaParserNEWLINE { { - p.SetState(479) + p.SetState(496) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -6068,7 +6373,7 @@ func (p *nevaParser) UnionTypeExpr() (localctx IUnionTypeExprContext) { } } - p.SetState(484) + p.SetState(501) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -6076,14 +6381,14 @@ func (p *nevaParser) UnionTypeExpr() (localctx IUnionTypeExprContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(485) - p.Match(nevaParserT__15) + p.SetState(502) + p.Match(nevaParserT__16) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(489) + p.SetState(506) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -6092,7 +6397,7 @@ func (p *nevaParser) UnionTypeExpr() (localctx IUnionTypeExprContext) { for _la == nevaParserNEWLINE { { - p.SetState(486) + p.SetState(503) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -6100,7 +6405,7 @@ func (p *nevaParser) UnionTypeExpr() (localctx IUnionTypeExprContext) { } } - p.SetState(491) + p.SetState(508) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -6108,7 +6413,7 @@ func (p *nevaParser) UnionTypeExpr() (localctx IUnionTypeExprContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(492) + p.SetState(509) p.NonUnionTypeExpr() } @@ -6117,9 +6422,9 @@ func (p *nevaParser) UnionTypeExpr() (localctx IUnionTypeExprContext) { goto errorExit } - p.SetState(495) + p.SetState(512) p.GetErrorHandler().Sync(p) - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 51, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 53, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -6239,8 +6544,8 @@ func (s *NonUnionTypeExprContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) NonUnionTypeExpr() (localctx INonUnionTypeExprContext) { localctx = NewNonUnionTypeExprContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 66, nevaParserRULE_nonUnionTypeExpr) - p.SetState(499) + p.EnterRule(localctx, 70, nevaParserRULE_nonUnionTypeExpr) + p.SetState(516) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -6250,14 +6555,14 @@ func (p *nevaParser) NonUnionTypeExpr() (localctx INonUnionTypeExprContext) { case nevaParserIDENTIFIER: p.EnterOuterAlt(localctx, 1) { - p.SetState(497) + p.SetState(514) p.TypeInstExpr() } - case nevaParserT__13, nevaParserT__14: + case nevaParserT__14, nevaParserT__15: p.EnterOuterAlt(localctx, 2) { - p.SetState(498) + p.SetState(515) p.TypeLitExpr() } @@ -6380,25 +6685,25 @@ func (s *InterfaceStmtContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) InterfaceStmt() (localctx IInterfaceStmtContext) { localctx = NewInterfaceStmtContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 68, nevaParserRULE_interfaceStmt) - p.SetState(503) + p.EnterRule(localctx, 72, nevaParserRULE_interfaceStmt) + p.SetState(520) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 53, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 55, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(501) + p.SetState(518) p.SingleInterfaceStmt() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(502) + p.SetState(519) p.GroupInterfaceStmt() } @@ -6508,11 +6813,11 @@ func (s *SingleInterfaceStmtContext) ExitRule(listener antlr.ParseTreeListener) func (p *nevaParser) SingleInterfaceStmt() (localctx ISingleInterfaceStmtContext) { localctx = NewSingleInterfaceStmtContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 70, nevaParserRULE_singleInterfaceStmt) + p.EnterRule(localctx, 74, nevaParserRULE_singleInterfaceStmt) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(506) + p.SetState(523) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -6521,7 +6826,7 @@ func (p *nevaParser) SingleInterfaceStmt() (localctx ISingleInterfaceStmtContext if _la == nevaParserPUB_KW { { - p.SetState(505) + p.SetState(522) p.Match(nevaParserPUB_KW) if p.HasError() { // Recognition error - abort rule @@ -6531,15 +6836,15 @@ func (p *nevaParser) SingleInterfaceStmt() (localctx ISingleInterfaceStmtContext } { - p.SetState(508) - p.Match(nevaParserT__16) + p.SetState(525) + p.Match(nevaParserT__17) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(509) + p.SetState(526) p.InterfaceDef() } @@ -6686,19 +6991,19 @@ func (s *GroupInterfaceStmtContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) GroupInterfaceStmt() (localctx IGroupInterfaceStmtContext) { localctx = NewGroupInterfaceStmtContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 72, nevaParserRULE_groupInterfaceStmt) + p.EnterRule(localctx, 76, nevaParserRULE_groupInterfaceStmt) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(511) - p.Match(nevaParserT__16) + p.SetState(528) + p.Match(nevaParserT__17) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(515) + p.SetState(532) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -6707,7 +7012,7 @@ func (p *nevaParser) GroupInterfaceStmt() (localctx IGroupInterfaceStmtContext) for _la == nevaParserNEWLINE { { - p.SetState(512) + p.SetState(529) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -6715,7 +7020,7 @@ func (p *nevaParser) GroupInterfaceStmt() (localctx IGroupInterfaceStmtContext) } } - p.SetState(517) + p.SetState(534) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -6723,14 +7028,14 @@ func (p *nevaParser) GroupInterfaceStmt() (localctx IGroupInterfaceStmtContext) _la = p.GetTokenStream().LA(1) } { - p.SetState(518) + p.SetState(535) p.Match(nevaParserT__5) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(522) + p.SetState(539) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -6739,7 +7044,7 @@ func (p *nevaParser) GroupInterfaceStmt() (localctx IGroupInterfaceStmtContext) for _la == nevaParserNEWLINE { { - p.SetState(519) + p.SetState(536) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -6747,14 +7052,14 @@ func (p *nevaParser) GroupInterfaceStmt() (localctx IGroupInterfaceStmtContext) } } - p.SetState(524) + p.SetState(541) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(531) + p.SetState(548) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -6762,7 +7067,7 @@ func (p *nevaParser) GroupInterfaceStmt() (localctx IGroupInterfaceStmtContext) _la = p.GetTokenStream().LA(1) for _la == nevaParserPUB_KW || _la == nevaParserIDENTIFIER { - p.SetState(526) + p.SetState(543) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -6771,7 +7076,7 @@ func (p *nevaParser) GroupInterfaceStmt() (localctx IGroupInterfaceStmtContext) if _la == nevaParserPUB_KW { { - p.SetState(525) + p.SetState(542) p.Match(nevaParserPUB_KW) if p.HasError() { // Recognition error - abort rule @@ -6781,11 +7086,11 @@ func (p *nevaParser) GroupInterfaceStmt() (localctx IGroupInterfaceStmtContext) } { - p.SetState(528) + p.SetState(545) p.InterfaceDef() } - p.SetState(533) + p.SetState(550) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -6793,7 +7098,7 @@ func (p *nevaParser) GroupInterfaceStmt() (localctx IGroupInterfaceStmtContext) _la = p.GetTokenStream().LA(1) } { - p.SetState(534) + p.SetState(551) p.Match(nevaParserT__6) if p.HasError() { // Recognition error - abort rule @@ -6947,55 +7252,55 @@ func (s *InterfaceDefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) InterfaceDef() (localctx IInterfaceDefContext) { localctx = NewInterfaceDefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 74, nevaParserRULE_interfaceDef) + p.EnterRule(localctx, 78, nevaParserRULE_interfaceDef) var _la int var _alt int p.EnterOuterAlt(localctx, 1) { - p.SetState(536) + p.SetState(553) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(538) + p.SetState(555) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - if _la == nevaParserT__11 { + if _la == nevaParserT__12 { { - p.SetState(537) + p.SetState(554) p.TypeParams() } } { - p.SetState(540) + p.SetState(557) p.InPortsDef() } { - p.SetState(541) + p.SetState(558) p.OutPortsDef() } - p.SetState(545) + p.SetState(562) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 60, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 62, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(542) + p.SetState(559) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -7004,12 +7309,12 @@ func (p *nevaParser) InterfaceDef() (localctx IInterfaceDefContext) { } } - p.SetState(547) + p.SetState(564) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 60, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 62, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -7112,10 +7417,10 @@ func (s *InPortsDefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) InPortsDef() (localctx IInPortsDefContext) { localctx = NewInPortsDefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 76, nevaParserRULE_inPortsDef) + p.EnterRule(localctx, 80, nevaParserRULE_inPortsDef) p.EnterOuterAlt(localctx, 1) { - p.SetState(548) + p.SetState(565) p.PortsDef() } @@ -7216,10 +7521,10 @@ func (s *OutPortsDefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) OutPortsDef() (localctx IOutPortsDefContext) { localctx = NewOutPortsDefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 78, nevaParserRULE_outPortsDef) + p.EnterRule(localctx, 82, nevaParserRULE_outPortsDef) p.EnterOuterAlt(localctx, 1) { - p.SetState(550) + p.SetState(567) p.PortsDef() } @@ -7356,27 +7661,27 @@ func (s *PortsDefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) PortsDef() (localctx IPortsDefContext) { localctx = NewPortsDefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 80, nevaParserRULE_portsDef) + p.EnterRule(localctx, 84, nevaParserRULE_portsDef) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(552) + p.SetState(569) p.Match(nevaParserT__1) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(570) + p.SetState(587) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 64, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 66, p.GetParserRuleContext()) { case 1: - p.SetState(556) + p.SetState(573) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -7385,7 +7690,7 @@ func (p *nevaParser) PortsDef() (localctx IPortsDefContext) { for _la == nevaParserNEWLINE { { - p.SetState(553) + p.SetState(570) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -7393,7 +7698,7 @@ func (p *nevaParser) PortsDef() (localctx IPortsDefContext) { } } - p.SetState(558) + p.SetState(575) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -7402,16 +7707,16 @@ func (p *nevaParser) PortsDef() (localctx IPortsDefContext) { } case 2: - p.SetState(560) + p.SetState(577) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&292058038272) != 0 { + if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&292058300416) != 0 { { - p.SetState(559) + p.SetState(576) p.PortDef() } @@ -7419,10 +7724,10 @@ func (p *nevaParser) PortsDef() (localctx IPortsDefContext) { case 3: { - p.SetState(562) + p.SetState(579) p.PortDef() } - p.SetState(567) + p.SetState(584) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -7431,7 +7736,7 @@ func (p *nevaParser) PortsDef() (localctx IPortsDefContext) { for _la == nevaParserT__2 { { - p.SetState(563) + p.SetState(580) p.Match(nevaParserT__2) if p.HasError() { // Recognition error - abort rule @@ -7439,11 +7744,11 @@ func (p *nevaParser) PortsDef() (localctx IPortsDefContext) { } } { - p.SetState(564) + p.SetState(581) p.PortDef() } - p.SetState(569) + p.SetState(586) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -7455,7 +7760,7 @@ func (p *nevaParser) PortsDef() (localctx IPortsDefContext) { goto errorExit } { - p.SetState(572) + p.SetState(589) p.Match(nevaParserT__3) if p.HasError() { // Recognition error - abort rule @@ -7577,25 +7882,25 @@ func (s *PortDefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) PortDef() (localctx IPortDefContext) { localctx = NewPortDefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 82, nevaParserRULE_portDef) - p.SetState(576) + p.EnterRule(localctx, 86, nevaParserRULE_portDef) + p.SetState(593) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 65, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 67, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(574) + p.SetState(591) p.SinglePortDef() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(575) + p.SetState(592) p.ArrayPortDef() } @@ -7715,11 +8020,11 @@ func (s *SinglePortDefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) SinglePortDef() (localctx ISinglePortDefContext) { localctx = NewSinglePortDefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 84, nevaParserRULE_singlePortDef) + p.EnterRule(localctx, 88, nevaParserRULE_singlePortDef) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(581) + p.SetState(598) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -7728,7 +8033,7 @@ func (p *nevaParser) SinglePortDef() (localctx ISinglePortDefContext) { for _la == nevaParserNEWLINE { { - p.SetState(578) + p.SetState(595) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -7736,7 +8041,7 @@ func (p *nevaParser) SinglePortDef() (localctx ISinglePortDefContext) { } } - p.SetState(583) + p.SetState(600) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -7744,7 +8049,7 @@ func (p *nevaParser) SinglePortDef() (localctx ISinglePortDefContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(584) + p.SetState(601) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -7752,10 +8057,10 @@ func (p *nevaParser) SinglePortDef() (localctx ISinglePortDefContext) { } } { - p.SetState(585) + p.SetState(602) p.TypeExpr() } - p.SetState(589) + p.SetState(606) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -7764,7 +8069,7 @@ func (p *nevaParser) SinglePortDef() (localctx ISinglePortDefContext) { for _la == nevaParserNEWLINE { { - p.SetState(586) + p.SetState(603) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -7772,7 +8077,7 @@ func (p *nevaParser) SinglePortDef() (localctx ISinglePortDefContext) { } } - p.SetState(591) + p.SetState(608) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -7892,11 +8197,11 @@ func (s *ArrayPortDefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) ArrayPortDef() (localctx IArrayPortDefContext) { localctx = NewArrayPortDefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 86, nevaParserRULE_arrayPortDef) + p.EnterRule(localctx, 90, nevaParserRULE_arrayPortDef) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(595) + p.SetState(612) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -7905,7 +8210,7 @@ func (p *nevaParser) ArrayPortDef() (localctx IArrayPortDefContext) { for _la == nevaParserNEWLINE { { - p.SetState(592) + p.SetState(609) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -7913,7 +8218,7 @@ func (p *nevaParser) ArrayPortDef() (localctx IArrayPortDefContext) { } } - p.SetState(597) + p.SetState(614) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -7921,15 +8226,15 @@ func (p *nevaParser) ArrayPortDef() (localctx IArrayPortDefContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(598) - p.Match(nevaParserT__17) + p.SetState(615) + p.Match(nevaParserT__18) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(599) + p.SetState(616) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -7937,18 +8242,18 @@ func (p *nevaParser) ArrayPortDef() (localctx IArrayPortDefContext) { } } { - p.SetState(600) - p.Match(nevaParserT__18) + p.SetState(617) + p.Match(nevaParserT__19) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(601) + p.SetState(618) p.TypeExpr() } - p.SetState(605) + p.SetState(622) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -7957,7 +8262,7 @@ func (p *nevaParser) ArrayPortDef() (localctx IArrayPortDefContext) { for _la == nevaParserNEWLINE { { - p.SetState(602) + p.SetState(619) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -7965,7 +8270,7 @@ func (p *nevaParser) ArrayPortDef() (localctx IArrayPortDefContext) { } } - p.SetState(607) + p.SetState(624) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -8087,25 +8392,25 @@ func (s *ConstStmtContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) ConstStmt() (localctx IConstStmtContext) { localctx = NewConstStmtContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 88, nevaParserRULE_constStmt) - p.SetState(610) + p.EnterRule(localctx, 92, nevaParserRULE_constStmt) + p.SetState(627) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 70, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 72, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(608) + p.SetState(625) p.SingleConstStmt() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(609) + p.SetState(626) p.GroupConstStmt() } @@ -8215,11 +8520,11 @@ func (s *SingleConstStmtContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) SingleConstStmt() (localctx ISingleConstStmtContext) { localctx = NewSingleConstStmtContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 90, nevaParserRULE_singleConstStmt) + p.EnterRule(localctx, 94, nevaParserRULE_singleConstStmt) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(613) + p.SetState(630) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -8228,7 +8533,7 @@ func (p *nevaParser) SingleConstStmt() (localctx ISingleConstStmtContext) { if _la == nevaParserPUB_KW { { - p.SetState(612) + p.SetState(629) p.Match(nevaParserPUB_KW) if p.HasError() { // Recognition error - abort rule @@ -8238,15 +8543,15 @@ func (p *nevaParser) SingleConstStmt() (localctx ISingleConstStmtContext) { } { - p.SetState(615) - p.Match(nevaParserT__19) + p.SetState(632) + p.Match(nevaParserT__20) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(616) + p.SetState(633) p.ConstDef() } @@ -8393,19 +8698,19 @@ func (s *GroupConstStmtContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) GroupConstStmt() (localctx IGroupConstStmtContext) { localctx = NewGroupConstStmtContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 92, nevaParserRULE_groupConstStmt) + p.EnterRule(localctx, 96, nevaParserRULE_groupConstStmt) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(618) - p.Match(nevaParserT__19) + p.SetState(635) + p.Match(nevaParserT__20) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(622) + p.SetState(639) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -8414,7 +8719,7 @@ func (p *nevaParser) GroupConstStmt() (localctx IGroupConstStmtContext) { for _la == nevaParserNEWLINE { { - p.SetState(619) + p.SetState(636) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -8422,7 +8727,7 @@ func (p *nevaParser) GroupConstStmt() (localctx IGroupConstStmtContext) { } } - p.SetState(624) + p.SetState(641) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -8430,14 +8735,14 @@ func (p *nevaParser) GroupConstStmt() (localctx IGroupConstStmtContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(625) + p.SetState(642) p.Match(nevaParserT__5) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(629) + p.SetState(646) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -8446,7 +8751,7 @@ func (p *nevaParser) GroupConstStmt() (localctx IGroupConstStmtContext) { for _la == nevaParserNEWLINE { { - p.SetState(626) + p.SetState(643) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -8454,14 +8759,14 @@ func (p *nevaParser) GroupConstStmt() (localctx IGroupConstStmtContext) { } } - p.SetState(631) + p.SetState(648) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(638) + p.SetState(655) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -8469,7 +8774,7 @@ func (p *nevaParser) GroupConstStmt() (localctx IGroupConstStmtContext) { _la = p.GetTokenStream().LA(1) for _la == nevaParserPUB_KW || _la == nevaParserIDENTIFIER { - p.SetState(633) + p.SetState(650) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -8478,7 +8783,7 @@ func (p *nevaParser) GroupConstStmt() (localctx IGroupConstStmtContext) { if _la == nevaParserPUB_KW { { - p.SetState(632) + p.SetState(649) p.Match(nevaParserPUB_KW) if p.HasError() { // Recognition error - abort rule @@ -8488,11 +8793,11 @@ func (p *nevaParser) GroupConstStmt() (localctx IGroupConstStmtContext) { } { - p.SetState(635) + p.SetState(652) p.ConstDef() } - p.SetState(640) + p.SetState(657) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -8500,7 +8805,7 @@ func (p *nevaParser) GroupConstStmt() (localctx IGroupConstStmtContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(641) + p.SetState(658) p.Match(nevaParserT__6) if p.HasError() { // Recognition error - abort rule @@ -8637,12 +8942,12 @@ func (s *ConstDefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) ConstDef() (localctx IConstDefContext) { localctx = NewConstDefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 94, nevaParserRULE_constDef) + p.EnterRule(localctx, 98, nevaParserRULE_constDef) var _alt int p.EnterOuterAlt(localctx, 1) { - p.SetState(643) + p.SetState(660) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -8650,34 +8955,34 @@ func (p *nevaParser) ConstDef() (localctx IConstDefContext) { } } { - p.SetState(644) + p.SetState(661) p.TypeExpr() } { - p.SetState(645) - p.Match(nevaParserT__20) + p.SetState(662) + p.Match(nevaParserT__21) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(646) + p.SetState(663) p.ConstVal() } - p.SetState(650) + p.SetState(667) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 76, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 78, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(647) + p.SetState(664) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -8686,12 +8991,12 @@ func (p *nevaParser) ConstDef() (localctx IConstDefContext) { } } - p.SetState(652) + p.SetState(669) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 76, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 78, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -8860,32 +9165,32 @@ func (s *ConstValContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) ConstVal() (localctx IConstValContext) { localctx = NewConstValContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 96, nevaParserRULE_constVal) - p.SetState(660) + p.EnterRule(localctx, 100, nevaParserRULE_constVal) + p.SetState(677) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } switch p.GetTokenStream().LA(1) { - case nevaParserT__23: + case nevaParserT__24: p.EnterOuterAlt(localctx, 1) { - p.SetState(653) + p.SetState(670) p.Nil_() } - case nevaParserT__21, nevaParserT__22: + case nevaParserT__22, nevaParserT__23: p.EnterOuterAlt(localctx, 2) { - p.SetState(654) + p.SetState(671) p.Bool_() } case nevaParserINT: p.EnterOuterAlt(localctx, 3) { - p.SetState(655) + p.SetState(672) p.Match(nevaParserINT) if p.HasError() { // Recognition error - abort rule @@ -8896,7 +9201,7 @@ func (p *nevaParser) ConstVal() (localctx IConstValContext) { case nevaParserFLOAT: p.EnterOuterAlt(localctx, 4) { - p.SetState(656) + p.SetState(673) p.Match(nevaParserFLOAT) if p.HasError() { // Recognition error - abort rule @@ -8907,7 +9212,7 @@ func (p *nevaParser) ConstVal() (localctx IConstValContext) { case nevaParserSTRING: p.EnterOuterAlt(localctx, 5) { - p.SetState(657) + p.SetState(674) p.Match(nevaParserSTRING) if p.HasError() { // Recognition error - abort rule @@ -8915,17 +9220,17 @@ func (p *nevaParser) ConstVal() (localctx IConstValContext) { } } - case nevaParserT__17: + case nevaParserT__18: p.EnterOuterAlt(localctx, 6) { - p.SetState(658) + p.SetState(675) p.ListLit() } case nevaParserT__5: p.EnterOuterAlt(localctx, 7) { - p.SetState(659) + p.SetState(676) p.StructLit() } @@ -9010,15 +9315,15 @@ func (s *BoolContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) Bool_() (localctx IBoolContext) { localctx = NewBoolContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 98, nevaParserRULE_bool) + p.EnterRule(localctx, 102, nevaParserRULE_bool) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(662) + p.SetState(679) _la = p.GetTokenStream().LA(1) - if !(_la == nevaParserT__21 || _la == nevaParserT__22) { + if !(_la == nevaParserT__22 || _la == nevaParserT__23) { p.GetErrorHandler().RecoverInline(p) } else { p.GetErrorHandler().ReportMatch(p) @@ -9102,11 +9407,11 @@ func (s *NilContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) Nil_() (localctx INilContext) { localctx = NewNilContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 100, nevaParserRULE_nil) + p.EnterRule(localctx, 104, nevaParserRULE_nil) p.EnterOuterAlt(localctx, 1) { - p.SetState(664) - p.Match(nevaParserT__23) + p.SetState(681) + p.Match(nevaParserT__24) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -9220,19 +9525,19 @@ func (s *ListLitContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) ListLit() (localctx IListLitContext) { localctx = NewListLitContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 102, nevaParserRULE_listLit) + p.EnterRule(localctx, 106, nevaParserRULE_listLit) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(666) - p.Match(nevaParserT__17) + p.SetState(683) + p.Match(nevaParserT__18) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(670) + p.SetState(687) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9241,7 +9546,7 @@ func (p *nevaParser) ListLit() (localctx IListLitContext) { for _la == nevaParserNEWLINE { { - p.SetState(667) + p.SetState(684) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -9249,30 +9554,30 @@ func (p *nevaParser) ListLit() (localctx IListLitContext) { } } - p.SetState(672) + p.SetState(689) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(674) + p.SetState(691) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&240547790912) != 0 { + if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&240577413184) != 0 { { - p.SetState(673) + p.SetState(690) p.ListItems() } } { - p.SetState(676) - p.Match(nevaParserT__18) + p.SetState(693) + p.Match(nevaParserT__19) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -9412,30 +9717,30 @@ func (s *ListItemsContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) ListItems() (localctx IListItemsContext) { localctx = NewListItemsContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 104, nevaParserRULE_listItems) + p.EnterRule(localctx, 108, nevaParserRULE_listItems) var _la int - p.SetState(699) + p.SetState(716) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 83, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 85, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(678) + p.SetState(695) p.ConstVal() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(679) + p.SetState(696) p.ConstVal() } - p.SetState(696) + p.SetState(713) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9444,14 +9749,14 @@ func (p *nevaParser) ListItems() (localctx IListItemsContext) { for _la == nevaParserT__2 { { - p.SetState(680) + p.SetState(697) p.Match(nevaParserT__2) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(684) + p.SetState(701) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9460,7 +9765,7 @@ func (p *nevaParser) ListItems() (localctx IListItemsContext) { for _la == nevaParserNEWLINE { { - p.SetState(681) + p.SetState(698) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -9468,7 +9773,7 @@ func (p *nevaParser) ListItems() (localctx IListItemsContext) { } } - p.SetState(686) + p.SetState(703) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9476,10 +9781,10 @@ func (p *nevaParser) ListItems() (localctx IListItemsContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(687) + p.SetState(704) p.ConstVal() } - p.SetState(691) + p.SetState(708) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9488,7 +9793,7 @@ func (p *nevaParser) ListItems() (localctx IListItemsContext) { for _la == nevaParserNEWLINE { { - p.SetState(688) + p.SetState(705) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -9496,7 +9801,7 @@ func (p *nevaParser) ListItems() (localctx IListItemsContext) { } } - p.SetState(693) + p.SetState(710) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9504,7 +9809,7 @@ func (p *nevaParser) ListItems() (localctx IListItemsContext) { _la = p.GetTokenStream().LA(1) } - p.SetState(698) + p.SetState(715) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9623,19 +9928,19 @@ func (s *StructLitContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) StructLit() (localctx IStructLitContext) { localctx = NewStructLitContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 106, nevaParserRULE_structLit) + p.EnterRule(localctx, 110, nevaParserRULE_structLit) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(701) + p.SetState(718) p.Match(nevaParserT__5) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(705) + p.SetState(722) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9644,7 +9949,7 @@ func (p *nevaParser) StructLit() (localctx IStructLitContext) { for _la == nevaParserNEWLINE { { - p.SetState(702) + p.SetState(719) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -9652,14 +9957,14 @@ func (p *nevaParser) StructLit() (localctx IStructLitContext) { } } - p.SetState(707) + p.SetState(724) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(709) + p.SetState(726) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9668,13 +9973,13 @@ func (p *nevaParser) StructLit() (localctx IStructLitContext) { if _la == nevaParserIDENTIFIER { { - p.SetState(708) + p.SetState(725) p.StructValueFields() } } { - p.SetState(711) + p.SetState(728) p.Match(nevaParserT__6) if p.HasError() { // Recognition error - abort rule @@ -9815,15 +10120,15 @@ func (s *StructValueFieldsContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) StructValueFields() (localctx IStructValueFieldsContext) { localctx = NewStructValueFieldsContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 108, nevaParserRULE_structValueFields) + p.EnterRule(localctx, 112, nevaParserRULE_structValueFields) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(713) + p.SetState(730) p.StructValueField() } - p.SetState(724) + p.SetState(741) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9832,14 +10137,14 @@ func (p *nevaParser) StructValueFields() (localctx IStructValueFieldsContext) { for _la == nevaParserT__2 { { - p.SetState(714) + p.SetState(731) p.Match(nevaParserT__2) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(718) + p.SetState(735) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9848,7 +10153,7 @@ func (p *nevaParser) StructValueFields() (localctx IStructValueFieldsContext) { for _la == nevaParserNEWLINE { { - p.SetState(715) + p.SetState(732) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -9856,7 +10161,7 @@ func (p *nevaParser) StructValueFields() (localctx IStructValueFieldsContext) { } } - p.SetState(720) + p.SetState(737) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9864,11 +10169,11 @@ func (p *nevaParser) StructValueFields() (localctx IStructValueFieldsContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(721) + p.SetState(738) p.StructValueField() } - p.SetState(726) + p.SetState(743) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9988,12 +10293,12 @@ func (s *StructValueFieldContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) StructValueField() (localctx IStructValueFieldContext) { localctx = NewStructValueFieldContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 110, nevaParserRULE_structValueField) + p.EnterRule(localctx, 114, nevaParserRULE_structValueField) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(727) + p.SetState(744) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -10001,18 +10306,18 @@ func (p *nevaParser) StructValueField() (localctx IStructValueFieldContext) { } } { - p.SetState(728) - p.Match(nevaParserT__24) + p.SetState(745) + p.Match(nevaParserT__7) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(729) + p.SetState(746) p.ConstVal() } - p.SetState(733) + p.SetState(750) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10021,7 +10326,7 @@ func (p *nevaParser) StructValueField() (localctx IStructValueFieldContext) { for _la == nevaParserNEWLINE { { - p.SetState(730) + p.SetState(747) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -10029,7 +10334,7 @@ func (p *nevaParser) StructValueField() (localctx IStructValueFieldContext) { } } - p.SetState(735) + p.SetState(752) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10151,25 +10456,25 @@ func (s *CompStmtContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) CompStmt() (localctx ICompStmtContext) { localctx = NewCompStmtContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 112, nevaParserRULE_compStmt) - p.SetState(738) + p.EnterRule(localctx, 116, nevaParserRULE_compStmt) + p.SetState(755) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 89, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 91, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(736) + p.SetState(753) p.SingleCompStmt() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(737) + p.SetState(754) p.GroupCompStmt() } @@ -10296,11 +10601,11 @@ func (s *SingleCompStmtContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) SingleCompStmt() (localctx ISingleCompStmtContext) { localctx = NewSingleCompStmtContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 114, nevaParserRULE_singleCompStmt) + p.EnterRule(localctx, 118, nevaParserRULE_singleCompStmt) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(741) + p.SetState(758) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10309,12 +10614,12 @@ func (p *nevaParser) SingleCompStmt() (localctx ISingleCompStmtContext) { if _la == nevaParserT__0 { { - p.SetState(740) + p.SetState(757) p.CompilerDirectives() } } - p.SetState(744) + p.SetState(761) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10323,7 +10628,7 @@ func (p *nevaParser) SingleCompStmt() (localctx ISingleCompStmtContext) { if _la == nevaParserPUB_KW { { - p.SetState(743) + p.SetState(760) p.Match(nevaParserPUB_KW) if p.HasError() { // Recognition error - abort rule @@ -10333,7 +10638,7 @@ func (p *nevaParser) SingleCompStmt() (localctx ISingleCompStmtContext) { } { - p.SetState(746) + p.SetState(763) p.Match(nevaParserT__25) if p.HasError() { // Recognition error - abort rule @@ -10341,7 +10646,7 @@ func (p *nevaParser) SingleCompStmt() (localctx ISingleCompStmtContext) { } } { - p.SetState(747) + p.SetState(764) p.CompDef() } @@ -10531,19 +10836,19 @@ func (s *GroupCompStmtContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) GroupCompStmt() (localctx IGroupCompStmtContext) { localctx = NewGroupCompStmtContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 116, nevaParserRULE_groupCompStmt) + p.EnterRule(localctx, 120, nevaParserRULE_groupCompStmt) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(749) + p.SetState(766) p.Match(nevaParserT__25) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(753) + p.SetState(770) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10552,7 +10857,7 @@ func (p *nevaParser) GroupCompStmt() (localctx IGroupCompStmtContext) { for _la == nevaParserNEWLINE { { - p.SetState(750) + p.SetState(767) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -10560,7 +10865,7 @@ func (p *nevaParser) GroupCompStmt() (localctx IGroupCompStmtContext) { } } - p.SetState(755) + p.SetState(772) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10568,14 +10873,14 @@ func (p *nevaParser) GroupCompStmt() (localctx IGroupCompStmtContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(756) + p.SetState(773) p.Match(nevaParserT__5) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(760) + p.SetState(777) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10584,7 +10889,7 @@ func (p *nevaParser) GroupCompStmt() (localctx IGroupCompStmtContext) { for _la == nevaParserNEWLINE { { - p.SetState(757) + p.SetState(774) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -10592,14 +10897,14 @@ func (p *nevaParser) GroupCompStmt() (localctx IGroupCompStmtContext) { } } - p.SetState(762) + p.SetState(779) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(772) + p.SetState(789) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10607,7 +10912,7 @@ func (p *nevaParser) GroupCompStmt() (localctx IGroupCompStmtContext) { _la = p.GetTokenStream().LA(1) for (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&25769803778) != 0 { - p.SetState(764) + p.SetState(781) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10616,12 +10921,12 @@ func (p *nevaParser) GroupCompStmt() (localctx IGroupCompStmtContext) { if _la == nevaParserT__0 { { - p.SetState(763) + p.SetState(780) p.CompilerDirectives() } } - p.SetState(767) + p.SetState(784) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10630,7 +10935,7 @@ func (p *nevaParser) GroupCompStmt() (localctx IGroupCompStmtContext) { if _la == nevaParserPUB_KW { { - p.SetState(766) + p.SetState(783) p.Match(nevaParserPUB_KW) if p.HasError() { // Recognition error - abort rule @@ -10640,11 +10945,11 @@ func (p *nevaParser) GroupCompStmt() (localctx IGroupCompStmtContext) { } { - p.SetState(769) + p.SetState(786) p.CompDef() } - p.SetState(774) + p.SetState(791) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10652,7 +10957,7 @@ func (p *nevaParser) GroupCompStmt() (localctx IGroupCompStmtContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(775) + p.SetState(792) p.Match(nevaParserT__6) if p.HasError() { // Recognition error - abort rule @@ -10784,17 +11089,17 @@ func (s *CompDefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) CompDef() (localctx ICompDefContext) { localctx = NewCompDefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 118, nevaParserRULE_compDef) + p.EnterRule(localctx, 122, nevaParserRULE_compDef) var _la int var _alt int p.EnterOuterAlt(localctx, 1) { - p.SetState(777) + p.SetState(794) p.InterfaceDef() } - p.SetState(779) + p.SetState(796) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10803,24 +11108,24 @@ func (p *nevaParser) CompDef() (localctx ICompDefContext) { if _la == nevaParserT__5 { { - p.SetState(778) + p.SetState(795) p.CompBody() } } - p.SetState(784) + p.SetState(801) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 98, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 100, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(781) + p.SetState(798) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -10829,12 +11134,12 @@ func (p *nevaParser) CompDef() (localctx ICompDefContext) { } } - p.SetState(786) + p.SetState(803) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 98, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 100, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -10964,19 +11269,19 @@ func (s *CompBodyContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) CompBody() (localctx ICompBodyContext) { localctx = NewCompBodyContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 120, nevaParserRULE_compBody) + p.EnterRule(localctx, 124, nevaParserRULE_compBody) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(787) + p.SetState(804) p.Match(nevaParserT__5) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(791) + p.SetState(808) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10985,7 +11290,7 @@ func (p *nevaParser) CompBody() (localctx ICompBodyContext) { for _la == nevaParserNEWLINE { { - p.SetState(788) + p.SetState(805) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -10993,14 +11298,14 @@ func (p *nevaParser) CompBody() (localctx ICompBodyContext) { } } - p.SetState(793) + p.SetState(810) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(801) + p.SetState(818) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11009,10 +11314,10 @@ func (p *nevaParser) CompBody() (localctx ICompBodyContext) { if _la == nevaParserT__26 { { - p.SetState(794) + p.SetState(811) p.CompNodesDef() } - p.SetState(798) + p.SetState(815) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11021,7 +11326,7 @@ func (p *nevaParser) CompBody() (localctx ICompBodyContext) { for _la == nevaParserNEWLINE { { - p.SetState(795) + p.SetState(812) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -11029,7 +11334,7 @@ func (p *nevaParser) CompBody() (localctx ICompBodyContext) { } } - p.SetState(800) + p.SetState(817) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11038,7 +11343,7 @@ func (p *nevaParser) CompBody() (localctx ICompBodyContext) { } } - p.SetState(810) + p.SetState(827) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11047,10 +11352,10 @@ func (p *nevaParser) CompBody() (localctx ICompBodyContext) { if _la == nevaParserT__27 { { - p.SetState(803) + p.SetState(820) p.CompNetDef() } - p.SetState(807) + p.SetState(824) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11059,7 +11364,7 @@ func (p *nevaParser) CompBody() (localctx ICompBodyContext) { for _la == nevaParserNEWLINE { { - p.SetState(804) + p.SetState(821) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -11067,7 +11372,7 @@ func (p *nevaParser) CompBody() (localctx ICompBodyContext) { } } - p.SetState(809) + p.SetState(826) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11077,7 +11382,7 @@ func (p *nevaParser) CompBody() (localctx ICompBodyContext) { } { - p.SetState(812) + p.SetState(829) p.Match(nevaParserT__6) if p.HasError() { // Recognition error - abort rule @@ -11192,19 +11497,19 @@ func (s *CompNodesDefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) CompNodesDef() (localctx ICompNodesDefContext) { localctx = NewCompNodesDefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 122, nevaParserRULE_compNodesDef) + p.EnterRule(localctx, 126, nevaParserRULE_compNodesDef) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(814) + p.SetState(831) p.Match(nevaParserT__26) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(818) + p.SetState(835) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11213,7 +11518,7 @@ func (p *nevaParser) CompNodesDef() (localctx ICompNodesDefContext) { for _la == nevaParserNEWLINE { { - p.SetState(815) + p.SetState(832) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -11221,7 +11526,7 @@ func (p *nevaParser) CompNodesDef() (localctx ICompNodesDefContext) { } } - p.SetState(820) + p.SetState(837) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11229,7 +11534,7 @@ func (p *nevaParser) CompNodesDef() (localctx ICompNodesDefContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(821) + p.SetState(838) p.CompNodesDefBody() } @@ -11366,19 +11671,19 @@ func (s *CompNodesDefBodyContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) CompNodesDefBody() (localctx ICompNodesDefBodyContext) { localctx = NewCompNodesDefBodyContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 124, nevaParserRULE_compNodesDefBody) + p.EnterRule(localctx, 128, nevaParserRULE_compNodesDefBody) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(823) + p.SetState(840) p.Match(nevaParserT__5) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(827) + p.SetState(844) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11387,7 +11692,7 @@ func (p *nevaParser) CompNodesDefBody() (localctx ICompNodesDefBodyContext) { for _la == nevaParserNEWLINE { { - p.SetState(824) + p.SetState(841) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -11395,14 +11700,14 @@ func (p *nevaParser) CompNodesDefBody() (localctx ICompNodesDefBodyContext) { } } - p.SetState(829) + p.SetState(846) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(839) + p.SetState(856) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11411,10 +11716,10 @@ func (p *nevaParser) CompNodesDefBody() (localctx ICompNodesDefBodyContext) { for _la == nevaParserT__0 || _la == nevaParserIDENTIFIER { { - p.SetState(830) + p.SetState(847) p.CompNodeDef() } - p.SetState(834) + p.SetState(851) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11423,7 +11728,7 @@ func (p *nevaParser) CompNodesDefBody() (localctx ICompNodesDefBodyContext) { for _la == nevaParserNEWLINE { { - p.SetState(831) + p.SetState(848) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -11431,7 +11736,7 @@ func (p *nevaParser) CompNodesDefBody() (localctx ICompNodesDefBodyContext) { } } - p.SetState(836) + p.SetState(853) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11439,7 +11744,7 @@ func (p *nevaParser) CompNodesDefBody() (localctx ICompNodesDefBodyContext) { _la = p.GetTokenStream().LA(1) } - p.SetState(841) + p.SetState(858) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11447,7 +11752,7 @@ func (p *nevaParser) CompNodesDefBody() (localctx ICompNodesDefBodyContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(842) + p.SetState(859) p.Match(nevaParserT__6) if p.HasError() { // Recognition error - abort rule @@ -11476,9 +11781,9 @@ type ICompNodeDefContext interface { GetParser() antlr.Parser // Getter signatures - IDENTIFIER() antlr.TerminalNode NodeInst() INodeInstContext CompilerDirectives() ICompilerDirectivesContext + IDENTIFIER() antlr.TerminalNode // IsCompNodeDefContext differentiates from other interfaces. IsCompNodeDefContext() @@ -11516,10 +11821,6 @@ func NewCompNodeDefContext(parser antlr.Parser, parent antlr.ParserRuleContext, func (s *CompNodeDefContext) GetParser() antlr.Parser { return s.parser } -func (s *CompNodeDefContext) IDENTIFIER() antlr.TerminalNode { - return s.GetToken(nevaParserIDENTIFIER, 0) -} - func (s *CompNodeDefContext) NodeInst() INodeInstContext { var t antlr.RuleContext for _, ctx := range s.GetChildren() { @@ -11552,6 +11853,10 @@ func (s *CompNodeDefContext) CompilerDirectives() ICompilerDirectivesContext { return t.(ICompilerDirectivesContext) } +func (s *CompNodeDefContext) IDENTIFIER() antlr.TerminalNode { + return s.GetToken(nevaParserIDENTIFIER, 0) +} + func (s *CompNodeDefContext) GetRuleContext() antlr.RuleContext { return s } @@ -11574,11 +11879,11 @@ func (s *CompNodeDefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) CompNodeDef() (localctx ICompNodeDefContext) { localctx = NewCompNodeDefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 126, nevaParserRULE_compNodeDef) + p.EnterRule(localctx, 130, nevaParserRULE_compNodeDef) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(845) + p.SetState(862) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11587,21 +11892,29 @@ func (p *nevaParser) CompNodeDef() (localctx ICompNodeDefContext) { if _la == nevaParserT__0 { { - p.SetState(844) + p.SetState(861) p.CompilerDirectives() } } - { - p.SetState(847) - p.Match(nevaParserIDENTIFIER) - if p.HasError() { - // Recognition error - abort rule - goto errorExit + p.SetState(865) + p.GetErrorHandler().Sync(p) + + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 111, p.GetParserRuleContext()) == 1 { + { + p.SetState(864) + p.Match(nevaParserIDENTIFIER) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } + + } else if p.HasError() { // JIM + goto errorExit } { - p.SetState(848) + p.SetState(867) p.NodeInst() } @@ -11746,29 +12059,29 @@ func (s *NodeInstContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) NodeInst() (localctx INodeInstContext) { localctx = NewNodeInstContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 128, nevaParserRULE_nodeInst) + p.EnterRule(localctx, 132, nevaParserRULE_nodeInst) var _la int var _alt int p.EnterOuterAlt(localctx, 1) { - p.SetState(850) + p.SetState(869) p.EntityRef() } - p.SetState(854) + p.SetState(873) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 109, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 112, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(851) + p.SetState(870) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -11777,43 +12090,43 @@ func (p *nevaParser) NodeInst() (localctx INodeInstContext) { } } - p.SetState(856) + p.SetState(875) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 109, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 112, p.GetParserRuleContext()) if p.HasError() { goto errorExit } } - p.SetState(858) + p.SetState(877) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - if _la == nevaParserT__11 { + if _la == nevaParserT__12 { { - p.SetState(857) + p.SetState(876) p.TypeArgs() } } - p.SetState(863) + p.SetState(882) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 111, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 114, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(860) + p.SetState(879) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -11822,17 +12135,17 @@ func (p *nevaParser) NodeInst() (localctx INodeInstContext) { } } - p.SetState(865) + p.SetState(884) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 111, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 114, p.GetParserRuleContext()) if p.HasError() { goto errorExit } } - p.SetState(867) + p.SetState(886) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11841,7 +12154,7 @@ func (p *nevaParser) NodeInst() (localctx INodeInstContext) { if _la == nevaParserT__5 { { - p.SetState(866) + p.SetState(885) p.NodeDIArgs() } @@ -11944,10 +12257,10 @@ func (s *NodeDIArgsContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) NodeDIArgs() (localctx INodeDIArgsContext) { localctx = NewNodeDIArgsContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 130, nevaParserRULE_nodeDIArgs) + p.EnterRule(localctx, 134, nevaParserRULE_nodeDIArgs) p.EnterOuterAlt(localctx, 1) { - p.SetState(869) + p.SetState(888) p.CompNodesDefBody() } @@ -12058,21 +12371,21 @@ func (s *CompNetDefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) CompNetDef() (localctx ICompNetDefContext) { localctx = NewCompNetDefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 132, nevaParserRULE_compNetDef) + p.EnterRule(localctx, 136, nevaParserRULE_compNetDef) var _la int var _alt int p.EnterOuterAlt(localctx, 1) { - p.SetState(871) + p.SetState(890) p.Match(nevaParserT__27) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(875) + p.SetState(894) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -12081,7 +12394,7 @@ func (p *nevaParser) CompNetDef() (localctx ICompNetDefContext) { for _la == nevaParserNEWLINE { { - p.SetState(872) + p.SetState(891) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -12089,7 +12402,7 @@ func (p *nevaParser) CompNetDef() (localctx ICompNetDefContext) { } } - p.SetState(877) + p.SetState(896) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -12097,26 +12410,26 @@ func (p *nevaParser) CompNetDef() (localctx ICompNetDefContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(878) + p.SetState(897) p.Match(nevaParserT__5) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(882) + p.SetState(901) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 114, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 117, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(879) + p.SetState(898) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -12125,31 +12438,31 @@ func (p *nevaParser) CompNetDef() (localctx ICompNetDefContext) { } } - p.SetState(884) + p.SetState(903) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 114, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 117, p.GetParserRuleContext()) if p.HasError() { goto errorExit } } - p.SetState(886) + p.SetState(905) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&259908698176) != 0 { + if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&259904766272) != 0 { { - p.SetState(885) + p.SetState(904) p.ConnDefList() } } - p.SetState(891) + p.SetState(910) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -12158,7 +12471,7 @@ func (p *nevaParser) CompNetDef() (localctx ICompNetDefContext) { for _la == nevaParserNEWLINE { { - p.SetState(888) + p.SetState(907) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -12166,7 +12479,7 @@ func (p *nevaParser) CompNetDef() (localctx ICompNetDefContext) { } } - p.SetState(893) + p.SetState(912) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -12174,7 +12487,7 @@ func (p *nevaParser) CompNetDef() (localctx ICompNetDefContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(894) + p.SetState(913) p.Match(nevaParserT__6) if p.HasError() { // Recognition error - abort rule @@ -12315,28 +12628,28 @@ func (s *ConnDefListContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) ConnDefList() (localctx IConnDefListContext) { localctx = NewConnDefListContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 134, nevaParserRULE_connDefList) + p.EnterRule(localctx, 138, nevaParserRULE_connDefList) var _la int var _alt int p.EnterOuterAlt(localctx, 1) { - p.SetState(896) + p.SetState(915) p.ConnDef() } - p.SetState(906) + p.SetState(925) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 118, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 121, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { - p.SetState(900) + p.SetState(919) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -12345,7 +12658,7 @@ func (p *nevaParser) ConnDefList() (localctx IConnDefListContext) { for _la == nevaParserNEWLINE { { - p.SetState(897) + p.SetState(916) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -12353,7 +12666,7 @@ func (p *nevaParser) ConnDefList() (localctx IConnDefListContext) { } } - p.SetState(902) + p.SetState(921) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -12361,17 +12674,17 @@ func (p *nevaParser) ConnDefList() (localctx IConnDefListContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(903) + p.SetState(922) p.ConnDef() } } - p.SetState(908) + p.SetState(927) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 118, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 121, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -12491,25 +12804,25 @@ func (s *ConnDefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) ConnDef() (localctx IConnDefContext) { localctx = NewConnDefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 136, nevaParserRULE_connDef) - p.SetState(911) + p.EnterRule(localctx, 140, nevaParserRULE_connDef) + p.SetState(930) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 119, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 122, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(909) + p.SetState(928) p.NormConnDef() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(910) + p.SetState(929) p.ArrBypassConnDef() } @@ -12648,36 +12961,36 @@ func (s *NormConnDefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) NormConnDef() (localctx INormConnDefContext) { localctx = NewNormConnDefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 138, nevaParserRULE_normConnDef) + p.EnterRule(localctx, 142, nevaParserRULE_normConnDef) p.EnterOuterAlt(localctx, 1) { - p.SetState(913) + p.SetState(932) p.SenderSide() } { - p.SetState(914) + p.SetState(933) p.Match(nevaParserT__28) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(917) + p.SetState(936) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } switch p.GetTokenStream().LA(1) { - case nevaParserT__1, nevaParserT__24, nevaParserIDENTIFIER: + case nevaParserT__1, nevaParserT__7, nevaParserIDENTIFIER: { - p.SetState(915) + p.SetState(934) p.ReceiverSide() } - case nevaParserT__17: + case nevaParserT__18: { - p.SetState(916) + p.SetState(935) p.MultipleReceiverSide() } @@ -12809,14 +13122,14 @@ func (s *ArrBypassConnDefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) ArrBypassConnDef() (localctx IArrBypassConnDefContext) { localctx = NewArrBypassConnDefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 140, nevaParserRULE_arrBypassConnDef) + p.EnterRule(localctx, 144, nevaParserRULE_arrBypassConnDef) p.EnterOuterAlt(localctx, 1) { - p.SetState(919) + p.SetState(938) p.SinglePortAddr() } { - p.SetState(920) + p.SetState(939) p.Match(nevaParserT__29) if p.HasError() { // Recognition error - abort rule @@ -12824,7 +13137,7 @@ func (p *nevaParser) ArrBypassConnDef() (localctx IArrBypassConnDefContext) { } } { - p.SetState(921) + p.SetState(940) p.SinglePortAddr() } @@ -12976,32 +13289,32 @@ func (s *SenderSideContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) SenderSide() (localctx ISenderSideContext) { localctx = NewSenderSideContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 142, nevaParserRULE_senderSide) + p.EnterRule(localctx, 146, nevaParserRULE_senderSide) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(926) + p.SetState(945) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } switch p.GetTokenStream().LA(1) { - case nevaParserT__24, nevaParserIDENTIFIER: + case nevaParserT__7, nevaParserIDENTIFIER: { - p.SetState(923) + p.SetState(942) p.PortAddr() } case nevaParserT__30: { - p.SetState(924) + p.SetState(943) p.SenderConstRef() } - case nevaParserT__5, nevaParserT__17, nevaParserT__21, nevaParserT__22, nevaParserT__23, nevaParserINT, nevaParserFLOAT, nevaParserSTRING: + case nevaParserT__5, nevaParserT__18, nevaParserT__22, nevaParserT__23, nevaParserT__24, nevaParserINT, nevaParserFLOAT, nevaParserSTRING: { - p.SetState(925) + p.SetState(944) p.ConstVal() } @@ -13009,16 +13322,16 @@ func (p *nevaParser) SenderSide() (localctx ISenderSideContext) { p.SetError(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) goto errorExit } - p.SetState(929) + p.SetState(948) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - if _la == nevaParserT__9 { + if _la == nevaParserT__10 { { - p.SetState(928) + p.SetState(947) p.StructSelectors() } @@ -13138,25 +13451,25 @@ func (s *ReceiverSideContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) ReceiverSide() (localctx IReceiverSideContext) { localctx = NewReceiverSideContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 144, nevaParserRULE_receiverSide) - p.SetState(933) + p.EnterRule(localctx, 148, nevaParserRULE_receiverSide) + p.SetState(952) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } switch p.GetTokenStream().LA(1) { - case nevaParserT__24, nevaParserIDENTIFIER: + case nevaParserT__7, nevaParserIDENTIFIER: p.EnterOuterAlt(localctx, 1) { - p.SetState(931) + p.SetState(950) p.PortAddr() } case nevaParserT__1: p.EnterOuterAlt(localctx, 2) { - p.SetState(932) + p.SetState(951) p.ThenConnExpr() } @@ -13298,19 +13611,19 @@ func (s *ThenConnExprContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) ThenConnExpr() (localctx IThenConnExprContext) { localctx = NewThenConnExprContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 146, nevaParserRULE_thenConnExpr) + p.EnterRule(localctx, 150, nevaParserRULE_thenConnExpr) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(935) + p.SetState(954) p.Match(nevaParserT__1) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(939) + p.SetState(958) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -13319,7 +13632,7 @@ func (p *nevaParser) ThenConnExpr() (localctx IThenConnExprContext) { for _la == nevaParserNEWLINE { { - p.SetState(936) + p.SetState(955) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -13327,7 +13640,7 @@ func (p *nevaParser) ThenConnExpr() (localctx IThenConnExprContext) { } } - p.SetState(941) + p.SetState(960) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -13335,10 +13648,10 @@ func (p *nevaParser) ThenConnExpr() (localctx IThenConnExprContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(942) + p.SetState(961) p.ConnDef() } - p.SetState(953) + p.SetState(972) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -13347,14 +13660,14 @@ func (p *nevaParser) ThenConnExpr() (localctx IThenConnExprContext) { for _la == nevaParserT__2 { { - p.SetState(943) + p.SetState(962) p.Match(nevaParserT__2) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(947) + p.SetState(966) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -13363,7 +13676,7 @@ func (p *nevaParser) ThenConnExpr() (localctx IThenConnExprContext) { for _la == nevaParserNEWLINE { { - p.SetState(944) + p.SetState(963) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -13371,7 +13684,7 @@ func (p *nevaParser) ThenConnExpr() (localctx IThenConnExprContext) { } } - p.SetState(949) + p.SetState(968) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -13379,18 +13692,18 @@ func (p *nevaParser) ThenConnExpr() (localctx IThenConnExprContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(950) + p.SetState(969) p.ConnDef() } - p.SetState(955) + p.SetState(974) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(959) + p.SetState(978) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -13399,7 +13712,7 @@ func (p *nevaParser) ThenConnExpr() (localctx IThenConnExprContext) { for _la == nevaParserNEWLINE { { - p.SetState(956) + p.SetState(975) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -13407,7 +13720,7 @@ func (p *nevaParser) ThenConnExpr() (localctx IThenConnExprContext) { } } - p.SetState(961) + p.SetState(980) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -13415,7 +13728,7 @@ func (p *nevaParser) ThenConnExpr() (localctx IThenConnExprContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(962) + p.SetState(981) p.Match(nevaParserT__3) if p.HasError() { // Recognition error - abort rule @@ -13520,10 +13833,10 @@ func (s *SenderConstRefContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) SenderConstRef() (localctx ISenderConstRefContext) { localctx = NewSenderConstRefContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 148, nevaParserRULE_senderConstRef) + p.EnterRule(localctx, 152, nevaParserRULE_senderConstRef) p.EnterOuterAlt(localctx, 1) { - p.SetState(964) + p.SetState(983) p.Match(nevaParserT__30) if p.HasError() { // Recognition error - abort rule @@ -13531,7 +13844,7 @@ func (p *nevaParser) SenderConstRef() (localctx ISenderConstRefContext) { } } { - p.SetState(965) + p.SetState(984) p.EntityRef() } @@ -13649,25 +13962,25 @@ func (s *PortAddrContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) PortAddr() (localctx IPortAddrContext) { localctx = NewPortAddrContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 150, nevaParserRULE_portAddr) - p.SetState(969) + p.EnterRule(localctx, 154, nevaParserRULE_portAddr) + p.SetState(988) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 128, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 131, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(967) + p.SetState(986) p.SinglePortAddr() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(968) + p.SetState(987) p.ArrPortAddr() } @@ -13789,11 +14102,11 @@ func (s *SinglePortAddrContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) SinglePortAddr() (localctx ISinglePortAddrContext) { localctx = NewSinglePortAddrContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 152, nevaParserRULE_singlePortAddr) + p.EnterRule(localctx, 156, nevaParserRULE_singlePortAddr) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(972) + p.SetState(991) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -13802,21 +14115,21 @@ func (p *nevaParser) SinglePortAddr() (localctx ISinglePortAddrContext) { if _la == nevaParserIDENTIFIER { { - p.SetState(971) + p.SetState(990) p.PortAddrNode() } } { - p.SetState(974) - p.Match(nevaParserT__24) + p.SetState(993) + p.Match(nevaParserT__7) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(975) + p.SetState(994) p.PortAddrPort() } @@ -13951,11 +14264,11 @@ func (s *ArrPortAddrContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) ArrPortAddr() (localctx IArrPortAddrContext) { localctx = NewArrPortAddrContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 154, nevaParserRULE_arrPortAddr) + p.EnterRule(localctx, 158, nevaParserRULE_arrPortAddr) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(978) + p.SetState(997) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -13964,25 +14277,25 @@ func (p *nevaParser) ArrPortAddr() (localctx IArrPortAddrContext) { if _la == nevaParserIDENTIFIER { { - p.SetState(977) + p.SetState(996) p.PortAddrNode() } } { - p.SetState(980) - p.Match(nevaParserT__24) + p.SetState(999) + p.Match(nevaParserT__7) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(981) + p.SetState(1000) p.PortAddrPort() } { - p.SetState(982) + p.SetState(1001) p.PortAddrIdx() } @@ -14071,10 +14384,10 @@ func (s *PortAddrNodeContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) PortAddrNode() (localctx IPortAddrNodeContext) { localctx = NewPortAddrNodeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 156, nevaParserRULE_portAddrNode) + p.EnterRule(localctx, 160, nevaParserRULE_portAddrNode) p.EnterOuterAlt(localctx, 1) { - p.SetState(984) + p.SetState(1003) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -14167,10 +14480,10 @@ func (s *PortAddrPortContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) PortAddrPort() (localctx IPortAddrPortContext) { localctx = NewPortAddrPortContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 158, nevaParserRULE_portAddrPort) + p.EnterRule(localctx, 162, nevaParserRULE_portAddrPort) p.EnterOuterAlt(localctx, 1) { - p.SetState(986) + p.SetState(1005) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -14263,18 +14576,18 @@ func (s *PortAddrIdxContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) PortAddrIdx() (localctx IPortAddrIdxContext) { localctx = NewPortAddrIdxContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 160, nevaParserRULE_portAddrIdx) + p.EnterRule(localctx, 164, nevaParserRULE_portAddrIdx) p.EnterOuterAlt(localctx, 1) { - p.SetState(988) - p.Match(nevaParserT__17) + p.SetState(1007) + p.Match(nevaParserT__18) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(989) + p.SetState(1008) p.Match(nevaParserINT) if p.HasError() { // Recognition error - abort rule @@ -14282,8 +14595,8 @@ func (p *nevaParser) PortAddrIdx() (localctx IPortAddrIdxContext) { } } { - p.SetState(990) - p.Match(nevaParserT__18) + p.SetState(1009) + p.Match(nevaParserT__19) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -14380,44 +14693,44 @@ func (s *StructSelectorsContext) ExitRule(listener antlr.ParseTreeListener) { func (p *nevaParser) StructSelectors() (localctx IStructSelectorsContext) { localctx = NewStructSelectorsContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 162, nevaParserRULE_structSelectors) + p.EnterRule(localctx, 166, nevaParserRULE_structSelectors) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(992) - p.Match(nevaParserT__9) + p.SetState(1011) + p.Match(nevaParserT__10) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(993) + p.SetState(1012) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(998) + p.SetState(1017) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - for _la == nevaParserT__9 { + for _la == nevaParserT__10 { { - p.SetState(994) - p.Match(nevaParserT__9) + p.SetState(1013) + p.Match(nevaParserT__10) if p.HasError() { // Recognition error - abort rule goto errorExit } } { - p.SetState(995) + p.SetState(1014) p.Match(nevaParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -14425,7 +14738,7 @@ func (p *nevaParser) StructSelectors() (localctx IStructSelectorsContext) { } } - p.SetState(1000) + p.SetState(1019) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -14566,19 +14879,19 @@ func (s *MultipleReceiverSideContext) ExitRule(listener antlr.ParseTreeListener) func (p *nevaParser) MultipleReceiverSide() (localctx IMultipleReceiverSideContext) { localctx = NewMultipleReceiverSideContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 164, nevaParserRULE_multipleReceiverSide) + p.EnterRule(localctx, 168, nevaParserRULE_multipleReceiverSide) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(1001) - p.Match(nevaParserT__17) + p.SetState(1020) + p.Match(nevaParserT__18) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(1005) + p.SetState(1024) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -14587,7 +14900,7 @@ func (p *nevaParser) MultipleReceiverSide() (localctx IMultipleReceiverSideConte for _la == nevaParserNEWLINE { { - p.SetState(1002) + p.SetState(1021) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -14595,7 +14908,7 @@ func (p *nevaParser) MultipleReceiverSide() (localctx IMultipleReceiverSideConte } } - p.SetState(1007) + p.SetState(1026) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -14603,10 +14916,10 @@ func (p *nevaParser) MultipleReceiverSide() (localctx IMultipleReceiverSideConte _la = p.GetTokenStream().LA(1) } { - p.SetState(1008) + p.SetState(1027) p.ReceiverSide() } - p.SetState(1025) + p.SetState(1044) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -14615,14 +14928,14 @@ func (p *nevaParser) MultipleReceiverSide() (localctx IMultipleReceiverSideConte for _la == nevaParserT__2 { { - p.SetState(1009) + p.SetState(1028) p.Match(nevaParserT__2) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(1013) + p.SetState(1032) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -14631,7 +14944,7 @@ func (p *nevaParser) MultipleReceiverSide() (localctx IMultipleReceiverSideConte for _la == nevaParserNEWLINE { { - p.SetState(1010) + p.SetState(1029) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -14639,7 +14952,7 @@ func (p *nevaParser) MultipleReceiverSide() (localctx IMultipleReceiverSideConte } } - p.SetState(1015) + p.SetState(1034) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -14647,10 +14960,10 @@ func (p *nevaParser) MultipleReceiverSide() (localctx IMultipleReceiverSideConte _la = p.GetTokenStream().LA(1) } { - p.SetState(1016) + p.SetState(1035) p.ReceiverSide() } - p.SetState(1020) + p.SetState(1039) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -14659,7 +14972,7 @@ func (p *nevaParser) MultipleReceiverSide() (localctx IMultipleReceiverSideConte for _la == nevaParserNEWLINE { { - p.SetState(1017) + p.SetState(1036) p.Match(nevaParserNEWLINE) if p.HasError() { // Recognition error - abort rule @@ -14667,7 +14980,7 @@ func (p *nevaParser) MultipleReceiverSide() (localctx IMultipleReceiverSideConte } } - p.SetState(1022) + p.SetState(1041) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -14675,7 +14988,7 @@ func (p *nevaParser) MultipleReceiverSide() (localctx IMultipleReceiverSideConte _la = p.GetTokenStream().LA(1) } - p.SetState(1027) + p.SetState(1046) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -14683,8 +14996,8 @@ func (p *nevaParser) MultipleReceiverSide() (localctx IMultipleReceiverSideConte _la = p.GetTokenStream().LA(1) } { - p.SetState(1028) - p.Match(nevaParserT__18) + p.SetState(1047) + p.Match(nevaParserT__19) if p.HasError() { // Recognition error - abort rule goto errorExit diff --git a/internal/compiler/parser/listener_helpers.go b/internal/compiler/parser/listener_helpers.go index 33603c02..cb592ea2 100644 --- a/internal/compiler/parser/listener_helpers.go +++ b/internal/compiler/parser/listener_helpers.go @@ -319,7 +319,14 @@ func parseNodes(actx generated.ICompNodesDefBodyContext) map[string]src.Node { deps = parseNodes(diArgs.CompNodesDefBody()) } - result[node.IDENTIFIER().GetText()] = src.Node{ + var nodeName string + if id := node.IDENTIFIER(); id != nil { + nodeName = id.GetText() + } else { + nodeName = strings.ToLower(string(parsedRef.Name[0])) + parsedRef.Name[1:] + } + + result[nodeName] = src.Node{ Directives: directives, EntityRef: parsedRef, TypeArgs: typeArgs, @@ -459,7 +466,7 @@ func parseNormConnReceiverSide( }) } - return parseMultipleReceiverSides(multipleSides, connMeta) + return parseMultipleReceiverSides(multipleSides) } func parseReceiverSide( @@ -474,7 +481,6 @@ func parseReceiverSide( func parseMultipleReceiverSides( multipleSides generated.IMultipleReceiverSideContext, - connMeta src.Meta, ) (src.ConnectionReceiverSide, *compiler.Error) { receiverPortAddrs := multipleSides.AllReceiverSide() result := make([]src.ConnectionReceiver, 0, len(receiverPortAddrs)) diff --git a/internal/compiler/parser/neva.g4 b/internal/compiler/parser/neva.g4 index 69eac1c9..450640e9 100644 --- a/internal/compiler/parser/neva.g4 +++ b/internal/compiler/parser/neva.g4 @@ -22,9 +22,10 @@ compiler_directive_arg: IDENTIFIER+; importStmt: 'import' NEWLINE* '{' NEWLINE* importDef* '}'; importDef: importAlias? importPath NEWLINE*; importAlias: IDENTIFIER; -importPath: (importPathMod '/')? importPathPkg; -// FIXME this does not work for modules like github.com/nevalang/x -importPathMod: '@' | IDENTIFIER; +importPath: (importPathMod ':')? importPathPkg; +importPathMod: '@' | importMod; +importMod: IDENTIFIER (importModeDelim IDENTIFIER)*; +importModeDelim: '/' | '.'; importPathPkg: IDENTIFIER ('/' IDENTIFIER)*; // Entity Reference @@ -117,7 +118,7 @@ compBody: // nodes compNodesDef: 'nodes' NEWLINE* compNodesDefBody; compNodesDefBody: '{' NEWLINE* (compNodeDef NEWLINE*)* '}'; -compNodeDef: compilerDirectives? IDENTIFIER nodeInst; +compNodeDef: compilerDirectives? IDENTIFIER? nodeInst; nodeInst: entityRef NEWLINE* typeArgs? NEWLINE* nodeDIArgs?; nodeDIArgs: compNodesDefBody; @@ -126,7 +127,8 @@ compNetDef: 'net' NEWLINE* '{' NEWLINE* connDefList? NEWLINE* '}'; connDefList: connDef (NEWLINE* connDef)*; connDef: normConnDef | arrBypassConnDef; -normConnDef: senderSide '->' (receiverSide | multipleReceiverSide); +normConnDef: + senderSide '->' (receiverSide | multipleReceiverSide); arrBypassConnDef: singlePortAddr '=>' singlePortAddr; senderSide: (portAddr | senderConstRef | constVal) structSelectors?; receiverSide: portAddr | thenConnExpr; diff --git a/internal/compiler/parser/parser_test.go b/internal/compiler/parser/parser_test.go index 4b8e9be1..1dd5f051 100644 --- a/internal/compiler/parser/parser_test.go +++ b/internal/compiler/parser/parser_test.go @@ -89,3 +89,29 @@ func TestParser_ParseFile_IONodes(t *testing.T) { require.Equal(t, "in", sender) require.Equal(t, "out", receiver) } + +// Check that notes without names are parsed to nodes with names +// and their names are lower-cased names of their dependencies. +func TestParser_ParseFile_AnonymousNodes(t *testing.T) { + text := []byte(` + component C1(start any) (stop any) { + nodes { + Scanner + Printer + } + } + `) + + p := parser.New(false) + + got, err := p.ParseFile(text) + require.True(t, err == nil) + + nodes := got.Entities["C1"].Component.Nodes + + _, ok := nodes["scanner"] + require.Equal(t, true, ok) + + _, ok = nodes["printer"] + require.Equal(t, true, ok) +}