From 8d192a0abc1bca2cb42ba4d68aab1ab14e8617c8 Mon Sep 17 00:00:00 2001 From: Maieul BOYER Date: Sun, 30 Jun 2024 17:58:31 +0200 Subject: [PATCH] added truc --- ast/src/from_node.c | 159 +- dumper.c | 105 + my_dumper | Bin 0 -> 1034616 bytes parser.c | 94726 ++++++++++++++++ parser/Grammar.mk | 12 +- parser/Parser.mk | 6 +- parser/includes/api.h | 25 +- parser/nnsrc/alloc.c | 52 + parser/nnsrc/alloc.h | 41 + parser/nnsrc/api.h | 1273 + parser/nnsrc/array.h | 290 + parser/nnsrc/atomic.h | 68 + parser/nnsrc/clock.h | 146 + parser/nnsrc/create_language.c | 99 + parser/nnsrc/error_costs.h | 11 + parser/nnsrc/get_changed_ranges.c | 501 + parser/nnsrc/get_changed_ranges.h | 36 + parser/nnsrc/host.h | 21 + parser/nnsrc/language.c | 221 + parser/nnsrc/language.h | 299 + parser/nnsrc/length.h | 52 + parser/nnsrc/lexer.c | 419 + parser/nnsrc/lexer.h | 49 + parser/nnsrc/lib.c | 17 + parser/nnsrc/node.c | 891 + parser/nnsrc/parser.c | 2172 + parser/nnsrc/parser.h | 265 + parser/nnsrc/point.h | 62 + parser/nnsrc/query.c | 4134 + parser/nnsrc/reduce_action.h | 34 + parser/nnsrc/reusable_node.h | 95 + parser/nnsrc/scanner.c | 1241 + parser/nnsrc/stack.c | 899 + parser/nnsrc/stack.h | 133 + parser/nnsrc/subtree.c | 1060 + parser/nnsrc/subtree.h | 382 + parser/nnsrc/tree.c | 165 + parser/nnsrc/tree.h | 31 + parser/nnsrc/tree_cursor.c | 714 + parser/nnsrc/tree_cursor.h | 48 + parser/nnsrc/unicode.h | 50 + parser/nnsrc/unicode/ICU_SHA | 1 + parser/nnsrc/unicode/LICENSE | 414 + parser/nnsrc/unicode/README.md | 29 + parser/nnsrc/unicode/ptypes.h | 1 + parser/nnsrc/unicode/umachine.h | 448 + parser/nnsrc/unicode/urename.h | 1 + parser/nnsrc/unicode/utf.h | 1 + parser/nnsrc/unicode/utf16.h | 733 + parser/nnsrc/unicode/utf8.h | 881 + parser/nnsrc/wasm/stdlib-symbols.txt | 24 + parser/nnsrc/wasm/stdlib.c | 109 + parser/nnsrc/wasm/wasm-stdlib.h | 1302 + parser/nnsrc/wasm_store.c | 1847 + parser/nnsrc/wasm_store.h | 31 + .../symbols_metadata/symbols_metadata_1.c | 29 +- parser/static/types/type_small_parse_table.h | 4 +- sources/main.c | 6 +- 58 files changed, 116828 insertions(+), 37 deletions(-) create mode 100644 dumper.c create mode 100755 my_dumper create mode 100644 parser.c create mode 100644 parser/nnsrc/alloc.c create mode 100644 parser/nnsrc/alloc.h create mode 100644 parser/nnsrc/api.h create mode 100644 parser/nnsrc/array.h create mode 100644 parser/nnsrc/atomic.h create mode 100644 parser/nnsrc/clock.h create mode 100644 parser/nnsrc/create_language.c create mode 100644 parser/nnsrc/error_costs.h create mode 100644 parser/nnsrc/get_changed_ranges.c create mode 100644 parser/nnsrc/get_changed_ranges.h create mode 100644 parser/nnsrc/host.h create mode 100644 parser/nnsrc/language.c create mode 100644 parser/nnsrc/language.h create mode 100644 parser/nnsrc/length.h create mode 100644 parser/nnsrc/lexer.c create mode 100644 parser/nnsrc/lexer.h create mode 100644 parser/nnsrc/lib.c create mode 100644 parser/nnsrc/node.c create mode 100644 parser/nnsrc/parser.c create mode 100644 parser/nnsrc/parser.h create mode 100644 parser/nnsrc/point.h create mode 100644 parser/nnsrc/query.c create mode 100644 parser/nnsrc/reduce_action.h create mode 100644 parser/nnsrc/reusable_node.h create mode 100644 parser/nnsrc/scanner.c create mode 100644 parser/nnsrc/stack.c create mode 100644 parser/nnsrc/stack.h create mode 100644 parser/nnsrc/subtree.c create mode 100644 parser/nnsrc/subtree.h create mode 100644 parser/nnsrc/tree.c create mode 100644 parser/nnsrc/tree.h create mode 100644 parser/nnsrc/tree_cursor.c create mode 100644 parser/nnsrc/tree_cursor.h create mode 100644 parser/nnsrc/unicode.h create mode 100644 parser/nnsrc/unicode/ICU_SHA create mode 100644 parser/nnsrc/unicode/LICENSE create mode 100644 parser/nnsrc/unicode/README.md create mode 100644 parser/nnsrc/unicode/ptypes.h create mode 100644 parser/nnsrc/unicode/umachine.h create mode 100644 parser/nnsrc/unicode/urename.h create mode 100644 parser/nnsrc/unicode/utf.h create mode 100644 parser/nnsrc/unicode/utf16.h create mode 100644 parser/nnsrc/unicode/utf8.h create mode 100644 parser/nnsrc/wasm/stdlib-symbols.txt create mode 100644 parser/nnsrc/wasm/stdlib.c create mode 100644 parser/nnsrc/wasm/wasm-stdlib.h create mode 100644 parser/nnsrc/wasm_store.c create mode 100644 parser/nnsrc/wasm_store.h diff --git a/ast/src/from_node.c b/ast/src/from_node.c index 5a3f7f92..e2c37b31 100644 --- a/ast/src/from_node.c +++ b/ast/src/from_node.c @@ -6,7 +6,7 @@ /* By: maiboyer +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/17 12:41:56 by maiboyer #+# #+# */ -/* Updated: 2024/06/30 00:52:11 by maiboyer ### ########.fr */ +/* Updated: 2024/06/30 16:50:25 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ @@ -467,6 +467,9 @@ t_error ast_from_node(t_parse_node node, t_const_str input, t_ast_node *out); /* FUNCTION THAT ARE DONE */ t_error build_sym__bare_dollar(t_parse_node self, t_const_str input, t_ast_node *out); +t_error build_sym_case_item(t_parse_node self, t_const_str input, t_ast_node *out); +t_error build_sym__case_item_last(t_parse_node self, t_const_str input, t_ast_node *out); +t_error build_sym_case_statement(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_command(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_command_name(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_comment(t_parse_node self, t_const_str input, t_ast_node *out); @@ -474,6 +477,7 @@ t_error build_sym_compound_statement(t_parse_node self, t_const_str input, t_ast t_error build_sym_elif_clause(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_else_clause(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_for_statement(t_parse_node self, t_const_str input, t_ast_node *out); +t_error build_sym_function_definition(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_if_statement(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_list(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_negated_command(t_parse_node self, t_const_str input, t_ast_node *out); @@ -496,11 +500,6 @@ t_error build_sym_arithmetic_postfix_expression(t_parse_node self, t_const_str i t_error build_sym_arithmetic_ternary_expression(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_arithmetic_unary_expression(t_parse_node self, t_const_str input, t_ast_node *out); -t_error build_sym_case_statement(t_parse_node self, t_const_str input, t_ast_node *out); -t_error build_sym_case_item(t_parse_node self, t_const_str input, t_ast_node *out); - -t_error build_sym_function_definition(t_parse_node self, t_const_str input, t_ast_node *out); - t_error build_sym_arithmetic_expansion(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_command_substitution(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_expansion(t_parse_node self, t_const_str input, t_ast_node *out); @@ -524,6 +523,151 @@ t_error build_sym_heredoc_start(t_parse_node self, t_const_str input, t_ast_node #include +t_error build_sym_function_definition(t_parse_node self, t_const_str input, t_ast_node *out) +{ + t_ast_node ret; + t_ast_node tmp; + t_usize i; + + (void)(out); + (void)(input); + (void)(self); + if (out == NULL) + return (ERROR); + if (ts_node_grammar_symbol(self) != sym_function_definition) + return (ERROR); + ret = ast_alloc(AST_FUNCTION_DEFINITION); + i = 0; + while (i < ts_node_child_count(self)) + { + if (!ts_node_is_named(ts_node_child(self, i)) && (i++, true)) + continue; + if (ts_node_field_id_for_child(self, i) == field_name) + { + ret->data.function_definition.name = + str_substring(input, ts_node_start_byte(ts_node_child(self, i)), + ts_node_end_byte(ts_node_child(self, i)) - ts_node_start_byte(ts_node_child(self, i))); + } + if (ts_node_field_id_for_child(self, i) == field_body) + { + if (ast_from_node(ts_node_child(self, i), input, &tmp)) + return (ast_free(ret), ERROR); + vec_ast_push(&ret->data.function_definition.body, tmp); + } + i++; + } + + return (*out = ret, NO_ERROR); +} + +t_error build_sym_case_statement(t_parse_node self, t_const_str input, t_ast_node *out) +{ + t_ast_node ret; + t_ast_node tmp; + t_usize i; + + (void)(out); + (void)(input); + (void)(self); + if (out == NULL) + return (ERROR); + if (ts_node_grammar_symbol(self) != sym_case_statement) + return (ERROR); + ret = ast_alloc(AST_CASE); + i = 0; + while (i < ts_node_child_count(self)) + { + if (!ts_node_is_named(ts_node_child(self, i)) && (i++, true)) + continue; + if (ts_node_field_id_for_child(self, i) == field_value) + { + if (ast_from_node(ts_node_child(self, i), input, &ret->data.case_.word)) + return (ast_free(ret), ERROR); + } + if (ts_node_field_id_for_child(self, i) == field_cases) + { + if (ast_from_node(ts_node_child(self, i), input, &tmp)) + return (ast_free(ret), ERROR); + vec_ast_push(&ret->data.case_.cases, tmp); + } + i++; + } + + return (*out = ret, NO_ERROR); +} + +t_error build_sym__case_item_last(t_parse_node self, t_const_str input, t_ast_node *out) +{ + t_ast_node ret; + t_ast_node tmp; + t_usize i; + + (void)(out); + (void)(input); + (void)(self); + if (out == NULL) + return (ERROR); + if (ts_node_grammar_symbol(self) != sym__case_item_last) + return (ERROR); + ret = ast_alloc(AST_CASE_ITEM); + i = 0; + while (i < ts_node_child_count(self)) + { + if (!ts_node_is_named(ts_node_child(self, i)) && (i++, true)) + continue; + if (ts_node_field_id_for_child(self, i) == field_value) + { + if (ast_from_node(ts_node_child(self, i), input, &tmp)) + return (ast_free(ret), ERROR); + vec_ast_push(&ret->data.case_item.pattern, tmp); + } + if (ts_node_field_id_for_child(self, i) == field_body) + { + if (ast_from_node(ts_node_child(self, i), input, &tmp)) + return (ast_free(ret), ERROR); + vec_ast_push(&ret->data.case_item.body, tmp); + } + i++; + } + return (*out = ret, NO_ERROR); +} + +t_error build_sym_case_item(t_parse_node self, t_const_str input, t_ast_node *out) +{ + t_ast_node ret; + t_ast_node tmp; + t_usize i; + + (void)(out); + (void)(input); + (void)(self); + if (out == NULL) + return (ERROR); + if (ts_node_grammar_symbol(self) != sym_case_item) + return (ERROR); + ret = ast_alloc(AST_CASE_ITEM); + i = 0; + while (i < ts_node_child_count(self)) + { + if (!ts_node_is_named(ts_node_child(self, i)) && (i++, true)) + continue; + if (ts_node_field_id_for_child(self, i) == field_value) + { + if (ast_from_node(ts_node_child(self, i), input, &tmp)) + return (ast_free(ret), ERROR); + vec_ast_push(&ret->data.case_item.pattern, tmp); + } + if (ts_node_field_id_for_child(self, i) == field_body) + { + if (ast_from_node(ts_node_child(self, i), input, &tmp)) + return (ast_free(ret), ERROR); + vec_ast_push(&ret->data.case_item.body, tmp); + } + i++; + } + return (*out = ret, NO_ERROR); +} + t_error build_sym_if_statement(t_parse_node self, t_const_str input, t_ast_node *out) { t_ast_node ret; @@ -645,7 +789,6 @@ t_error build_sym_for_statement(t_parse_node self, t_const_str input, t_ast_node { t_ast_node ret; t_ast_node tmp; - t_const_str tmp_str; t_parse_node temp_ast; t_usize i; @@ -1317,6 +1460,8 @@ t_error ast_from_node(t_parse_node node, t_const_str input, t_ast_node *out) return (build_sym_arithmetic_unary_expression(node, input, out)); if (ts_node_grammar_symbol(node) == sym_case_item) return (build_sym_case_item(node, input, out)); + if (ts_node_grammar_symbol(node) == sym__case_item_last) + return (build_sym__case_item_last(node, input, out)); if (ts_node_grammar_symbol(node) == sym_case_statement) return (build_sym_case_statement(node, input, out)); if (ts_node_grammar_symbol(node) == sym_command) diff --git a/dumper.c b/dumper.c new file mode 100644 index 00000000..db92997f --- /dev/null +++ b/dumper.c @@ -0,0 +1,105 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* dumper.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: maiboyer +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/04/25 22:19:52 by maiboyer #+# #+# */ +/* Updated: 2024/06/30 17:09:31 by maiboyer ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "gmr/constants.h" + +#include +#include +#include +#include + +#include "types/type_alias_sequences.h" +#include "types/type_external_scanner_states.h" +#include "types/type_external_scanner_symbol_map.h" +#include "types/type_field_map_entries.h" +#include "types/type_field_map_slices.h" +#include "types/type_field_names.h" +#include "types/type_lex_modes.h" +#include "types/type_lex_normal.h" +#include "types/type_non_terminal_alias_map.h" +#include "types/type_parse_actions_entries.h" +#include "types/type_parse_table.h" +#include "types/type_primary_state_ids.h" +#include "types/type_small_parse_table.h" +#include "types/type_small_parse_table_map.h" +#include "types/type_symbols_metadata.h" +#include "types/type_symbols_names.h" +#include "types/type_unique_symbols_map.h" + +t_parse_table_array *create_parse_table(void); +t_small_parse_table_array *create_small_parse_table(void); +t_small_parse_table_map_array *create_small_parse_table_map(void); +t_parse_actions_entries_array *create_parse_actions_entries(void); +t_symbols_names_array *create_symbols_names(void); +t_field_names_array *create_field_names(void); +t_field_map_slices_array *create_field_map_slices(void); +t_field_map_entries_array *create_field_map_entries(void); +t_symbols_metadata_array *create_symbols_metadata(void); +t_unique_symbols_map_array *create_unique_symbols_map(void); +t_non_terminal_alias_map_array *create_non_terminal_alias_map(void); +t_alias_sequences_array *create_alias_sequences(void); +t_lex_modes_array *create_lex_modes(void); +t_primary_state_ids_array *create_primary_state_ids(void); +t_external_scanner_states_array *create_external_scanner_states(void); +t_external_scanner_symbol_map_array *create_external_scanner_symbol_map(void); + +void dump_to_file(const char *filename, void *data, size_t size) +{ + int file = open(filename, O_CREAT | O_RDWR | O_TRUNC, 0666); + + if (file < 0) + return ((void)printf("[error] opening %s failed \n", filename)); + if (write(file, data, size) < size) + printf("[error] writing to %s failed \n", filename); + else + printf("wrote %zu to %s!\n", size, filename); + close(file); +} + +int main(void) +{ + dump_to_file("./parse_table", (void *)create_parse_table(), + sizeof(*create_parse_table())); + dump_to_file("./small_parse_table", (void *)create_small_parse_table(), + sizeof(*create_small_parse_table())); + dump_to_file("./small_parse_table_map", + (void *)create_small_parse_table_map(), + sizeof(*create_small_parse_table_map())); + dump_to_file("./parse_actions_entries", + (void *)create_parse_actions_entries(), + sizeof(*create_parse_actions_entries())); + // dump_to_file("./symbols_names", (void *)create_symbols_names(), 0); + // dump_to_file("./field_names", (void *)create_field_names(), 0); + dump_to_file("./field_map_slices", (void *)create_field_map_slices(), + sizeof(*create_field_map_slices())); + dump_to_file("./field_map_entries", (void *)create_field_map_entries(), + sizeof(*create_field_map_entries())); + dump_to_file("./symbols_metadata", (void *)create_symbols_metadata(), + sizeof(*create_symbols_metadata())); + dump_to_file("./unique_symbols_map", (void *)create_unique_symbols_map(), + sizeof(*create_unique_symbols_map())); + dump_to_file("./non_terminal_alias_map", + (void *)create_non_terminal_alias_map(), + sizeof(*create_non_terminal_alias_map())); + dump_to_file("./alias_sequences", (void *)create_alias_sequences(), + sizeof(*create_alias_sequences())); + dump_to_file("./lex_modes", (void *)create_lex_modes(), + sizeof(*create_lex_modes())); + dump_to_file("./primary_state_ids", (void *)create_primary_state_ids(), + sizeof(*create_primary_state_ids())); + dump_to_file("./external_scanner_states", + (void *)create_external_scanner_states(), + sizeof(*create_external_scanner_states())); + dump_to_file("./external_scanner_symbol_map", + (void *)create_external_scanner_symbol_map(), + sizeof(*create_external_scanner_symbol_map())); +} diff --git a/my_dumper b/my_dumper new file mode 100755 index 0000000000000000000000000000000000000000..3cc744287929bc1091322f47e469711cfe30cc21 GIT binary patch literal 1034616 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

_!U6=(uY8zo$V7i!0E4n19$kX0IBR|T?oUVW z^*ez?JKH}%!tVi|@Y4XP>}EX((Qm;CNq4v@-j)=r3i0jPc^ zkZ5PS0Ytw7NI#D7dm#*t|3HZT7tru~1QP9R=YZ({fye(RKq|XgB_a9`K=mI2iFUR> zfP~)#Jo;CFRCcpIYz2qk45eg-Z`_%(q}E}b=#Kzz_s?ft1QP9R zuK*pKC)l3BgFE~>Kq|XgH6i*9p!%CYqMhvl5d97y{W!ue1EjK>^LNg&bA zb`6Mr2|W5eKq|XgcS7_(fQFwFNVKz^0iyo{-2a&UXAO|bZq`PK{vA;LN+8kB_8XA! zI|0{^8GalfmEEkK5d8|gkn)cSB-+{Tzza@)2E4e#?}Y$3{skfWe?a~J2qfCsE&R$vB?QA~*(Z2(a z{tl4JZq`hQ{syT2CXi@n`vQpm32^xlI|m;){CBfnp9V-}H!CAV{|u;pC6H)m`wocy6?pV> zfK+y~KI8|xzW}PA2_)LtJ^`Y?0gwI{{NVUEtOv)R2UPzfkZ5On21I`ZTt8;`odBuq zX8lqb6s`eT6VKLir( zY*&Ej7r>)`1xRH#>(3gn|8GFUZxKkev;7Ao{9fP*zYdVfZq|bk{SE?<@M{8zcD5%7 zfWt390C)IhfK+y~c0%+^K=mhqL_6CpAo?{x`f-Gx2S{Z%Yam4b2dMv@K%$-P0ucQS zc=T(4RCcpULiC@2>Q@4ZcDBEOgx?K3;l}||+0FW}8XSHLp!%6WqMhvrAo@4J^<$>L z7rfy3UkTCAAqWY-MTPk`!g0*Q9EZ-D4ufJc7@NM$$c$trO8 zWkB^OfkZpoJ0SWi;QBGc&jX~gn{^^Y{{?9HIe|nw+dn}3{{R$z_MoW&EcHJ~WjAXi zME?q?ekG7-XZs0=e$ZqluJLyckjidWMTq_esD37pXlMHZi2ey6`*Eb-7d+tje_09k ze*{$jBamokdj&*)1|Izr#}NB@SHDrzG((XrkgboqW%ZezDXd_&UOiidJZ85hL`g}^KF>+Re)4> zvr0nr!{$4SK%zv=cSe9zcC$XL0EHK1zB3dggloRj10>nax)Y)vJm2XG66(Y;-)RAo z>}H(^Q4gN)GzAIan(x#ANp`blg4KiPJJmoUIOjW0aD(I95v(3Q-^m2lL(F{V3W$DA zh<@07=OvJ6Co%J#J3uPCSud7@!mk}R-?<4SO4NMk43Nrh)|n9fu=&nOAW@>`J1amc zyIB(<`eE~(MIce4<~t)mD!W-VA^KtSok1W`qUJj-Kq|XgKbC?051a2a0*Mke-zfo7 z+0D8Wq8~QjDFhNFYQFOa7dZYKA^KtSou5FWM9p{J0IBR|^@Qk$&39e`i4ry6xdWuK zn^h2^A2#2)2_#C?eCG_1%5K)1rQq;`&38@$i4ry6Spibn&AJexA2#1v1QI1`zB2-( zvYRy%q8~Qj83Ym~YQEC~q_UgU5TYM8-)RIAC2GD?0;IB=^=Ap#|FHQ^A&@9h^PN99 z!SR0(q8~Qj`3WT2Nz8ob4Uo!i)=r3i*nHA^KtSok1W`qUJj* z*udexvj}WIY`(JyBudnL=MN6BenW`;u=&nUAW@>`J8ytgcC-G3*bkfUyaW;@YQFOa zE7*QPh<@07=O>UTQS+TQKq|XgZx(|651a421QI1`zS9Ea(r(s;5d93$`LazA{Y1=n zazOM;LiEGtJBwIYK}SatG2a;hQrXS=umJ3S*nDRYNR+7g&Ipi8yIFri^uy*mgFvE0 z&38tygTwzIL_ci4GYBL~)O@D|$fj=APKbWke5Vjdl&Ja64rZ|Zj1c{>`OZg>^h?Bi zX9h(7$$W75!R9+BfkcU#@9Y5C)XnM$u^%?y*#r_LYQ8fAq_Ufp6QUnB-^&-Umu=!3WkSI~}of;sO-K;Yq`eE~(N+409<~x5dfx|x$q8~Qj3C({*%y&Zb zpC&{d?z&jtjq=bA2#0^1WCU{%y+&3l@#5q7a{s# z^PP`CqD0Mio&c%rW}OMq51a3VmOn(ycg}$5PlV`)&37t+M2VX3%mAtEX4Qn~hs}3> z0;Ni#<~uDQ`akA?!w)v!c?lAJ#LRa>^zVe|htGF{M2Va41liQh+6d7PpYH^T5;xxo zQrXSw3DFOq?*xewHQ)Jz0i1sYA^KtSozU`+i22S6kWJmJH?zUv2b=GNhCdPWogNVV z3nBVp^PQI<@khjbrvyZQCPY7MzEcP!O4NKOwEQxJ=!eaBKKjoBs(*=??>qr=X*cW7 zEU^D!^PNqQ{7=Mu=M0GcgAo0&`A#E{C{gpB86cJ2tep`3u=&m;kSI~}ogN^S-K>ES z{jm8?X!%9Ne5V9Nza&IIY`$|7#Q#LhcfR<;0$T6=FcTbpu=&nKpj1iJeCG;~P2H?3 zA^KtSok1W`qUJj#AodqR^uy*mjUf7onD6}Y8|?m#>0tN6=Q|<#iJ0%a0nz_61FRo5 z-+2inO4NMk4p2ySvmS)#hs}3F(=QS8oj?A8-QNk(51a2~g4j>Qe5VJ*{zi!ZVe_4j zeu4835%ZlA5dEGI{jmAYLlFH$%y+&3<ZNkf#VN0-)RKVPsDs@21sQ$Ya&EHY`&8TBudnL=Z(MM`14E!+Yg)XyaaL; zar2!J{R<)X!{$3TLG%+b-}wR*Q{AkY5dEzJaoc@TI@BHx-9DW-i_QU2oKY>goYQA#@D5rF@YNmk0A2#2431li!^PL$G z{eckuu=&m;kSI~}oe?0HcC%(e^uy*mg+QemQS+V9^2-pSA2#3l2oioo%y*suxwM=0 zXENCT@cB+qsvv5d}jwpWjCuOL_ci4vk4?h)O@E0#QlK~ z{jm8?X!%9Ne5V9Nza&IIY`$|7#C~GtJHLX{-@_zu_`&8o7eUew5%ZnU^cxA$51a2S zg6Jn=zVie~WjE_ih<@07XAnq~sQJzxU%>9)m;iP^Y`&8T;(sFMJ8wYr|4anyhs}3h z0*Mke-lMwx|`A#N~ zuZWuO)BvgMW}OJp51a42^d0PeBIY}1d;+JRkMZF6hs}3xg6Jn=zH3GobUGlOW;012TWP0yKY#Bm8E7T-wd5 z84I?*0IL5I$kfjE2@w4aApJPzdov*V10ni7p!${h0H&9T5EoA@(N-L*|Q{K%$-P4Z`60 z;sRmZ>lJo@Z0ct1gy^?`>JI{mcD6@A^m~BxgYCzhukQe<>}IuuxL*LOzX>GT*=_*Q zuYgB?21sQ$D+wB0HhyB_-TMt zcC$)C^xuGnpAty4v;7Ce|1a=_9|uTfH!IZr8=(4`K%$-P7a;l%;L-mAl73f0{NDl9 z{|F@7*}ejze+FDXX84@|sqAJggy{bO^}i8Fw6k466dZmGqPWBF2PmexSuG*@PeAnx zLG-_Xgx?K3;dcX~pAn*e0aX7dP^#!`KLF9c0gwJ25d9~k!0D#~svnwvXF&9K;L+a! z(LWKQKLD!#6Qukpfap(v>&Fs)ppvqib!H^k{vD!_^mhm(+Sz^s5`HJ}gr5dTWjCuP zME?Y+{!1Ug>3;)6{{oPH9O-YyYjFDi7y-6F1FC-$M1KcFe+3@>6%hS~;b8p^Q2k91 z{Rt5L0eJMEfaJeOi2Eg=`h!5GcD7qU^lQNNV}@S@D5Set6(RZ?#311p1QP9RUmylf ze-p%Tr#}mj%5K(|5dTL&^&5diJKHND`ZGZKafIIqNc?Yv=r@4sPkIFo{{V=72R!;` zK=hvs1BV|6RKF8MzXn9V1Rnhv5dDFW@P7aeza~(s=xk?z=>LEx{7$?9$Nxo$eh+a- z_!&XsFGCz0ei7oh!*9h)u>OS*_bWj43qkC6fao^>>BkX%KR`BhvsOav{{i*?Cy;1o zy97i(2Oj-5Kq|Xg9U=NJK=nh@{|AWwAK(eU9T5GT5dABl`l0Fn1VsN1xPHv^#{mhy znGpXANI=4G(hG3>8%Th|PeB5A_(eeMH-zYa0S&)Tpj^?}&H>T?1CReTAo_oXg453d zsD34oXlMHaNcdgAqn`t$vYS;9V*d=NekPD;XZsF_{uOxizksB_n-Kd8p!y$yL_6Cj zK=e1j^<#$L2}t^B3gN=(l(V z$v+VN7Et|05d9Gl{T^`rnBg}Alv27`Jww3uFOYFQW`!%5Y zl_2^(Ao?xv=&yk2?+gU{p8=}B2qfCst^m<50N0Nhej1>V>SmRM*q^#|4k760ucQSc=SW-e?^GL68{ZQ{m}4V0MS1IkA4k^{+$s05m5b; zAof>4^k=~JV}_pvB>y!+^dFFcrawsfc>oE&3wXkh1EN0>5`HtF`l0D>2Soo0kbWHL z?*=6OYC`lEK=m6z?4JP9-+)K|43Nrh){nm6`1gS77XpcPwr4=}N8r()0aDq`+UNt; zuK?Bm=svjob%5wMfa}K$zZ0O6vYXWt;{FaIz z>Rg+c_Zmf8Yr}4@me|Li7j7LBfv-qQ5{69DWIM zxWn%UB>jK%0=r)Wsy_*oDm&XfAo?vp`f-Hc4T%1o5d92L{hJBfoA4p|4Yat~5PC)e=flTdee*p=<8+gJ` z0;IB=wb29Y{smC|n?R;^wjY4#-+)K|j|brT(-7kR3aI`^5dAYC`a9tIF~jc$D5rO` zE`-?s02+QtAkoft1_f~VeE|6%$N1?Akjie>N=W+I0o8AG4;=nCAmMicq#sB4X@F{~ zZq}FXVE<2m>W8-9HbC?*z@xtcWK%cmMu`3lsQx05XlHu|M1KVy{ShFQ-K>=m{SHw5 zmmuMn0MQ=+*N+)~91#C^LiDdtfTTYrkZ5Q72}tfx|BXs$U3XYG-=|M1KYz{VO2)CqncaK=m&IiFURJK=eD{ z(cb}5+07aW(a!pTV8=QV7D1y^pgCg$m zOTbWe+EQ<1V}%Q@cRK$+0DAq6&!vFQ2m=A<*x%ozX2ZoCm{MOA^Lwn z{SUQY0-~P-kNy=9{f-d*7ohr`AohQNgx>=^;imyo+0DubNk0}!(C`C^cD6?-fy2*3 z2~YTeRCcqTgoK{}R6n%-F@We-0O`jOelI{JbvG+C{k(vN-y@J{XFCT({|`L=KLJt+ zPd^8s`VWCbJKG;X!tVke{VPB!yIB<>?wraUO8_@9EbPJq*e?a{I0#Ep9K=fxq;(r5FzY<8a zv;6`@{{cMuIY27ASv8%&?(cx=X99_Kwy%KbpMgjJ3rPL(5#s&?sQyPF(a!b;i2ee& ze$4PY0aDq`x)Y-R1T_3ELCU`uknp>KC;VnW^fyA>zW}O#5=gYO{QyM&29SOn=}!X` z(%r0%5c?~j`ja5~XF&9K;L*|Y7d z{{a?$korRaqMre-A2a-ZTmiek5TZXq6%u}*K(#_=dxa`E{4!K=ho8qKuzpQ@aQGWQ z^&f)h4}j=*0O`jOekUOI|AfRp2UPzgh<*)-ehEDKq3xH05d9CJ;RkKMFhKNwfcqbF z{1MuI>4fOt0o5M_vHu1n{7%62V}{>}YheEeLi8)BLBdZ7qTfLc9DW9BxWf-x{}$ST z!|w;w|Bpbqs+b@<7{THD6q3y2^5dS~G6Mj2DDW#irrUTgi6;S=q z_VWpd{vCMq&w%Jpgy?U8>YoG>?QCBF(LVvMA2a+aKq|XgH6i+6K*O&HB-+`|p$-ne zA0YqZXg^1QRCcp|grvU%Q2jw5(a!b>*1YAF6_}zfy zA5Mt-H>g9>U(gN=-&ZyX*cUeh<*#G{!Jj!&h`k1eh)nQe}G!L-K?CD^e+I_ z{|O}8*=_*QuK?GNCHz1tyIC*Vg56)C0SUiLAkohD85-d9*P($s{C0p;cC*fe=nsJE z-vkovY%hT5PXOu15q>j3D!W+|A^J6-`X_-zJKH@V`YrJ2x3~ySKbjEz3{d?}XTkBW z0MRdiPd~_}Zq`C;u>WsB!%qpK{|6-eUf>Bo4v7AjmSFu3nvn2o0;Q_X_5@9E_yuU< z4!;VB`wJoIPXekx=^WVo77+a!ApN+)4^&dZ^X~_!|2Lfm>lc9NXTYOB1ERms0_^@1 zQ2j;_`(Hr9?*_i`gXp(}=wATU{|MA7?rc8*(Z2z%A2a9XG)F?;#}pH$e3tg6LlW(LVu? z{s@Tvl@R?AQ2mP_`YRy%Gw|rwfaouT=r@4sZ-VF#farIC>&Fbg2vAP%X1!?&PJc7B zA?Xhq{yVh6>2HNL?)0|<6jR--3nBUop!%I4`DX$|e*;KAuJD8C-w8>79#H*3pjK^X zdj>>*1Rnj+_-};hSAgn=rauRWegi!Eq5W4+i2fhY@KZVo&VLdR{Ty)pnBn&W6w=+S zf)M=)I?(U~iFUR(=zznoKnHjDLEDcvA^G0|s(;cku>BDb{T?9wIKs~Y&Fbg7gxddzcd5eub~SGzega^&UO!7aQIp1;t4;H%5K(;5d92L{Y9Ww zQD?gXM85z?KaTL50nr}_asLfy_&tKS{|ChXFYtul2}u9P5@P=bsD37h{TCqm58%HT_g6sm zUjmuh***iJzXOkc4v7AnCSdymVERF!+Sy(J(Vqa3^d>IQ$#* zA>pS4X}>Jc2dBRY`nc2I2}t-=Li9&K^&bL>cD7eQ^k;zd;|RY9kW0H+9U=M+p!$_S zt;){!0Em7EJo+^t`gcOYj{~M3B-+`o0nsmkNB<2_NO!X?Gz9zq0W|!e@y`I!{{c_< z%>dPu-K>TX{T>F8@S6k@?QG950Eb_M0q*dt0IBR|t<(kEuK?9w1o6KEM85$@Kd$hD z=-&y+zdxY<4+4pHwo5?tbKud>aR{7$8X@{GK=ms@^nZZ({{f!x>wuI$f)M>Hp!y#{ z($5Kq{vB}rnCWi@r2e@G@xOo}H2grKo$UsO;P6v0#1noXmEEidA@;w3g&#!chJ0SX3;L{HZsczPn zdSLwpQ2j5d95s{aC^eWK%cmMM(a+0SiBnXlMHmi2q;U3BMa4o4Q$NLiBHd z>Q92`zW~vH0HhyB`m2DXpG=7RJD~cT_JP|!Dz@J9-vQE(Bm5*lIjx&@qbAt>0Z{!#5c>-t`V;Wze*sB<4cD5@(^b5fCV}_pu#Q!%T?$0oWgkRA? zu>U)Z!Qoe7j63{RfI_O9bs0-|37 zkNy{s^uH3K{{z(jNf7-45d92z^q&B=w7XeXYJlVK1XRBhME?s&_}#!0ejUfba>h`U6bB;pbq2JN%&bD?;>hK=m_0^lL!$OMvv_2)`K+_iu#ge*g`?M<7>q zwlhHVf57Aa45)rc{@Vf7e+Z)g1|Bf{za5~SLN{w9 zM1KKPzY|3N1c?3yJo+m@B~3T$MHO)R@qp@o1W7*`5d9H&^k+cqp9#^g0M%~F)-}r`@a*A@(Og^(%o& z#m@Eyi2eeQejMS)0dapN#C{8?ekX|i5fJ?zc=W%3)Sr$J{Q^+^LJ<815d8{x^h-eU z??p)ZeE|)>M<7>qwsS!A|G*P|5!=A!UnfL=fH^e$Ao>f;!Qq!+jywD;Ao@Qlg2P_} zs=o=M-vgrG0;C^D_*H;>+RYjWv7Z5|UkGGsXS)JKzW^Tn8j$#xgy_Ek3qOecKOp{p zfhYV{fK+y~u2coPe*;wiBT%a7Y`*}}e*mr@GyQpN2ZvuJB>hNOK*CQ5lq)*hEiAy{ zr(uCR{C*q&>wgHb{{z(jpFpCW?E(<}3?ThD!p{Tb(r#8xi2Wy^`i(%TsZmR z2|o`=`zsS-{{pCfCW!t65d9nQ=+}VgH-zY~fa<>l676iC0ny(9*N+)~5g?y-v+h&? zhyMd;_yvJPJKGs7!QuA-(zVEsFw`l0#n1|{SHw5hambBAo>H~ z`Z2?A2dJgm&AL+#tbc_iB>g3UQgvth2}t?6_$#o2gx@4ks_1N=UT{m}Az2Soo0xPHv^Cjkm+c>ZOufrOvYIZ z{|2a~*Ufqn68;@f{Y;=x>1pDp!zp~L_6CXAo>g7`Z2@r#aeLs ze+Y5^3269z+6ngm3rP6gz!!cXo4Q#YA@(nT>OTb0e*mI?14uuP^rrzT>AG11A^Eog zs(%qg{|t!!4m|ofAojnM1jk!#D?#*kK=fCD^y3J>6%hR& zrNRDpfa+(0=ud#?55S|J1EPPUI9R^~RR5+m;P|(I=-0rb{|3mWZq}I+VErGU;b#QN zKLQZ_3~>FJ;b#HKztHfDu!DvlC{{b$E9}7GmtluH{5T-`H6h_|0M)Mq(H{WO?*P(| zBm8DS>K{#r`#GTcFG0#b4TydTJo=&aS0E(+Jb;GZBT%chvz-B={{!6rnDdt&5c?$| z`gg$egG4*qZ$QHD1YAF6_(?#@A45p|E7(KB4-~7N?GE}I_w3f8{@s(%wG zRdu$Xfau?WN52Lrrn^}eLi9I4^*cfG?*fSa32^;b!fyxI{}&h7sQw~|{tSrz2)KUC@T*u34nIR-aQtm> zfTX`epit>-zW@op0}i;;Uj#&dC&d39Q2jw5(a!c25dAYi`f-F`1}LR;vpR}^?N5N} zPg)HwzZxL=3-IXY0HyS9RzZmU7Et}r@;3sa-vf{S43JITtT!R$rvOy{CrJ1iK=doX z^<#$L4^T?!W?cx;U*QN1KZyPrj^Omy;fOo@R)AD?vt~l{2SD{N0*Q9E7eMqUfb`=C zKMjceh7kQ4Q2o&O_kifPz@r~pe*A>we+H<2Cy4zD5d8vp^h+!Sryoy9{<{GUzamhp zwzK^QB>Z0B3BMPR_&X>Fj(-OyNccg^-vlRc_ysuO4!;u+{f-d#OF;E60)~b=eekMr$`2rGtH}HfX2gH6$ zNd8*@)eo(|4nXv8fa}Lhe>Xrb?Pd*xgg=KfB>XOcL_6CxoWbEI;fy={I+lRlFA35A z02+Qxko?a8(fQ{oaUp7GW zFTkV!1SI?_A^J0*`VWCbJKH-T`YYi2F~e^KsHEy<<%ER)1!(v|%dZa*|3APJemg)u z?Pe{6*uMg*zX{YT?QA~*(Z2(vA4mFw)<2n$^xpv0zX@9ZLG(|+qhA6PQ{AkF5d9HQ z{f{8|uL7b!1CRa}kntNui2n^>`azwIklVhB1FFeRR1SP_&GrI8{pAj0nvXDlK+1|!>uisJ==T8W#}R%R^T7F6 z6Ow)ep!%60{x^W=SHPqH1*HA>5#s+B(C~W%676i~faw1L_djO)`2{GZx>++J{yzZK zF9b?eo$U`G;dcS9A2a+cAm#5&i2pU*AmO)Z5jg#LxPimZ!VP!$LB}60A?{~@>UV;; zUjd?D0HhyB_*H;H8g$<+IQ(xw!%qmJ{|ChXFYtul4@mmI3CTYjp!yGiOzmvH0MUN{ zkNz7VmEEkCoM8Jqp!z?}0sDUiME?x9e$4RefY|Q|$$uZ9{=WoCzXI;y@MCbt9exrZ zmEEj@5d9~h`kg?co$W6m;dcX1_<2Cw5B2{7sQyoL!R|i*(Z2zYehH|4i2o~~`img> zX9h%n2Oj+^Kq1x5x)7p20IL5Js8s1}FM#Mzfa}K$KWP2O2q`~yxI@w(wEuAf5`HJ} zgx?KF{gVl?e*#p$5XAi(Ao>@8^y5f>(E4j4B>iVV^((CehhGOoe+3@>5}=x7-m z-vO#0TK^Y+(C2p!$s<`ZXZ>CGhCifau@J1=jxn8h%0${R|NOAMk`<2gLn9 zA?e4%6B>S?Q0;8b@C1ingeUIs%Yf)V2+^+q)jtWM-vOfE0HhyB_*FpapFoKIA5i}% zLG(*N^mE|RuK}_DBt-uOsQxC9XlMHei2onp3BMnZ{>Ma!{uNODNf7-fAo_Q}^<$>L z88g83AJl#UFG%=J0*Q9E8+d`kPr(a!_;r920S&)Jpi-r?odcr(2Oj@> zfKqxlD>VELK=miB0_Wccknp>JM?bXul7#qw22{ThME?$m{uOxi-vEVFH|sBkj*AeG&$nGpQ}Q2o&KQvlJQfJeW_ba40?LiB4u^+W3~ z4~TvXJo^mBkp znr_ye5d9yZ{=Wn&6*}7mAo>~b=-&ZS+0D8WQvRHP>fZzs?QDMm3BMb7!tV#jr`@ca z5dRzaLc;G8NVKy(z!w~T4!*d<4_g1MWCHu21EzmIxct(9=$8QL#}R%Jkn*PxqW=Lj z{FFecqO+X=qW=RP|3lkPiIDPZ2UPzhNcy<}3BMC~^v?j<)Xmxm(LVvIe-T9g28jLz zaQ&F+&jJ)u-K>R>`1=9%ztSYI|0Vpu;m6^JJNzOb`KR+AD+9k^`vs_eCW!tI5dS~G z6Mh+>lDeB!@IP4p3aI{1koM0Bi2faT^h3u_GXH}0H$e3}flTdeUjWfR0grwQkW0H+ z4I%m?p!$tKqMhv(5d9f&{aC^elv27`Eg||3_(9U&BZ&PEAmMibU-*H1+RYjW3I7>T z{Y;=#)!DuSqJITQKaTWg0nslB(O&@7Zv+zUY@Yzp-+)KI1W08!>qAKRdqDLIfkZpo zGa&jS@aW$$8C?FXgy>g*>Oa&EPCpJ1{RVLTnBk`ZNxvr{^-qUCB>bTD_X>Y-`kUd8 zJNVGr=?EVOdeh)nQB_Q_i zgyNn~G>oaLP?zad8ho43u?(lm7ssAoQ(%%QD|C45c!(RZRp8=#FNBEt9=${GEe*&f- z!xH=wEQ6>U{#g+ONq4yWRA7pB0y9PwR1YAF6_*sB#>Sn$96Rf`=7!rP$K%v^%J|P&K{u+XD zhhGLLq`Fx%A^JU_`l0QQ42b>+kbWHD=K;}g2+^+q(+}!Zb+$V|^c&#OF9Fei5#s+J zQ2!@^LZ!1^0-~P-kA4qG{@V#j{}-V8n;`aofP~)zJmI$jV*f^n`z=Bs;l~82|06=c z;pY*8JNzmj`YR#&1)%y5fl8Imb_0lh1(1Fm;WwiloPJJz2glzFSonc_)!EJg(f!=m5LF z6B7Omp^)(V1PYbTc7;%I_z8sK4nK}Iu>O~y!0x{R4ZkKx{qqCj{}*_|uLENLPDuLM z0M!qzzb-)ZAHbvk2gLsiA^z`x>OTZ={|boy8F=)+0F`vzteFt~2~hpe@}~i!zW}Zu zGyFQb!2TD6xc>w+{2omNmp?Bc;dcX1`0W6>w42os5`GJy`WHdkUk4!iH-PlxNPixk zVEcc51c!eGRKF8Qw6lE%M1Kb!{VzZzO*iX7i2eYm{zs7XUjWgcfJgrchrL)}wqTd3pA2a-*`d>oQ|Aa6|`ZI!r--a-7`dbi&JN?ao*uN2?KLe^i31WW- zM1KWHKaTLrfaqTci9ZLZerWqG0ir(ukNz7Vo4Q#8A^Iht`l0PN3y6LVJo-CY!0{&u z(fWaZ@?S+bIQ%lgafhD`kNs7Z$QHD1YAF6_?-ZSR5$BHNcvZZfP|kCC|7p2J4ArP z&maPK_(?$YbAAAa-w&w&g+QX6?Gh0E93cHT!Y=~ieo09FzW~(_Ek8a${Qm$?`2B#S zpO+B(S3vbMHG<2Z6A=A7@aXpdxwMS!fygZe*+%<84&%6kns0_>Q4fRcD83g z^hdz;V}{=eNca^(+`l0blKzSy;eP=Veg`6Pr@t8x{gDv&cR=-jY6km%1w{W0kbWHD zrvVD7ZdOHz{sgH0B1rww0MTE7N52Kgrf$}m5cgX^^>1nd+aCeZ?}0}@H2qmZ!cPFI z-wBi|JKGH)`W4{%F~d&-TK~QS$6rMhB>WaZ+TSyx!0E3e3U~N%K=j{y3)UY1(+?8u zY%hT5PXOu15q=&$;PQ7NM85`9e-lK%2SmRG9{my!{Tm_qj{&Mb38G&CqF(@y{udyh zcC#8n?7smEKZyPxknnqfC;T!%G2P8N^Cj5-4$+YCgO2|sM1#XGAR2f0NkGP*5+V8} zp!zp~Qe|hm1w_9FNI#D7djX2+ZdOZ(`#(VaKMA5=0HU7(kA4nF`;if%{{&P&wEyt} z5`H)Egx?KF{gVlC{{pCfAxQo|0MWkzt{*e~?Er;zH|s@6`sav&gx@1jsCKq%#DK$3 zA_jN({Q%We-K;wy?tcIczo05`{$YUV|A5E;KWf0~uMwhu2UI__{=5MRzY}=$&!_|I z*L)6+{|Qk2mq4a=wr_ywUw}vd4@mwGgy_$J>Q4fh+S%R#(O&`Aj~RX^P{Qv5Ec`&Z zqO<)2#QzWQgdep0f|frkp!zpK^q+v}-vQE(BmG5yVyc@}5aRv@sQyI|_b-6xpMXby z2c-Y=6Ow)+p!yGiQdMVr1w?-a9{m{*{RbiX4WRm&AoWK8M85-EKW6y7fV3YvA?a^M zEHwRrL_6De#Dde`idfv~?*vF?H)|k7e*siKbo_e)M1KQFKaTL*Q2|ark`VnKQ2moY zrgpYxK=eo8(LV#C|0Kl!3NZa3(av@Uh<*b+`Yk{h{Ty)p znBnJ94tBrh6R`e-I7s*%0;THC_J%lc_!Y$A3BO9P{-4jl`YoXPCqeW_K=gZn^y3J> z3XsZf)`t-P3qbW3fm$`4?FJD23V8HKfK+y~u7v1+0S&((kZ5N+2Soo5xc@QR&lVt+ z-K>R>^nU=VA6ouDfP~)#xPHv=Bfn-wu$5fliN75Qko30+ z)GF$1zX1uq6ZpapqQ4N5eP)XIzdJy9O45Q{p3uYl;!0O`jOeimim z_|t^A-vFxLsR-Qu34rK#z@xtdWK%b5Atd}bp!$^{`ZXZ>CGhBnmS3Isz~T1*8h%NT z^veLz{{c_OJ3#asfb`=C zzZ)QzcC!}V1-t(T)c-~h`z0XyIq>LT0nxt@Qhr>3>R$vB?QH)5@&5xn;nx9D+07aV z3I7#P{Z61(d1w0xi2faL{g~NCh|64%y8|8!ZPXt822V6g9`0aq`UkK5^AO({C zoFMUkAO)QMHl*NAe^C2(LegIaRDTetR_JV>0ny(9(vKtjGC)4ifP~)- zJmCi|zo6xhK^i3dK7n#YXL~>zIQ$&aaEIRvkWaf=10nWvK=nTYxvH~W1EOC7q#sB4 zoq)7oEpLPU{{R+#5ce}c^nbwP{}mAZj1c`hp!zR?Vx_bF1|@;^<$<#i7asW2axc)fG7MaAoeRl!hZ%- zzZ0lb>ulcv(Z2$uA4mF&fV3Z9-UR!<0IFXJqJIKJe*+%&2xMw! zdj>>*1Rnj+@}m->UjeHB5GYr5wmU%d8^HBrhMxo|q`FxvuYld(kpT%mA&_Wi`-%*3 z`kRq~C;fqHnr_yckoZr4>Q4f-3Om~yAo>eH`f-Hc4T%1Q5d9WV{YDV|5fJ?zc=Yec z0LQ-}M85!3|0YQL*#M$n0grx;G_d}cm%#pi0S&(g6J23=w|@w#}R%OpqTDv{df@^ z|0kgOnIQUKK*H|^p767P`2Xc)u>J*5{YD_s&h`Tk{TuM;mjJ2kX59$UUjfxG1QP9R zp8?U|0oRWiem6iWyIE&K^6vv^_$5Ky&yWoczYie);A>lUxsy_*$e*;AS0zCRXAo@?92ZvtC8tA?fc^BG~^YAmO(o8+ZDX0Oho9){PMT z4N(0>DPa8zAo?eO^y3J>7a*T@vp$5R{|Ko5MXs_`h`HEo$VSB{St8fnBlhq6jI%+3nBh5$bp0(H2qJ=0jIx) z9NgizBNbeJNka5{!1RMeJKHlL`XfO4afBZ<{q2N=p8{0>AyBM#wmU%d8{pCZ1JqLK zW{rfT{~u8Qe*)FYo$V43{Tz7oL;K&6knq0%)$ar;|2{y%?*X3h%g6!yU-1Gs{aNHf z!jB2$s?PR^TyXe#KLFLQ1QP9Re*g);3wZR;0Qt0=H4>tK22}qiNcph?qJITk zKW6&-0gCBvR%rM!N5dXix6Mhkp z`sd|ou>Ute^-qGh{{lq+0X+Jl^_L(d{5zof7lB%}o$V_i`e)$L&jGRj=2@`)2~hn> zpi#Zf_6CUl0=Rz6@PqdMK0@q20SiBf|6f4D?*^Xm+X3n+bhAc6^e=$wcY?V807U-= zkbWHLuL9Ekx_A=o{tBr6M+xBaa|T3z2Oj+rkn(3HM1KHOe-S8Eb+#8k^e5oa?*ZvQ zCqndVK=m^vf$jHz=(m9D#|%Gc_+Ny?|Ac%<`bz?(s?PQe`QY@oARl-72~?_dwkJUJ2jI~k0jWQKLi9^O^#?)p zTR`+{;L#7Qe-A?Re}IOc5k$WLL_Y&uKW6w@M1#w}nUM4wQ2+@)X#G=B01m&50^H#z z0nxt_qTc|fA0*n@9stqr0Md^m{5T-}2gVcN^v40!uM`iCe+`I!2|W5OAoaf?#Qq1+ z@G}C%N@qI*ME?i4|1sw;JwPt)W`&0T4ygVlP^+x7{RSlbPQdkJhTjiRP1()r2uZ&R zg^=+31WA7mh2ZcrD8wCp9iW=Nn^hAMe?Or9zXZ`Q0nyI^(vKtjA|U!dLhQc))!zgu z|35(d{{T<;y#STe-K?FE{Ide8A3FYX0-}EhKK+pPZy-c}162PZkg1*R3n2O@!1ZH> zp9LiRBq8zt0vdjcK&E!Ka}&Fbg8K9W%W`*kCPy|VTlR%=K?H3^7cc2J&`tyhYyZ<1>{tl@AB#8bM5dAYi z`f-Hc2}u44gy>Iz>Q{pJzX77Z0FQnSkjie>!oy(yTR`BkX%6(E;(vuYj%`(Fd9zX&AS+3o?+Z-GaD1W08!>qkiXV}R-p z0*Q9ED?s!M;L&dZQrXRFc@S*>4QTj5+s{8B;r9Yh`0aqCpOp~%9ZDeKcPIoLe+ebv z@Czux9ey65km_drcnEC21XTYbh<*!*ehrX*9N~8Zl7BcM?*9Pwe-lK%07O3n9{mxZ zl-|uc5u*PDRDTep{qh15emC%iA4Gp6#QzJR`i(%Mo$Uu8`ZvJ!W2Qf-{U7&({m)Sf z3BOID;PBHZ1&5zRDemyo0NK>dstB?F0W|!e?SBS{{ttNk&jHbY5fc78p!$;_?S~tX z@H>G=e?&5*{D7q22~hn(AkohD4G{ec@aUhB0M;J~$v+uT{m}BG1ERkIt{*e}UO@Ca zLfn6$6cT=i;=tke0pkA$c*3s()Kczd<%GC@1yuhci2f50{X0PVail*Ei2X13f#a_M zs=o=Me*r}Q1U&jH!odD7grvU+sQ#p2u=^_@`ZMt8p8+Z<;rZ79s((`eSbqRSzXM!9 zX86qjwRF2#1tIBYMj0ghp!LU&GI07^QHDGH-AD$zADVs&p!%6o!1hmo=x+e&#}$4M z_s@jHpGO(Q{!M{k{TUGb5qR|90EKin>&(62@K=E9H-h9J2Z(+HJo+<0A=S;A2+{we z6k>l-4A_1Nh<*;Ze$4RWNCNv`6B2(3-cSw>zk+hy;Wqc0djzak*|JwW<#gdep23WSs&0#N;rAnrGS=vTm_|3)I%{gM#XPG^<#!#L=f2im%G66r%?e3ze%82>1_9?0EeGN z1@7>B0cxptvkLA8>t}%KR|1*Z*{%T5F96byBmAKD--OtI0~&stK&h&;{RhPVFYtt4 z1;qY^5d9mV`kf&8_X0%!0X+J5K+-=n{5qie55_8d(1U zi2e?Jo+vC!0u0k=ntrX=yys3>o0)lPk`&k3_oc5 zS8@;7{W~fl`WK~u_1}Pm-w8b7rvYjIJcOjb2~hoqK%$-P8zA}@fb`=?e-)7Yp9sl6 z8BqPu^0Nb?zXFf`j8w4y8zJe>0jfU|am?PJa`saHl^BZ?OK(ZQ$^afa-q)3I7U+{tS?Q9O0J% z3h8dvN{IaiQ2m=A`U4>P9q{PafV3YyA>qdX)vp9{RcE^fM85bT5w~T6V_(fFX4nJu7trMbO0jeLGejFhB4M6&F zgx`x~aQFv8^#6eQ-vgZfB_R4a@aW$G(GSf(7ohr+Ao@Q*{Qm$?_;o<^L-WrHsD9}D z*9nOJ9dP}a=`RBm(%r0`kn%^M1`>Wrpj6q}ZcqabKZP3H;imzyUl5}I1vLB?LD~-- z5dA;!_&)+tes*pFr{4om{Y()5KY)ba1w8t9fNIKaR>7@c{WGBYH-SVu+jl_pufU^! z21sQ$>qzy@!u5?{WI|Bzu^W>zdIrN6QKGpfm$V< z?F|t91$gvpfLdDJtc?);7Et|*Ao?R9`aR(KF~d&-)Y9l?eF*XYf?7!WI|LH#Y(G#7 zPJbI}ai_luP)h4&O@ySs3aEZ2Nc&?3M1KcJKaTLrfV3YPA?Ysws{a$D{aFCfpMXcd z2SmRn#C{E^ekYJ2B7O+rj!Bp!%Wh?*xec0FZth;imy=sdck@Lc&i1 zrXS?0&UOokehobOBS10L&3bV&*!~Yt|0hB6j{rnJ10MY+KrOXy)|n9fC!qS3Ano@T zknp>KC;XuCcM+0*4eBA`2aUggdT{tT)Z-364Ny#Xv(AL*=YZ;mjlV$7K%$-PCm{NF;L*fo51O(qY)B*pCIXXMI$)<&1l4( z{xTr#*G5SCOMvP>1kv9B(O&@4k0bm%Ao?{S_FF*pJAp(y+an3>{=xSs*4KMB(QQGnWzML_6Cpn!(|x(TqF%PJmQ)vu=dw{{Z#>A&_Wiy8uK#14uuP@aur2|A&zJ z;{;TH6G*hP{RJfaZr}+&4{LDz7ee$efa;$F8kOj5KLF9c0gwI}HemgnE5PZm0;)d= zqJIWNe+OJYmhc1Rlx|kZm0Y*vsyy@KLM)02$Fs`K=d!bqn`uP{$PaY&w%QO=Kl_e{t7($q5bER zko@BS)vp9{RcCtwM1KHWKW6xGfK+y~PK4-R(E>?-Od!$D_7jls+tGqM{k?$XzetGw z2B`i=AkohD1rYrcK>Bfn-wBY)ZdOHz{s^dk==e(f% zwBioG6(F0sSq&lX_kimE1j&CH5d9G#{W!w!21sQ$>(4dd^sfNbe+eYo+3o<*Z-7Vt z4v@-j)|(Lb|A6{m$pY+u35b3UJo=&KMR$vZRXW=ZAo>+R`f-Hc4^Tv{p8?fx1QP9R-vQCT z0Spa+1a?0|J2d>v!11Th4h}zocHH5o0nvYP6Ys# zPxx_wRCcq@gy`P@)z1VH?QFjQ(SHDs{u>~dcC#iz^mjn@Ujp^YJKI-4^v}SfKLgVL z(1hqufa-^iA2mSq7r^ynhF=HBrf$|sNcuSe4Zlw&;P86^3BMb7!Y=}%f8#=M_$`3y zF9M~C&h`Tk{To2~aiqTrXK?zdgy^q;>Q@5!sCXt_{tX@A z^tYe`clw(F>Zx?IZd?p@e+E>45@h_M1ERkIq#sB4aX{=}2#G%jsD37pXlHu@M1KGt z{U<;!?PgsF$v+ZM{g*(a5}oZ95d9i>^jm;R%5GLei2FZ4!%xW+oPGo#`WfK*v4kJU zrf$~8S#Ltp-vem)34ugA+ZiDGKfwKuIe+;BGJdoW zqJIZe|0j@WXZsCE_?>|3#|*z4AeG&$3+I8uPoWDEeom15=g!UlU^g z52*hafkZpoB_R4aK>BfnUk0e9*UkD7lKw70^$S7TpC2Ipe}FIi48i%=6O#W|K=ni0 zk0&7dci_?g!vL&*;~cR68=(3>LB_upK=e<5>(}F#Z(#rdetGCkaW_CJyICzE?tcLd zze^y|&UTJ&aQOWI`5#C7c?U>kH!CAV{{g6e==y;Nknp)JX|1+Ta zne4#%X9q<83OxEFAofp$_`d+Ee-Wru>ujF@(cgea{|%7JZq`VMeh;XAA&{w^?HLgL z5peyO;r9bHQ{K&*IU5}Q8@eIs?-NM0v;6`j{0?;EPJbPc_RC2~`OyK@Zv=|f&h`}$ z{WC!NafBZS$fj;qNr?Lsp!zp~eAU_B0MTE7NB;{waQb-&alZvrzZ1yR&h`k1eh)nQ zH9#u6Sp^~P7l7(l0*Q9E8$k3c!1ZH>p9CcSAI=4bUqufj{DeTFo$WJv!0E4}2Y2}G zfaIT*5d8sA{fBhH>8AjqKLMm4NBDI>`d^Wd@?Qh0e-T8#2SmRG9{mvz{hYJF?q`7N z4+4pHwktsN3*gaj0aDq``Vf--Z$QJ(2qfCs{sR(zFYtvQNM$$cN{D`kUTFA1#vc-T z!QmIsi#z;IK;pj;qF(~4{}O0czq8!}qF)1~A4mA@fVAH%A^JZ+{ci-S)jQh-Ao>~b z=&u0T)Xh3`Iyn4JK=psp0>|GANci2r6Mh~L{RbC-^)G-&kKSv)l{2=-@`oQ5Q(T6+yet=q9-K+;8`R73|ME@s{XlFYEME?go{=WfI+07~l zv400t|0R%UXZsCE_?^I`AG&_z=6taKCqVT>+kYD%`WN8QKLcb_H|s)({tTFYNc?p` z^jE<3V}@S_R6ivCErRON2&jH0kZ5On1w?-a9{n#M;}4Ax{RU9|k3gcG z?Ew(|4siXL;dcV0vYYkc6ma~_=!c}ALm<)4_8tA;^tYlPcluiaQrXSQ39-Kbs(%qk zw6lEzM1KQFKaTL50qSXXv#x~L?*Y|c1ks-X(I0_F{|QL`kA#$e3NZbe;QZ?V(Qkl9 zzXZspZq~@DVE_MshTkV0uzm@Meh#>P%n~?g`0;>NINVKy(0;1moq#sB4tpK^Sn{^>XzW`MKB#3?kh<*h;`geeO zn%%60knn#24ZkK(sCKqg4-{S5d9mV`X@p3Ux4U8fJc7?NM$!GBP9KHK=l`a zL_6D8K=jXm>&Fbg2$0Hd){_wZAE5pZ0*Q9E3rqrsAHyWv;b#F-+08l;qW=U`zY$2Z zv;74m{BGb0zX(uIxtkT5{}w>?GePtpfau?VNB;}R{6*wMaQ>@+>VE_h?QEX`(cghb zKXm>?5u!f;s{ar~e*r{)0$e|4_<4Xzif-0Gi2fauAnEUs1~~uUfP~)(JmGf(R8w`c zN<#Ecfa>1_(Z2zre*s88j`a6J8JvC|P5}Eq1FByL;{FbZ{t7($e?Z2MAI<>lcYx~u z1QP9RPk`tTz@z^Kr2n`QqF(~4{}4pK1w_9FTt8;`Re*X5-K?FH!1gyxhJ;@cNVKzk z!DMjyn=l!7`uhP%KZX$dBVhXV!Qo#4(Vqd*k0bn6fLiL^tcrbL`wgJ_jg-Lp10ebx z@aTU5iNBqY_5%l0KXm?D1EOC7pMEuP{Jrc2+y4L>ew#q1cD6G>^nbt;ekUOD?+CHq zV+thvnjrc!rhvmQVhZl?s{r*Bx>-3P`W2x1i$J2C?G6zA1|a=7!cPNaQ#WfTB>nw> z`acMwUjm|^1CM@a{1rmd{{^W2PoP-sZ2ti9{{uYXw?h#eej9th;kN>+e-lWwv;71_ z{|>l*%=9+{WK%b*BqaO=rb5CGy8g&uDmeTUrs4@dsD6n3FJR#Z676i~faw2$$N$js zZz81qZ~&@52%`T1B>XPm(Qg4#32%SQfa*5_iFUT{faqU=NB<8waQG=g>@R@oXM*UT z0MXw7*N+)~FF+$j-K-ZUgTwy@H2fZcL_6DmK>Ys#Px!3>t(59!t%T^`0M)+;B-+`2 z0iyo^NI#DB_XAS?WJ1~>9Z>zBK%$-PDR>@T-98p9B)^Y@Y$q-vQE(Bm7=K?6-vI4}j_qf{Z^FK=dcz(Qg5= zshgD%qF)25-v}hy+3o?+Z-Ga@hAi0sijeSQfa+(0=vRQ~7l7->48IqU`3GqIkue<- zevd$+o$Vdd!Qodi9e4Ph0IBR|4TRJ`4p9AvK%$-P2@w4OApJPPZv{wYH>)H>zXVkO zB9Lfjy9GqQ1|I!8)WQCL2r2(QK>c3?(Juhe&wxjN1W08!>q?0J6Hxs@AkohD7m)C~ zfhYVdKq|Xgq2;f^3`qDHfkZpo17?83&tV4c@Y9e2yMJLPIQ?@#^)o^AYe4i%fb`=C zzY0kG_Y+coJb;GZB`0wG%K*{;0gwN8fK+y~-h|k{1FC-$NVK#41|V0G9darA^Lwn{htI9?QEBr2@XGwnYhEx1EjK>RS=^8 z0#v^fNVK#41H}Ii@PwZRNM$$cO-T8*0;*pLB-+`20-}Eh9{n63mEEihA^IDj`k6qY zo$U)C`X}Jg{{k}qlnK!v0oDHqB-+_t0nwiU*N+)~(D^Gvi2egJA?dFPQhz*vgx>`` z;Wq z9}`Hlvwg)ZaQd4u3wQd1*54-~^-ls+KeYaCfaos(>BkX%CqOaP%{mdH-vX-t5JK=m6z@}B`jzXBfp6%hT<_S*|+_!WUfJKH%R`hVaFzX*`Z zZdS!6aQFqxhJ;@bNVK!PU^Y1X5@zELKMRn`Zq|no{TfjHMj+A7b`OYt3y^*s;U@u7 z+0B{=X+JVR^+V_16d?Kq@aSIw8Gq4)=)VCCKP5=};|Ik5FYtul4oLfDBBcD>0M(xa zn$_uSzW~vH0InZ1{dGX}|7-+@pTrzU_%(qOTY$?QFjR3BMB{{W!vJ1xRH#t0YAK1gQQ+AkohD4G{ec@aXRV zsqAKb2uVK~Q2k9H(a!b`i2e#Z`ZGW(yIEI4^gBTHCxJve+Y=!A1K|2G!|w(trFOFx zLiDeg3rT-Q5d9}0;kRQh?)0|b3pYk0*Q9E zYe4i%!1ZH>p9Dx{H|s=*{(^bX@B@i+kbWHD z2etoXJ2?L-K=lhj?010ZH^8HR2W0%F(+2GSA5i~q0?i6^wo5?tbKucm0aDq`3e|rB zsvo-k?gJ$J9^eVT4v77N5cgZmhlC$={bj^_aQJ!5#~pqV5dAmX!2TD2>JI{mcD5Tp z^ece$;|Mg%JHOpy6i(676i~faw2$$N$jz>r9CL15o{w_`&U$2axc)fJZ+x z{#ROq!+!=;|07VScDC<;=wAWXkD2~*+fWuE<0q*dF&i`y| z1?#^74Zlec{XZc7e}O0bIQ}y;cyzN?LiBHd>Q92`zW~vH0FQp?`f*2y{tl>qCy4$P z5dAao=+^+L>}KVJ=ud#^R|1K4wl_fZ7r^ynh93t=WjE_ZNc-;uH2j!AqMhw8AmMid zPx$??1oz)&Li8_y>c0evmCp795d9lK`f;Q`X#8nH^jARj2l0Z_&kTtE4m|ohKsI%= zDnj%JK=n6)L_6CHAo>&V=#PNRf4_vZA2p!*i$J2C?H&;Q7I6KT;imzzshbtr{+_T9 zlKzxHqMhv<7J}2?f`z!#--$oq^kWIJKLe&86sn!=9T5E$ApJPP?*vF?H!CAVzXMeN zA&_Widjdp%03Q7>KtAne{RwG*Np9RRKZq`PK{)k18@G}C5cD7e60*7D5BHZC80aDq`>IuBkX%FSx+zR}i9~1FHWKC{#MzH6Z#W@aR7QQrXRV6ViTt01dxGAkoft28jL-aQ|b@ zU#}FjE(Z2(#e-TKuv;77n{7%62V}@S_B>XcW`V|&K!Vj8$9TtPb&tNg`@O!}t z_P-%S{|~7Dg&^@K0nyI^(vKtjBtS0hX1&<}E&FZ~==ycfQn3CP(C}LX(a*62 z9DYAQ{>RaN?f|LmW@Uu9{{U2f6G*hP{Q)HWE`apo2tR22ova7jKLe^i38H@oME?pr z`aM7@yIChf^cO(&L)U*!faq_)qhA6P)7`9w?Ld{yu?3JKHZn!tcNm-02Ux{{3Mc*!~Wv{!0-3DWZ4%Yf)l zEClP9fa*^IiFUSIK=f;X^y3IW50J`k*325P{tr<9JAp(y+XW!{8Sv;o@daG}8$$G- zfa-^qzb_!+cLPuO{eX<$Fhcyl0IDClf8zi|{|2~z%=C8yqJJkuKgV)N_+0{tcD8FQ z2Zx`;a@^s^0a|I>&Dsdj{{R|(iy-G={}0ei zaW`vcJ~;d*K=nI8^lyOZUw}uy21sQ$>qSWaAp@#k2_)Lt-T~2H0oRWiejFf`-K;Yq z`Y%Ak@6#t{29M764-o%9z!QGZ_1B6;VE3

c0dEmCp7P5dAwq`f;Sc9Uzt6tcno( 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 zl`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R? zl`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R? zl`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R? zl`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R? zl`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R? zl`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R?l`)R? zl`)R?l`)R?l`)R?l?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jga zl?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jga zl?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jga zl?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jga zl?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jga zl?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jga zl?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jga zl?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal?jgal_`$) zl_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$) zl_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$) zl_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$) zl_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$) zl_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$) zl_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$) zl_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$) zl_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l_`$)l^Krql^Krql^Krql^Krql^Krq zl^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krq zl^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krq zl^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krq zl^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krq zl^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krq zl^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krq zl^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krql^Krq zl^Krql^Krql^Krql^Krql{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~ zl{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~ zl{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~ zl{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~ zl{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~ zl{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~ zl{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~l{t>~ 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

sI?3X0#FT58k9bv zB47&SRxkrfbfW23fa-(M0Z?@?3Mvh^W(u1A0;mEQ4f8KdKa3Bf=c4Ivfa-_QqVwQB z0~-OA2D3rLVl@3T)7N1BKZ8j94;dI3Kp_Uo!ypS6K=m(x>W3AKAT=O)n7y!YoB{Pe zTt7d={R{p>+z(6tAiW?A(+{Ixq3LH3far&mN{H+L(hI^ceIPangUTn67|ebJsD1%( zsm8$Y;}c8;={1%K~Sn-VE6|UfYLB`L%9q9 DH}7H( literal 0 HcmV?d00001 diff --git a/parser.c b/parser.c new file mode 100644 index 00000000..331d5a58 --- /dev/null +++ b/parser.c @@ -0,0 +1,94726 @@ +#include "tree_sitter/parser.h" + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic ignored "-Wmissing-field-initializers" +#endif + +#ifdef _MSC_VER +#pragma optimize("", off) +#elif defined(__clang__) +#pragma clang optimize off +#elif defined(__GNUC__) +#pragma GCC optimize ("O0") +#endif + +#define LANGUAGE_VERSION 14 +#define STATE_COUNT 2340 +#define LARGE_STATE_COUNT 2 +#define SYMBOL_COUNT 183 +#define ALIAS_COUNT 1 +#define TOKEN_COUNT 115 +#define EXTERNAL_TOKEN_COUNT 20 +#define FIELD_COUNT 20 +#define MAX_ALIAS_SEQUENCE_LENGTH 8 +#define PRODUCTION_ID_COUNT 78 + +enum ts_symbol_identifiers { + sym_word = 1, + anon_sym_for = 2, + anon_sym_in = 3, + anon_sym_while = 4, + anon_sym_until = 5, + anon_sym_do = 6, + anon_sym_done = 7, + anon_sym_if = 8, + anon_sym_then = 9, + anon_sym_fi = 10, + anon_sym_elif = 11, + anon_sym_else = 12, + anon_sym_case = 13, + anon_sym_esac = 14, + anon_sym_LPAREN = 15, + anon_sym_PIPE = 16, + anon_sym_RPAREN = 17, + anon_sym_LF = 18, + anon_sym_SEMI_SEMI = 19, + anon_sym_LBRACE = 20, + anon_sym_RBRACE = 21, + anon_sym_AMP_AMP = 22, + anon_sym_PIPE_PIPE = 23, + anon_sym_BANG = 24, + anon_sym_EQ = 25, + anon_sym_LT = 26, + anon_sym_GT = 27, + anon_sym_GT_GT = 28, + anon_sym_AMP_GT = 29, + anon_sym_AMP_GT_GT = 30, + anon_sym_LT_AMP = 31, + anon_sym_GT_AMP = 32, + anon_sym_GT_PIPE = 33, + anon_sym_LT_AMP_DASH = 34, + anon_sym_GT_AMP_DASH = 35, + anon_sym_LT_LT = 36, + anon_sym_LT_LT_DASH = 37, + aux_sym_heredoc_redirect_token1 = 38, + anon_sym_PIPE_AMP = 39, + anon_sym_DOLLAR_LPAREN_LPAREN = 40, + anon_sym_RPAREN_RPAREN = 41, + anon_sym_PLUS_EQ = 42, + anon_sym_DASH_EQ = 43, + anon_sym_STAR_EQ = 44, + anon_sym_SLASH_EQ = 45, + anon_sym_PERCENT_EQ = 46, + anon_sym_LT_LT_EQ = 47, + anon_sym_GT_GT_EQ = 48, + anon_sym_AMP_EQ = 49, + anon_sym_CARET_EQ = 50, + anon_sym_PIPE_EQ = 51, + anon_sym_CARET = 52, + anon_sym_AMP = 53, + anon_sym_EQ_EQ = 54, + anon_sym_BANG_EQ = 55, + anon_sym_LT_EQ = 56, + anon_sym_GT_EQ = 57, + anon_sym_PLUS = 58, + anon_sym_DASH = 59, + anon_sym_STAR = 60, + anon_sym_SLASH = 61, + anon_sym_PERCENT = 62, + anon_sym_QMARK = 63, + anon_sym_COLON = 64, + anon_sym_PLUS_PLUS = 65, + anon_sym_DASH_DASH = 66, + anon_sym_DASH2 = 67, + anon_sym_PLUS2 = 68, + anon_sym_TILDE = 69, + anon_sym_PLUS_PLUS2 = 70, + anon_sym_DASH_DASH2 = 71, + aux_sym_concatenation_token1 = 72, + anon_sym_DOLLAR = 73, + anon_sym_DQUOTE = 74, + sym_string_content = 75, + sym_raw_string = 76, + sym_number = 77, + anon_sym_POUND = 78, + anon_sym_DOLLAR_LBRACE = 79, + anon_sym_COLON_DASH = 80, + anon_sym_DASH3 = 81, + anon_sym_COLON_EQ = 82, + anon_sym_EQ2 = 83, + anon_sym_COLON_QMARK = 84, + anon_sym_QMARK2 = 85, + anon_sym_COLON_PLUS = 86, + anon_sym_PLUS3 = 87, + anon_sym_PERCENT_PERCENT = 88, + aux_sym_expansion_regex_token1 = 89, + anon_sym_DOLLAR_LPAREN = 90, + anon_sym_BQUOTE = 91, + sym_comment = 92, + sym__comment_word = 93, + aux_sym__simple_variable_name_token1 = 94, + aux_sym__multiline_variable_name_token1 = 95, + anon_sym_AT = 96, + anon_sym_0 = 97, + anon_sym__ = 98, + anon_sym_SEMI = 99, + sym_heredoc_start = 100, + sym_simple_heredoc_body = 101, + sym__heredoc_body_beginning = 102, + sym_heredoc_content = 103, + sym_heredoc_end = 104, + sym_file_descriptor = 105, + sym__empty_value = 106, + sym__concat = 107, + sym_variable_name = 108, + sym_regex = 109, + sym__expansion_word = 110, + sym_extglob_pattern = 111, + sym__bare_dollar = 112, + sym__immediate_double_hash = 113, + sym___error_recovery = 114, + sym_program = 115, + sym__statements = 116, + aux_sym__terminated_statement = 117, + sym__statement_not_pipeline = 118, + sym_redirected_statement = 119, + sym_for_statement = 120, + sym_while_statement = 121, + sym_do_group = 122, + sym_if_statement = 123, + sym_elif_clause = 124, + sym_else_clause = 125, + sym_case_statement = 126, + sym__case_item_last = 127, + sym_case_item = 128, + sym_function_definition = 129, + sym_compound_statement = 130, + sym_subshell = 131, + sym_pipeline = 132, + sym_list = 133, + sym_negated_command = 134, + sym_command = 135, + sym_command_name = 136, + sym_variable_assignment = 137, + sym__variable_assignments = 138, + sym_file_redirect = 139, + sym_heredoc_redirect = 140, + sym__heredoc_pipeline = 141, + sym__heredoc_expression = 142, + aux_sym__heredoc_command = 143, + sym__heredoc_body = 144, + sym_heredoc_body = 145, + sym__simple_heredoc_body = 146, + sym_arithmetic_expansion = 147, + sym__arithmetic_expression = 148, + sym_arithmetic_literal = 149, + sym_arithmetic_binary_expression = 150, + sym_arithmetic_ternary_expression = 151, + sym_arithmetic_unary_expression = 152, + sym_arithmetic_postfix_expression = 153, + sym_arithmetic_parenthesized_expression = 154, + sym_concatenation = 155, + sym_string = 156, + sym_simple_expansion = 157, + sym_expansion = 158, + sym__expansion_body = 159, + sym_expansion_expression = 160, + sym_expansion_regex = 161, + sym__concatenation_in_expansion = 162, + sym_command_substitution = 163, + sym__extglob_blob = 164, + sym_terminator = 165, + aux_sym__statements_repeat1 = 166, + aux_sym_redirected_statement_repeat1 = 167, + aux_sym_redirected_statement_repeat2 = 168, + aux_sym_for_statement_repeat1 = 169, + aux_sym_if_statement_repeat1 = 170, + aux_sym_case_statement_repeat1 = 171, + aux_sym__case_item_last_repeat1 = 172, + aux_sym__case_item_last_repeat2 = 173, + aux_sym_pipeline_repeat1 = 174, + aux_sym_command_repeat1 = 175, + aux_sym_command_repeat2 = 176, + aux_sym__variable_assignments_repeat1 = 177, + aux_sym_heredoc_body_repeat1 = 178, + aux_sym_concatenation_repeat1 = 179, + aux_sym_string_repeat1 = 180, + aux_sym_expansion_regex_repeat1 = 181, + aux_sym__concatenation_in_expansion_repeat1 = 182, + alias_sym_statements = 183, +}; + +static const char * const ts_symbol_names[] = { + [ts_builtin_sym_end] = "end", + [sym_word] = "word", + [anon_sym_for] = "for", + [anon_sym_in] = "in", + [anon_sym_while] = "while", + [anon_sym_until] = "until", + [anon_sym_do] = "do", + [anon_sym_done] = "done", + [anon_sym_if] = "if", + [anon_sym_then] = "then", + [anon_sym_fi] = "fi", + [anon_sym_elif] = "elif", + [anon_sym_else] = "else", + [anon_sym_case] = "case", + [anon_sym_esac] = "esac", + [anon_sym_LPAREN] = "(", + [anon_sym_PIPE] = "|", + [anon_sym_RPAREN] = ")", + [anon_sym_LF] = "\n", + [anon_sym_SEMI_SEMI] = ";;", + [anon_sym_LBRACE] = "{", + [anon_sym_RBRACE] = "}", + [anon_sym_AMP_AMP] = "operator", + [anon_sym_PIPE_PIPE] = "operator", + [anon_sym_BANG] = "!", + [anon_sym_EQ] = "=", + [anon_sym_LT] = "operator", + [anon_sym_GT] = "operator", + [anon_sym_GT_GT] = "operator", + [anon_sym_AMP_GT] = "operator", + [anon_sym_AMP_GT_GT] = "operator", + [anon_sym_LT_AMP] = "operator", + [anon_sym_GT_AMP] = "operator", + [anon_sym_GT_PIPE] = "operator", + [anon_sym_LT_AMP_DASH] = "operator", + [anon_sym_GT_AMP_DASH] = "operator", + [anon_sym_LT_LT] = "operator", + [anon_sym_LT_LT_DASH] = "operator", + [aux_sym_heredoc_redirect_token1] = "heredoc_redirect_token1", + [anon_sym_PIPE_AMP] = "|&", + [anon_sym_DOLLAR_LPAREN_LPAREN] = "$((", + [anon_sym_RPAREN_RPAREN] = "))", + [anon_sym_PLUS_EQ] = "operator", + [anon_sym_DASH_EQ] = "operator", + [anon_sym_STAR_EQ] = "operator", + [anon_sym_SLASH_EQ] = "operator", + [anon_sym_PERCENT_EQ] = "operator", + [anon_sym_LT_LT_EQ] = "operator", + [anon_sym_GT_GT_EQ] = "operator", + [anon_sym_AMP_EQ] = "operator", + [anon_sym_CARET_EQ] = "operator", + [anon_sym_PIPE_EQ] = "operator", + [anon_sym_CARET] = "operator", + [anon_sym_AMP] = "&", + [anon_sym_EQ_EQ] = "operator", + [anon_sym_BANG_EQ] = "operator", + [anon_sym_LT_EQ] = "operator", + [anon_sym_GT_EQ] = "operator", + [anon_sym_PLUS] = "operator", + [anon_sym_DASH] = "operator", + [anon_sym_STAR] = "operator", + [anon_sym_SLASH] = "operator", + [anon_sym_PERCENT] = "operator", + [anon_sym_QMARK] = "\?", + [anon_sym_COLON] = ":", + [anon_sym_PLUS_PLUS] = "operator", + [anon_sym_DASH_DASH] = "operator", + [anon_sym_DASH2] = "operator", + [anon_sym_PLUS2] = "operator", + [anon_sym_TILDE] = "operator", + [anon_sym_PLUS_PLUS2] = "operator", + [anon_sym_DASH_DASH2] = "operator", + [aux_sym_concatenation_token1] = "``", + [anon_sym_DOLLAR] = "$", + [anon_sym_DQUOTE] = "\"", + [sym_string_content] = "string_content", + [sym_raw_string] = "raw_string", + [sym_number] = "number", + [anon_sym_POUND] = "special_variable_name", + [anon_sym_DOLLAR_LBRACE] = "${", + [anon_sym_COLON_DASH] = "operator", + [anon_sym_DASH3] = "operator", + [anon_sym_COLON_EQ] = "operator", + [anon_sym_EQ2] = "operator", + [anon_sym_COLON_QMARK] = "operator", + [anon_sym_QMARK2] = "operator", + [anon_sym_COLON_PLUS] = "operator", + [anon_sym_PLUS3] = "operator", + [anon_sym_PERCENT_PERCENT] = "operator", + [aux_sym_expansion_regex_token1] = "regex", + [anon_sym_DOLLAR_LPAREN] = "$(", + [anon_sym_BQUOTE] = "`", + [sym_comment] = "comment", + [sym__comment_word] = "word", + [aux_sym__simple_variable_name_token1] = "variable_name", + [aux_sym__multiline_variable_name_token1] = "variable_name", + [anon_sym_AT] = "special_variable_name", + [anon_sym_0] = "special_variable_name", + [anon_sym__] = "special_variable_name", + [anon_sym_SEMI] = ";", + [sym_heredoc_start] = "heredoc_start", + [sym_simple_heredoc_body] = "heredoc_body", + [sym__heredoc_body_beginning] = "_heredoc_body_beginning", + [sym_heredoc_content] = "heredoc_content", + [sym_heredoc_end] = "heredoc_end", + [sym_file_descriptor] = "file_descriptor", + [sym__empty_value] = "_empty_value", + [sym__concat] = "_concat", + [sym_variable_name] = "variable_name", + [sym_regex] = "regex", + [sym__expansion_word] = "word", + [sym_extglob_pattern] = "extglob_pattern", + [sym__bare_dollar] = "word", + [sym__immediate_double_hash] = "operator", + [sym___error_recovery] = "__error_recovery", + [sym_program] = "program", + [sym__statements] = "_statements", + [aux_sym__terminated_statement] = "_terminated_statement", + [sym__statement_not_pipeline] = "_statement_not_pipeline", + [sym_redirected_statement] = "redirected_statement", + [sym_for_statement] = "for_statement", + [sym_while_statement] = "while_statement", + [sym_do_group] = "do_group", + [sym_if_statement] = "if_statement", + [sym_elif_clause] = "elif_clause", + [sym_else_clause] = "else_clause", + [sym_case_statement] = "case_statement", + [sym__case_item_last] = "case_item", + [sym_case_item] = "case_item", + [sym_function_definition] = "function_definition", + [sym_compound_statement] = "compound_statement", + [sym_subshell] = "subshell", + [sym_pipeline] = "pipeline", + [sym_list] = "list", + [sym_negated_command] = "negated_command", + [sym_command] = "command", + [sym_command_name] = "command_name", + [sym_variable_assignment] = "variable_assignment", + [sym__variable_assignments] = "_variable_assignments", + [sym_file_redirect] = "file_redirect", + [sym_heredoc_redirect] = "heredoc_redirect", + [sym__heredoc_pipeline] = "pipeline", + [sym__heredoc_expression] = "_heredoc_expression", + [aux_sym__heredoc_command] = "_heredoc_command", + [sym__heredoc_body] = "_heredoc_body", + [sym_heredoc_body] = "heredoc_body", + [sym__simple_heredoc_body] = "_simple_heredoc_body", + [sym_arithmetic_expansion] = "arithmetic_expansion", + [sym__arithmetic_expression] = "_arithmetic_expression", + [sym_arithmetic_literal] = "arithmetic_literal", + [sym_arithmetic_binary_expression] = "arithmetic_binary_expression", + [sym_arithmetic_ternary_expression] = "arithmetic_ternary_expression", + [sym_arithmetic_unary_expression] = "arithmetic_unary_expression", + [sym_arithmetic_postfix_expression] = "arithmetic_postfix_expression", + [sym_arithmetic_parenthesized_expression] = "arithmetic_parenthesized_expression", + [sym_concatenation] = "concatenation", + [sym_string] = "string", + [sym_simple_expansion] = "simple_expansion", + [sym_expansion] = "expansion", + [sym__expansion_body] = "_expansion_body", + [sym_expansion_expression] = "expansion_expression", + [sym_expansion_regex] = "expansion_regex", + [sym__concatenation_in_expansion] = "concatenation", + [sym_command_substitution] = "command_substitution", + [sym__extglob_blob] = "_extglob_blob", + [sym_terminator] = "terminator", + [aux_sym__statements_repeat1] = "_statements_repeat1", + [aux_sym_redirected_statement_repeat1] = "redirected_statement_repeat1", + [aux_sym_redirected_statement_repeat2] = "redirected_statement_repeat2", + [aux_sym_for_statement_repeat1] = "for_statement_repeat1", + [aux_sym_if_statement_repeat1] = "if_statement_repeat1", + [aux_sym_case_statement_repeat1] = "case_statement_repeat1", + [aux_sym__case_item_last_repeat1] = "_case_item_last_repeat1", + [aux_sym__case_item_last_repeat2] = "_case_item_last_repeat2", + [aux_sym_pipeline_repeat1] = "pipeline_repeat1", + [aux_sym_command_repeat1] = "command_repeat1", + [aux_sym_command_repeat2] = "command_repeat2", + [aux_sym__variable_assignments_repeat1] = "_variable_assignments_repeat1", + [aux_sym_heredoc_body_repeat1] = "heredoc_body_repeat1", + [aux_sym_concatenation_repeat1] = "concatenation_repeat1", + [aux_sym_string_repeat1] = "string_repeat1", + [aux_sym_expansion_regex_repeat1] = "expansion_regex_repeat1", + [aux_sym__concatenation_in_expansion_repeat1] = "_concatenation_in_expansion_repeat1", + [alias_sym_statements] = "statements", +}; + +static const TSSymbol ts_symbol_map[] = { + [ts_builtin_sym_end] = ts_builtin_sym_end, + [sym_word] = sym_word, + [anon_sym_for] = anon_sym_for, + [anon_sym_in] = anon_sym_in, + [anon_sym_while] = anon_sym_while, + [anon_sym_until] = anon_sym_until, + [anon_sym_do] = anon_sym_do, + [anon_sym_done] = anon_sym_done, + [anon_sym_if] = anon_sym_if, + [anon_sym_then] = anon_sym_then, + [anon_sym_fi] = anon_sym_fi, + [anon_sym_elif] = anon_sym_elif, + [anon_sym_else] = anon_sym_else, + [anon_sym_case] = anon_sym_case, + [anon_sym_esac] = anon_sym_esac, + [anon_sym_LPAREN] = anon_sym_LPAREN, + [anon_sym_PIPE] = anon_sym_PIPE, + [anon_sym_RPAREN] = anon_sym_RPAREN, + [anon_sym_LF] = anon_sym_LF, + [anon_sym_SEMI_SEMI] = anon_sym_SEMI_SEMI, + [anon_sym_LBRACE] = anon_sym_LBRACE, + [anon_sym_RBRACE] = anon_sym_RBRACE, + [anon_sym_AMP_AMP] = sym__immediate_double_hash, + [anon_sym_PIPE_PIPE] = sym__immediate_double_hash, + [anon_sym_BANG] = anon_sym_BANG, + [anon_sym_EQ] = anon_sym_EQ, + [anon_sym_LT] = sym__immediate_double_hash, + [anon_sym_GT] = sym__immediate_double_hash, + [anon_sym_GT_GT] = sym__immediate_double_hash, + [anon_sym_AMP_GT] = sym__immediate_double_hash, + [anon_sym_AMP_GT_GT] = sym__immediate_double_hash, + [anon_sym_LT_AMP] = sym__immediate_double_hash, + [anon_sym_GT_AMP] = sym__immediate_double_hash, + [anon_sym_GT_PIPE] = sym__immediate_double_hash, + [anon_sym_LT_AMP_DASH] = sym__immediate_double_hash, + [anon_sym_GT_AMP_DASH] = sym__immediate_double_hash, + [anon_sym_LT_LT] = sym__immediate_double_hash, + [anon_sym_LT_LT_DASH] = sym__immediate_double_hash, + [aux_sym_heredoc_redirect_token1] = aux_sym_heredoc_redirect_token1, + [anon_sym_PIPE_AMP] = anon_sym_PIPE_AMP, + [anon_sym_DOLLAR_LPAREN_LPAREN] = anon_sym_DOLLAR_LPAREN_LPAREN, + [anon_sym_RPAREN_RPAREN] = anon_sym_RPAREN_RPAREN, + [anon_sym_PLUS_EQ] = sym__immediate_double_hash, + [anon_sym_DASH_EQ] = sym__immediate_double_hash, + [anon_sym_STAR_EQ] = sym__immediate_double_hash, + [anon_sym_SLASH_EQ] = sym__immediate_double_hash, + [anon_sym_PERCENT_EQ] = sym__immediate_double_hash, + [anon_sym_LT_LT_EQ] = sym__immediate_double_hash, + [anon_sym_GT_GT_EQ] = sym__immediate_double_hash, + [anon_sym_AMP_EQ] = sym__immediate_double_hash, + [anon_sym_CARET_EQ] = sym__immediate_double_hash, + [anon_sym_PIPE_EQ] = sym__immediate_double_hash, + [anon_sym_CARET] = sym__immediate_double_hash, + [anon_sym_AMP] = anon_sym_AMP, + [anon_sym_EQ_EQ] = sym__immediate_double_hash, + [anon_sym_BANG_EQ] = sym__immediate_double_hash, + [anon_sym_LT_EQ] = sym__immediate_double_hash, + [anon_sym_GT_EQ] = sym__immediate_double_hash, + [anon_sym_PLUS] = sym__immediate_double_hash, + [anon_sym_DASH] = sym__immediate_double_hash, + [anon_sym_STAR] = sym__immediate_double_hash, + [anon_sym_SLASH] = sym__immediate_double_hash, + [anon_sym_PERCENT] = sym__immediate_double_hash, + [anon_sym_QMARK] = anon_sym_QMARK, + [anon_sym_COLON] = anon_sym_COLON, + [anon_sym_PLUS_PLUS] = sym__immediate_double_hash, + [anon_sym_DASH_DASH] = sym__immediate_double_hash, + [anon_sym_DASH2] = sym__immediate_double_hash, + [anon_sym_PLUS2] = sym__immediate_double_hash, + [anon_sym_TILDE] = sym__immediate_double_hash, + [anon_sym_PLUS_PLUS2] = sym__immediate_double_hash, + [anon_sym_DASH_DASH2] = sym__immediate_double_hash, + [aux_sym_concatenation_token1] = aux_sym_concatenation_token1, + [anon_sym_DOLLAR] = anon_sym_DOLLAR, + [anon_sym_DQUOTE] = anon_sym_DQUOTE, + [sym_string_content] = sym_string_content, + [sym_raw_string] = sym_raw_string, + [sym_number] = sym_number, + [anon_sym_POUND] = anon_sym_POUND, + [anon_sym_DOLLAR_LBRACE] = anon_sym_DOLLAR_LBRACE, + [anon_sym_COLON_DASH] = sym__immediate_double_hash, + [anon_sym_DASH3] = sym__immediate_double_hash, + [anon_sym_COLON_EQ] = sym__immediate_double_hash, + [anon_sym_EQ2] = sym__immediate_double_hash, + [anon_sym_COLON_QMARK] = sym__immediate_double_hash, + [anon_sym_QMARK2] = sym__immediate_double_hash, + [anon_sym_COLON_PLUS] = sym__immediate_double_hash, + [anon_sym_PLUS3] = sym__immediate_double_hash, + [anon_sym_PERCENT_PERCENT] = sym__immediate_double_hash, + [aux_sym_expansion_regex_token1] = sym_regex, + [anon_sym_DOLLAR_LPAREN] = anon_sym_DOLLAR_LPAREN, + [anon_sym_BQUOTE] = anon_sym_BQUOTE, + [sym_comment] = sym_comment, + [sym__comment_word] = sym_word, + [aux_sym__simple_variable_name_token1] = sym_variable_name, + [aux_sym__multiline_variable_name_token1] = sym_variable_name, + [anon_sym_AT] = anon_sym_POUND, + [anon_sym_0] = anon_sym_POUND, + [anon_sym__] = anon_sym_POUND, + [anon_sym_SEMI] = anon_sym_SEMI, + [sym_heredoc_start] = sym_heredoc_start, + [sym_simple_heredoc_body] = sym_heredoc_body, + [sym__heredoc_body_beginning] = sym__heredoc_body_beginning, + [sym_heredoc_content] = sym_heredoc_content, + [sym_heredoc_end] = sym_heredoc_end, + [sym_file_descriptor] = sym_file_descriptor, + [sym__empty_value] = sym__empty_value, + [sym__concat] = sym__concat, + [sym_variable_name] = sym_variable_name, + [sym_regex] = sym_regex, + [sym__expansion_word] = sym_word, + [sym_extglob_pattern] = sym_extglob_pattern, + [sym__bare_dollar] = sym_word, + [sym__immediate_double_hash] = sym__immediate_double_hash, + [sym___error_recovery] = sym___error_recovery, + [sym_program] = sym_program, + [sym__statements] = sym__statements, + [aux_sym__terminated_statement] = aux_sym__terminated_statement, + [sym__statement_not_pipeline] = sym__statement_not_pipeline, + [sym_redirected_statement] = sym_redirected_statement, + [sym_for_statement] = sym_for_statement, + [sym_while_statement] = sym_while_statement, + [sym_do_group] = sym_do_group, + [sym_if_statement] = sym_if_statement, + [sym_elif_clause] = sym_elif_clause, + [sym_else_clause] = sym_else_clause, + [sym_case_statement] = sym_case_statement, + [sym__case_item_last] = sym_case_item, + [sym_case_item] = sym_case_item, + [sym_function_definition] = sym_function_definition, + [sym_compound_statement] = sym_compound_statement, + [sym_subshell] = sym_subshell, + [sym_pipeline] = sym_pipeline, + [sym_list] = sym_list, + [sym_negated_command] = sym_negated_command, + [sym_command] = sym_command, + [sym_command_name] = sym_command_name, + [sym_variable_assignment] = sym_variable_assignment, + [sym__variable_assignments] = sym__variable_assignments, + [sym_file_redirect] = sym_file_redirect, + [sym_heredoc_redirect] = sym_heredoc_redirect, + [sym__heredoc_pipeline] = sym_pipeline, + [sym__heredoc_expression] = sym__heredoc_expression, + [aux_sym__heredoc_command] = aux_sym__heredoc_command, + [sym__heredoc_body] = sym__heredoc_body, + [sym_heredoc_body] = sym_heredoc_body, + [sym__simple_heredoc_body] = sym__simple_heredoc_body, + [sym_arithmetic_expansion] = sym_arithmetic_expansion, + [sym__arithmetic_expression] = sym__arithmetic_expression, + [sym_arithmetic_literal] = sym_arithmetic_literal, + [sym_arithmetic_binary_expression] = sym_arithmetic_binary_expression, + [sym_arithmetic_ternary_expression] = sym_arithmetic_ternary_expression, + [sym_arithmetic_unary_expression] = sym_arithmetic_unary_expression, + [sym_arithmetic_postfix_expression] = sym_arithmetic_postfix_expression, + [sym_arithmetic_parenthesized_expression] = sym_arithmetic_parenthesized_expression, + [sym_concatenation] = sym_concatenation, + [sym_string] = sym_string, + [sym_simple_expansion] = sym_simple_expansion, + [sym_expansion] = sym_expansion, + [sym__expansion_body] = sym__expansion_body, + [sym_expansion_expression] = sym_expansion_expression, + [sym_expansion_regex] = sym_expansion_regex, + [sym__concatenation_in_expansion] = sym_concatenation, + [sym_command_substitution] = sym_command_substitution, + [sym__extglob_blob] = sym__extglob_blob, + [sym_terminator] = sym_terminator, + [aux_sym__statements_repeat1] = aux_sym__statements_repeat1, + [aux_sym_redirected_statement_repeat1] = aux_sym_redirected_statement_repeat1, + [aux_sym_redirected_statement_repeat2] = aux_sym_redirected_statement_repeat2, + [aux_sym_for_statement_repeat1] = aux_sym_for_statement_repeat1, + [aux_sym_if_statement_repeat1] = aux_sym_if_statement_repeat1, + [aux_sym_case_statement_repeat1] = aux_sym_case_statement_repeat1, + [aux_sym__case_item_last_repeat1] = aux_sym__case_item_last_repeat1, + [aux_sym__case_item_last_repeat2] = aux_sym__case_item_last_repeat2, + [aux_sym_pipeline_repeat1] = aux_sym_pipeline_repeat1, + [aux_sym_command_repeat1] = aux_sym_command_repeat1, + [aux_sym_command_repeat2] = aux_sym_command_repeat2, + [aux_sym__variable_assignments_repeat1] = aux_sym__variable_assignments_repeat1, + [aux_sym_heredoc_body_repeat1] = aux_sym_heredoc_body_repeat1, + [aux_sym_concatenation_repeat1] = aux_sym_concatenation_repeat1, + [aux_sym_string_repeat1] = aux_sym_string_repeat1, + [aux_sym_expansion_regex_repeat1] = aux_sym_expansion_regex_repeat1, + [aux_sym__concatenation_in_expansion_repeat1] = aux_sym__concatenation_in_expansion_repeat1, + [alias_sym_statements] = alias_sym_statements, +}; + +static const TSSymbolMetadata ts_symbol_metadata[] = { + [ts_builtin_sym_end] = { + .visible = false, + .named = true, + }, + [sym_word] = { + .visible = true, + .named = true, + }, + [anon_sym_for] = { + .visible = true, + .named = false, + }, + [anon_sym_in] = { + .visible = true, + .named = false, + }, + [anon_sym_while] = { + .visible = true, + .named = false, + }, + [anon_sym_until] = { + .visible = true, + .named = false, + }, + [anon_sym_do] = { + .visible = true, + .named = false, + }, + [anon_sym_done] = { + .visible = true, + .named = false, + }, + [anon_sym_if] = { + .visible = true, + .named = false, + }, + [anon_sym_then] = { + .visible = true, + .named = false, + }, + [anon_sym_fi] = { + .visible = true, + .named = false, + }, + [anon_sym_elif] = { + .visible = true, + .named = false, + }, + [anon_sym_else] = { + .visible = true, + .named = false, + }, + [anon_sym_case] = { + .visible = true, + .named = false, + }, + [anon_sym_esac] = { + .visible = true, + .named = false, + }, + [anon_sym_LPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_PIPE] = { + .visible = true, + .named = false, + }, + [anon_sym_RPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_LF] = { + .visible = true, + .named = false, + }, + [anon_sym_SEMI_SEMI] = { + .visible = true, + .named = false, + }, + [anon_sym_LBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_RBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_AMP_AMP] = { + .visible = true, + .named = true, + }, + [anon_sym_PIPE_PIPE] = { + .visible = true, + .named = true, + }, + [anon_sym_BANG] = { + .visible = true, + .named = false, + }, + [anon_sym_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_LT] = { + .visible = true, + .named = true, + }, + [anon_sym_GT] = { + .visible = true, + .named = true, + }, + [anon_sym_GT_GT] = { + .visible = true, + .named = true, + }, + [anon_sym_AMP_GT] = { + .visible = true, + .named = true, + }, + [anon_sym_AMP_GT_GT] = { + .visible = true, + .named = true, + }, + [anon_sym_LT_AMP] = { + .visible = true, + .named = true, + }, + [anon_sym_GT_AMP] = { + .visible = true, + .named = true, + }, + [anon_sym_GT_PIPE] = { + .visible = true, + .named = true, + }, + [anon_sym_LT_AMP_DASH] = { + .visible = true, + .named = true, + }, + [anon_sym_GT_AMP_DASH] = { + .visible = true, + .named = true, + }, + [anon_sym_LT_LT] = { + .visible = true, + .named = true, + }, + [anon_sym_LT_LT_DASH] = { + .visible = true, + .named = true, + }, + [aux_sym_heredoc_redirect_token1] = { + .visible = false, + .named = false, + }, + [anon_sym_PIPE_AMP] = { + .visible = true, + .named = false, + }, + [anon_sym_DOLLAR_LPAREN_LPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_RPAREN_RPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_PLUS_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_DASH_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_STAR_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_SLASH_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_PERCENT_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_LT_LT_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_GT_GT_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_AMP_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_CARET_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_PIPE_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_CARET] = { + .visible = true, + .named = true, + }, + [anon_sym_AMP] = { + .visible = true, + .named = false, + }, + [anon_sym_EQ_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_BANG_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_LT_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_GT_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_PLUS] = { + .visible = true, + .named = true, + }, + [anon_sym_DASH] = { + .visible = true, + .named = true, + }, + [anon_sym_STAR] = { + .visible = true, + .named = true, + }, + [anon_sym_SLASH] = { + .visible = true, + .named = true, + }, + [anon_sym_PERCENT] = { + .visible = true, + .named = true, + }, + [anon_sym_QMARK] = { + .visible = true, + .named = false, + }, + [anon_sym_COLON] = { + .visible = true, + .named = false, + }, + [anon_sym_PLUS_PLUS] = { + .visible = true, + .named = true, + }, + [anon_sym_DASH_DASH] = { + .visible = true, + .named = true, + }, + [anon_sym_DASH2] = { + .visible = true, + .named = true, + }, + [anon_sym_PLUS2] = { + .visible = true, + .named = true, + }, + [anon_sym_TILDE] = { + .visible = true, + .named = true, + }, + [anon_sym_PLUS_PLUS2] = { + .visible = true, + .named = true, + }, + [anon_sym_DASH_DASH2] = { + .visible = true, + .named = true, + }, + [aux_sym_concatenation_token1] = { + .visible = true, + .named = false, + }, + [anon_sym_DOLLAR] = { + .visible = true, + .named = false, + }, + [anon_sym_DQUOTE] = { + .visible = true, + .named = false, + }, + [sym_string_content] = { + .visible = true, + .named = true, + }, + [sym_raw_string] = { + .visible = true, + .named = true, + }, + [sym_number] = { + .visible = true, + .named = true, + }, + [anon_sym_POUND] = { + .visible = true, + .named = true, + }, + [anon_sym_DOLLAR_LBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_COLON_DASH] = { + .visible = true, + .named = true, + }, + [anon_sym_DASH3] = { + .visible = true, + .named = true, + }, + [anon_sym_COLON_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_EQ2] = { + .visible = true, + .named = true, + }, + [anon_sym_COLON_QMARK] = { + .visible = true, + .named = true, + }, + [anon_sym_QMARK2] = { + .visible = true, + .named = true, + }, + [anon_sym_COLON_PLUS] = { + .visible = true, + .named = true, + }, + [anon_sym_PLUS3] = { + .visible = true, + .named = true, + }, + [anon_sym_PERCENT_PERCENT] = { + .visible = true, + .named = true, + }, + [aux_sym_expansion_regex_token1] = { + .visible = true, + .named = true, + }, + [anon_sym_DOLLAR_LPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_BQUOTE] = { + .visible = true, + .named = false, + }, + [sym_comment] = { + .visible = true, + .named = true, + }, + [sym__comment_word] = { + .visible = true, + .named = true, + }, + [aux_sym__simple_variable_name_token1] = { + .visible = true, + .named = true, + }, + [aux_sym__multiline_variable_name_token1] = { + .visible = true, + .named = true, + }, + [anon_sym_AT] = { + .visible = true, + .named = true, + }, + [anon_sym_0] = { + .visible = true, + .named = true, + }, + [anon_sym__] = { + .visible = true, + .named = true, + }, + [anon_sym_SEMI] = { + .visible = true, + .named = false, + }, + [sym_heredoc_start] = { + .visible = true, + .named = true, + }, + [sym_simple_heredoc_body] = { + .visible = true, + .named = true, + }, + [sym__heredoc_body_beginning] = { + .visible = false, + .named = true, + }, + [sym_heredoc_content] = { + .visible = true, + .named = true, + }, + [sym_heredoc_end] = { + .visible = true, + .named = true, + }, + [sym_file_descriptor] = { + .visible = true, + .named = true, + }, + [sym__empty_value] = { + .visible = false, + .named = true, + }, + [sym__concat] = { + .visible = false, + .named = true, + }, + [sym_variable_name] = { + .visible = true, + .named = true, + }, + [sym_regex] = { + .visible = true, + .named = true, + }, + [sym__expansion_word] = { + .visible = true, + .named = true, + }, + [sym_extglob_pattern] = { + .visible = true, + .named = true, + }, + [sym__bare_dollar] = { + .visible = true, + .named = true, + }, + [sym__immediate_double_hash] = { + .visible = true, + .named = true, + }, + [sym___error_recovery] = { + .visible = false, + .named = true, + }, + [sym_program] = { + .visible = true, + .named = true, + }, + [sym__statements] = { + .visible = false, + .named = true, + }, + [aux_sym__terminated_statement] = { + .visible = false, + .named = false, + }, + [sym__statement_not_pipeline] = { + .visible = false, + .named = true, + }, + [sym_redirected_statement] = { + .visible = true, + .named = true, + }, + [sym_for_statement] = { + .visible = true, + .named = true, + }, + [sym_while_statement] = { + .visible = true, + .named = true, + }, + [sym_do_group] = { + .visible = true, + .named = true, + }, + [sym_if_statement] = { + .visible = true, + .named = true, + }, + [sym_elif_clause] = { + .visible = true, + .named = true, + }, + [sym_else_clause] = { + .visible = true, + .named = true, + }, + [sym_case_statement] = { + .visible = true, + .named = true, + }, + [sym__case_item_last] = { + .visible = true, + .named = true, + }, + [sym_case_item] = { + .visible = true, + .named = true, + }, + [sym_function_definition] = { + .visible = true, + .named = true, + }, + [sym_compound_statement] = { + .visible = true, + .named = true, + }, + [sym_subshell] = { + .visible = true, + .named = true, + }, + [sym_pipeline] = { + .visible = true, + .named = true, + }, + [sym_list] = { + .visible = true, + .named = true, + }, + [sym_negated_command] = { + .visible = true, + .named = true, + }, + [sym_command] = { + .visible = true, + .named = true, + }, + [sym_command_name] = { + .visible = true, + .named = true, + }, + [sym_variable_assignment] = { + .visible = true, + .named = true, + }, + [sym__variable_assignments] = { + .visible = false, + .named = true, + }, + [sym_file_redirect] = { + .visible = true, + .named = true, + }, + [sym_heredoc_redirect] = { + .visible = true, + .named = true, + }, + [sym__heredoc_pipeline] = { + .visible = true, + .named = true, + }, + [sym__heredoc_expression] = { + .visible = false, + .named = true, + }, + [aux_sym__heredoc_command] = { + .visible = false, + .named = false, + }, + [sym__heredoc_body] = { + .visible = false, + .named = true, + }, + [sym_heredoc_body] = { + .visible = true, + .named = true, + }, + [sym__simple_heredoc_body] = { + .visible = false, + .named = true, + }, + [sym_arithmetic_expansion] = { + .visible = true, + .named = true, + }, + [sym__arithmetic_expression] = { + .visible = false, + .named = true, + }, + [sym_arithmetic_literal] = { + .visible = true, + .named = true, + }, + [sym_arithmetic_binary_expression] = { + .visible = true, + .named = true, + }, + [sym_arithmetic_ternary_expression] = { + .visible = true, + .named = true, + }, + [sym_arithmetic_unary_expression] = { + .visible = true, + .named = true, + }, + [sym_arithmetic_postfix_expression] = { + .visible = true, + .named = true, + }, + [sym_arithmetic_parenthesized_expression] = { + .visible = true, + .named = true, + }, + [sym_concatenation] = { + .visible = true, + .named = true, + }, + [sym_string] = { + .visible = true, + .named = true, + }, + [sym_simple_expansion] = { + .visible = true, + .named = true, + }, + [sym_expansion] = { + .visible = true, + .named = true, + }, + [sym__expansion_body] = { + .visible = false, + .named = true, + }, + [sym_expansion_expression] = { + .visible = true, + .named = true, + }, + [sym_expansion_regex] = { + .visible = true, + .named = true, + }, + [sym__concatenation_in_expansion] = { + .visible = true, + .named = true, + }, + [sym_command_substitution] = { + .visible = true, + .named = true, + }, + [sym__extglob_blob] = { + .visible = false, + .named = true, + }, + [sym_terminator] = { + .visible = true, + .named = true, + }, + [aux_sym__statements_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_redirected_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_redirected_statement_repeat2] = { + .visible = false, + .named = false, + }, + [aux_sym_for_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_if_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_case_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__case_item_last_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__case_item_last_repeat2] = { + .visible = false, + .named = false, + }, + [aux_sym_pipeline_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_command_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_command_repeat2] = { + .visible = false, + .named = false, + }, + [aux_sym__variable_assignments_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_heredoc_body_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_concatenation_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_string_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_expansion_regex_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__concatenation_in_expansion_repeat1] = { + .visible = false, + .named = false, + }, + [alias_sym_statements] = { + .visible = true, + .named = true, + }, +}; + +enum ts_field_identifiers { + field_alternative = 1, + field_arg = 2, + field_body = 3, + field_cases = 4, + field_cmd = 5, + field_condition = 6, + field_consequence = 7, + field_dest = 8, + field_elif = 9, + field_else = 10, + field_fd = 11, + field_left = 12, + field_name = 13, + field_op = 14, + field_redirect = 15, + field_right = 16, + field_stmt = 17, + field_terminator = 18, + field_value = 19, + field_variable = 20, +}; + +static const char * const ts_field_names[] = { + [0] = NULL, + [field_alternative] = "alternative", + [field_arg] = "arg", + [field_body] = "body", + [field_cases] = "cases", + [field_cmd] = "cmd", + [field_condition] = "condition", + [field_consequence] = "consequence", + [field_dest] = "dest", + [field_elif] = "elif", + [field_else] = "else", + [field_fd] = "fd", + [field_left] = "left", + [field_name] = "name", + [field_op] = "op", + [field_redirect] = "redirect", + [field_right] = "right", + [field_stmt] = "stmt", + [field_terminator] = "terminator", + [field_value] = "value", + [field_variable] = "variable", +}; + +static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { + [1] = {.index = 0, .length = 1}, + [2] = {.index = 1, .length = 2}, + [3] = {.index = 3, .length = 1}, + [4] = {.index = 4, .length = 1}, + [5] = {.index = 5, .length = 1}, + [6] = {.index = 6, .length = 2}, + [7] = {.index = 8, .length = 2}, + [9] = {.index = 4, .length = 1}, + [10] = {.index = 10, .length = 2}, + [11] = {.index = 12, .length = 2}, + [12] = {.index = 14, .length = 1}, + [13] = {.index = 14, .length = 1}, + [14] = {.index = 15, .length = 2}, + [15] = {.index = 17, .length = 3}, + [16] = {.index = 20, .length = 4}, + [17] = {.index = 24, .length = 2}, + [18] = {.index = 26, .length = 2}, + [19] = {.index = 28, .length = 3}, + [20] = {.index = 31, .length = 2}, + [21] = {.index = 33, .length = 4}, + [22] = {.index = 37, .length = 2}, + [23] = {.index = 0, .length = 1}, + [24] = {.index = 39, .length = 1}, + [26] = {.index = 40, .length = 2}, + [27] = {.index = 40, .length = 2}, + [28] = {.index = 42, .length = 2}, + [29] = {.index = 44, .length = 1}, + [30] = {.index = 45, .length = 3}, + [31] = {.index = 48, .length = 2}, + [32] = {.index = 50, .length = 4}, + [33] = {.index = 54, .length = 3}, + [34] = {.index = 57, .length = 2}, + [35] = {.index = 59, .length = 3}, + [36] = {.index = 62, .length = 1}, + [37] = {.index = 63, .length = 1}, + [38] = {.index = 64, .length = 3}, + [42] = {.index = 67, .length = 2}, + [43] = {.index = 69, .length = 3}, + [44] = {.index = 72, .length = 6}, + [45] = {.index = 78, .length = 4}, + [46] = {.index = 82, .length = 4}, + [47] = {.index = 86, .length = 4}, + [48] = {.index = 90, .length = 2}, + [49] = {.index = 92, .length = 2}, + [50] = {.index = 94, .length = 3}, + [51] = {.index = 97, .length = 7}, + [52] = {.index = 104, .length = 7}, + [53] = {.index = 111, .length = 5}, + [54] = {.index = 116, .length = 4}, + [55] = {.index = 120, .length = 2}, + [56] = {.index = 122, .length = 4}, + [57] = {.index = 126, .length = 5}, + [58] = {.index = 131, .length = 3}, + [59] = {.index = 134, .length = 3}, + [60] = {.index = 137, .length = 2}, + [61] = {.index = 139, .length = 2}, + [62] = {.index = 141, .length = 8}, + [63] = {.index = 149, .length = 4}, + [64] = {.index = 153, .length = 4}, + [65] = {.index = 157, .length = 5}, + [66] = {.index = 162, .length = 5}, + [67] = {.index = 167, .length = 4}, + [68] = {.index = 171, .length = 4}, + [69] = {.index = 175, .length = 3}, + [70] = {.index = 178, .length = 3}, + [71] = {.index = 181, .length = 4}, + [72] = {.index = 185, .length = 4}, + [73] = {.index = 189, .length = 5}, + [74] = {.index = 194, .length = 5}, + [75] = {.index = 199, .length = 5}, + [76] = {.index = 204, .length = 5}, + [77] = {.index = 209, .length = 5}, +}; + +static const TSFieldMapEntry ts_field_map_entries[] = { + [0] = + {field_op, 0}, + [1] = + {field_stmt, 0, .inherited = true}, + {field_terminator, 0, .inherited = true}, + [3] = + {field_stmt, 0}, + [4] = + {field_name, 0}, + [5] = + {field_redirect, 0}, + [6] = + {field_fd, 0}, + {field_op, 1}, + [8] = + {field_dest, 1}, + {field_op, 0}, + [10] = + {field_stmt, 0}, + {field_terminator, 1}, + [12] = + {field_body, 0}, + {field_redirect, 1}, + [14] = + {field_arg, 0}, + [15] = + {field_arg, 1, .inherited = true}, + {field_name, 0}, + [17] = + {field_stmt, 0, .inherited = true}, + {field_stmt, 1}, + {field_terminator, 0, .inherited = true}, + [20] = + {field_stmt, 0, .inherited = true}, + {field_stmt, 1, .inherited = true}, + {field_terminator, 0, .inherited = true}, + {field_terminator, 1, .inherited = true}, + [24] = + {field_name, 1}, + {field_redirect, 0, .inherited = true}, + [26] = + {field_redirect, 0, .inherited = true}, + {field_redirect, 1, .inherited = true}, + [28] = + {field_dest, 2}, + {field_fd, 0}, + {field_op, 1}, + [31] = + {field_name, 0}, + {field_value, 2}, + [33] = + {field_body, 2}, + {field_condition, 1}, + {field_stmt, 1, .inherited = true}, + {field_terminator, 1, .inherited = true}, + [37] = + {field_stmt, 1, .inherited = true}, + {field_terminator, 1, .inherited = true}, + [39] = + {field_op, 1}, + [40] = + {field_name, 0}, + {field_op, 1}, + [42] = + {field_name, 1, .inherited = true}, + {field_op, 1, .inherited = true}, + [44] = + {field_redirect, 1}, + [45] = + {field_cmd, 0}, + {field_cmd, 2}, + {field_op, 1}, + [48] = + {field_arg, 0, .inherited = true}, + {field_arg, 1, .inherited = true}, + [50] = + {field_stmt, 0, .inherited = true}, + {field_stmt, 1}, + {field_terminator, 0, .inherited = true}, + {field_terminator, 2}, + [54] = + {field_arg, 2, .inherited = true}, + {field_name, 1}, + {field_redirect, 0, .inherited = true}, + [57] = + {field_body, 3}, + {field_variable, 1}, + [59] = + {field_condition, 1}, + {field_stmt, 1, .inherited = true}, + {field_terminator, 1, .inherited = true}, + [62] = + {field_value, 1}, + [63] = + {field_cases, 0}, + [64] = + {field_left, 0}, + {field_op, 1}, + {field_right, 2}, + [67] = + {field_body, 3}, + {field_name, 0}, + [69] = + {field_body, 1}, + {field_stmt, 1, .inherited = true}, + {field_terminator, 1, .inherited = true}, + [72] = + {field_body, 3}, + {field_condition, 1}, + {field_stmt, 1, .inherited = true}, + {field_stmt, 3, .inherited = true}, + {field_terminator, 1, .inherited = true}, + {field_terminator, 3, .inherited = true}, + [78] = + {field_condition, 1}, + {field_else, 3}, + {field_stmt, 1, .inherited = true}, + {field_terminator, 1, .inherited = true}, + [82] = + {field_condition, 1}, + {field_elif, 3}, + {field_stmt, 1, .inherited = true}, + {field_terminator, 1, .inherited = true}, + [86] = + {field_body, 3, .inherited = true}, + {field_cases, 3}, + {field_value, 1}, + {field_value, 3, .inherited = true}, + [90] = + {field_cases, 0, .inherited = true}, + {field_cases, 1, .inherited = true}, + [92] = + {field_op, 0}, + {field_right, 1}, + [94] = + {field_body, 5}, + {field_value, 3}, + {field_variable, 1}, + [97] = + {field_body, 3}, + {field_condition, 1}, + {field_else, 4}, + {field_stmt, 1, .inherited = true}, + {field_stmt, 3, .inherited = true}, + {field_terminator, 1, .inherited = true}, + {field_terminator, 3, .inherited = true}, + [104] = + {field_body, 3}, + {field_condition, 1}, + {field_elif, 4}, + {field_stmt, 1, .inherited = true}, + {field_stmt, 3, .inherited = true}, + {field_terminator, 1, .inherited = true}, + {field_terminator, 3, .inherited = true}, + [111] = + {field_condition, 1}, + {field_elif, 3}, + {field_else, 4}, + {field_stmt, 1, .inherited = true}, + {field_terminator, 1, .inherited = true}, + [116] = + {field_body, 2}, + {field_stmt, 2, .inherited = true}, + {field_terminator, 2, .inherited = true}, + {field_value, 0}, + [120] = + {field_value, 0, .inherited = true}, + {field_value, 1, .inherited = true}, + [122] = + {field_body, 4, .inherited = true}, + {field_cases, 4}, + {field_value, 1}, + {field_value, 4, .inherited = true}, + [126] = + {field_body, 4, .inherited = true}, + {field_cases, 3, .inherited = true}, + {field_cases, 4}, + {field_value, 1}, + {field_value, 4, .inherited = true}, + [131] = + {field_alternative, 4}, + {field_condition, 0}, + {field_consequence, 2}, + [134] = + {field_op, 0}, + {field_op, 2, .inherited = true}, + {field_right, 2, .inherited = true}, + [137] = + {field_arg, 2, .inherited = true}, + {field_op, 0}, + [139] = + {field_op, 0}, + {field_redirect, 2}, + [141] = + {field_body, 3}, + {field_condition, 1}, + {field_elif, 4}, + {field_else, 5}, + {field_stmt, 1, .inherited = true}, + {field_stmt, 3, .inherited = true}, + {field_terminator, 1, .inherited = true}, + {field_terminator, 3, .inherited = true}, + [149] = + {field_body, 3}, + {field_stmt, 3, .inherited = true}, + {field_terminator, 3, .inherited = true}, + {field_value, 1}, + [153] = + {field_body, 3}, + {field_stmt, 3, .inherited = true}, + {field_terminator, 3, .inherited = true}, + {field_value, 0}, + [157] = + {field_body, 3}, + {field_stmt, 3, .inherited = true}, + {field_terminator, 3, .inherited = true}, + {field_value, 0}, + {field_value, 1, .inherited = true}, + [162] = + {field_body, 5, .inherited = true}, + {field_cases, 4, .inherited = true}, + {field_cases, 5}, + {field_value, 1}, + {field_value, 5, .inherited = true}, + [167] = + {field_body, 5, .inherited = true}, + {field_cases, 5}, + {field_value, 1}, + {field_value, 5, .inherited = true}, + [171] = + {field_fd, 0}, + {field_op, 1}, + {field_op, 3, .inherited = true}, + {field_right, 3, .inherited = true}, + [175] = + {field_arg, 3, .inherited = true}, + {field_fd, 0}, + {field_op, 1}, + [178] = + {field_fd, 0}, + {field_op, 1}, + {field_redirect, 3}, + [181] = + {field_op, 0}, + {field_op, 3, .inherited = true}, + {field_redirect, 2}, + {field_right, 3, .inherited = true}, + [185] = + {field_body, 4}, + {field_stmt, 4, .inherited = true}, + {field_terminator, 4, .inherited = true}, + {field_value, 1}, + [189] = + {field_body, 4}, + {field_stmt, 4, .inherited = true}, + {field_terminator, 4, .inherited = true}, + {field_value, 1}, + {field_value, 2, .inherited = true}, + [194] = + {field_body, 4}, + {field_stmt, 4, .inherited = true}, + {field_terminator, 4, .inherited = true}, + {field_value, 0}, + {field_value, 1, .inherited = true}, + [199] = + {field_body, 6, .inherited = true}, + {field_cases, 5, .inherited = true}, + {field_cases, 6}, + {field_value, 1}, + {field_value, 6, .inherited = true}, + [204] = + {field_fd, 0}, + {field_op, 1}, + {field_op, 4, .inherited = true}, + {field_redirect, 3}, + {field_right, 4, .inherited = true}, + [209] = + {field_body, 5}, + {field_stmt, 5, .inherited = true}, + {field_terminator, 5, .inherited = true}, + {field_value, 1}, + {field_value, 2, .inherited = true}, +}; + +static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = { + [0] = {0}, + [8] = { + [1] = anon_sym_POUND, + }, + [9] = { + [0] = anon_sym_POUND, + }, + [12] = { + [0] = anon_sym_DOLLAR, + }, + [23] = { + [0] = sym__immediate_double_hash, + }, + [25] = { + [1] = sym_string_content, + }, + [27] = { + [0] = anon_sym_POUND, + }, + [35] = { + [1] = alias_sym_statements, + }, + [38] = { + [1] = sym__immediate_double_hash, + }, + [39] = { + [2] = sym_string_content, + }, + [40] = { + [3] = sym_word, + }, + [41] = { + [0] = sym_regex, + }, + [43] = { + [1] = alias_sym_statements, + }, + [44] = { + [1] = alias_sym_statements, + [3] = alias_sym_statements, + }, + [45] = { + [1] = alias_sym_statements, + }, + [46] = { + [1] = alias_sym_statements, + }, + [51] = { + [1] = alias_sym_statements, + [3] = alias_sym_statements, + }, + [52] = { + [1] = alias_sym_statements, + [3] = alias_sym_statements, + }, + [53] = { + [1] = alias_sym_statements, + }, + [54] = { + [2] = alias_sym_statements, + }, + [62] = { + [1] = alias_sym_statements, + [3] = alias_sym_statements, + }, + [63] = { + [3] = alias_sym_statements, + }, + [64] = { + [3] = alias_sym_statements, + }, + [65] = { + [3] = alias_sym_statements, + }, + [72] = { + [4] = alias_sym_statements, + }, + [73] = { + [4] = alias_sym_statements, + }, + [74] = { + [4] = alias_sym_statements, + }, + [77] = { + [5] = alias_sym_statements, + }, +}; + +static const uint16_t ts_non_terminal_alias_map[] = { + sym__statements, 2, + sym__statements, + alias_sym_statements, + aux_sym__terminated_statement, 2, + aux_sym__terminated_statement, + alias_sym_statements, + 0, +}; + +static const TSStateId ts_primary_state_ids[STATE_COUNT] = { + [0] = 0, + [1] = 1, + [2] = 2, + [3] = 2, + [4] = 4, + [5] = 4, + [6] = 4, + [7] = 2, + [8] = 8, + [9] = 9, + [10] = 10, + [11] = 11, + [12] = 12, + [13] = 13, + [14] = 14, + [15] = 15, + [16] = 16, + [17] = 17, + [18] = 18, + [19] = 19, + [20] = 20, + [21] = 21, + [22] = 22, + [23] = 23, + [24] = 24, + [25] = 25, + [26] = 26, + [27] = 27, + [28] = 28, + [29] = 29, + [30] = 30, + [31] = 31, + [32] = 32, + [33] = 33, + [34] = 34, + [35] = 35, + [36] = 24, + [37] = 35, + [38] = 35, + [39] = 39, + [40] = 40, + [41] = 41, + [42] = 40, + [43] = 39, + [44] = 40, + [45] = 45, + [46] = 46, + [47] = 39, + [48] = 48, + [49] = 49, + [50] = 40, + [51] = 40, + [52] = 39, + [53] = 53, + [54] = 40, + [55] = 39, + [56] = 40, + [57] = 39, + [58] = 40, + [59] = 39, + [60] = 40, + [61] = 39, + [62] = 40, + [63] = 39, + [64] = 40, + [65] = 40, + [66] = 39, + [67] = 40, + [68] = 39, + [69] = 40, + [70] = 39, + [71] = 40, + [72] = 72, + [73] = 73, + [74] = 39, + [75] = 39, + [76] = 40, + [77] = 40, + [78] = 39, + [79] = 24, + [80] = 39, + [81] = 48, + [82] = 40, + [83] = 39, + [84] = 40, + [85] = 40, + [86] = 41, + [87] = 39, + [88] = 39, + [89] = 40, + [90] = 39, + [91] = 39, + [92] = 53, + [93] = 48, + [94] = 40, + [95] = 39, + [96] = 49, + [97] = 40, + [98] = 24, + [99] = 39, + [100] = 40, + [101] = 39, + [102] = 39, + [103] = 40, + [104] = 40, + [105] = 45, + [106] = 40, + [107] = 40, + [108] = 39, + [109] = 39, + [110] = 40, + [111] = 53, + [112] = 39, + [113] = 49, + [114] = 45, + [115] = 40, + [116] = 39, + [117] = 41, + [118] = 24, + [119] = 39, + [120] = 40, + [121] = 40, + [122] = 39, + [123] = 39, + [124] = 39, + [125] = 40, + [126] = 126, + [127] = 127, + [128] = 128, + [129] = 129, + [130] = 129, + [131] = 127, + [132] = 132, + [133] = 129, + [134] = 129, + [135] = 126, + [136] = 127, + [137] = 137, + [138] = 129, + [139] = 132, + [140] = 126, + [141] = 132, + [142] = 142, + [143] = 143, + [144] = 142, + [145] = 145, + [146] = 146, + [147] = 143, + [148] = 142, + [149] = 143, + [150] = 143, + [151] = 143, + [152] = 142, + [153] = 142, + [154] = 143, + [155] = 142, + [156] = 143, + [157] = 142, + [158] = 158, + [159] = 158, + [160] = 158, + [161] = 158, + [162] = 158, + [163] = 158, + [164] = 158, + [165] = 165, + [166] = 165, + [167] = 165, + [168] = 165, + [169] = 165, + [170] = 165, + [171] = 165, + [172] = 165, + [173] = 165, + [174] = 165, + [175] = 165, + [176] = 165, + [177] = 165, + [178] = 165, + [179] = 179, + [180] = 179, + [181] = 165, + [182] = 165, + [183] = 183, + [184] = 183, + [185] = 183, + [186] = 179, + [187] = 179, + [188] = 165, + [189] = 183, + [190] = 179, + [191] = 183, + [192] = 192, + [193] = 193, + [194] = 194, + [195] = 195, + [196] = 196, + [197] = 193, + [198] = 198, + [199] = 194, + [200] = 196, + [201] = 194, + [202] = 196, + [203] = 195, + [204] = 165, + [205] = 195, + [206] = 198, + [207] = 193, + [208] = 192, + [209] = 165, + [210] = 198, + [211] = 192, + [212] = 192, + [213] = 192, + [214] = 195, + [215] = 195, + [216] = 195, + [217] = 193, + [218] = 198, + [219] = 194, + [220] = 192, + [221] = 221, + [222] = 222, + [223] = 221, + [224] = 193, + [225] = 193, + [226] = 226, + [227] = 192, + [228] = 226, + [229] = 229, + [230] = 195, + [231] = 165, + [232] = 165, + [233] = 222, + [234] = 193, + [235] = 229, + [236] = 229, + [237] = 165, + [238] = 226, + [239] = 196, + [240] = 222, + [241] = 221, + [242] = 194, + [243] = 196, + [244] = 229, + [245] = 245, + [246] = 195, + [247] = 193, + [248] = 248, + [249] = 222, + [250] = 195, + [251] = 179, + [252] = 252, + [253] = 226, + [254] = 248, + [255] = 226, + [256] = 252, + [257] = 257, + [258] = 221, + [259] = 183, + [260] = 222, + [261] = 193, + [262] = 229, + [263] = 192, + [264] = 221, + [265] = 165, + [266] = 257, + [267] = 257, + [268] = 221, + [269] = 269, + [270] = 165, + [271] = 222, + [272] = 222, + [273] = 269, + [274] = 245, + [275] = 269, + [276] = 248, + [277] = 277, + [278] = 245, + [279] = 252, + [280] = 252, + [281] = 252, + [282] = 221, + [283] = 283, + [284] = 222, + [285] = 179, + [286] = 286, + [287] = 183, + [288] = 288, + [289] = 289, + [290] = 221, + [291] = 289, + [292] = 288, + [293] = 286, + [294] = 286, + [295] = 248, + [296] = 257, + [297] = 283, + [298] = 257, + [299] = 289, + [300] = 283, + [301] = 248, + [302] = 288, + [303] = 222, + [304] = 221, + [305] = 283, + [306] = 196, + [307] = 307, + [308] = 308, + [309] = 286, + [310] = 310, + [311] = 283, + [312] = 312, + [313] = 307, + [314] = 308, + [315] = 315, + [316] = 307, + [317] = 308, + [318] = 315, + [319] = 286, + [320] = 283, + [321] = 321, + [322] = 322, + [323] = 321, + [324] = 324, + [325] = 325, + [326] = 326, + [327] = 286, + [328] = 328, + [329] = 329, + [330] = 330, + [331] = 331, + [332] = 332, + [333] = 333, + [334] = 333, + [335] = 335, + [336] = 322, + [337] = 337, + [338] = 286, + [339] = 339, + [340] = 337, + [341] = 325, + [342] = 325, + [343] = 322, + [344] = 286, + [345] = 345, + [346] = 346, + [347] = 347, + [348] = 288, + [349] = 349, + [350] = 312, + [351] = 283, + [352] = 352, + [353] = 193, + [354] = 349, + [355] = 312, + [356] = 315, + [357] = 283, + [358] = 165, + [359] = 321, + [360] = 360, + [361] = 339, + [362] = 324, + [363] = 332, + [364] = 312, + [365] = 326, + [366] = 312, + [367] = 324, + [368] = 326, + [369] = 352, + [370] = 370, + [371] = 337, + [372] = 283, + [373] = 331, + [374] = 330, + [375] = 329, + [376] = 328, + [377] = 339, + [378] = 195, + [379] = 286, + [380] = 352, + [381] = 326, + [382] = 324, + [383] = 192, + [384] = 328, + [385] = 333, + [386] = 329, + [387] = 330, + [388] = 331, + [389] = 332, + [390] = 198, + [391] = 194, + [392] = 349, + [393] = 328, + [394] = 332, + [395] = 329, + [396] = 330, + [397] = 331, + [398] = 310, + [399] = 321, + [400] = 283, + [401] = 315, + [402] = 308, + [403] = 403, + [404] = 404, + [405] = 405, + [406] = 406, + [407] = 407, + [408] = 408, + [409] = 409, + [410] = 410, + [411] = 411, + [412] = 412, + [413] = 413, + [414] = 414, + [415] = 415, + [416] = 307, + [417] = 312, + [418] = 310, + [419] = 288, + [420] = 289, + [421] = 312, + [422] = 328, + [423] = 423, + [424] = 315, + [425] = 307, + [426] = 308, + [427] = 315, + [428] = 283, + [429] = 324, + [430] = 326, + [431] = 165, + [432] = 286, + [433] = 423, + [434] = 196, + [435] = 332, + [436] = 423, + [437] = 437, + [438] = 321, + [439] = 315, + [440] = 308, + [441] = 307, + [442] = 310, + [443] = 195, + [444] = 193, + [445] = 349, + [446] = 286, + [447] = 339, + [448] = 324, + [449] = 423, + [450] = 326, + [451] = 423, + [452] = 423, + [453] = 423, + [454] = 352, + [455] = 328, + [456] = 329, + [457] = 330, + [458] = 339, + [459] = 331, + [460] = 337, + [461] = 423, + [462] = 370, + [463] = 463, + [464] = 165, + [465] = 194, + [466] = 332, + [467] = 423, + [468] = 423, + [469] = 352, + [470] = 423, + [471] = 423, + [472] = 423, + [473] = 423, + [474] = 283, + [475] = 423, + [476] = 476, + [477] = 352, + [478] = 423, + [479] = 333, + [480] = 307, + [481] = 165, + [482] = 308, + [483] = 331, + [484] = 330, + [485] = 329, + [486] = 328, + [487] = 198, + [488] = 310, + [489] = 423, + [490] = 321, + [491] = 321, + [492] = 321, + [493] = 165, + [494] = 308, + [495] = 307, + [496] = 315, + [497] = 324, + [498] = 326, + [499] = 328, + [500] = 283, + [501] = 325, + [502] = 423, + [503] = 423, + [504] = 322, + [505] = 423, + [506] = 339, + [507] = 423, + [508] = 463, + [509] = 349, + [510] = 329, + [511] = 345, + [512] = 346, + [513] = 347, + [514] = 330, + [515] = 331, + [516] = 332, + [517] = 326, + [518] = 324, + [519] = 349, + [520] = 310, + [521] = 324, + [522] = 326, + [523] = 315, + [524] = 352, + [525] = 165, + [526] = 221, + [527] = 360, + [528] = 423, + [529] = 423, + [530] = 332, + [531] = 165, + [532] = 310, + [533] = 307, + [534] = 308, + [535] = 423, + [536] = 315, + [537] = 332, + [538] = 423, + [539] = 331, + [540] = 165, + [541] = 330, + [542] = 329, + [543] = 283, + [544] = 321, + [545] = 286, + [546] = 352, + [547] = 165, + [548] = 349, + [549] = 324, + [550] = 326, + [551] = 352, + [552] = 328, + [553] = 329, + [554] = 330, + [555] = 331, + [556] = 332, + [557] = 476, + [558] = 193, + [559] = 423, + [560] = 310, + [561] = 307, + [562] = 308, + [563] = 315, + [564] = 328, + [565] = 329, + [566] = 321, + [567] = 192, + [568] = 415, + [569] = 414, + [570] = 413, + [571] = 412, + [572] = 411, + [573] = 410, + [574] = 409, + [575] = 408, + [576] = 407, + [577] = 406, + [578] = 405, + [579] = 404, + [580] = 403, + [581] = 349, + [582] = 330, + [583] = 195, + [584] = 423, + [585] = 423, + [586] = 321, + [587] = 192, + [588] = 283, + [589] = 308, + [590] = 307, + [591] = 423, + [592] = 349, + [593] = 324, + [594] = 331, + [595] = 222, + [596] = 326, + [597] = 332, + [598] = 331, + [599] = 328, + [600] = 339, + [601] = 335, + [602] = 310, + [603] = 329, + [604] = 330, + [605] = 310, + [606] = 321, + [607] = 352, + [608] = 326, + [609] = 310, + [610] = 328, + [611] = 324, + [612] = 315, + [613] = 324, + [614] = 329, + [615] = 615, + [616] = 308, + [617] = 307, + [618] = 618, + [619] = 248, + [620] = 620, + [621] = 328, + [622] = 622, + [623] = 330, + [624] = 622, + [625] = 352, + [626] = 257, + [627] = 321, + [628] = 283, + [629] = 308, + [630] = 307, + [631] = 326, + [632] = 315, + [633] = 329, + [634] = 330, + [635] = 331, + [636] = 622, + [637] = 165, + [638] = 222, + [639] = 221, + [640] = 331, + [641] = 330, + [642] = 332, + [643] = 329, + [644] = 328, + [645] = 321, + [646] = 331, + [647] = 339, + [648] = 332, + [649] = 349, + [650] = 307, + [651] = 195, + [652] = 310, + [653] = 192, + [654] = 349, + [655] = 308, + [656] = 332, + [657] = 326, + [658] = 222, + [659] = 349, + [660] = 315, + [661] = 324, + [662] = 352, + [663] = 165, + [664] = 437, + [665] = 221, + [666] = 193, + [667] = 667, + [668] = 668, + [669] = 669, + [670] = 670, + [671] = 671, + [672] = 672, + [673] = 673, + [674] = 674, + [675] = 668, + [676] = 670, + [677] = 668, + [678] = 668, + [679] = 668, + [680] = 668, + [681] = 668, + [682] = 668, + [683] = 683, + [684] = 684, + [685] = 685, + [686] = 221, + [687] = 687, + [688] = 688, + [689] = 668, + [690] = 222, + [691] = 668, + [692] = 615, + [693] = 693, + [694] = 283, + [695] = 669, + [696] = 668, + [697] = 669, + [698] = 668, + [699] = 668, + [700] = 668, + [701] = 668, + [702] = 668, + [703] = 668, + [704] = 668, + [705] = 670, + [706] = 684, + [707] = 668, + [708] = 257, + [709] = 709, + [710] = 668, + [711] = 711, + [712] = 684, + [713] = 672, + [714] = 668, + [715] = 687, + [716] = 437, + [717] = 687, + [718] = 718, + [719] = 719, + [720] = 288, + [721] = 668, + [722] = 722, + [723] = 723, + [724] = 683, + [725] = 668, + [726] = 685, + [727] = 672, + [728] = 688, + [729] = 668, + [730] = 668, + [731] = 731, + [732] = 672, + [733] = 672, + [734] = 289, + [735] = 165, + [736] = 668, + [737] = 668, + [738] = 738, + [739] = 739, + [740] = 740, + [741] = 668, + [742] = 693, + [743] = 672, + [744] = 685, + [745] = 668, + [746] = 668, + [747] = 693, + [748] = 668, + [749] = 668, + [750] = 750, + [751] = 750, + [752] = 740, + [753] = 739, + [754] = 738, + [755] = 731, + [756] = 723, + [757] = 722, + [758] = 719, + [759] = 718, + [760] = 711, + [761] = 671, + [762] = 667, + [763] = 673, + [764] = 674, + [765] = 672, + [766] = 668, + [767] = 248, + [768] = 683, + [769] = 283, + [770] = 688, + [771] = 288, + [772] = 671, + [773] = 615, + [774] = 711, + [775] = 673, + [776] = 437, + [777] = 289, + [778] = 723, + [779] = 718, + [780] = 283, + [781] = 437, + [782] = 437, + [783] = 615, + [784] = 719, + [785] = 722, + [786] = 693, + [787] = 685, + [788] = 667, + [789] = 674, + [790] = 731, + [791] = 738, + [792] = 739, + [793] = 286, + [794] = 740, + [795] = 339, + [796] = 333, + [797] = 750, + [798] = 615, + [799] = 322, + [800] = 325, + [801] = 193, + [802] = 283, + [803] = 195, + [804] = 192, + [805] = 437, + [806] = 337, + [807] = 308, + [808] = 731, + [809] = 315, + [810] = 283, + [811] = 321, + [812] = 324, + [813] = 326, + [814] = 349, + [815] = 286, + [816] = 328, + [817] = 329, + [818] = 310, + [819] = 330, + [820] = 331, + [821] = 332, + [822] = 283, + [823] = 352, + [824] = 286, + [825] = 825, + [826] = 307, + [827] = 339, + [828] = 339, + [829] = 688, + [830] = 333, + [831] = 723, + [832] = 722, + [833] = 719, + [834] = 718, + [835] = 283, + [836] = 711, + [837] = 671, + [838] = 667, + [839] = 673, + [840] = 674, + [841] = 165, + [842] = 322, + [843] = 165, + [844] = 337, + [845] = 325, + [846] = 221, + [847] = 750, + [848] = 740, + [849] = 739, + [850] = 222, + [851] = 738, + [852] = 324, + [853] = 165, + [854] = 332, + [855] = 330, + [856] = 339, + [857] = 329, + [858] = 328, + [859] = 193, + [860] = 326, + [861] = 324, + [862] = 321, + [863] = 315, + [864] = 332, + [865] = 331, + [866] = 330, + [867] = 195, + [868] = 329, + [869] = 352, + [870] = 308, + [871] = 331, + [872] = 352, + [873] = 307, + [874] = 310, + [875] = 286, + [876] = 165, + [877] = 310, + [878] = 328, + [879] = 308, + [880] = 349, + [881] = 349, + [882] = 315, + [883] = 192, + [884] = 283, + [885] = 321, + [886] = 307, + [887] = 326, + [888] = 888, + [889] = 888, + [890] = 888, + [891] = 888, + [892] = 888, + [893] = 286, + [894] = 888, + [895] = 888, + [896] = 896, + [897] = 888, + [898] = 307, + [899] = 308, + [900] = 315, + [901] = 324, + [902] = 888, + [903] = 326, + [904] = 896, + [905] = 905, + [906] = 332, + [907] = 888, + [908] = 321, + [909] = 888, + [910] = 888, + [911] = 888, + [912] = 328, + [913] = 888, + [914] = 888, + [915] = 888, + [916] = 888, + [917] = 329, + [918] = 888, + [919] = 888, + [920] = 888, + [921] = 330, + [922] = 888, + [923] = 352, + [924] = 331, + [925] = 905, + [926] = 888, + [927] = 221, + [928] = 622, + [929] = 222, + [930] = 888, + [931] = 888, + [932] = 888, + [933] = 888, + [934] = 905, + [935] = 888, + [936] = 349, + [937] = 896, + [938] = 310, + [939] = 888, + [940] = 888, + [941] = 324, + [942] = 942, + [943] = 943, + [944] = 944, + [945] = 945, + [946] = 326, + [947] = 286, + [948] = 286, + [949] = 684, + [950] = 339, + [951] = 951, + [952] = 952, + [953] = 315, + [954] = 687, + [955] = 955, + [956] = 693, + [957] = 957, + [958] = 958, + [959] = 959, + [960] = 960, + [961] = 685, + [962] = 962, + [963] = 308, + [964] = 964, + [965] = 328, + [966] = 329, + [967] = 967, + [968] = 307, + [969] = 943, + [970] = 944, + [971] = 945, + [972] = 321, + [973] = 951, + [974] = 974, + [975] = 330, + [976] = 976, + [977] = 952, + [978] = 955, + [979] = 957, + [980] = 958, + [981] = 331, + [982] = 962, + [983] = 967, + [984] = 974, + [985] = 165, + [986] = 986, + [987] = 670, + [988] = 683, + [989] = 669, + [990] = 990, + [991] = 960, + [992] = 352, + [993] = 990, + [994] = 310, + [995] = 349, + [996] = 942, + [997] = 976, + [998] = 986, + [999] = 959, + [1000] = 964, + [1001] = 283, + [1002] = 332, + [1003] = 1003, + [1004] = 308, + [1005] = 286, + [1006] = 1006, + [1007] = 322, + [1008] = 1008, + [1009] = 283, + [1010] = 1003, + [1011] = 307, + [1012] = 1012, + [1013] = 1008, + [1014] = 349, + [1015] = 1015, + [1016] = 308, + [1017] = 352, + [1018] = 1018, + [1019] = 1019, + [1020] = 310, + [1021] = 1021, + [1022] = 1022, + [1023] = 1023, + [1024] = 1024, + [1025] = 1025, + [1026] = 1019, + [1027] = 1027, + [1028] = 315, + [1029] = 321, + [1030] = 324, + [1031] = 1015, + [1032] = 326, + [1033] = 328, + [1034] = 329, + [1035] = 1027, + [1036] = 330, + [1037] = 1025, + [1038] = 331, + [1039] = 332, + [1040] = 352, + [1041] = 1024, + [1042] = 283, + [1043] = 1023, + [1044] = 1027, + [1045] = 1025, + [1046] = 1024, + [1047] = 1023, + [1048] = 1022, + [1049] = 1021, + [1050] = 1022, + [1051] = 1022, + [1052] = 283, + [1053] = 310, + [1054] = 1003, + [1055] = 1012, + [1056] = 1008, + [1057] = 1006, + [1058] = 1015, + [1059] = 1021, + [1060] = 1018, + [1061] = 349, + [1062] = 1019, + [1063] = 1021, + [1064] = 1018, + [1065] = 283, + [1066] = 1019, + [1067] = 1023, + [1068] = 1024, + [1069] = 1025, + [1070] = 1027, + [1071] = 1015, + [1072] = 1006, + [1073] = 1012, + [1074] = 1018, + [1075] = 331, + [1076] = 315, + [1077] = 330, + [1078] = 329, + [1079] = 328, + [1080] = 324, + [1081] = 326, + [1082] = 322, + [1083] = 322, + [1084] = 1008, + [1085] = 321, + [1086] = 1006, + [1087] = 1003, + [1088] = 1012, + [1089] = 332, + [1090] = 322, + [1091] = 307, + [1092] = 322, + [1093] = 1093, + [1094] = 1094, + [1095] = 1021, + [1096] = 1096, + [1097] = 1097, + [1098] = 1098, + [1099] = 1093, + [1100] = 1100, + [1101] = 669, + [1102] = 1027, + [1103] = 331, + [1104] = 330, + [1105] = 325, + [1106] = 329, + [1107] = 1107, + [1108] = 328, + [1109] = 339, + [1110] = 1096, + [1111] = 325, + [1112] = 1112, + [1113] = 1107, + [1114] = 1107, + [1115] = 283, + [1116] = 1098, + [1117] = 1097, + [1118] = 337, + [1119] = 1094, + [1120] = 321, + [1121] = 332, + [1122] = 326, + [1123] = 1123, + [1124] = 324, + [1125] = 315, + [1126] = 165, + [1127] = 308, + [1128] = 337, + [1129] = 283, + [1130] = 1025, + [1131] = 1131, + [1132] = 307, + [1133] = 1123, + [1134] = 337, + [1135] = 1112, + [1136] = 1131, + [1137] = 1123, + [1138] = 325, + [1139] = 283, + [1140] = 1112, + [1141] = 1112, + [1142] = 1131, + [1143] = 1131, + [1144] = 1024, + [1145] = 1023, + [1146] = 1006, + [1147] = 1003, + [1148] = 1093, + [1149] = 349, + [1150] = 283, + [1151] = 1012, + [1152] = 337, + [1153] = 1008, + [1154] = 1097, + [1155] = 1015, + [1156] = 325, + [1157] = 1123, + [1158] = 337, + [1159] = 322, + [1160] = 283, + [1161] = 1019, + [1162] = 1162, + [1163] = 1093, + [1164] = 1098, + [1165] = 1018, + [1166] = 1107, + [1167] = 286, + [1168] = 1094, + [1169] = 286, + [1170] = 1170, + [1171] = 283, + [1172] = 310, + [1173] = 325, + [1174] = 1112, + [1175] = 1096, + [1176] = 1096, + [1177] = 352, + [1178] = 1098, + [1179] = 1097, + [1180] = 1022, + [1181] = 1094, + [1182] = 1182, + [1183] = 352, + [1184] = 1184, + [1185] = 337, + [1186] = 325, + [1187] = 1187, + [1188] = 1188, + [1189] = 1184, + [1190] = 1190, + [1191] = 1191, + [1192] = 1192, + [1193] = 1192, + [1194] = 1107, + [1195] = 1184, + [1196] = 1196, + [1197] = 670, + [1198] = 331, + [1199] = 330, + [1200] = 1200, + [1201] = 1201, + [1202] = 329, + [1203] = 1203, + [1204] = 1204, + [1205] = 683, + [1206] = 1206, + [1207] = 1188, + [1208] = 328, + [1209] = 321, + [1210] = 1210, + [1211] = 1211, + [1212] = 332, + [1213] = 1213, + [1214] = 1214, + [1215] = 1188, + [1216] = 1096, + [1217] = 1217, + [1218] = 1184, + [1219] = 1188, + [1220] = 1220, + [1221] = 326, + [1222] = 1222, + [1223] = 1200, + [1224] = 1224, + [1225] = 1225, + [1226] = 1226, + [1227] = 352, + [1228] = 1228, + [1229] = 1229, + [1230] = 1230, + [1231] = 1231, + [1232] = 1232, + [1233] = 1233, + [1234] = 324, + [1235] = 1200, + [1236] = 1236, + [1237] = 315, + [1238] = 1238, + [1239] = 1239, + [1240] = 1240, + [1241] = 1241, + [1242] = 308, + [1243] = 307, + [1244] = 1244, + [1245] = 326, + [1246] = 1200, + [1247] = 1192, + [1248] = 324, + [1249] = 1239, + [1250] = 310, + [1251] = 283, + [1252] = 1252, + [1253] = 1253, + [1254] = 1254, + [1255] = 1255, + [1256] = 1123, + [1257] = 307, + [1258] = 1258, + [1259] = 1259, + [1260] = 1260, + [1261] = 1261, + [1262] = 1262, + [1263] = 1263, + [1264] = 1094, + [1265] = 1097, + [1266] = 1239, + [1267] = 1192, + [1268] = 1268, + [1269] = 1098, + [1270] = 1131, + [1271] = 1192, + [1272] = 308, + [1273] = 1273, + [1274] = 1274, + [1275] = 1275, + [1276] = 310, + [1277] = 1277, + [1278] = 1278, + [1279] = 1279, + [1280] = 1280, + [1281] = 321, + [1282] = 1282, + [1283] = 1283, + [1284] = 315, + [1285] = 1093, + [1286] = 1192, + [1287] = 349, + [1288] = 332, + [1289] = 1200, + [1290] = 1192, + [1291] = 1291, + [1292] = 331, + [1293] = 349, + [1294] = 330, + [1295] = 329, + [1296] = 328, + [1297] = 1239, + [1298] = 1298, + [1299] = 1299, + [1300] = 1300, + [1301] = 1301, + [1302] = 1301, + [1303] = 1184, + [1304] = 1304, + [1305] = 669, + [1306] = 1299, + [1307] = 1188, + [1308] = 1300, + [1309] = 1239, + [1310] = 1304, + [1311] = 1304, + [1312] = 1300, + [1313] = 1299, + [1314] = 1301, + [1315] = 1304, + [1316] = 1301, + [1317] = 1170, + [1318] = 1318, + [1319] = 1319, + [1320] = 1206, + [1321] = 1203, + [1322] = 1201, + [1323] = 1323, + [1324] = 1187, + [1325] = 1214, + [1326] = 1304, + [1327] = 670, + [1328] = 1211, + [1329] = 322, + [1330] = 1263, + [1331] = 1282, + [1332] = 1204, + [1333] = 1213, + [1334] = 1277, + [1335] = 1217, + [1336] = 683, + [1337] = 1220, + [1338] = 1338, + [1339] = 1298, + [1340] = 1283, + [1341] = 669, + [1342] = 1190, + [1343] = 1343, + [1344] = 1224, + [1345] = 670, + [1346] = 1280, + [1347] = 1279, + [1348] = 1291, + [1349] = 1226, + [1350] = 1350, + [1351] = 1278, + [1352] = 1275, + [1353] = 1274, + [1354] = 1350, + [1355] = 1301, + [1356] = 283, + [1357] = 1228, + [1358] = 1229, + [1359] = 683, + [1360] = 1318, + [1361] = 165, + [1362] = 1230, + [1363] = 1231, + [1364] = 1232, + [1365] = 1319, + [1366] = 1252, + [1367] = 1273, + [1368] = 1233, + [1369] = 1236, + [1370] = 1238, + [1371] = 1253, + [1372] = 1338, + [1373] = 1323, + [1374] = 1240, + [1375] = 1350, + [1376] = 1258, + [1377] = 1182, + [1378] = 1260, + [1379] = 1323, + [1380] = 1261, + [1381] = 1318, + [1382] = 1319, + [1383] = 1241, + [1384] = 1268, + [1385] = 1262, + [1386] = 1244, + [1387] = 1225, + [1388] = 1222, + [1389] = 1196, + [1390] = 1210, + [1391] = 1259, + [1392] = 1255, + [1393] = 1338, + [1394] = 1254, + [1395] = 1395, + [1396] = 1396, + [1397] = 1123, + [1398] = 325, + [1399] = 337, + [1400] = 286, + [1401] = 283, + [1402] = 192, + [1403] = 1093, + [1404] = 1131, + [1405] = 322, + [1406] = 1406, + [1407] = 1094, + [1408] = 1097, + [1409] = 1098, + [1410] = 283, + [1411] = 1411, + [1412] = 330, + [1413] = 326, + [1414] = 286, + [1415] = 1239, + [1416] = 332, + [1417] = 325, + [1418] = 349, + [1419] = 283, + [1420] = 1188, + [1421] = 321, + [1422] = 315, + [1423] = 308, + [1424] = 328, + [1425] = 329, + [1426] = 324, + [1427] = 331, + [1428] = 1093, + [1429] = 1098, + [1430] = 307, + [1431] = 1431, + [1432] = 1131, + [1433] = 1123, + [1434] = 1097, + [1435] = 1094, + [1436] = 352, + [1437] = 337, + [1438] = 310, + [1439] = 1184, + [1440] = 1188, + [1441] = 321, + [1442] = 1442, + [1443] = 1442, + [1444] = 1442, + [1445] = 1442, + [1446] = 1301, + [1447] = 1442, + [1448] = 1184, + [1449] = 1304, + [1450] = 352, + [1451] = 310, + [1452] = 349, + [1453] = 1442, + [1454] = 307, + [1455] = 331, + [1456] = 1442, + [1457] = 330, + [1458] = 1239, + [1459] = 315, + [1460] = 329, + [1461] = 328, + [1462] = 326, + [1463] = 332, + [1464] = 308, + [1465] = 324, + [1466] = 1466, + [1467] = 1467, + [1468] = 325, + [1469] = 1469, + [1470] = 1469, + [1471] = 1467, + [1472] = 165, + [1473] = 1473, + [1474] = 1474, + [1475] = 1475, + [1476] = 1466, + [1477] = 1466, + [1478] = 1467, + [1479] = 1469, + [1480] = 1480, + [1481] = 1467, + [1482] = 1467, + [1483] = 1467, + [1484] = 1473, + [1485] = 1466, + [1486] = 337, + [1487] = 1469, + [1488] = 1466, + [1489] = 1474, + [1490] = 1469, + [1491] = 1475, + [1492] = 1467, + [1493] = 1480, + [1494] = 1467, + [1495] = 1466, + [1496] = 1469, + [1497] = 1467, + [1498] = 1469, + [1499] = 1467, + [1500] = 1466, + [1501] = 1467, + [1502] = 1467, + [1503] = 669, + [1504] = 1466, + [1505] = 1467, + [1506] = 1467, + [1507] = 1469, + [1508] = 1466, + [1509] = 1467, + [1510] = 1469, + [1511] = 1511, + [1512] = 1301, + [1513] = 1467, + [1514] = 1170, + [1515] = 1467, + [1516] = 1467, + [1517] = 1467, + [1518] = 1467, + [1519] = 1467, + [1520] = 1467, + [1521] = 1466, + [1522] = 1467, + [1523] = 1467, + [1524] = 1466, + [1525] = 1467, + [1526] = 1467, + [1527] = 1466, + [1528] = 1467, + [1529] = 1466, + [1530] = 1466, + [1531] = 1469, + [1532] = 1473, + [1533] = 1474, + [1534] = 1467, + [1535] = 1466, + [1536] = 1536, + [1537] = 1466, + [1538] = 1466, + [1539] = 1467, + [1540] = 1466, + [1541] = 1469, + [1542] = 1467, + [1543] = 1467, + [1544] = 1304, + [1545] = 1466, + [1546] = 1467, + [1547] = 1467, + [1548] = 1467, + [1549] = 1467, + [1550] = 1467, + [1551] = 1469, + [1552] = 1467, + [1553] = 1467, + [1554] = 1466, + [1555] = 1467, + [1556] = 1466, + [1557] = 1466, + [1558] = 1475, + [1559] = 1559, + [1560] = 1466, + [1561] = 1467, + [1562] = 1467, + [1563] = 1467, + [1564] = 1466, + [1565] = 1467, + [1566] = 1469, + [1567] = 1480, + [1568] = 1466, + [1569] = 283, + [1570] = 1467, + [1571] = 286, + [1572] = 1466, + [1573] = 1467, + [1574] = 1466, + [1575] = 1469, + [1576] = 1466, + [1577] = 1577, + [1578] = 1261, + [1579] = 1230, + [1580] = 286, + [1581] = 1581, + [1582] = 349, + [1583] = 307, + [1584] = 1584, + [1585] = 308, + [1586] = 1584, + [1587] = 283, + [1588] = 1588, + [1589] = 315, + [1590] = 1584, + [1591] = 310, + [1592] = 321, + [1593] = 1584, + [1594] = 1584, + [1595] = 1581, + [1596] = 352, + [1597] = 324, + [1598] = 1581, + [1599] = 1588, + [1600] = 1581, + [1601] = 326, + [1602] = 1584, + [1603] = 1581, + [1604] = 1588, + [1605] = 670, + [1606] = 1283, + [1607] = 1298, + [1608] = 1263, + [1609] = 1184, + [1610] = 1187, + [1611] = 1196, + [1612] = 1211, + [1613] = 1259, + [1614] = 1584, + [1615] = 1581, + [1616] = 1210, + [1617] = 1222, + [1618] = 1225, + [1619] = 1268, + [1620] = 1260, + [1621] = 1182, + [1622] = 1258, + [1623] = 1253, + [1624] = 1252, + [1625] = 1190, + [1626] = 1282, + [1627] = 1201, + [1628] = 1203, + [1629] = 1206, + [1630] = 1213, + [1631] = 1214, + [1632] = 1217, + [1633] = 1220, + [1634] = 1224, + [1635] = 1226, + [1636] = 1228, + [1637] = 1229, + [1638] = 1581, + [1639] = 683, + [1640] = 1231, + [1641] = 1584, + [1642] = 328, + [1643] = 1581, + [1644] = 1584, + [1645] = 1232, + [1646] = 329, + [1647] = 1233, + [1648] = 1236, + [1649] = 1238, + [1650] = 1584, + [1651] = 1240, + [1652] = 1241, + [1653] = 1244, + [1654] = 1254, + [1655] = 1204, + [1656] = 1262, + [1657] = 1273, + [1658] = 1274, + [1659] = 330, + [1660] = 1275, + [1661] = 1277, + [1662] = 1278, + [1663] = 1291, + [1664] = 1581, + [1665] = 1279, + [1666] = 1280, + [1667] = 1255, + [1668] = 1581, + [1669] = 339, + [1670] = 1584, + [1671] = 331, + [1672] = 332, + [1673] = 1584, + [1674] = 1581, + [1675] = 1584, + [1676] = 1581, + [1677] = 1581, + [1678] = 1584, + [1679] = 1584, + [1680] = 1581, + [1681] = 1581, + [1682] = 308, + [1683] = 307, + [1684] = 332, + [1685] = 326, + [1686] = 321, + [1687] = 328, + [1688] = 324, + [1689] = 329, + [1690] = 315, + [1691] = 330, + [1692] = 331, + [1693] = 352, + [1694] = 349, + [1695] = 1695, + [1696] = 1695, + [1697] = 1697, + [1698] = 1698, + [1699] = 1699, + [1700] = 1695, + [1701] = 310, + [1702] = 1702, + [1703] = 1702, + [1704] = 1702, + [1705] = 1705, + [1706] = 1705, + [1707] = 1705, + [1708] = 1705, + [1709] = 1702, + [1710] = 1705, + [1711] = 1705, + [1712] = 1705, + [1713] = 1702, + [1714] = 1705, + [1715] = 1702, + [1716] = 1705, + [1717] = 1705, + [1718] = 1705, + [1719] = 1702, + [1720] = 1702, + [1721] = 1702, + [1722] = 1702, + [1723] = 1702, + [1724] = 1705, + [1725] = 1702, + [1726] = 670, + [1727] = 1702, + [1728] = 1705, + [1729] = 1705, + [1730] = 683, + [1731] = 1705, + [1732] = 1702, + [1733] = 1705, + [1734] = 1702, + [1735] = 1702, + [1736] = 1705, + [1737] = 1702, + [1738] = 1702, + [1739] = 1702, + [1740] = 1705, + [1741] = 1702, + [1742] = 1702, + [1743] = 1702, + [1744] = 165, + [1745] = 1705, + [1746] = 1705, + [1747] = 1705, + [1748] = 1702, + [1749] = 1705, + [1750] = 1702, + [1751] = 1702, + [1752] = 1705, + [1753] = 1705, + [1754] = 1705, + [1755] = 1705, + [1756] = 1705, + [1757] = 1702, + [1758] = 1702, + [1759] = 1705, + [1760] = 1705, + [1761] = 1702, + [1762] = 1702, + [1763] = 1705, + [1764] = 1702, + [1765] = 1702, + [1766] = 1705, + [1767] = 1702, + [1768] = 1705, + [1769] = 1769, + [1770] = 1769, + [1771] = 1769, + [1772] = 1769, + [1773] = 1769, + [1774] = 1769, + [1775] = 1769, + [1776] = 1769, + [1777] = 1769, + [1778] = 1769, + [1779] = 1769, + [1780] = 1769, + [1781] = 283, + [1782] = 1769, + [1783] = 1769, + [1784] = 1769, + [1785] = 1769, + [1786] = 1769, + [1787] = 1787, + [1788] = 1788, + [1789] = 1769, + [1790] = 1769, + [1791] = 1791, + [1792] = 1769, + [1793] = 1769, + [1794] = 1769, + [1795] = 1769, + [1796] = 1769, + [1797] = 1769, + [1798] = 1769, + [1799] = 1769, + [1800] = 1769, + [1801] = 1769, + [1802] = 1769, + [1803] = 1769, + [1804] = 1769, + [1805] = 1769, + [1806] = 1806, + [1807] = 1807, + [1808] = 1808, + [1809] = 1807, + [1810] = 1807, + [1811] = 1806, + [1812] = 1812, + [1813] = 1813, + [1814] = 1814, + [1815] = 1806, + [1816] = 1816, + [1817] = 1813, + [1818] = 1818, + [1819] = 1819, + [1820] = 1807, + [1821] = 1806, + [1822] = 1806, + [1823] = 1813, + [1824] = 1807, + [1825] = 1813, + [1826] = 1808, + [1827] = 1806, + [1828] = 1807, + [1829] = 1807, + [1830] = 1806, + [1831] = 1808, + [1832] = 1813, + [1833] = 1813, + [1834] = 1807, + [1835] = 1806, + [1836] = 1806, + [1837] = 1807, + [1838] = 1813, + [1839] = 1806, + [1840] = 1807, + [1841] = 1806, + [1842] = 1807, + [1843] = 1813, + [1844] = 1806, + [1845] = 1813, + [1846] = 1813, + [1847] = 1808, + [1848] = 1813, + [1849] = 1813, + [1850] = 1813, + [1851] = 1806, + [1852] = 1807, + [1853] = 1807, + [1854] = 1806, + [1855] = 1813, + [1856] = 437, + [1857] = 1806, + [1858] = 1813, + [1859] = 1807, + [1860] = 1806, + [1861] = 1806, + [1862] = 1813, + [1863] = 1863, + [1864] = 1813, + [1865] = 1865, + [1866] = 1807, + [1867] = 1806, + [1868] = 1806, + [1869] = 1807, + [1870] = 1870, + [1871] = 1813, + [1872] = 1808, + [1873] = 1807, + [1874] = 1813, + [1875] = 1806, + [1876] = 1876, + [1877] = 1808, + [1878] = 1813, + [1879] = 1807, + [1880] = 1806, + [1881] = 1813, + [1882] = 1807, + [1883] = 1806, + [1884] = 1813, + [1885] = 1813, + [1886] = 1807, + [1887] = 1808, + [1888] = 1888, + [1889] = 1813, + [1890] = 1806, + [1891] = 1891, + [1892] = 1807, + [1893] = 1806, + [1894] = 1807, + [1895] = 1807, + [1896] = 1813, + [1897] = 1813, + [1898] = 1806, + [1899] = 1899, + [1900] = 1806, + [1901] = 1807, + [1902] = 1807, + [1903] = 1806, + [1904] = 1807, + [1905] = 1807, + [1906] = 1806, + [1907] = 1813, + [1908] = 1813, + [1909] = 1813, + [1910] = 1813, + [1911] = 1806, + [1912] = 1807, + [1913] = 1806, + [1914] = 1806, + [1915] = 1813, + [1916] = 1807, + [1917] = 1807, + [1918] = 1807, + [1919] = 1806, + [1920] = 1920, + [1921] = 1813, + [1922] = 1922, + [1923] = 1923, + [1924] = 1924, + [1925] = 1925, + [1926] = 1926, + [1927] = 1927, + [1928] = 1928, + [1929] = 1929, + [1930] = 1930, + [1931] = 1931, + [1932] = 1932, + [1933] = 1933, + [1934] = 1934, + [1935] = 1935, + [1936] = 1935, + [1937] = 1935, + [1938] = 1935, + [1939] = 1935, + [1940] = 1935, + [1941] = 1935, + [1942] = 1942, + [1943] = 1935, + [1944] = 1944, + [1945] = 1945, + [1946] = 1935, + [1947] = 1935, + [1948] = 1935, + [1949] = 1935, + [1950] = 1935, + [1951] = 1935, + [1952] = 1935, + [1953] = 1953, + [1954] = 1954, + [1955] = 1955, + [1956] = 1954, + [1957] = 1954, + [1958] = 331, + [1959] = 1959, + [1960] = 1960, + [1961] = 310, + [1962] = 283, + [1963] = 1963, + [1964] = 307, + [1965] = 349, + [1966] = 308, + [1967] = 321, + [1968] = 286, + [1969] = 328, + [1970] = 329, + [1971] = 1971, + [1972] = 1972, + [1973] = 330, + [1974] = 332, + [1975] = 324, + [1976] = 307, + [1977] = 349, + [1978] = 330, + [1979] = 328, + [1980] = 1980, + [1981] = 308, + [1982] = 352, + [1983] = 1983, + [1984] = 315, + [1985] = 329, + [1986] = 331, + [1987] = 310, + [1988] = 326, + [1989] = 321, + [1990] = 1990, + [1991] = 1991, + [1992] = 1992, + [1993] = 1990, + [1994] = 329, + [1995] = 1995, + [1996] = 1990, + [1997] = 1997, + [1998] = 1998, + [1999] = 1999, + [2000] = 328, + [2001] = 308, + [2002] = 332, + [2003] = 1991, + [2004] = 2004, + [2005] = 307, + [2006] = 330, + [2007] = 324, + [2008] = 2008, + [2009] = 1999, + [2010] = 315, + [2011] = 321, + [2012] = 1999, + [2013] = 1997, + [2014] = 1991, + [2015] = 1997, + [2016] = 331, + [2017] = 326, + [2018] = 2018, + [2019] = 2019, + [2020] = 328, + [2021] = 331, + [2022] = 330, + [2023] = 329, + [2024] = 2024, + [2025] = 2025, + [2026] = 2026, + [2027] = 2027, + [2028] = 2028, + [2029] = 2018, + [2030] = 2030, + [2031] = 283, + [2032] = 2032, + [2033] = 2033, + [2034] = 2027, + [2035] = 2024, + [2036] = 2025, + [2037] = 2037, + [2038] = 2026, + [2039] = 2026, + [2040] = 2040, + [2041] = 2040, + [2042] = 2042, + [2043] = 2019, + [2044] = 2033, + [2045] = 2032, + [2046] = 2030, + [2047] = 2025, + [2048] = 2024, + [2049] = 2027, + [2050] = 2019, + [2051] = 321, + [2052] = 308, + [2053] = 307, + [2054] = 332, + [2055] = 2028, + [2056] = 2033, + [2057] = 2042, + [2058] = 2040, + [2059] = 326, + [2060] = 2032, + [2061] = 2030, + [2062] = 2018, + [2063] = 2028, + [2064] = 324, + [2065] = 2065, + [2066] = 286, + [2067] = 315, + [2068] = 2042, + [2069] = 349, + [2070] = 310, + [2071] = 2071, + [2072] = 2072, + [2073] = 2073, + [2074] = 352, + [2075] = 2075, + [2076] = 321, + [2077] = 2077, + [2078] = 2078, + [2079] = 329, + [2080] = 328, + [2081] = 2081, + [2082] = 326, + [2083] = 2083, + [2084] = 332, + [2085] = 2085, + [2086] = 324, + [2087] = 2087, + [2088] = 2088, + [2089] = 331, + [2090] = 2090, + [2091] = 315, + [2092] = 2092, + [2093] = 2093, + [2094] = 2094, + [2095] = 2095, + [2096] = 330, + [2097] = 2097, + [2098] = 2098, + [2099] = 2099, + [2100] = 2100, + [2101] = 2101, + [2102] = 2102, + [2103] = 2103, + [2104] = 2104, + [2105] = 2105, + [2106] = 2106, + [2107] = 2107, + [2108] = 2108, + [2109] = 2109, + [2110] = 2110, + [2111] = 437, + [2112] = 2112, + [2113] = 2113, + [2114] = 2106, + [2115] = 2101, + [2116] = 2101, + [2117] = 2101, + [2118] = 2118, + [2119] = 2105, + [2120] = 2120, + [2121] = 2106, + [2122] = 2101, + [2123] = 2101, + [2124] = 2105, + [2125] = 2101, + [2126] = 2126, + [2127] = 2127, + [2128] = 2128, + [2129] = 2129, + [2130] = 2130, + [2131] = 2131, + [2132] = 2132, + [2133] = 2133, + [2134] = 2134, + [2135] = 2135, + [2136] = 2136, + [2137] = 2137, + [2138] = 2133, + [2139] = 2139, + [2140] = 2140, + [2141] = 2139, + [2142] = 2142, + [2143] = 2133, + [2144] = 2144, + [2145] = 2145, + [2146] = 2133, + [2147] = 2128, + [2148] = 2133, + [2149] = 2133, + [2150] = 2150, + [2151] = 2151, + [2152] = 2152, + [2153] = 2153, + [2154] = 2154, + [2155] = 2155, + [2156] = 2156, + [2157] = 2157, + [2158] = 2158, + [2159] = 2159, + [2160] = 2129, + [2161] = 2151, + [2162] = 2162, + [2163] = 2163, + [2164] = 2164, + [2165] = 2137, + [2166] = 2130, + [2167] = 2136, + [2168] = 2168, + [2169] = 2169, + [2170] = 2170, + [2171] = 2171, + [2172] = 2172, + [2173] = 2135, + [2174] = 2134, + [2175] = 2171, + [2176] = 2132, + [2177] = 2144, + [2178] = 2156, + [2179] = 2155, + [2180] = 2180, + [2181] = 2145, + [2182] = 2182, + [2183] = 2150, + [2184] = 2142, + [2185] = 2131, + [2186] = 2133, + [2187] = 2131, + [2188] = 2140, + [2189] = 2150, + [2190] = 2158, + [2191] = 2131, + [2192] = 2140, + [2193] = 2150, + [2194] = 2153, + [2195] = 2195, + [2196] = 2131, + [2197] = 2140, + [2198] = 2150, + [2199] = 2199, + [2200] = 2150, + [2201] = 2131, + [2202] = 2202, + [2203] = 2140, + [2204] = 2182, + [2205] = 2205, + [2206] = 2150, + [2207] = 2207, + [2208] = 2140, + [2209] = 2150, + [2210] = 2210, + [2211] = 2130, + [2212] = 2182, + [2213] = 2131, + [2214] = 2140, + [2215] = 2150, + [2216] = 2131, + [2217] = 2140, + [2218] = 2135, + [2219] = 2134, + [2220] = 2150, + [2221] = 2210, + [2222] = 2171, + [2223] = 2131, + [2224] = 2131, + [2225] = 2140, + [2226] = 2140, + [2227] = 2150, + [2228] = 2150, + [2229] = 2150, + [2230] = 2129, + [2231] = 2151, + [2232] = 2131, + [2233] = 2140, + [2234] = 2150, + [2235] = 2131, + [2236] = 2140, + [2237] = 2131, + [2238] = 2131, + [2239] = 2136, + [2240] = 2210, + [2241] = 2140, + [2242] = 2150, + [2243] = 2137, + [2244] = 2156, + [2245] = 2155, + [2246] = 2210, + [2247] = 2247, + [2248] = 2131, + [2249] = 2150, + [2250] = 2133, + [2251] = 2133, + [2252] = 2202, + [2253] = 2140, + [2254] = 2153, + [2255] = 2205, + [2256] = 2150, + [2257] = 2207, + [2258] = 2139, + [2259] = 2144, + [2260] = 2145, + [2261] = 2140, + [2262] = 2131, + [2263] = 2131, + [2264] = 2140, + [2265] = 2140, + [2266] = 2150, + [2267] = 2140, + [2268] = 2131, + [2269] = 2158, + [2270] = 2140, + [2271] = 2150, + [2272] = 2128, + [2273] = 2142, + [2274] = 2131, + [2275] = 2131, + [2276] = 2276, + [2277] = 2140, + [2278] = 2150, + [2279] = 2150, + [2280] = 2140, + [2281] = 2195, + [2282] = 2131, + [2283] = 2140, + [2284] = 2150, + [2285] = 2131, + [2286] = 2131, + [2287] = 2195, + [2288] = 2199, + [2289] = 2140, + [2290] = 2210, + [2291] = 2150, + [2292] = 2150, + [2293] = 2131, + [2294] = 2199, + [2295] = 2207, + [2296] = 2296, + [2297] = 2297, + [2298] = 2140, + [2299] = 2150, + [2300] = 2133, + [2301] = 2133, + [2302] = 2140, + [2303] = 2131, + [2304] = 2131, + [2305] = 2140, + [2306] = 2133, + [2307] = 2150, + [2308] = 2132, + [2309] = 2150, + [2310] = 2131, + [2311] = 2133, + [2312] = 2205, + [2313] = 2140, + [2314] = 2210, + [2315] = 2131, + [2316] = 2140, + [2317] = 2150, + [2318] = 2247, + [2319] = 2150, + [2320] = 2140, + [2321] = 2131, + [2322] = 2131, + [2323] = 2140, + [2324] = 2247, + [2325] = 2140, + [2326] = 2150, + [2327] = 2131, + [2328] = 2140, + [2329] = 2150, + [2330] = 2330, + [2331] = 2331, + [2332] = 2150, + [2333] = 2131, + [2334] = 2140, + [2335] = 2150, + [2336] = 2131, + [2337] = 2210, + [2338] = 2202, + [2339] = 2133, +}; + +static TSCharacterRange sym__comment_word_character_set_1[] = { + {0, 0x08}, {0x0b, 0x1f}, {'!', '!'}, {'#', '#'}, {'%', '%'}, {'*', ':'}, {'=', '='}, {'?', '_'}, + {'a', '{'}, {'}', 0x10ffff}, +}; + +static TSCharacterRange sym_word_character_set_1[] = { + {0, 0x08}, {0x0b, 0x1f}, {'!', '!'}, {'%', '%'}, {'*', ':'}, {'=', '='}, {'?', '_'}, {'a', '{'}, + {'}', 0x10ffff}, +}; + +static bool ts_lex(TSLexer *lexer, TSStateId state) { + START_LEXER(); + eof = lexer->eof(lexer); + switch (state) { + case 0: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '%', 374, + '&', 358, + '\'', 219, + '(', 271, + ')', 277, + '*', 369, + '+', 386, + '-', 384, + '/', 372, + '0', 473, + ':', 380, + ';', 530, + '<', 291, + '=', 418, + '>', 294, + '?', 422, + '@', 472, + '\\', 129, + '^', 354, + '_', 476, + '`', 431, + 'd', 526, + 'e', 523, + 'f', 521, + 'i', 525, + '{', 280, + '|', 273, + '}', 282, + '~', 388, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(252); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(499); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 1: + if (lookahead == '\n') SKIP(186); + END_STATE(); + case 2: + if (lookahead == '\n') SKIP(190); + END_STATE(); + case 3: + if (lookahead == '\n') SKIP(192); + END_STATE(); + case 4: + if (lookahead == '\n') SKIP(5); + END_STATE(); + case 5: + ADVANCE_MAP( + '\n', 278, + '!', 286, + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + '<', 290, + '>', 295, + '\\', 137, + '`', 430, + '{', 280, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(5); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(479); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '{' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 6: + if (lookahead == '\n') SKIP(193); + END_STATE(); + case 7: + if (lookahead == '\n') SKIP(194); + END_STATE(); + case 8: + if (lookahead == '\n') SKIP(195); + END_STATE(); + case 9: + if (lookahead == '\n') SKIP(204); + END_STATE(); + case 10: + ADVANCE_MAP( + '\n', 310, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 13, + '_', 477, + '`', 430, + 'e', 439, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(10); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(480); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 11: + if (lookahead == '\n') ADVANCE(446); + END_STATE(); + case 12: + if (lookahead == '\n') ADVANCE(446); + if (lookahead == '\r') ADVANCE(11); + if (lookahead == ' ') ADVANCE(480); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(10); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 13: + if (lookahead == '\n') ADVANCE(446); + if (lookahead == '\r') ADVANCE(11); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(10); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 14: + if (lookahead == '\n') ADVANCE(470); + END_STATE(); + case 15: + if (lookahead == '\n') ADVANCE(470); + if (lookahead == '\r') ADVANCE(14); + END_STATE(); + case 16: + if (lookahead == '\n') ADVANCE(470); + if (lookahead == '\r') ADVANCE(14); + if (lookahead != 0 && + (lookahead < '\t' || '\r' < lookahead)) ADVANCE(528); + END_STATE(); + case 17: + if (lookahead == '\n') ADVANCE(448); + END_STATE(); + case 18: + if (lookahead == '\n') ADVANCE(448); + if (lookahead == '\r') ADVANCE(17); + if (lookahead == ' ') ADVANCE(481); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(94); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 19: + if (lookahead == '\n') ADVANCE(448); + if (lookahead == '\r') ADVANCE(17); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(94); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 20: + if (lookahead == '\n') ADVANCE(451); + END_STATE(); + case 21: + if (lookahead == '\n') ADVANCE(451); + if (lookahead == '\r') ADVANCE(20); + if (lookahead == ' ') ADVANCE(485); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(109); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 22: + if (lookahead == '\n') ADVANCE(451); + if (lookahead == '\r') ADVANCE(20); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(109); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 23: + if (lookahead == '\n') ADVANCE(449); + END_STATE(); + case 24: + if (lookahead == '\n') ADVANCE(449); + if (lookahead == '\r') ADVANCE(23); + if (lookahead == ' ') ADVANCE(484); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(107); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 25: + if (lookahead == '\n') ADVANCE(449); + if (lookahead == '\r') ADVANCE(23); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(107); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 26: + if (lookahead == '\n') ADVANCE(453); + END_STATE(); + case 27: + if (lookahead == '\n') ADVANCE(453); + if (lookahead == '\r') ADVANCE(26); + if (lookahead == ' ') ADVANCE(488); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(113); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 28: + if (lookahead == '\n') ADVANCE(453); + if (lookahead == '\r') ADVANCE(26); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(113); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 29: + if (lookahead == '\n') ADVANCE(455); + END_STATE(); + case 30: + if (lookahead == '\n') ADVANCE(455); + if (lookahead == '\r') ADVANCE(29); + if (lookahead == ' ') ADVANCE(491); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(117); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 31: + if (lookahead == '\n') ADVANCE(455); + if (lookahead == '\r') ADVANCE(29); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(117); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 32: + if (lookahead == '\n') SKIP(105); + END_STATE(); + case 33: + if (lookahead == '\n') SKIP(106); + END_STATE(); + case 34: + if (lookahead == '\n') ADVANCE(457); + END_STATE(); + case 35: + if (lookahead == '\n') ADVANCE(457); + if (lookahead == '\r') ADVANCE(34); + if (lookahead == ' ') ADVANCE(493); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(120); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 36: + if (lookahead == '\n') ADVANCE(457); + if (lookahead == '\r') ADVANCE(34); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(120); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 37: + if (lookahead == '\n') ADVANCE(459); + END_STATE(); + case 38: + if (lookahead == '\n') ADVANCE(459); + if (lookahead == '\r') ADVANCE(37); + if (lookahead == ' ') ADVANCE(495); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(123); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 39: + if (lookahead == '\n') ADVANCE(459); + if (lookahead == '\r') ADVANCE(37); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(123); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 40: + if (lookahead == '\n') ADVANCE(465); + END_STATE(); + case 41: + if (lookahead == '\n') ADVANCE(465); + if (lookahead == '\r') ADVANCE(40); + if (lookahead == ' ') ADVANCE(500); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(188); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 42: + if (lookahead == '\n') ADVANCE(465); + if (lookahead == '\r') ADVANCE(40); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(188); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 43: + if (lookahead == '\n') ADVANCE(466); + END_STATE(); + case 44: + if (lookahead == '\n') ADVANCE(466); + if (lookahead == '\r') ADVANCE(43); + if (lookahead == ' ') ADVANCE(501); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(189); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 45: + if (lookahead == '\n') ADVANCE(466); + if (lookahead == '\r') ADVANCE(43); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(189); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 46: + if (lookahead == '\n') SKIP(110); + END_STATE(); + case 47: + if (lookahead == '\n') SKIP(205); + END_STATE(); + case 48: + ADVANCE_MAP( + '\n', 311, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + ')', 277, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 50, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(48); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 49: + if (lookahead == '\n') ADVANCE(447); + END_STATE(); + case 50: + if (lookahead == '\n') ADVANCE(447); + if (lookahead == '\r') ADVANCE(49); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(48); + END_STATE(); + case 51: + if (lookahead == '\n') SKIP(196); + END_STATE(); + case 52: + if (lookahead == '\n') ADVANCE(450); + END_STATE(); + case 53: + if (lookahead == '\n') ADVANCE(450); + if (lookahead == '\r') ADVANCE(52); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(108); + END_STATE(); + case 54: + if (lookahead == '\n') ADVANCE(452); + END_STATE(); + case 55: + if (lookahead == '\n') ADVANCE(452); + if (lookahead == '\r') ADVANCE(54); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(112); + END_STATE(); + case 56: + if (lookahead == '\n') ADVANCE(454); + END_STATE(); + case 57: + if (lookahead == '\n') ADVANCE(454); + if (lookahead == '\r') ADVANCE(56); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(116); + END_STATE(); + case 58: + if (lookahead == '\n') SKIP(191); + END_STATE(); + case 59: + if (lookahead == '\n') ADVANCE(464); + END_STATE(); + case 60: + if (lookahead == '\n') ADVANCE(464); + if (lookahead == '\r') ADVANCE(59); + if (lookahead == ' ') ADVANCE(502); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(187); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 61: + if (lookahead == '\n') ADVANCE(464); + if (lookahead == '\r') ADVANCE(59); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(187); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 62: + if (lookahead == '\n') ADVANCE(456); + END_STATE(); + case 63: + if (lookahead == '\n') ADVANCE(456); + if (lookahead == '\r') ADVANCE(62); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(119); + END_STATE(); + case 64: + if (lookahead == '\n') ADVANCE(467); + END_STATE(); + case 65: + if (lookahead == '\n') ADVANCE(467); + if (lookahead == '\r') ADVANCE(64); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(199); + END_STATE(); + case 66: + if (lookahead == '\n') SKIP(198); + END_STATE(); + case 67: + if (lookahead == '\n') ADVANCE(312); + if (lookahead == '#') ADVANCE(435); + if (lookahead == '&') ADVANCE(356); + if (lookahead == ';') ADVANCE(530); + if (lookahead == '\\') SKIP(183); + if (lookahead == '`') ADVANCE(226); + if (lookahead == 'i') ADVANCE(234); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(67); + END_STATE(); + case 68: + if (lookahead == '\n') SKIP(115); + END_STATE(); + case 69: + if (lookahead == '\n') ADVANCE(462); + END_STATE(); + case 70: + if (lookahead == '\n') ADVANCE(462); + if (lookahead == '\r') ADVANCE(69); + if (lookahead == ' ') ADVANCE(497); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(126); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 71: + if (lookahead == '\n') ADVANCE(462); + if (lookahead == '\r') ADVANCE(69); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(126); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 72: + if (lookahead == '\n') SKIP(207); + END_STATE(); + case 73: + if (lookahead == '\n') SKIP(118); + END_STATE(); + case 74: + if (lookahead == '\n') ADVANCE(463); + END_STATE(); + case 75: + if (lookahead == '\n') ADVANCE(463); + if (lookahead == '\r') ADVANCE(74); + if (lookahead == ' ') ADVANCE(498); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(127); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 76: + if (lookahead == '\n') ADVANCE(463); + if (lookahead == '\r') ADVANCE(74); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(127); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 77: + if (lookahead == '\n') SKIP(217); + END_STATE(); + case 78: + if (lookahead == '\n') SKIP(212); + END_STATE(); + case 79: + if (lookahead == '\n') ADVANCE(460); + END_STATE(); + case 80: + if (lookahead == '\n') ADVANCE(460); + if (lookahead == '\r') ADVANCE(79); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(124); + END_STATE(); + case 81: + if (lookahead == '\n') SKIP(209); + END_STATE(); + case 82: + if (lookahead == '\n') SKIP(216); + END_STATE(); + case 83: + if (lookahead == '\n') ADVANCE(400); + if (lookahead == '\r') ADVANCE(396); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(400); + if (lookahead != 0) ADVANCE(403); + END_STATE(); + case 84: + if (lookahead == '\n') ADVANCE(468); + END_STATE(); + case 85: + if (lookahead == '\n') ADVANCE(468); + if (lookahead == '\r') ADVANCE(84); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(200); + END_STATE(); + case 86: + if (lookahead == '\n') SKIP(202); + END_STATE(); + case 87: + if (lookahead == '\n') SKIP(210); + END_STATE(); + case 88: + if (lookahead == '\n') ADVANCE(401); + if (lookahead == '\r') ADVANCE(398); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(401); + if (lookahead != 0) ADVANCE(403); + END_STATE(); + case 89: + if (lookahead == '\n') ADVANCE(469); + END_STATE(); + case 90: + if (lookahead == '\n') ADVANCE(469); + if (lookahead == '\r') ADVANCE(89); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(203); + END_STATE(); + case 91: + if (lookahead == '\n') SKIP(67); + END_STATE(); + case 92: + if (lookahead == '\n') SKIP(208); + END_STATE(); + case 93: + if (lookahead == '\n') SKIP(211); + END_STATE(); + case 94: + ADVANCE_MAP( + '\n', 313, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 19, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(94); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(481); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 95: + if (lookahead == '\n') SKIP(114); + END_STATE(); + case 96: + if (lookahead == '\n') SKIP(111); + END_STATE(); + case 97: + if (lookahead == '\n') ADVANCE(461); + END_STATE(); + case 98: + if (lookahead == '\n') ADVANCE(461); + if (lookahead == '\r') ADVANCE(97); + if (lookahead == ' ') ADVANCE(496); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(125); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 99: + if (lookahead == '\n') ADVANCE(461); + if (lookahead == '\r') ADVANCE(97); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(125); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 100: + if (lookahead == '\n') SKIP(206); + END_STATE(); + case 101: + if (lookahead == '\n') ADVANCE(458); + END_STATE(); + case 102: + if (lookahead == '\n') ADVANCE(458); + if (lookahead == '\r') ADVANCE(101); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(122); + END_STATE(); + case 103: + if (lookahead == '\n') SKIP(121); + END_STATE(); + case 104: + if (lookahead == '\n') SKIP(213); + END_STATE(); + case 105: + ADVANCE_MAP( + '\n', 314, + '"', 395, + '#', 435, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + ')', 277, + ';', 530, + '<', 292, + '>', 295, + '\\', 147, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(105); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(482); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 106: + ADVANCE_MAP( + '\n', 315, + '"', 395, + '#', 435, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + ';', 530, + '<', 292, + '>', 295, + '\\', 149, + '`', 430, + 'e', 527, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(106); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(483); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead)) ADVANCE(528); + END_STATE(); + case 107: + ADVANCE_MAP( + '\n', 316, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 25, + '_', 477, + '`', 430, + 'e', 439, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(107); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(484); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 108: + ADVANCE_MAP( + '\n', 317, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 53, + '_', 478, + '`', 430, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(108); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 109: + ADVANCE_MAP( + '\n', 318, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + ')', 277, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 22, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(109); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(485); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 110: + ADVANCE_MAP( + '\n', 319, + '"', 395, + '#', 435, + '$', 393, + '&', 218, + '\'', 219, + '<', 290, + '>', 295, + '\\', 151, + '`', 430, + '|', 274, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(110); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(486); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 111: + ADVANCE_MAP( + '\n', 320, + '"', 395, + '#', 435, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + ';', 530, + '<', 292, + '>', 295, + '\\', 157, + '`', 431, + 'e', 527, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(111); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(487); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead)) ADVANCE(528); + END_STATE(); + case 112: + ADVANCE_MAP( + '\n', 321, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 55, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(112); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 113: + ADVANCE_MAP( + '\n', 322, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + ')', 277, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 28, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(113); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(488); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 114: + ADVANCE_MAP( + '\n', 323, + '"', 395, + '#', 435, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + ')', 277, + ';', 530, + '<', 292, + '>', 295, + '\\', 153, + '`', 431, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(114); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(489); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 115: + ADVANCE_MAP( + '\n', 324, + '"', 395, + '#', 435, + '$', 393, + '&', 356, + '\'', 219, + '(', 271, + ';', 530, + '\\', 165, + '`', 430, + 'e', 527, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(115); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(490); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '>' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 116: + ADVANCE_MAP( + '\n', 325, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 57, + '_', 478, + 'e', 444, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(116); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 117: + ADVANCE_MAP( + '\n', 326, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 31, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(117); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(491); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 118: + ADVANCE_MAP( + '\n', 327, + '"', 395, + '#', 435, + '$', 393, + '&', 356, + '\'', 219, + ';', 530, + '\\', 169, + '`', 430, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(118); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(492); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '>' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 119: + ADVANCE_MAP( + '\n', 328, + '!', 285, + '#', 410, + '$', 392, + '&', 218, + '*', 368, + '-', 365, + '0', 475, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 63, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(119); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 120: + ADVANCE_MAP( + '\n', 329, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 36, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(120); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(493); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 121: + ADVANCE_MAP( + '\n', 330, + '"', 395, + '#', 435, + '$', 393, + '&', 356, + '\'', 219, + ';', 530, + '\\', 176, + '`', 431, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(121); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(494); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '>' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 122: + ADVANCE_MAP( + '\n', 331, + '!', 285, + '#', 410, + '$', 392, + '&', 218, + '*', 368, + '-', 365, + '0', 475, + '<', 290, + '>', 295, + '?', 377, + '@', 471, + '\\', 102, + '_', 478, + '|', 237, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(122); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 123: + ADVANCE_MAP( + '\n', 332, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 39, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(123); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(495); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 124: + ADVANCE_MAP( + '\n', 333, + '!', 285, + '#', 410, + '$', 392, + '&', 356, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '?', 377, + '@', 471, + '\\', 80, + '_', 478, + 'i', 443, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(124); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 125: + ADVANCE_MAP( + '\n', 334, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '<', 290, + '>', 295, + '?', 378, + '@', 472, + '\\', 99, + '_', 477, + '`', 430, + '|', 237, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(125); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(496); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 126: + ADVANCE_MAP( + '\n', 335, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 356, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '?', 378, + '@', 472, + '\\', 71, + '_', 477, + '`', 430, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(126); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(497); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<' && + (lookahead < '>' || 'Z' < lookahead) && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 127: + ADVANCE_MAP( + '\n', 336, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 76, + '_', 477, + '`', 430, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(127); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(498); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<' && + (lookahead < '>' || 'Z' < lookahead) && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 128: + if (lookahead == '\r') SKIP(1); + if (lookahead == ' ') ADVANCE(499); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(186); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 129: + if (lookahead == '\r') SKIP(1); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(186); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 130: + if (lookahead == '\r') ADVANCE(404); + if (lookahead != 0) ADVANCE(403); + END_STATE(); + case 131: + if (lookahead == '\r') SKIP(2); + if (lookahead == ' ') ADVANCE(503); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(190); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 132: + if (lookahead == '\r') SKIP(2); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(190); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 133: + if (lookahead == '\r') SKIP(3); + if (lookahead == ' ') ADVANCE(504); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(192); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 134: + if (lookahead == '\r') SKIP(3); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(192); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 135: + if (lookahead == '\r') ADVANCE(399); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(402); + if (lookahead != 0) ADVANCE(403); + END_STATE(); + case 136: + if (lookahead == '\r') SKIP(4); + if (lookahead == ' ') ADVANCE(479); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(5); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 137: + if (lookahead == '\r') SKIP(4); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(5); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 138: + if (lookahead == '\r') SKIP(6); + if (lookahead == ' ') ADVANCE(505); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(193); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 139: + if (lookahead == '\r') SKIP(6); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(193); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 140: + if (lookahead == '\r') SKIP(7); + if (lookahead == ' ') ADVANCE(506); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(194); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 141: + if (lookahead == '\r') SKIP(7); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(194); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 142: + if (lookahead == '\r') SKIP(8); + if (lookahead == ' ') ADVANCE(507); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(195); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 143: + if (lookahead == '\r') SKIP(8); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(195); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 144: + if (lookahead == '\r') SKIP(9); + if (lookahead == ' ') ADVANCE(509); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(204); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 145: + if (lookahead == '\r') SKIP(9); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(204); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 146: + if (lookahead == '\r') SKIP(32); + if (lookahead == ' ') ADVANCE(482); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(105); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 147: + if (lookahead == '\r') SKIP(32); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(105); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 148: + if (lookahead == '\r') SKIP(33); + if (lookahead == ' ') ADVANCE(483); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(106); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 149: + if (lookahead == '\r') SKIP(33); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(106); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 150: + if (lookahead == '\r') SKIP(46); + if (lookahead == ' ') ADVANCE(486); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(110); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 151: + if (lookahead == '\r') SKIP(46); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(110); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 152: + if (lookahead == '\r') SKIP(95); + if (lookahead == ' ') ADVANCE(489); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(114); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 153: + if (lookahead == '\r') SKIP(95); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(114); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 154: + if (lookahead == '\r') SKIP(47); + if (lookahead == ' ') ADVANCE(510); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(205); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 155: + if (lookahead == '\r') SKIP(47); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(205); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 156: + if (lookahead == '\r') SKIP(96); + if (lookahead == ' ') ADVANCE(487); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(111); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 157: + if (lookahead == '\r') SKIP(96); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(111); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 158: + if (lookahead == '\r') SKIP(51); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(196); + END_STATE(); + case 159: + if (lookahead == '\r') SKIP(58); + if (lookahead == ' ') ADVANCE(508); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(191); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 160: + if (lookahead == '\r') SKIP(58); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(191); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 161: + if (lookahead == '\r') SKIP(100); + if (lookahead == ' ') ADVANCE(511); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(206); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 162: + if (lookahead == '\r') SKIP(100); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(206); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 163: + if (lookahead == '\r') SKIP(66); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(198); + END_STATE(); + case 164: + if (lookahead == '\r') SKIP(68); + if (lookahead == ' ') ADVANCE(490); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(115); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 165: + if (lookahead == '\r') SKIP(68); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(115); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 166: + if (lookahead == '\r') SKIP(72); + if (lookahead == ' ') ADVANCE(512); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(207); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 167: + if (lookahead == '\r') SKIP(72); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(207); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 168: + if (lookahead == '\r') SKIP(73); + if (lookahead == ' ') ADVANCE(492); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(118); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 169: + if (lookahead == '\r') SKIP(73); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(118); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 170: + if (lookahead == '\r') SKIP(77); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(217); + END_STATE(); + case 171: + if (lookahead == '\r') SKIP(78); + if (lookahead == ' ') ADVANCE(513); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(212); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 172: + if (lookahead == '\r') SKIP(78); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(212); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 173: + if (lookahead == '\r') SKIP(104); + if (lookahead == ' ') ADVANCE(514); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(213); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 174: + if (lookahead == '\r') SKIP(104); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(213); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 175: + if (lookahead == '\r') SKIP(103); + if (lookahead == ' ') ADVANCE(494); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(121); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 176: + if (lookahead == '\r') SKIP(103); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(121); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 177: + if (lookahead == '\r') SKIP(81); + if (lookahead == ' ') ADVANCE(515); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(209); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 178: + if (lookahead == '\r') SKIP(81); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(209); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 179: + if (lookahead == '\r') SKIP(82); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(216); + END_STATE(); + case 180: + if (lookahead == '\r') SKIP(86); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(202); + END_STATE(); + case 181: + if (lookahead == '\r') SKIP(87); + if (lookahead == ' ') ADVANCE(516); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(210); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 182: + if (lookahead == '\r') SKIP(87); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(210); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 183: + if (lookahead == '\r') SKIP(91); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(67); + END_STATE(); + case 184: + if (lookahead == '\r') SKIP(92); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(208); + END_STATE(); + case 185: + if (lookahead == '\r') SKIP(93); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(211); + END_STATE(); + case 186: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '%', 374, + '&', 358, + '\'', 219, + '(', 271, + ')', 277, + '*', 369, + '+', 386, + '-', 384, + '/', 372, + '0', 473, + ':', 381, + ';', 530, + '<', 291, + '=', 289, + '>', 294, + '?', 378, + '@', 472, + '\\', 129, + '^', 354, + '_', 476, + '`', 431, + 'd', 526, + 'e', 523, + 'f', 521, + 'i', 525, + '{', 280, + '|', 273, + '}', 282, + '~', 388, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(186); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(499); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 187: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 225, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '<', 290, + '>', 295, + '?', 378, + '@', 472, + '\\', 61, + '_', 477, + '`', 430, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(187); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(502); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 188: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 42, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(188); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(500); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 189: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 45, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(189); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(501); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 190: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + ')', 277, + ';', 223, + '<', 290, + '>', 295, + '\\', 132, + '`', 430, + '{', 280, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(190); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(503); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + lookahead != '{' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 191: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + ';', 223, + '<', 290, + '>', 295, + '\\', 160, + '`', 430, + 'e', 527, + '{', 280, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(191); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(508); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != '{' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 192: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + '<', 290, + '>', 295, + '\\', 134, + '`', 430, + 'e', 524, + 'f', 521, + '{', 280, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(192); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(504); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '{' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 193: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + '<', 290, + '>', 295, + '\\', 139, + '`', 430, + 'd', 526, + '{', 280, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(193); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(505); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '{' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 194: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + '<', 290, + '>', 295, + '\\', 141, + '`', 430, + 'f', 521, + '{', 280, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(194); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(506); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '{' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 195: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + '<', 290, + '>', 295, + '\\', 143, + '`', 430, + '{', 280, + '}', 282, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(195); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(507); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + (lookahead < '{' || '}' < lookahead)) ADVANCE(528); + END_STATE(); + case 196: + ADVANCE_MAP( + '!', 224, + '#', 435, + '%', 376, + '&', 357, + ')', 277, + '*', 370, + '+', 364, + '-', 366, + '/', 373, + '<', 293, + '=', 288, + '>', 296, + '?', 377, + ); + if (lookahead == '\\') SKIP(158); + if (lookahead == '^') ADVANCE(355); + if (lookahead == '`') ADVANCE(226); + if (lookahead == '|') ADVANCE(275); + if (lookahead == '}') ADVANCE(281); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(196); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('_' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 197: + ADVANCE_MAP( + '!', 285, + '"', 395, + '#', 410, + '$', 392, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + '\\', 83, + '_', 478, + ); + if (lookahead == '\n' || + lookahead == '\r') SKIP(197); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(400); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + if (lookahead != 0 && + (lookahead < '_' || 'z' < lookahead)) ADVANCE(403); + END_STATE(); + case 198: + ADVANCE_MAP( + '!', 285, + '"', 395, + '#', 435, + '$', 394, + '&', 218, + '(', 271, + ')', 221, + '+', 387, + '-', 385, + '<', 292, + '=', 287, + '>', 295, + ); + if (lookahead == '\\') SKIP(163); + if (lookahead == '`') ADVANCE(430); + if (lookahead == '|') ADVANCE(276); + if (lookahead == '~') ADVANCE(388); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(198); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(409); + if (('A' <= lookahead && lookahead <= 'Z') || + ('_' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 199: + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + '&', 218, + '*', 368, + '-', 365, + '0', 475, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 65, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(199); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 200: + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + ')', 277, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + '\\', 85, + '_', 478, + '|', 272, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(200); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 201: + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + '\\', 88, + '_', 478, + ); + if (lookahead == '\n' || + lookahead == '\r') SKIP(201); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(401); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + if (lookahead != 0 && + (lookahead < ' ' || '$' < lookahead) && + (lookahead < '_' || 'z' < lookahead)) ADVANCE(403); + END_STATE(); + case 202: + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + ); + if (lookahead == '\\') SKIP(180); + if (lookahead == '_') ADVANCE(478); + if (lookahead == '}') ADVANCE(281); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(202); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 203: + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + '\\', 90, + '_', 478, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(203); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 204: + ADVANCE_MAP( + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + '<', 290, + '>', 295, + '\\', 145, + '`', 430, + '{', 280, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(204); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(509); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '{' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 205: + ADVANCE_MAP( + '"', 395, + '#', 435, + '$', 393, + '&', 218, + '\'', 219, + '(', 271, + '<', 292, + '>', 295, + '\\', 155, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(205); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(510); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 206: + ADVANCE_MAP( + '"', 395, + '#', 435, + '$', 393, + '&', 218, + '\'', 219, + '(', 271, + '<', 292, + '>', 295, + '\\', 162, + '`', 431, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(206); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(511); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 207: + ADVANCE_MAP( + '"', 395, + '#', 435, + '$', 393, + '\'', 219, + '(', 271, + '\\', 167, + '`', 430, + 'e', 527, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(207); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(512); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '>' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 208: + if (lookahead == '"') ADVANCE(395); + if (lookahead == '#') ADVANCE(435); + if (lookahead == '$') ADVANCE(220); + if (lookahead == ')') ADVANCE(277); + if (lookahead == '\\') SKIP(184); + if (lookahead == '`') ADVANCE(430); + if (lookahead == '|') ADVANCE(272); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(208); + END_STATE(); + case 209: + if (lookahead == '"') ADVANCE(395); + if (lookahead == '#') ADVANCE(435); + if (lookahead == '$') ADVANCE(394); + if (lookahead == '\'') ADVANCE(219); + if (lookahead == '\\') ADVANCE(178); + if (lookahead == '`') ADVANCE(430); + if (lookahead == '}') ADVANCE(282); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(209); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(515); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '>' && + lookahead != '|' && + lookahead != '}') ADVANCE(528); + END_STATE(); + case 210: + if (lookahead == '"') ADVANCE(395); + if (lookahead == '#') ADVANCE(435); + if (lookahead == '$') ADVANCE(394); + if (lookahead == '\'') ADVANCE(219); + if (lookahead == '\\') ADVANCE(182); + if (lookahead == '`') ADVANCE(430); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(210); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(516); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '>' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 211: + if (lookahead == '"') ADVANCE(395); + if (lookahead == '#') ADVANCE(435); + if (lookahead == '\'') ADVANCE(219); + if (lookahead == ')') ADVANCE(277); + if (lookahead == '\\') SKIP(185); + if (lookahead == '}') ADVANCE(281); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(427); + END_STATE(); + case 212: + if (lookahead == '"') ADVANCE(395); + if (lookahead == '#') ADVANCE(436); + if (lookahead == '$') ADVANCE(393); + if (lookahead == '\'') ADVANCE(219); + if (lookahead == '\\') ADVANCE(172); + if (lookahead == '`') ADVANCE(431); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(212); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(513); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '>' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 213: + if (lookahead == '"') ADVANCE(395); + if (lookahead == '#') ADVANCE(436); + if (lookahead == '$') ADVANCE(393); + if (lookahead == '\'') ADVANCE(219); + if (lookahead == '\\') ADVANCE(174); + if (lookahead == '`') ADVANCE(430); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(213); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(514); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '>' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 214: + if (lookahead == '"') ADVANCE(395); + if (lookahead == '#') ADVANCE(405); + if (lookahead == '$') ADVANCE(393); + if (lookahead == '\\') ADVANCE(135); + if (lookahead == '`') ADVANCE(430); + if (lookahead == '\n' || + lookahead == '\r') SKIP(214); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(402); + if (lookahead != 0) ADVANCE(403); + END_STATE(); + case 215: + if (lookahead == '#') ADVANCE(410); + if (lookahead == '%') ADVANCE(375); + if (lookahead == '+') ADVANCE(424); + if (lookahead == '-') ADVANCE(414); + if (lookahead == ':') ADVANCE(222); + if (lookahead == '=') ADVANCE(417); + if (lookahead == '?') ADVANCE(421); + if (lookahead == '\\') SKIP(179); + if (lookahead == '}') ADVANCE(281); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(216); + END_STATE(); + case 216: + if (lookahead == '#') ADVANCE(410); + if (lookahead == '%') ADVANCE(375); + if (lookahead == '\\') SKIP(179); + if (lookahead == '}') ADVANCE(281); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(216); + END_STATE(); + case 217: + if (lookahead == '#') ADVANCE(435); + if (lookahead == '&') ADVANCE(218); + if (lookahead == ')') ADVANCE(277); + if (lookahead == '<') ADVANCE(292); + if (lookahead == '>') ADVANCE(295); + if (lookahead == '\\') SKIP(170); + if (lookahead == '`') ADVANCE(226); + if (lookahead == '|') ADVANCE(276); + if (lookahead == '}') ADVANCE(281); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(217); + END_STATE(); + case 218: + if (lookahead == '&') ADVANCE(283); + if (lookahead == '>') ADVANCE(299); + END_STATE(); + case 219: + if (lookahead == '\'') ADVANCE(406); + if (lookahead != 0) ADVANCE(219); + END_STATE(); + case 220: + if (lookahead == '(') ADVANCE(428); + if (lookahead == '{') ADVANCE(412); + END_STATE(); + case 221: + if (lookahead == ')') ADVANCE(339); + END_STATE(); + case 222: + if (lookahead == '+') ADVANCE(423); + if (lookahead == '-') ADVANCE(413); + if (lookahead == '=') ADVANCE(415); + if (lookahead == '?') ADVANCE(419); + END_STATE(); + case 223: + if (lookahead == ';') ADVANCE(279); + END_STATE(); + case 224: + if (lookahead == '=') ADVANCE(361); + END_STATE(); + case 225: + if (lookahead == '>') ADVANCE(299); + END_STATE(); + case 226: + if (lookahead == '`') ADVANCE(391); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(226); + END_STATE(); + case 227: + if (lookahead == 'a') ADVANCE(228); + END_STATE(); + case 228: + if (lookahead == 'c') ADVANCE(267); + END_STATE(); + case 229: + if (lookahead == 'e') ADVANCE(265); + END_STATE(); + case 230: + if (lookahead == 'f') ADVANCE(263); + END_STATE(); + case 231: + if (lookahead == 'i') ADVANCE(261); + END_STATE(); + case 232: + if (lookahead == 'i') ADVANCE(230); + if (lookahead == 's') ADVANCE(229); + END_STATE(); + case 233: + if (lookahead == 'l') ADVANCE(232); + if (lookahead == 's') ADVANCE(227); + END_STATE(); + case 234: + if (lookahead == 'n') ADVANCE(256); + END_STATE(); + case 235: + if (lookahead == 'o') ADVANCE(259); + END_STATE(); + case 236: + if (lookahead == 's') ADVANCE(227); + END_STATE(); + case 237: + if (lookahead == '|') ADVANCE(284); + END_STATE(); + case 238: + if (lookahead != 0 && + (lookahead < '\t' || '\r' < lookahead)) ADVANCE(528); + END_STATE(); + case 239: + if (eof) ADVANCE(255); + if (lookahead == '\n') SKIP(254); + END_STATE(); + case 240: + if (eof) ADVANCE(255); + if (lookahead == '\n') SKIP(241); + END_STATE(); + case 241: + if (eof) ADVANCE(255); + if (lookahead == '\n') ADVANCE(312); + if (lookahead == '#') ADVANCE(435); + if (lookahead == '&') ADVANCE(359); + if (lookahead == ')') ADVANCE(277); + if (lookahead == ';') ADVANCE(530); + if (lookahead == '<') ADVANCE(292); + if (lookahead == '>') ADVANCE(295); + if (lookahead == '\\') SKIP(250); + if (lookahead == '`') ADVANCE(431); + if (lookahead == 'e') ADVANCE(236); + if (lookahead == '|') ADVANCE(276); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(241); + END_STATE(); + case 242: + if (eof) ADVANCE(255); + if (lookahead == '\n') ADVANCE(312); + if (lookahead == '#') ADVANCE(435); + if (lookahead == '&') ADVANCE(359); + if (lookahead == ')') ADVANCE(277); + if (lookahead == ';') ADVANCE(530); + if (lookahead == '<') ADVANCE(292); + if (lookahead == '>') ADVANCE(295); + if (lookahead == '\\') SKIP(251); + if (lookahead == '`') ADVANCE(430); + if (lookahead == '|') ADVANCE(276); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(242); + END_STATE(); + case 243: + if (eof) ADVANCE(255); + if (lookahead == '\n') SKIP(242); + END_STATE(); + case 244: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '\n', 313, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 19, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(244); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(481); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 245: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '\n', 314, + '"', 395, + '#', 435, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + ')', 277, + ';', 530, + '<', 292, + '>', 295, + '\\', 147, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(245); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(482); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 246: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '\n', 321, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 55, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(246); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 247: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '\n', 323, + '"', 395, + '#', 435, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + ')', 277, + ';', 530, + '<', 292, + '>', 295, + '\\', 153, + '`', 431, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(247); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(489); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 248: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '\n', 326, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 31, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(248); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(491); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 249: + if (eof) ADVANCE(255); + if (lookahead == '\r') SKIP(239); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(254); + END_STATE(); + case 250: + if (eof) ADVANCE(255); + if (lookahead == '\r') SKIP(240); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(241); + END_STATE(); + case 251: + if (eof) ADVANCE(255); + if (lookahead == '\r') SKIP(243); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(242); + END_STATE(); + case 252: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '%', 374, + '&', 358, + '\'', 219, + '(', 271, + ')', 277, + '*', 369, + '+', 386, + '-', 384, + '/', 372, + '0', 473, + ':', 381, + ';', 530, + '<', 291, + '=', 289, + '>', 294, + '?', 378, + '@', 472, + '\\', 129, + '^', 354, + '_', 476, + '`', 431, + 'd', 526, + 'e', 523, + 'f', 521, + 'i', 525, + '{', 280, + '|', 273, + '}', 282, + '~', 388, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(252); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(499); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 253: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + ')', 277, + ';', 223, + '<', 290, + '>', 295, + '\\', 132, + '`', 430, + '{', 280, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(253); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(503); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + lookahead != '{' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 254: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '!', 224, + '#', 435, + '$', 394, + '%', 376, + '&', 357, + ')', 221, + '*', 370, + '+', 364, + '-', 366, + '/', 373, + ':', 379, + ';', 223, + '<', 293, + '=', 288, + '>', 296, + '?', 377, + ); + if (lookahead == '\\') SKIP(249); + if (lookahead == '^') ADVANCE(355); + if (lookahead == '`') ADVANCE(430); + if (lookahead == 'd') ADVANCE(235); + if (lookahead == 'e') ADVANCE(233); + if (lookahead == 'f') ADVANCE(231); + if (lookahead == 'i') ADVANCE(234); + if (lookahead == '|') ADVANCE(275); + if (lookahead == '}') ADVANCE(281); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(254); + END_STATE(); + case 255: + ACCEPT_TOKEN(ts_builtin_sym_end); + END_STATE(); + case 256: + ACCEPT_TOKEN(anon_sym_in); + END_STATE(); + case 257: + ACCEPT_TOKEN(anon_sym_in); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 258: + ACCEPT_TOKEN(anon_sym_in); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 259: + ACCEPT_TOKEN(anon_sym_do); + END_STATE(); + case 260: + ACCEPT_TOKEN(anon_sym_do); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 261: + ACCEPT_TOKEN(anon_sym_fi); + END_STATE(); + case 262: + ACCEPT_TOKEN(anon_sym_fi); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 263: + ACCEPT_TOKEN(anon_sym_elif); + END_STATE(); + case 264: + ACCEPT_TOKEN(anon_sym_elif); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 265: + ACCEPT_TOKEN(anon_sym_else); + END_STATE(); + case 266: + ACCEPT_TOKEN(anon_sym_else); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 267: + ACCEPT_TOKEN(anon_sym_esac); + END_STATE(); + case 268: + ACCEPT_TOKEN(anon_sym_esac); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 269: + ACCEPT_TOKEN(anon_sym_esac); + if (lookahead == '\\') ADVANCE(16); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 270: + ACCEPT_TOKEN(anon_sym_esac); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 271: + ACCEPT_TOKEN(anon_sym_LPAREN); + END_STATE(); + case 272: + ACCEPT_TOKEN(anon_sym_PIPE); + END_STATE(); + case 273: + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '&') ADVANCE(337); + if (lookahead == '=') ADVANCE(353); + if (lookahead == '|') ADVANCE(284); + END_STATE(); + case 274: + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '&') ADVANCE(337); + if (lookahead == '|') ADVANCE(284); + END_STATE(); + case 275: + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '=') ADVANCE(353); + if (lookahead == '|') ADVANCE(284); + END_STATE(); + case 276: + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '|') ADVANCE(284); + END_STATE(); + case 277: + ACCEPT_TOKEN(anon_sym_RPAREN); + END_STATE(); + case 278: + ACCEPT_TOKEN(anon_sym_LF); + if (lookahead == '\n') ADVANCE(278); + if (lookahead == '\\') ADVANCE(137); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(479); + END_STATE(); + case 279: + ACCEPT_TOKEN(anon_sym_SEMI_SEMI); + END_STATE(); + case 280: + ACCEPT_TOKEN(anon_sym_LBRACE); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 281: + ACCEPT_TOKEN(anon_sym_RBRACE); + END_STATE(); + case 282: + ACCEPT_TOKEN(anon_sym_RBRACE); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 283: + ACCEPT_TOKEN(anon_sym_AMP_AMP); + END_STATE(); + case 284: + ACCEPT_TOKEN(anon_sym_PIPE_PIPE); + END_STATE(); + case 285: + ACCEPT_TOKEN(anon_sym_BANG); + END_STATE(); + case 286: + ACCEPT_TOKEN(anon_sym_BANG); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 287: + ACCEPT_TOKEN(anon_sym_EQ); + END_STATE(); + case 288: + ACCEPT_TOKEN(anon_sym_EQ); + if (lookahead == '=') ADVANCE(360); + END_STATE(); + case 289: + ACCEPT_TOKEN(anon_sym_EQ); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 290: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '&') ADVANCE(301); + END_STATE(); + case 291: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '&') ADVANCE(301); + if (lookahead == '<') ADVANCE(307); + if (lookahead == '=') ADVANCE(362); + END_STATE(); + case 292: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '&') ADVANCE(301); + if (lookahead == '<') ADVANCE(306); + END_STATE(); + case 293: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '<') ADVANCE(308); + if (lookahead == '=') ADVANCE(362); + END_STATE(); + case 294: + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '&') ADVANCE(302); + if (lookahead == '=') ADVANCE(363); + if (lookahead == '>') ADVANCE(298); + if (lookahead == '|') ADVANCE(303); + END_STATE(); + case 295: + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '&') ADVANCE(302); + if (lookahead == '>') ADVANCE(297); + if (lookahead == '|') ADVANCE(303); + END_STATE(); + case 296: + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(363); + if (lookahead == '>') ADVANCE(298); + END_STATE(); + case 297: + ACCEPT_TOKEN(anon_sym_GT_GT); + END_STATE(); + case 298: + ACCEPT_TOKEN(anon_sym_GT_GT); + if (lookahead == '=') ADVANCE(349); + END_STATE(); + case 299: + ACCEPT_TOKEN(anon_sym_AMP_GT); + if (lookahead == '>') ADVANCE(300); + END_STATE(); + case 300: + ACCEPT_TOKEN(anon_sym_AMP_GT_GT); + END_STATE(); + case 301: + ACCEPT_TOKEN(anon_sym_LT_AMP); + if (lookahead == '-') ADVANCE(304); + END_STATE(); + case 302: + ACCEPT_TOKEN(anon_sym_GT_AMP); + if (lookahead == '-') ADVANCE(305); + END_STATE(); + case 303: + ACCEPT_TOKEN(anon_sym_GT_PIPE); + END_STATE(); + case 304: + ACCEPT_TOKEN(anon_sym_LT_AMP_DASH); + END_STATE(); + case 305: + ACCEPT_TOKEN(anon_sym_GT_AMP_DASH); + END_STATE(); + case 306: + ACCEPT_TOKEN(anon_sym_LT_LT); + if (lookahead == '-') ADVANCE(309); + END_STATE(); + case 307: + ACCEPT_TOKEN(anon_sym_LT_LT); + if (lookahead == '-') ADVANCE(309); + if (lookahead == '=') ADVANCE(348); + END_STATE(); + case 308: + ACCEPT_TOKEN(anon_sym_LT_LT); + if (lookahead == '=') ADVANCE(348); + END_STATE(); + case 309: + ACCEPT_TOKEN(anon_sym_LT_LT_DASH); + END_STATE(); + case 310: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(310); + if (lookahead == '\\') ADVANCE(13); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(480); + END_STATE(); + case 311: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(311); + if (lookahead == '\\') ADVANCE(50); + END_STATE(); + case 312: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(312); + END_STATE(); + case 313: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(313); + if (lookahead == '\\') ADVANCE(19); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(481); + END_STATE(); + case 314: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(314); + if (lookahead == '\\') ADVANCE(147); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(482); + END_STATE(); + case 315: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(315); + if (lookahead == '\\') ADVANCE(149); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(483); + END_STATE(); + case 316: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(316); + if (lookahead == '\\') ADVANCE(25); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(484); + END_STATE(); + case 317: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(317); + if (lookahead == '\\') ADVANCE(53); + END_STATE(); + case 318: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(318); + if (lookahead == '\\') ADVANCE(22); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(485); + END_STATE(); + case 319: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(319); + if (lookahead == '\\') ADVANCE(151); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(486); + END_STATE(); + case 320: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(320); + if (lookahead == '\\') ADVANCE(157); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(487); + END_STATE(); + case 321: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(321); + if (lookahead == '\\') ADVANCE(55); + END_STATE(); + case 322: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(322); + if (lookahead == '\\') ADVANCE(28); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(488); + END_STATE(); + case 323: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(323); + if (lookahead == '\\') ADVANCE(153); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(489); + END_STATE(); + case 324: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(324); + if (lookahead == '\\') ADVANCE(165); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(490); + END_STATE(); + case 325: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(325); + if (lookahead == '\\') ADVANCE(57); + END_STATE(); + case 326: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(326); + if (lookahead == '\\') ADVANCE(31); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(491); + END_STATE(); + case 327: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(327); + if (lookahead == '\\') ADVANCE(169); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(492); + END_STATE(); + case 328: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(328); + if (lookahead == '\\') ADVANCE(63); + END_STATE(); + case 329: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(329); + if (lookahead == '\\') ADVANCE(36); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(493); + END_STATE(); + case 330: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(330); + if (lookahead == '\\') ADVANCE(176); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(494); + END_STATE(); + case 331: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(331); + if (lookahead == '\\') ADVANCE(102); + END_STATE(); + case 332: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(332); + if (lookahead == '\\') ADVANCE(39); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(495); + END_STATE(); + case 333: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(333); + if (lookahead == '\\') ADVANCE(80); + END_STATE(); + case 334: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(334); + if (lookahead == '\\') ADVANCE(99); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(496); + END_STATE(); + case 335: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(335); + if (lookahead == '\\') ADVANCE(71); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(497); + END_STATE(); + case 336: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(336); + if (lookahead == '\\') ADVANCE(76); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(498); + END_STATE(); + case 337: + ACCEPT_TOKEN(anon_sym_PIPE_AMP); + END_STATE(); + case 338: + ACCEPT_TOKEN(anon_sym_DOLLAR_LPAREN_LPAREN); + END_STATE(); + case 339: + ACCEPT_TOKEN(anon_sym_RPAREN_RPAREN); + END_STATE(); + case 340: + ACCEPT_TOKEN(anon_sym_PLUS_EQ); + END_STATE(); + case 341: + ACCEPT_TOKEN(anon_sym_DASH_EQ); + END_STATE(); + case 342: + ACCEPT_TOKEN(anon_sym_STAR_EQ); + END_STATE(); + case 343: + ACCEPT_TOKEN(anon_sym_STAR_EQ); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 344: + ACCEPT_TOKEN(anon_sym_SLASH_EQ); + END_STATE(); + case 345: + ACCEPT_TOKEN(anon_sym_SLASH_EQ); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 346: + ACCEPT_TOKEN(anon_sym_PERCENT_EQ); + END_STATE(); + case 347: + ACCEPT_TOKEN(anon_sym_PERCENT_EQ); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 348: + ACCEPT_TOKEN(anon_sym_LT_LT_EQ); + END_STATE(); + case 349: + ACCEPT_TOKEN(anon_sym_GT_GT_EQ); + END_STATE(); + case 350: + ACCEPT_TOKEN(anon_sym_AMP_EQ); + END_STATE(); + case 351: + ACCEPT_TOKEN(anon_sym_CARET_EQ); + END_STATE(); + case 352: + ACCEPT_TOKEN(anon_sym_CARET_EQ); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 353: + ACCEPT_TOKEN(anon_sym_PIPE_EQ); + END_STATE(); + case 354: + ACCEPT_TOKEN(anon_sym_CARET); + if (lookahead == '=') ADVANCE(352); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 355: + ACCEPT_TOKEN(anon_sym_CARET); + if (lookahead == '=') ADVANCE(351); + END_STATE(); + case 356: + ACCEPT_TOKEN(anon_sym_AMP); + END_STATE(); + case 357: + ACCEPT_TOKEN(anon_sym_AMP); + if (lookahead == '&') ADVANCE(283); + if (lookahead == '=') ADVANCE(350); + END_STATE(); + case 358: + ACCEPT_TOKEN(anon_sym_AMP); + if (lookahead == '&') ADVANCE(283); + if (lookahead == '=') ADVANCE(350); + if (lookahead == '>') ADVANCE(299); + END_STATE(); + case 359: + ACCEPT_TOKEN(anon_sym_AMP); + if (lookahead == '&') ADVANCE(283); + if (lookahead == '>') ADVANCE(299); + END_STATE(); + case 360: + ACCEPT_TOKEN(anon_sym_EQ_EQ); + END_STATE(); + case 361: + ACCEPT_TOKEN(anon_sym_BANG_EQ); + END_STATE(); + case 362: + ACCEPT_TOKEN(anon_sym_LT_EQ); + END_STATE(); + case 363: + ACCEPT_TOKEN(anon_sym_GT_EQ); + END_STATE(); + case 364: + ACCEPT_TOKEN(anon_sym_PLUS); + if (lookahead == '+') ADVANCE(389); + if (lookahead == '=') ADVANCE(340); + END_STATE(); + case 365: + ACCEPT_TOKEN(anon_sym_DASH); + END_STATE(); + case 366: + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '-') ADVANCE(390); + if (lookahead == '=') ADVANCE(341); + END_STATE(); + case 367: + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 368: + ACCEPT_TOKEN(anon_sym_STAR); + END_STATE(); + case 369: + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '=') ADVANCE(343); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 370: + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '=') ADVANCE(342); + END_STATE(); + case 371: + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 372: + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '=') ADVANCE(345); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 373: + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '=') ADVANCE(344); + END_STATE(); + case 374: + ACCEPT_TOKEN(anon_sym_PERCENT); + if (lookahead == '%') ADVANCE(426); + if (lookahead == '=') ADVANCE(347); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 375: + ACCEPT_TOKEN(anon_sym_PERCENT); + if (lookahead == '%') ADVANCE(425); + END_STATE(); + case 376: + ACCEPT_TOKEN(anon_sym_PERCENT); + if (lookahead == '=') ADVANCE(346); + END_STATE(); + case 377: + ACCEPT_TOKEN(anon_sym_QMARK); + END_STATE(); + case 378: + ACCEPT_TOKEN(anon_sym_QMARK); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 379: + ACCEPT_TOKEN(anon_sym_COLON); + END_STATE(); + case 380: + ACCEPT_TOKEN(anon_sym_COLON); + if (lookahead == '=') ADVANCE(416); + if (lookahead == '?') ADVANCE(420); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 381: + ACCEPT_TOKEN(anon_sym_COLON); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 382: + ACCEPT_TOKEN(anon_sym_PLUS_PLUS); + END_STATE(); + case 383: + ACCEPT_TOKEN(anon_sym_DASH_DASH); + END_STATE(); + case 384: + ACCEPT_TOKEN(anon_sym_DASH2); + END_STATE(); + case 385: + ACCEPT_TOKEN(anon_sym_DASH2); + if (lookahead == '-') ADVANCE(383); + END_STATE(); + case 386: + ACCEPT_TOKEN(anon_sym_PLUS2); + END_STATE(); + case 387: + ACCEPT_TOKEN(anon_sym_PLUS2); + if (lookahead == '+') ADVANCE(382); + END_STATE(); + case 388: + ACCEPT_TOKEN(anon_sym_TILDE); + END_STATE(); + case 389: + ACCEPT_TOKEN(anon_sym_PLUS_PLUS2); + END_STATE(); + case 390: + ACCEPT_TOKEN(anon_sym_DASH_DASH2); + END_STATE(); + case 391: + ACCEPT_TOKEN(aux_sym_concatenation_token1); + END_STATE(); + case 392: + ACCEPT_TOKEN(anon_sym_DOLLAR); + END_STATE(); + case 393: + ACCEPT_TOKEN(anon_sym_DOLLAR); + if (lookahead == '(') ADVANCE(429); + if (lookahead == '{') ADVANCE(412); + END_STATE(); + case 394: + ACCEPT_TOKEN(anon_sym_DOLLAR); + if (lookahead == '(') ADVANCE(428); + if (lookahead == '{') ADVANCE(412); + END_STATE(); + case 395: + ACCEPT_TOKEN(anon_sym_DQUOTE); + END_STATE(); + case 396: + ACCEPT_TOKEN(sym_string_content); + if (lookahead == '\n') ADVANCE(400); + if (lookahead == '\\') ADVANCE(130); + if (lookahead != 0 && + lookahead != '\r' && + lookahead != '"' && + lookahead != '$' && + lookahead != '`') ADVANCE(403); + END_STATE(); + case 397: + ACCEPT_TOKEN(sym_string_content); + if (lookahead == '\n') ADVANCE(403); + if (lookahead == '\\') ADVANCE(432); + if (lookahead != 0 && + lookahead != '\r' && + lookahead != '"' && + lookahead != '$' && + lookahead != '`') ADVANCE(405); + END_STATE(); + case 398: + ACCEPT_TOKEN(sym_string_content); + if (lookahead == '\n') ADVANCE(401); + if (lookahead == '\\') ADVANCE(130); + if (lookahead != 0 && + lookahead != '\r' && + lookahead != '"' && + lookahead != '$' && + lookahead != '`') ADVANCE(403); + END_STATE(); + case 399: + ACCEPT_TOKEN(sym_string_content); + if (lookahead == '\n') ADVANCE(402); + if (lookahead == '\\') ADVANCE(130); + if (lookahead != 0 && + lookahead != '\r' && + lookahead != '"' && + lookahead != '$' && + lookahead != '`') ADVANCE(403); + END_STATE(); + case 400: + ACCEPT_TOKEN(sym_string_content); + ADVANCE_MAP( + '!', 285, + '"', 395, + '#', 410, + '$', 392, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + '\\', 83, + '_', 478, + ); + if (lookahead == '\n' || + lookahead == '\r') SKIP(197); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(400); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + if (lookahead != 0 && + (lookahead < '_' || 'z' < lookahead)) ADVANCE(403); + END_STATE(); + case 401: + ACCEPT_TOKEN(sym_string_content); + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + '\\', 88, + '_', 478, + ); + if (lookahead == '\n' || + lookahead == '\r') SKIP(201); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(401); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + if (lookahead != 0 && + (lookahead < ' ' || '$' < lookahead) && + (lookahead < '_' || 'z' < lookahead)) ADVANCE(403); + END_STATE(); + case 402: + ACCEPT_TOKEN(sym_string_content); + if (lookahead == '"') ADVANCE(395); + if (lookahead == '#') ADVANCE(405); + if (lookahead == '$') ADVANCE(393); + if (lookahead == '\\') ADVANCE(135); + if (lookahead == '`') ADVANCE(430); + if (lookahead == '\n' || + lookahead == '\r') SKIP(214); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(402); + if (lookahead != 0) ADVANCE(403); + END_STATE(); + case 403: + ACCEPT_TOKEN(sym_string_content); + if (lookahead == '\\') ADVANCE(130); + if (lookahead != 0 && + lookahead != '\n' && + lookahead != '\r' && + lookahead != '"' && + lookahead != '$' && + lookahead != '`') ADVANCE(403); + END_STATE(); + case 404: + ACCEPT_TOKEN(sym_string_content); + if (lookahead == '\\') ADVANCE(130); + if (lookahead != 0 && + lookahead != '\r' && + lookahead != '"' && + lookahead != '$' && + lookahead != '`') ADVANCE(403); + END_STATE(); + case 405: + ACCEPT_TOKEN(sym_string_content); + if (lookahead == '\\') ADVANCE(432); + if (lookahead != 0 && + lookahead != '\n' && + lookahead != '\r' && + lookahead != '"' && + lookahead != '$' && + lookahead != '`') ADVANCE(405); + END_STATE(); + case 406: + ACCEPT_TOKEN(sym_raw_string); + END_STATE(); + case 407: + ACCEPT_TOKEN(sym_number); + if (lookahead == '\\') ADVANCE(238); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 408: + ACCEPT_TOKEN(sym_number); + if (lookahead == '\\') ADVANCE(16); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 409: + ACCEPT_TOKEN(sym_number); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(409); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 410: + ACCEPT_TOKEN(anon_sym_POUND); + END_STATE(); + case 411: + ACCEPT_TOKEN(anon_sym_POUND); + if (lookahead == '\\') ADVANCE(434); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(529); + END_STATE(); + case 412: + ACCEPT_TOKEN(anon_sym_DOLLAR_LBRACE); + END_STATE(); + case 413: + ACCEPT_TOKEN(anon_sym_COLON_DASH); + END_STATE(); + case 414: + ACCEPT_TOKEN(anon_sym_DASH3); + END_STATE(); + case 415: + ACCEPT_TOKEN(anon_sym_COLON_EQ); + END_STATE(); + case 416: + ACCEPT_TOKEN(anon_sym_COLON_EQ); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 417: + ACCEPT_TOKEN(anon_sym_EQ2); + END_STATE(); + case 418: + ACCEPT_TOKEN(anon_sym_EQ2); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 419: + ACCEPT_TOKEN(anon_sym_COLON_QMARK); + END_STATE(); + case 420: + ACCEPT_TOKEN(anon_sym_COLON_QMARK); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 421: + ACCEPT_TOKEN(anon_sym_QMARK2); + END_STATE(); + case 422: + ACCEPT_TOKEN(anon_sym_QMARK2); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 423: + ACCEPT_TOKEN(anon_sym_COLON_PLUS); + END_STATE(); + case 424: + ACCEPT_TOKEN(anon_sym_PLUS3); + END_STATE(); + case 425: + ACCEPT_TOKEN(anon_sym_PERCENT_PERCENT); + END_STATE(); + case 426: + ACCEPT_TOKEN(anon_sym_PERCENT_PERCENT); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 427: + ACCEPT_TOKEN(aux_sym_expansion_regex_token1); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(427); + END_STATE(); + case 428: + ACCEPT_TOKEN(anon_sym_DOLLAR_LPAREN); + END_STATE(); + case 429: + ACCEPT_TOKEN(anon_sym_DOLLAR_LPAREN); + if (lookahead == '(') ADVANCE(338); + END_STATE(); + case 430: + ACCEPT_TOKEN(anon_sym_BQUOTE); + END_STATE(); + case 431: + ACCEPT_TOKEN(anon_sym_BQUOTE); + if (lookahead == '`') ADVANCE(391); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(226); + END_STATE(); + case 432: + ACCEPT_TOKEN(sym_comment); + if (lookahead == '\n') ADVANCE(403); + if (lookahead == '\r') ADVANCE(397); + if (lookahead != 0) ADVANCE(405); + END_STATE(); + case 433: + ACCEPT_TOKEN(sym_comment); + if (lookahead == '\t' || + (0x0b <= lookahead && lookahead <= '\r')) ADVANCE(435); + if (lookahead != 0 && + (lookahead < '\t' || '\r' < lookahead)) ADVANCE(436); + END_STATE(); + case 434: + ACCEPT_TOKEN(sym_comment); + if (lookahead == '\t' || + (0x0b <= lookahead && lookahead <= '\r')) ADVANCE(435); + if (lookahead != 0 && + (lookahead < '\t' || '\r' < lookahead)) ADVANCE(529); + END_STATE(); + case 435: + ACCEPT_TOKEN(sym_comment); + if (lookahead != 0 && + lookahead != '\n') ADVANCE(435); + END_STATE(); + case 436: + ACCEPT_TOKEN(sym__comment_word); + if (lookahead == '\\') ADVANCE(433); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(436); + END_STATE(); + case 437: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (lookahead == '\\') ADVANCE(16); + if (lookahead == 'a') ADVANCE(438); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 438: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (lookahead == '\\') ADVANCE(16); + if (lookahead == 'c') ADVANCE(269); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 439: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (lookahead == '\\') ADVANCE(16); + if (lookahead == 's') ADVANCE(437); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 440: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (lookahead == '\\') ADVANCE(16); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 441: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (lookahead == 'a') ADVANCE(442); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 442: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (lookahead == 'c') ADVANCE(270); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 443: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (lookahead == 'n') ADVANCE(258); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 444: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (lookahead == 's') ADVANCE(441); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 445: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 446: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 310, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 13, + '_', 477, + '`', 430, + 'e', 439, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(10); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(480); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 447: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 311, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + ')', 277, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 50, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(48); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 448: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 313, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 19, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(94); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(481); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 449: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 316, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 25, + '_', 477, + '`', 430, + 'e', 439, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(107); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(484); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 450: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 317, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 53, + '_', 478, + '`', 430, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(108); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 451: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 318, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + ')', 277, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 22, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(109); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(485); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 452: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 321, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 55, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(112); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 453: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 322, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + ')', 277, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 28, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(113); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(488); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 454: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 325, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 57, + '_', 478, + 'e', 444, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(116); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 455: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 326, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 31, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(117); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(491); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 456: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 328, + '!', 285, + '#', 410, + '$', 392, + '&', 218, + '*', 368, + '-', 365, + '0', 475, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 63, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(119); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 457: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 329, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 36, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(120); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(493); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 458: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 331, + '!', 285, + '#', 410, + '$', 392, + '&', 218, + '*', 368, + '-', 365, + '0', 475, + '<', 290, + '>', 295, + '?', 377, + '@', 471, + '\\', 102, + '_', 478, + '|', 237, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(122); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 459: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 332, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 39, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(123); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(495); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 460: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 333, + '!', 285, + '#', 410, + '$', 392, + '&', 356, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '?', 377, + '@', 471, + '\\', 80, + '_', 478, + 'i', 443, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(124); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 461: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 334, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '<', 290, + '>', 295, + '?', 378, + '@', 472, + '\\', 99, + '_', 477, + '`', 430, + '|', 237, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(125); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(496); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 462: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 335, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 356, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '?', 378, + '@', 472, + '\\', 71, + '_', 477, + '`', 430, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(126); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(497); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<' && + (lookahead < '>' || 'Z' < lookahead) && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 463: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 336, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 76, + '_', 477, + '`', 430, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(127); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(498); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<' && + (lookahead < '>' || 'Z' < lookahead) && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 464: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 225, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '<', 290, + '>', 295, + '?', 378, + '@', 472, + '\\', 61, + '_', 477, + '`', 430, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(187); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(502); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 465: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 42, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(188); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(500); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 466: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 45, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(189); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(501); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 467: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + '&', 218, + '*', 368, + '-', 365, + '0', 475, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 65, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(199); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 468: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + ')', 277, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + '\\', 85, + '_', 478, + '|', 272, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(200); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 469: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + '\\', 90, + '_', 478, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(203); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 470: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + if (lookahead == '\\') ADVANCE(15); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(470); + END_STATE(); + case 471: + ACCEPT_TOKEN(anon_sym_AT); + END_STATE(); + case 472: + ACCEPT_TOKEN(anon_sym_AT); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 473: + ACCEPT_TOKEN(anon_sym_0); + if (lookahead == '\\') ADVANCE(238); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 474: + ACCEPT_TOKEN(anon_sym_0); + if (lookahead == '\\') ADVANCE(16); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 475: + ACCEPT_TOKEN(anon_sym_0); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 476: + ACCEPT_TOKEN(anon_sym__); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 477: + ACCEPT_TOKEN(anon_sym__); + if (lookahead == '\\') ADVANCE(16); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 478: + ACCEPT_TOKEN(anon_sym__); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 479: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(278); + if (lookahead == '!') ADVANCE(286); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(136); + if (lookahead == '{') ADVANCE(280); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(479); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 480: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 310, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 12, + '_', 477, + 'e', 439, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(480); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 481: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 313, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 18, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(481); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 482: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(314); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(146); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(482); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 483: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(315); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(148); + if (lookahead == 'e') ADVANCE(527); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(483); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 484: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 316, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 24, + '_', 477, + 'e', 439, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(484); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 485: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 318, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 21, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(485); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 486: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(319); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(150); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(486); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 487: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(320); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(156); + if (lookahead == 'e') ADVANCE(527); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(487); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 488: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 322, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 27, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(488); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 489: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(323); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(152); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(489); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 490: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(324); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(164); + if (lookahead == 'e') ADVANCE(527); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(490); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 491: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 326, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 30, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(491); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 492: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(327); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(168); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(492); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 493: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 329, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 35, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(493); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 494: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(330); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(175); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(494); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 495: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 332, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 38, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(495); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 496: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 334, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 98, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(496); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 497: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 335, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 70, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(497); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 498: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 336, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 75, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(498); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 499: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '!', 286, + '#', 411, + '%', 374, + '*', 369, + '+', 386, + '-', 384, + '/', 372, + '0', 473, + ':', 381, + '=', 289, + '?', 378, + '@', 472, + '\\', 128, + '^', 354, + '_', 476, + 'd', 526, + 'e', 523, + 'f', 521, + 'i', 525, + '{', 280, + '}', 282, + '~', 388, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(499); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '\t' || '\r' < lookahead) && + (lookahead < ' ' || '+' < lookahead) && + (lookahead < '/' || '@' < lookahead) && + (lookahead < '^' || '`' < lookahead) && + (lookahead < '{' || '~' < lookahead)) ADVANCE(528); + END_STATE(); + case 500: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 41, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(500); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 501: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 44, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(501); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 502: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 60, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(502); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 503: + ACCEPT_TOKEN(sym_word); + if (lookahead == '!') ADVANCE(286); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(131); + if (lookahead == '{') ADVANCE(280); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(503); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 504: + ACCEPT_TOKEN(sym_word); + if (lookahead == '!') ADVANCE(286); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(133); + if (lookahead == 'e') ADVANCE(524); + if (lookahead == 'f') ADVANCE(521); + if (lookahead == '{') ADVANCE(280); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(504); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 505: + ACCEPT_TOKEN(sym_word); + if (lookahead == '!') ADVANCE(286); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(138); + if (lookahead == 'd') ADVANCE(526); + if (lookahead == '{') ADVANCE(280); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(505); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 506: + ACCEPT_TOKEN(sym_word); + if (lookahead == '!') ADVANCE(286); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(140); + if (lookahead == 'f') ADVANCE(521); + if (lookahead == '{') ADVANCE(280); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(506); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 507: + ACCEPT_TOKEN(sym_word); + if (lookahead == '!') ADVANCE(286); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(142); + if (lookahead == '{') ADVANCE(280); + if (lookahead == '}') ADVANCE(282); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(507); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 508: + ACCEPT_TOKEN(sym_word); + if (lookahead == '!') ADVANCE(286); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(159); + if (lookahead == 'e') ADVANCE(527); + if (lookahead == '{') ADVANCE(280); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(508); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 509: + ACCEPT_TOKEN(sym_word); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(144); + if (lookahead == '{') ADVANCE(280); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(509); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 510: + ACCEPT_TOKEN(sym_word); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(154); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(510); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 511: + ACCEPT_TOKEN(sym_word); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(161); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(511); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 512: + ACCEPT_TOKEN(sym_word); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(166); + if (lookahead == 'e') ADVANCE(527); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(512); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 513: + ACCEPT_TOKEN(sym_word); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(171); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(513); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 514: + ACCEPT_TOKEN(sym_word); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(173); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(514); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 515: + ACCEPT_TOKEN(sym_word); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(177); + if (lookahead == '}') ADVANCE(282); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(515); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 516: + ACCEPT_TOKEN(sym_word); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(181); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(516); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 517: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'a') ADVANCE(518); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 518: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'c') ADVANCE(268); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 519: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'e') ADVANCE(266); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 520: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'f') ADVANCE(264); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 521: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'i') ADVANCE(262); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 522: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'i') ADVANCE(520); + if (lookahead == 's') ADVANCE(519); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 523: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'l') ADVANCE(522); + if (lookahead == 's') ADVANCE(517); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 524: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'l') ADVANCE(522); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 525: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'n') ADVANCE(257); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 526: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'o') ADVANCE(260); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 527: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 's') ADVANCE(517); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 528: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 529: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(434); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(529); + END_STATE(); + case 530: + ACCEPT_TOKEN(anon_sym_SEMI); + if (lookahead == ';') ADVANCE(279); + END_STATE(); + default: + return false; + } +} + +static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { + START_LEXER(); + eof = lexer->eof(lexer); + switch (state) { + case 0: + if (lookahead == '\\') SKIP(1); + if (lookahead == 'c') ADVANCE(2); + if (lookahead == 'd') ADVANCE(3); + if (lookahead == 'f') ADVANCE(4); + if (lookahead == 'i') ADVANCE(5); + if (lookahead == 't') ADVANCE(6); + if (lookahead == 'u') ADVANCE(7); + if (lookahead == 'w') ADVANCE(8); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(0); + END_STATE(); + case 1: + if (lookahead == '\r') SKIP(9); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(0); + END_STATE(); + case 2: + if (lookahead == 'a') ADVANCE(10); + END_STATE(); + case 3: + if (lookahead == 'o') ADVANCE(11); + END_STATE(); + case 4: + if (lookahead == 'o') ADVANCE(12); + END_STATE(); + case 5: + if (lookahead == 'f') ADVANCE(13); + END_STATE(); + case 6: + if (lookahead == 'h') ADVANCE(14); + END_STATE(); + case 7: + if (lookahead == 'n') ADVANCE(15); + END_STATE(); + case 8: + if (lookahead == 'h') ADVANCE(16); + END_STATE(); + case 9: + if (lookahead == '\n') SKIP(0); + END_STATE(); + case 10: + if (lookahead == 's') ADVANCE(17); + END_STATE(); + case 11: + if (lookahead == 'n') ADVANCE(18); + END_STATE(); + case 12: + if (lookahead == 'r') ADVANCE(19); + END_STATE(); + case 13: + ACCEPT_TOKEN(anon_sym_if); + END_STATE(); + case 14: + if (lookahead == 'e') ADVANCE(20); + END_STATE(); + case 15: + if (lookahead == 't') ADVANCE(21); + END_STATE(); + case 16: + if (lookahead == 'i') ADVANCE(22); + END_STATE(); + case 17: + if (lookahead == 'e') ADVANCE(23); + END_STATE(); + case 18: + if (lookahead == 'e') ADVANCE(24); + END_STATE(); + case 19: + ACCEPT_TOKEN(anon_sym_for); + END_STATE(); + case 20: + if (lookahead == 'n') ADVANCE(25); + END_STATE(); + case 21: + if (lookahead == 'i') ADVANCE(26); + END_STATE(); + case 22: + if (lookahead == 'l') ADVANCE(27); + END_STATE(); + case 23: + ACCEPT_TOKEN(anon_sym_case); + END_STATE(); + case 24: + ACCEPT_TOKEN(anon_sym_done); + END_STATE(); + case 25: + ACCEPT_TOKEN(anon_sym_then); + END_STATE(); + case 26: + if (lookahead == 'l') ADVANCE(28); + END_STATE(); + case 27: + if (lookahead == 'e') ADVANCE(29); + END_STATE(); + case 28: + ACCEPT_TOKEN(anon_sym_until); + END_STATE(); + case 29: + ACCEPT_TOKEN(anon_sym_while); + END_STATE(); + default: + return false; + } +} + +static const TSLexMode ts_lex_modes[STATE_COUNT] = { + [0] = {.lex_state = 0, .external_lex_state = 1}, + [1] = {.lex_state = 253, .external_lex_state = 2}, + [2] = {.lex_state = 192, .external_lex_state = 2}, + [3] = {.lex_state = 192, .external_lex_state = 2}, + [4] = {.lex_state = 192, .external_lex_state = 2}, + [5] = {.lex_state = 192, .external_lex_state = 2}, + [6] = {.lex_state = 192, .external_lex_state = 2}, + [7] = {.lex_state = 192, .external_lex_state = 2}, + [8] = {.lex_state = 5, .external_lex_state = 2}, + [9] = {.lex_state = 5, .external_lex_state = 2}, + [10] = {.lex_state = 5, .external_lex_state = 2}, + [11] = {.lex_state = 5, .external_lex_state = 2}, + [12] = {.lex_state = 5, .external_lex_state = 2}, + [13] = {.lex_state = 5, .external_lex_state = 2}, + [14] = {.lex_state = 5, .external_lex_state = 2}, + [15] = {.lex_state = 5, .external_lex_state = 2}, + [16] = {.lex_state = 5, .external_lex_state = 2}, + [17] = {.lex_state = 5, .external_lex_state = 2}, + [18] = {.lex_state = 5, .external_lex_state = 2}, + [19] = {.lex_state = 5, .external_lex_state = 2}, + [20] = {.lex_state = 5, .external_lex_state = 2}, + [21] = {.lex_state = 5, .external_lex_state = 2}, + [22] = {.lex_state = 5, .external_lex_state = 2}, + [23] = {.lex_state = 5, .external_lex_state = 2}, + [24] = {.lex_state = 192, .external_lex_state = 2}, + [25] = {.lex_state = 5, .external_lex_state = 2}, + [26] = {.lex_state = 5, .external_lex_state = 2}, + [27] = {.lex_state = 192, .external_lex_state = 2}, + [28] = {.lex_state = 5, .external_lex_state = 2}, + [29] = {.lex_state = 5, .external_lex_state = 2}, + [30] = {.lex_state = 5, .external_lex_state = 2}, + [31] = {.lex_state = 5, .external_lex_state = 2}, + [32] = {.lex_state = 192, .external_lex_state = 2}, + [33] = {.lex_state = 5, .external_lex_state = 2}, + [34] = {.lex_state = 5, .external_lex_state = 2}, + [35] = {.lex_state = 193, .external_lex_state = 2}, + [36] = {.lex_state = 253, .external_lex_state = 2}, + [37] = {.lex_state = 193, .external_lex_state = 2}, + [38] = {.lex_state = 193, .external_lex_state = 2}, + [39] = {.lex_state = 253, .external_lex_state = 2}, + [40] = {.lex_state = 253, .external_lex_state = 2}, + [41] = {.lex_state = 253, .external_lex_state = 2}, + [42] = {.lex_state = 253, .external_lex_state = 2}, + [43] = {.lex_state = 253, .external_lex_state = 2}, + [44] = {.lex_state = 253, .external_lex_state = 2}, + [45] = {.lex_state = 253, .external_lex_state = 2}, + [46] = {.lex_state = 194, .external_lex_state = 2}, + [47] = {.lex_state = 253, .external_lex_state = 2}, + [48] = {.lex_state = 253, .external_lex_state = 2}, + [49] = {.lex_state = 195, .external_lex_state = 2}, + [50] = {.lex_state = 253, .external_lex_state = 2}, + [51] = {.lex_state = 253, .external_lex_state = 2}, + [52] = {.lex_state = 253, .external_lex_state = 2}, + [53] = {.lex_state = 253, .external_lex_state = 2}, + [54] = {.lex_state = 253, .external_lex_state = 2}, + [55] = {.lex_state = 253, .external_lex_state = 2}, + [56] = {.lex_state = 253, .external_lex_state = 2}, + [57] = {.lex_state = 253, .external_lex_state = 2}, + [58] = {.lex_state = 253, .external_lex_state = 2}, + [59] = {.lex_state = 253, .external_lex_state = 2}, + [60] = {.lex_state = 253, .external_lex_state = 2}, + [61] = {.lex_state = 253, .external_lex_state = 2}, + [62] = {.lex_state = 253, .external_lex_state = 2}, + [63] = {.lex_state = 253, .external_lex_state = 2}, + [64] = {.lex_state = 253, .external_lex_state = 2}, + [65] = {.lex_state = 253, .external_lex_state = 2}, + [66] = {.lex_state = 253, .external_lex_state = 2}, + [67] = {.lex_state = 253, .external_lex_state = 2}, + [68] = {.lex_state = 253, .external_lex_state = 2}, + [69] = {.lex_state = 253, .external_lex_state = 2}, + [70] = {.lex_state = 253, .external_lex_state = 2}, + [71] = {.lex_state = 253, .external_lex_state = 2}, + [72] = {.lex_state = 194, .external_lex_state = 2}, + [73] = {.lex_state = 253, .external_lex_state = 2}, + [74] = {.lex_state = 253, .external_lex_state = 2}, + [75] = {.lex_state = 253, .external_lex_state = 2}, + [76] = {.lex_state = 253, .external_lex_state = 2}, + [77] = {.lex_state = 253, .external_lex_state = 2}, + [78] = {.lex_state = 253, .external_lex_state = 2}, + [79] = {.lex_state = 194, .external_lex_state = 2}, + [80] = {.lex_state = 253, .external_lex_state = 2}, + [81] = {.lex_state = 253, .external_lex_state = 2}, + [82] = {.lex_state = 253, .external_lex_state = 2}, + [83] = {.lex_state = 253, .external_lex_state = 2}, + [84] = {.lex_state = 253, .external_lex_state = 2}, + [85] = {.lex_state = 253, .external_lex_state = 2}, + [86] = {.lex_state = 253, .external_lex_state = 2}, + [87] = {.lex_state = 253, .external_lex_state = 2}, + [88] = {.lex_state = 253, .external_lex_state = 2}, + [89] = {.lex_state = 253, .external_lex_state = 2}, + [90] = {.lex_state = 253, .external_lex_state = 2}, + [91] = {.lex_state = 253, .external_lex_state = 2}, + [92] = {.lex_state = 253, .external_lex_state = 2}, + [93] = {.lex_state = 253, .external_lex_state = 2}, + [94] = {.lex_state = 253, .external_lex_state = 2}, + [95] = {.lex_state = 253, .external_lex_state = 2}, + [96] = {.lex_state = 195, .external_lex_state = 2}, + [97] = {.lex_state = 253, .external_lex_state = 2}, + [98] = {.lex_state = 195, .external_lex_state = 2}, + [99] = {.lex_state = 253, .external_lex_state = 2}, + [100] = {.lex_state = 253, .external_lex_state = 2}, + [101] = {.lex_state = 253, .external_lex_state = 2}, + [102] = {.lex_state = 253, .external_lex_state = 2}, + [103] = {.lex_state = 253, .external_lex_state = 2}, + [104] = {.lex_state = 253, .external_lex_state = 2}, + [105] = {.lex_state = 253, .external_lex_state = 2}, + [106] = {.lex_state = 253, .external_lex_state = 2}, + [107] = {.lex_state = 253, .external_lex_state = 2}, + [108] = {.lex_state = 253, .external_lex_state = 2}, + [109] = {.lex_state = 253, .external_lex_state = 2}, + [110] = {.lex_state = 253, .external_lex_state = 2}, + [111] = {.lex_state = 253, .external_lex_state = 2}, + [112] = {.lex_state = 253, .external_lex_state = 2}, + [113] = {.lex_state = 195, .external_lex_state = 2}, + [114] = {.lex_state = 253, .external_lex_state = 2}, + [115] = {.lex_state = 253, .external_lex_state = 2}, + [116] = {.lex_state = 253, .external_lex_state = 2}, + [117] = {.lex_state = 253, .external_lex_state = 2}, + [118] = {.lex_state = 193, .external_lex_state = 2}, + [119] = {.lex_state = 253, .external_lex_state = 2}, + [120] = {.lex_state = 253, .external_lex_state = 2}, + [121] = {.lex_state = 253, .external_lex_state = 2}, + [122] = {.lex_state = 253, .external_lex_state = 2}, + [123] = {.lex_state = 253, .external_lex_state = 2}, + [124] = {.lex_state = 253, .external_lex_state = 2}, + [125] = {.lex_state = 253, .external_lex_state = 2}, + [126] = {.lex_state = 253, .external_lex_state = 2}, + [127] = {.lex_state = 253, .external_lex_state = 2}, + [128] = {.lex_state = 253, .external_lex_state = 2}, + [129] = {.lex_state = 253, .external_lex_state = 2}, + [130] = {.lex_state = 253, .external_lex_state = 2}, + [131] = {.lex_state = 253, .external_lex_state = 2}, + [132] = {.lex_state = 253, .external_lex_state = 2}, + [133] = {.lex_state = 253, .external_lex_state = 2}, + [134] = {.lex_state = 253, .external_lex_state = 2}, + [135] = {.lex_state = 253, .external_lex_state = 2}, + [136] = {.lex_state = 253, .external_lex_state = 2}, + [137] = {.lex_state = 253, .external_lex_state = 2}, + [138] = {.lex_state = 253, .external_lex_state = 2}, + [139] = {.lex_state = 253, .external_lex_state = 2}, + [140] = {.lex_state = 253, .external_lex_state = 2}, + [141] = {.lex_state = 253, .external_lex_state = 2}, + [142] = {.lex_state = 253, .external_lex_state = 2}, + [143] = {.lex_state = 253, .external_lex_state = 2}, + [144] = {.lex_state = 253, .external_lex_state = 2}, + [145] = {.lex_state = 253, .external_lex_state = 2}, + [146] = {.lex_state = 253, .external_lex_state = 2}, + [147] = {.lex_state = 253, .external_lex_state = 2}, + [148] = {.lex_state = 253, .external_lex_state = 2}, + [149] = {.lex_state = 253, .external_lex_state = 2}, + [150] = {.lex_state = 253, .external_lex_state = 2}, + [151] = {.lex_state = 253, .external_lex_state = 2}, + [152] = {.lex_state = 253, .external_lex_state = 2}, + [153] = {.lex_state = 253, .external_lex_state = 2}, + [154] = {.lex_state = 253, .external_lex_state = 2}, + [155] = {.lex_state = 253, .external_lex_state = 2}, + [156] = {.lex_state = 253, .external_lex_state = 2}, + [157] = {.lex_state = 253, .external_lex_state = 2}, + [158] = {.lex_state = 204, .external_lex_state = 2}, + [159] = {.lex_state = 204, .external_lex_state = 2}, + [160] = {.lex_state = 204, .external_lex_state = 2}, + [161] = {.lex_state = 204, .external_lex_state = 2}, + [162] = {.lex_state = 204, .external_lex_state = 2}, + [163] = {.lex_state = 204, .external_lex_state = 2}, + [164] = {.lex_state = 204, .external_lex_state = 2}, + [165] = {.lex_state = 10, .external_lex_state = 3}, + [166] = {.lex_state = 244, .external_lex_state = 4}, + [167] = {.lex_state = 109, .external_lex_state = 4}, + [168] = {.lex_state = 244, .external_lex_state = 4}, + [169] = {.lex_state = 107, .external_lex_state = 5}, + [170] = {.lex_state = 113, .external_lex_state = 6}, + [171] = {.lex_state = 248, .external_lex_state = 6}, + [172] = {.lex_state = 113, .external_lex_state = 7}, + [173] = {.lex_state = 248, .external_lex_state = 7}, + [174] = {.lex_state = 248, .external_lex_state = 6}, + [175] = {.lex_state = 107, .external_lex_state = 8}, + [176] = {.lex_state = 248, .external_lex_state = 7}, + [177] = {.lex_state = 113, .external_lex_state = 7}, + [178] = {.lex_state = 107, .external_lex_state = 8}, + [179] = {.lex_state = 245, .external_lex_state = 9}, + [180] = {.lex_state = 245, .external_lex_state = 9}, + [181] = {.lex_state = 248, .external_lex_state = 7}, + [182] = {.lex_state = 248, .external_lex_state = 7}, + [183] = {.lex_state = 245, .external_lex_state = 9}, + [184] = {.lex_state = 106, .external_lex_state = 10}, + [185] = {.lex_state = 245, .external_lex_state = 9}, + [186] = {.lex_state = 106, .external_lex_state = 10}, + [187] = {.lex_state = 245, .external_lex_state = 9}, + [188] = {.lex_state = 120, .external_lex_state = 4}, + [189] = {.lex_state = 245, .external_lex_state = 9}, + [190] = {.lex_state = 245, .external_lex_state = 9}, + [191] = {.lex_state = 245, .external_lex_state = 9}, + [192] = {.lex_state = 245, .external_lex_state = 7}, + [193] = {.lex_state = 245, .external_lex_state = 7}, + [194] = {.lex_state = 245, .external_lex_state = 11}, + [195] = {.lex_state = 245, .external_lex_state = 7}, + [196] = {.lex_state = 245, .external_lex_state = 11}, + [197] = {.lex_state = 245, .external_lex_state = 7}, + [198] = {.lex_state = 106, .external_lex_state = 12}, + [199] = {.lex_state = 245, .external_lex_state = 11}, + [200] = {.lex_state = 106, .external_lex_state = 12}, + [201] = {.lex_state = 106, .external_lex_state = 12}, + [202] = {.lex_state = 245, .external_lex_state = 11}, + [203] = {.lex_state = 245, .external_lex_state = 7}, + [204] = {.lex_state = 123, .external_lex_state = 6}, + [205] = {.lex_state = 106, .external_lex_state = 8}, + [206] = {.lex_state = 245, .external_lex_state = 11}, + [207] = {.lex_state = 106, .external_lex_state = 8}, + [208] = {.lex_state = 245, .external_lex_state = 7}, + [209] = {.lex_state = 188, .external_lex_state = 13}, + [210] = {.lex_state = 245, .external_lex_state = 11}, + [211] = {.lex_state = 106, .external_lex_state = 8}, + [212] = {.lex_state = 245, .external_lex_state = 7}, + [213] = {.lex_state = 106, .external_lex_state = 14}, + [214] = {.lex_state = 245, .external_lex_state = 15}, + [215] = {.lex_state = 245, .external_lex_state = 7}, + [216] = {.lex_state = 245, .external_lex_state = 15}, + [217] = {.lex_state = 245, .external_lex_state = 15}, + [218] = {.lex_state = 245, .external_lex_state = 11}, + [219] = {.lex_state = 245, .external_lex_state = 11}, + [220] = {.lex_state = 245, .external_lex_state = 15}, + [221] = {.lex_state = 245, .external_lex_state = 7}, + [222] = {.lex_state = 106, .external_lex_state = 8}, + [223] = {.lex_state = 106, .external_lex_state = 8}, + [224] = {.lex_state = 245, .external_lex_state = 7}, + [225] = {.lex_state = 245, .external_lex_state = 15}, + [226] = {.lex_state = 106, .external_lex_state = 8}, + [227] = {.lex_state = 245, .external_lex_state = 15}, + [228] = {.lex_state = 245, .external_lex_state = 7}, + [229] = {.lex_state = 106, .external_lex_state = 8}, + [230] = {.lex_state = 106, .external_lex_state = 14}, + [231] = {.lex_state = 189, .external_lex_state = 16}, + [232] = {.lex_state = 123, .external_lex_state = 7}, + [233] = {.lex_state = 245, .external_lex_state = 7}, + [234] = {.lex_state = 106, .external_lex_state = 14}, + [235] = {.lex_state = 245, .external_lex_state = 7}, + [236] = {.lex_state = 245, .external_lex_state = 7}, + [237] = {.lex_state = 123, .external_lex_state = 7}, + [238] = {.lex_state = 245, .external_lex_state = 7}, + [239] = {.lex_state = 245, .external_lex_state = 11}, + [240] = {.lex_state = 245, .external_lex_state = 7}, + [241] = {.lex_state = 245, .external_lex_state = 7}, + [242] = {.lex_state = 245, .external_lex_state = 11}, + [243] = {.lex_state = 245, .external_lex_state = 11}, + [244] = {.lex_state = 245, .external_lex_state = 7}, + [245] = {.lex_state = 110, .external_lex_state = 17}, + [246] = {.lex_state = 245, .external_lex_state = 15}, + [247] = {.lex_state = 245, .external_lex_state = 15}, + [248] = {.lex_state = 106, .external_lex_state = 8}, + [249] = {.lex_state = 106, .external_lex_state = 14}, + [250] = {.lex_state = 245, .external_lex_state = 15}, + [251] = {.lex_state = 245, .external_lex_state = 9}, + [252] = {.lex_state = 245, .external_lex_state = 7}, + [253] = {.lex_state = 245, .external_lex_state = 7}, + [254] = {.lex_state = 245, .external_lex_state = 7}, + [255] = {.lex_state = 245, .external_lex_state = 7}, + [256] = {.lex_state = 245, .external_lex_state = 7}, + [257] = {.lex_state = 245, .external_lex_state = 7}, + [258] = {.lex_state = 245, .external_lex_state = 15}, + [259] = {.lex_state = 245, .external_lex_state = 9}, + [260] = {.lex_state = 245, .external_lex_state = 15}, + [261] = {.lex_state = 245, .external_lex_state = 15}, + [262] = {.lex_state = 245, .external_lex_state = 7}, + [263] = {.lex_state = 245, .external_lex_state = 15}, + [264] = {.lex_state = 245, .external_lex_state = 7}, + [265] = {.lex_state = 189, .external_lex_state = 18}, + [266] = {.lex_state = 245, .external_lex_state = 7}, + [267] = {.lex_state = 106, .external_lex_state = 8}, + [268] = {.lex_state = 245, .external_lex_state = 15}, + [269] = {.lex_state = 110, .external_lex_state = 17}, + [270] = {.lex_state = 189, .external_lex_state = 18}, + [271] = {.lex_state = 245, .external_lex_state = 7}, + [272] = {.lex_state = 245, .external_lex_state = 15}, + [273] = {.lex_state = 110, .external_lex_state = 17}, + [274] = {.lex_state = 110, .external_lex_state = 17}, + [275] = {.lex_state = 110, .external_lex_state = 17}, + [276] = {.lex_state = 245, .external_lex_state = 7}, + [277] = {.lex_state = 245, .external_lex_state = 7}, + [278] = {.lex_state = 110, .external_lex_state = 17}, + [279] = {.lex_state = 245, .external_lex_state = 7}, + [280] = {.lex_state = 245, .external_lex_state = 7}, + [281] = {.lex_state = 245, .external_lex_state = 7}, + [282] = {.lex_state = 106, .external_lex_state = 14}, + [283] = {.lex_state = 247, .external_lex_state = 19}, + [284] = {.lex_state = 245, .external_lex_state = 15}, + [285] = {.lex_state = 205, .external_lex_state = 20}, + [286] = {.lex_state = 111, .external_lex_state = 21}, + [287] = {.lex_state = 205, .external_lex_state = 20}, + [288] = {.lex_state = 111, .external_lex_state = 21}, + [289] = {.lex_state = 111, .external_lex_state = 21}, + [290] = {.lex_state = 245, .external_lex_state = 15}, + [291] = {.lex_state = 247, .external_lex_state = 19}, + [292] = {.lex_state = 247, .external_lex_state = 19}, + [293] = {.lex_state = 247, .external_lex_state = 19}, + [294] = {.lex_state = 247, .external_lex_state = 19}, + [295] = {.lex_state = 245, .external_lex_state = 7}, + [296] = {.lex_state = 245, .external_lex_state = 7}, + [297] = {.lex_state = 111, .external_lex_state = 21}, + [298] = {.lex_state = 245, .external_lex_state = 7}, + [299] = {.lex_state = 247, .external_lex_state = 19}, + [300] = {.lex_state = 247, .external_lex_state = 19}, + [301] = {.lex_state = 245, .external_lex_state = 7}, + [302] = {.lex_state = 247, .external_lex_state = 19}, + [303] = {.lex_state = 245, .external_lex_state = 15}, + [304] = {.lex_state = 245, .external_lex_state = 15}, + [305] = {.lex_state = 247, .external_lex_state = 22}, + [306] = {.lex_state = 245, .external_lex_state = 11}, + [307] = {.lex_state = 111, .external_lex_state = 21}, + [308] = {.lex_state = 111, .external_lex_state = 21}, + [309] = {.lex_state = 247, .external_lex_state = 23}, + [310] = {.lex_state = 247, .external_lex_state = 19}, + [311] = {.lex_state = 111, .external_lex_state = 24}, + [312] = {.lex_state = 205, .external_lex_state = 2}, + [313] = {.lex_state = 247, .external_lex_state = 19}, + [314] = {.lex_state = 247, .external_lex_state = 19}, + [315] = {.lex_state = 247, .external_lex_state = 19}, + [316] = {.lex_state = 254, .external_lex_state = 25}, + [317] = {.lex_state = 254, .external_lex_state = 25}, + [318] = {.lex_state = 254, .external_lex_state = 25}, + [319] = {.lex_state = 111, .external_lex_state = 24}, + [320] = {.lex_state = 247, .external_lex_state = 22}, + [321] = {.lex_state = 254, .external_lex_state = 25}, + [322] = {.lex_state = 247, .external_lex_state = 23}, + [323] = {.lex_state = 247, .external_lex_state = 19}, + [324] = {.lex_state = 254, .external_lex_state = 25}, + [325] = {.lex_state = 247, .external_lex_state = 23}, + [326] = {.lex_state = 254, .external_lex_state = 25}, + [327] = {.lex_state = 247, .external_lex_state = 22}, + [328] = {.lex_state = 254, .external_lex_state = 25}, + [329] = {.lex_state = 254, .external_lex_state = 25}, + [330] = {.lex_state = 254, .external_lex_state = 25}, + [331] = {.lex_state = 254, .external_lex_state = 25}, + [332] = {.lex_state = 254, .external_lex_state = 25}, + [333] = {.lex_state = 247, .external_lex_state = 22}, + [334] = {.lex_state = 247, .external_lex_state = 22}, + [335] = {.lex_state = 254, .external_lex_state = 25}, + [336] = {.lex_state = 111, .external_lex_state = 24}, + [337] = {.lex_state = 247, .external_lex_state = 23}, + [338] = {.lex_state = 247, .external_lex_state = 23}, + [339] = {.lex_state = 247, .external_lex_state = 23}, + [340] = {.lex_state = 111, .external_lex_state = 24}, + [341] = {.lex_state = 111, .external_lex_state = 24}, + [342] = {.lex_state = 247, .external_lex_state = 23}, + [343] = {.lex_state = 247, .external_lex_state = 23}, + [344] = {.lex_state = 247, .external_lex_state = 22}, + [345] = {.lex_state = 254, .external_lex_state = 25}, + [346] = {.lex_state = 254, .external_lex_state = 25}, + [347] = {.lex_state = 254, .external_lex_state = 25}, + [348] = {.lex_state = 247, .external_lex_state = 19}, + [349] = {.lex_state = 111, .external_lex_state = 21}, + [350] = {.lex_state = 205, .external_lex_state = 2}, + [351] = {.lex_state = 247, .external_lex_state = 23}, + [352] = {.lex_state = 111, .external_lex_state = 21}, + [353] = {.lex_state = 245, .external_lex_state = 7}, + [354] = {.lex_state = 247, .external_lex_state = 19}, + [355] = {.lex_state = 205, .external_lex_state = 2}, + [356] = {.lex_state = 111, .external_lex_state = 21}, + [357] = {.lex_state = 111, .external_lex_state = 26}, + [358] = {.lex_state = 125, .external_lex_state = 27}, + [359] = {.lex_state = 111, .external_lex_state = 21}, + [360] = {.lex_state = 254, .external_lex_state = 25}, + [361] = {.lex_state = 111, .external_lex_state = 24}, + [362] = {.lex_state = 247, .external_lex_state = 19}, + [363] = {.lex_state = 247, .external_lex_state = 19}, + [364] = {.lex_state = 205, .external_lex_state = 2}, + [365] = {.lex_state = 247, .external_lex_state = 19}, + [366] = {.lex_state = 205, .external_lex_state = 2}, + [367] = {.lex_state = 111, .external_lex_state = 21}, + [368] = {.lex_state = 111, .external_lex_state = 21}, + [369] = {.lex_state = 247, .external_lex_state = 19}, + [370] = {.lex_state = 254, .external_lex_state = 25}, + [371] = {.lex_state = 247, .external_lex_state = 23}, + [372] = {.lex_state = 247, .external_lex_state = 23}, + [373] = {.lex_state = 247, .external_lex_state = 19}, + [374] = {.lex_state = 247, .external_lex_state = 19}, + [375] = {.lex_state = 247, .external_lex_state = 19}, + [376] = {.lex_state = 247, .external_lex_state = 19}, + [377] = {.lex_state = 247, .external_lex_state = 23}, + [378] = {.lex_state = 245, .external_lex_state = 7}, + [379] = {.lex_state = 111, .external_lex_state = 26}, + [380] = {.lex_state = 247, .external_lex_state = 19}, + [381] = {.lex_state = 247, .external_lex_state = 19}, + [382] = {.lex_state = 247, .external_lex_state = 19}, + [383] = {.lex_state = 245, .external_lex_state = 7}, + [384] = {.lex_state = 111, .external_lex_state = 21}, + [385] = {.lex_state = 111, .external_lex_state = 26}, + [386] = {.lex_state = 111, .external_lex_state = 21}, + [387] = {.lex_state = 111, .external_lex_state = 21}, + [388] = {.lex_state = 111, .external_lex_state = 21}, + [389] = {.lex_state = 111, .external_lex_state = 21}, + [390] = {.lex_state = 245, .external_lex_state = 11}, + [391] = {.lex_state = 245, .external_lex_state = 11}, + [392] = {.lex_state = 247, .external_lex_state = 19}, + [393] = {.lex_state = 247, .external_lex_state = 19}, + [394] = {.lex_state = 247, .external_lex_state = 19}, + [395] = {.lex_state = 247, .external_lex_state = 19}, + [396] = {.lex_state = 247, .external_lex_state = 19}, + [397] = {.lex_state = 247, .external_lex_state = 19}, + [398] = {.lex_state = 111, .external_lex_state = 21}, + [399] = {.lex_state = 247, .external_lex_state = 19}, + [400] = {.lex_state = 247, .external_lex_state = 19}, + [401] = {.lex_state = 247, .external_lex_state = 19}, + [402] = {.lex_state = 247, .external_lex_state = 19}, + [403] = {.lex_state = 254, .external_lex_state = 25}, + [404] = {.lex_state = 254, .external_lex_state = 25}, + [405] = {.lex_state = 254, .external_lex_state = 25}, + [406] = {.lex_state = 254, .external_lex_state = 25}, + [407] = {.lex_state = 254, .external_lex_state = 25}, + [408] = {.lex_state = 254, .external_lex_state = 25}, + [409] = {.lex_state = 254, .external_lex_state = 25}, + [410] = {.lex_state = 254, .external_lex_state = 25}, + [411] = {.lex_state = 254, .external_lex_state = 25}, + [412] = {.lex_state = 254, .external_lex_state = 25}, + [413] = {.lex_state = 254, .external_lex_state = 25}, + [414] = {.lex_state = 254, .external_lex_state = 25}, + [415] = {.lex_state = 254, .external_lex_state = 25}, + [416] = {.lex_state = 247, .external_lex_state = 19}, + [417] = {.lex_state = 205, .external_lex_state = 2}, + [418] = {.lex_state = 247, .external_lex_state = 19}, + [419] = {.lex_state = 247, .external_lex_state = 19}, + [420] = {.lex_state = 247, .external_lex_state = 19}, + [421] = {.lex_state = 205, .external_lex_state = 2}, + [422] = {.lex_state = 247, .external_lex_state = 22}, + [423] = {.lex_state = 254, .external_lex_state = 25}, + [424] = {.lex_state = 111, .external_lex_state = 26}, + [425] = {.lex_state = 111, .external_lex_state = 24}, + [426] = {.lex_state = 111, .external_lex_state = 24}, + [427] = {.lex_state = 111, .external_lex_state = 24}, + [428] = {.lex_state = 111, .external_lex_state = 28}, + [429] = {.lex_state = 111, .external_lex_state = 24}, + [430] = {.lex_state = 111, .external_lex_state = 24}, + [431] = {.lex_state = 48, .external_lex_state = 7}, + [432] = {.lex_state = 111, .external_lex_state = 28}, + [433] = {.lex_state = 254, .external_lex_state = 25}, + [434] = {.lex_state = 205, .external_lex_state = 29}, + [435] = {.lex_state = 111, .external_lex_state = 24}, + [436] = {.lex_state = 254, .external_lex_state = 25}, + [437] = {.lex_state = 253, .external_lex_state = 2}, + [438] = {.lex_state = 247, .external_lex_state = 23}, + [439] = {.lex_state = 247, .external_lex_state = 23}, + [440] = {.lex_state = 247, .external_lex_state = 23}, + [441] = {.lex_state = 247, .external_lex_state = 23}, + [442] = {.lex_state = 247, .external_lex_state = 23}, + [443] = {.lex_state = 245, .external_lex_state = 15}, + [444] = {.lex_state = 245, .external_lex_state = 15}, + [445] = {.lex_state = 247, .external_lex_state = 23}, + [446] = {.lex_state = 247, .external_lex_state = 30}, + [447] = {.lex_state = 247, .external_lex_state = 30}, + [448] = {.lex_state = 247, .external_lex_state = 23}, + [449] = {.lex_state = 254, .external_lex_state = 25}, + [450] = {.lex_state = 247, .external_lex_state = 23}, + [451] = {.lex_state = 254, .external_lex_state = 25}, + [452] = {.lex_state = 254, .external_lex_state = 25}, + [453] = {.lex_state = 254, .external_lex_state = 25}, + [454] = {.lex_state = 247, .external_lex_state = 23}, + [455] = {.lex_state = 247, .external_lex_state = 23}, + [456] = {.lex_state = 247, .external_lex_state = 23}, + [457] = {.lex_state = 247, .external_lex_state = 23}, + [458] = {.lex_state = 247, .external_lex_state = 23}, + [459] = {.lex_state = 247, .external_lex_state = 23}, + [460] = {.lex_state = 247, .external_lex_state = 23}, + [461] = {.lex_state = 254, .external_lex_state = 25}, + [462] = {.lex_state = 196, .external_lex_state = 25}, + [463] = {.lex_state = 254, .external_lex_state = 25}, + [464] = {.lex_state = 108, .external_lex_state = 7}, + [465] = {.lex_state = 205, .external_lex_state = 29}, + [466] = {.lex_state = 247, .external_lex_state = 23}, + [467] = {.lex_state = 254, .external_lex_state = 25}, + [468] = {.lex_state = 254, .external_lex_state = 25}, + [469] = {.lex_state = 111, .external_lex_state = 24}, + [470] = {.lex_state = 254, .external_lex_state = 25}, + [471] = {.lex_state = 254, .external_lex_state = 25}, + [472] = {.lex_state = 254, .external_lex_state = 25}, + [473] = {.lex_state = 254, .external_lex_state = 25}, + [474] = {.lex_state = 247, .external_lex_state = 30}, + [475] = {.lex_state = 254, .external_lex_state = 25}, + [476] = {.lex_state = 196, .external_lex_state = 25}, + [477] = {.lex_state = 247, .external_lex_state = 22}, + [478] = {.lex_state = 254, .external_lex_state = 25}, + [479] = {.lex_state = 247, .external_lex_state = 22}, + [480] = {.lex_state = 111, .external_lex_state = 26}, + [481] = {.lex_state = 48, .external_lex_state = 7}, + [482] = {.lex_state = 111, .external_lex_state = 26}, + [483] = {.lex_state = 196, .external_lex_state = 25}, + [484] = {.lex_state = 196, .external_lex_state = 25}, + [485] = {.lex_state = 196, .external_lex_state = 25}, + [486] = {.lex_state = 196, .external_lex_state = 25}, + [487] = {.lex_state = 205, .external_lex_state = 29}, + [488] = {.lex_state = 247, .external_lex_state = 22}, + [489] = {.lex_state = 254, .external_lex_state = 25}, + [490] = {.lex_state = 111, .external_lex_state = 26}, + [491] = {.lex_state = 111, .external_lex_state = 24}, + [492] = {.lex_state = 196, .external_lex_state = 25}, + [493] = {.lex_state = 246, .external_lex_state = 7}, + [494] = {.lex_state = 196, .external_lex_state = 25}, + [495] = {.lex_state = 196, .external_lex_state = 25}, + [496] = {.lex_state = 247, .external_lex_state = 22}, + [497] = {.lex_state = 111, .external_lex_state = 26}, + [498] = {.lex_state = 111, .external_lex_state = 26}, + [499] = {.lex_state = 111, .external_lex_state = 24}, + [500] = {.lex_state = 247, .external_lex_state = 23}, + [501] = {.lex_state = 247, .external_lex_state = 23}, + [502] = {.lex_state = 254, .external_lex_state = 25}, + [503] = {.lex_state = 254, .external_lex_state = 25}, + [504] = {.lex_state = 247, .external_lex_state = 23}, + [505] = {.lex_state = 254, .external_lex_state = 25}, + [506] = {.lex_state = 111, .external_lex_state = 28}, + [507] = {.lex_state = 254, .external_lex_state = 25}, + [508] = {.lex_state = 254, .external_lex_state = 25}, + [509] = {.lex_state = 111, .external_lex_state = 26}, + [510] = {.lex_state = 111, .external_lex_state = 24}, + [511] = {.lex_state = 196, .external_lex_state = 25}, + [512] = {.lex_state = 196, .external_lex_state = 25}, + [513] = {.lex_state = 196, .external_lex_state = 25}, + [514] = {.lex_state = 111, .external_lex_state = 24}, + [515] = {.lex_state = 111, .external_lex_state = 24}, + [516] = {.lex_state = 196, .external_lex_state = 25}, + [517] = {.lex_state = 196, .external_lex_state = 25}, + [518] = {.lex_state = 196, .external_lex_state = 25}, + [519] = {.lex_state = 247, .external_lex_state = 22}, + [520] = {.lex_state = 111, .external_lex_state = 26}, + [521] = {.lex_state = 247, .external_lex_state = 22}, + [522] = {.lex_state = 247, .external_lex_state = 22}, + [523] = {.lex_state = 196, .external_lex_state = 25}, + [524] = {.lex_state = 247, .external_lex_state = 23}, + [525] = {.lex_state = 108, .external_lex_state = 7}, + [526] = {.lex_state = 245, .external_lex_state = 7}, + [527] = {.lex_state = 196, .external_lex_state = 25}, + [528] = {.lex_state = 254, .external_lex_state = 25}, + [529] = {.lex_state = 254, .external_lex_state = 25}, + [530] = {.lex_state = 247, .external_lex_state = 22}, + [531] = {.lex_state = 116, .external_lex_state = 8}, + [532] = {.lex_state = 247, .external_lex_state = 23}, + [533] = {.lex_state = 247, .external_lex_state = 22}, + [534] = {.lex_state = 247, .external_lex_state = 22}, + [535] = {.lex_state = 254, .external_lex_state = 25}, + [536] = {.lex_state = 247, .external_lex_state = 23}, + [537] = {.lex_state = 111, .external_lex_state = 26}, + [538] = {.lex_state = 254, .external_lex_state = 25}, + [539] = {.lex_state = 247, .external_lex_state = 22}, + [540] = {.lex_state = 246, .external_lex_state = 7}, + [541] = {.lex_state = 247, .external_lex_state = 22}, + [542] = {.lex_state = 247, .external_lex_state = 22}, + [543] = {.lex_state = 247, .external_lex_state = 22}, + [544] = {.lex_state = 247, .external_lex_state = 22}, + [545] = {.lex_state = 247, .external_lex_state = 30}, + [546] = {.lex_state = 111, .external_lex_state = 26}, + [547] = {.lex_state = 116, .external_lex_state = 8}, + [548] = {.lex_state = 247, .external_lex_state = 23}, + [549] = {.lex_state = 247, .external_lex_state = 23}, + [550] = {.lex_state = 247, .external_lex_state = 23}, + [551] = {.lex_state = 247, .external_lex_state = 22}, + [552] = {.lex_state = 247, .external_lex_state = 22}, + [553] = {.lex_state = 247, .external_lex_state = 22}, + [554] = {.lex_state = 247, .external_lex_state = 22}, + [555] = {.lex_state = 247, .external_lex_state = 22}, + [556] = {.lex_state = 247, .external_lex_state = 23}, + [557] = {.lex_state = 196, .external_lex_state = 25}, + [558] = {.lex_state = 205, .external_lex_state = 18}, + [559] = {.lex_state = 254, .external_lex_state = 25}, + [560] = {.lex_state = 247, .external_lex_state = 22}, + [561] = {.lex_state = 247, .external_lex_state = 23}, + [562] = {.lex_state = 247, .external_lex_state = 23}, + [563] = {.lex_state = 247, .external_lex_state = 22}, + [564] = {.lex_state = 111, .external_lex_state = 26}, + [565] = {.lex_state = 111, .external_lex_state = 26}, + [566] = {.lex_state = 247, .external_lex_state = 23}, + [567] = {.lex_state = 245, .external_lex_state = 15}, + [568] = {.lex_state = 196, .external_lex_state = 25}, + [569] = {.lex_state = 196, .external_lex_state = 25}, + [570] = {.lex_state = 196, .external_lex_state = 25}, + [571] = {.lex_state = 196, .external_lex_state = 25}, + [572] = {.lex_state = 196, .external_lex_state = 25}, + [573] = {.lex_state = 196, .external_lex_state = 25}, + [574] = {.lex_state = 196, .external_lex_state = 25}, + [575] = {.lex_state = 196, .external_lex_state = 25}, + [576] = {.lex_state = 196, .external_lex_state = 25}, + [577] = {.lex_state = 196, .external_lex_state = 25}, + [578] = {.lex_state = 196, .external_lex_state = 25}, + [579] = {.lex_state = 196, .external_lex_state = 25}, + [580] = {.lex_state = 196, .external_lex_state = 25}, + [581] = {.lex_state = 111, .external_lex_state = 24}, + [582] = {.lex_state = 111, .external_lex_state = 26}, + [583] = {.lex_state = 205, .external_lex_state = 18}, + [584] = {.lex_state = 254, .external_lex_state = 25}, + [585] = {.lex_state = 254, .external_lex_state = 25}, + [586] = {.lex_state = 247, .external_lex_state = 22}, + [587] = {.lex_state = 205, .external_lex_state = 18}, + [588] = {.lex_state = 247, .external_lex_state = 30}, + [589] = {.lex_state = 247, .external_lex_state = 22}, + [590] = {.lex_state = 247, .external_lex_state = 22}, + [591] = {.lex_state = 254, .external_lex_state = 25}, + [592] = {.lex_state = 247, .external_lex_state = 22}, + [593] = {.lex_state = 247, .external_lex_state = 22}, + [594] = {.lex_state = 111, .external_lex_state = 26}, + [595] = {.lex_state = 245, .external_lex_state = 7}, + [596] = {.lex_state = 247, .external_lex_state = 22}, + [597] = {.lex_state = 247, .external_lex_state = 22}, + [598] = {.lex_state = 247, .external_lex_state = 23}, + [599] = {.lex_state = 247, .external_lex_state = 23}, + [600] = {.lex_state = 247, .external_lex_state = 30}, + [601] = {.lex_state = 196, .external_lex_state = 25}, + [602] = {.lex_state = 111, .external_lex_state = 24}, + [603] = {.lex_state = 247, .external_lex_state = 23}, + [604] = {.lex_state = 247, .external_lex_state = 23}, + [605] = {.lex_state = 247, .external_lex_state = 30}, + [606] = {.lex_state = 111, .external_lex_state = 28}, + [607] = {.lex_state = 111, .external_lex_state = 28}, + [608] = {.lex_state = 111, .external_lex_state = 28}, + [609] = {.lex_state = 111, .external_lex_state = 28}, + [610] = {.lex_state = 111, .external_lex_state = 28}, + [611] = {.lex_state = 111, .external_lex_state = 28}, + [612] = {.lex_state = 111, .external_lex_state = 28}, + [613] = {.lex_state = 247, .external_lex_state = 30}, + [614] = {.lex_state = 111, .external_lex_state = 28}, + [615] = {.lex_state = 192, .external_lex_state = 2}, + [616] = {.lex_state = 111, .external_lex_state = 28}, + [617] = {.lex_state = 111, .external_lex_state = 28}, + [618] = {.lex_state = 245, .external_lex_state = 7}, + [619] = {.lex_state = 245, .external_lex_state = 7}, + [620] = {.lex_state = 245, .external_lex_state = 7}, + [621] = {.lex_state = 247, .external_lex_state = 30}, + [622] = {.lex_state = 106, .external_lex_state = 10}, + [623] = {.lex_state = 111, .external_lex_state = 28}, + [624] = {.lex_state = 245, .external_lex_state = 9}, + [625] = {.lex_state = 247, .external_lex_state = 30}, + [626] = {.lex_state = 245, .external_lex_state = 7}, + [627] = {.lex_state = 247, .external_lex_state = 30}, + [628] = {.lex_state = 247, .external_lex_state = 30}, + [629] = {.lex_state = 247, .external_lex_state = 30}, + [630] = {.lex_state = 247, .external_lex_state = 30}, + [631] = {.lex_state = 247, .external_lex_state = 30}, + [632] = {.lex_state = 247, .external_lex_state = 30}, + [633] = {.lex_state = 247, .external_lex_state = 30}, + [634] = {.lex_state = 247, .external_lex_state = 30}, + [635] = {.lex_state = 247, .external_lex_state = 30}, + [636] = {.lex_state = 245, .external_lex_state = 9}, + [637] = {.lex_state = 246, .external_lex_state = 7}, + [638] = {.lex_state = 205, .external_lex_state = 18}, + [639] = {.lex_state = 205, .external_lex_state = 18}, + [640] = {.lex_state = 247, .external_lex_state = 30}, + [641] = {.lex_state = 247, .external_lex_state = 30}, + [642] = {.lex_state = 247, .external_lex_state = 30}, + [643] = {.lex_state = 247, .external_lex_state = 30}, + [644] = {.lex_state = 247, .external_lex_state = 30}, + [645] = {.lex_state = 247, .external_lex_state = 30}, + [646] = {.lex_state = 111, .external_lex_state = 28}, + [647] = {.lex_state = 247, .external_lex_state = 30}, + [648] = {.lex_state = 247, .external_lex_state = 30}, + [649] = {.lex_state = 247, .external_lex_state = 30}, + [650] = {.lex_state = 247, .external_lex_state = 30}, + [651] = {.lex_state = 205, .external_lex_state = 31}, + [652] = {.lex_state = 247, .external_lex_state = 30}, + [653] = {.lex_state = 205, .external_lex_state = 31}, + [654] = {.lex_state = 247, .external_lex_state = 30}, + [655] = {.lex_state = 247, .external_lex_state = 30}, + [656] = {.lex_state = 111, .external_lex_state = 28}, + [657] = {.lex_state = 247, .external_lex_state = 30}, + [658] = {.lex_state = 245, .external_lex_state = 15}, + [659] = {.lex_state = 111, .external_lex_state = 28}, + [660] = {.lex_state = 247, .external_lex_state = 30}, + [661] = {.lex_state = 247, .external_lex_state = 30}, + [662] = {.lex_state = 247, .external_lex_state = 30}, + [663] = {.lex_state = 246, .external_lex_state = 7}, + [664] = {.lex_state = 192, .external_lex_state = 2}, + [665] = {.lex_state = 245, .external_lex_state = 15}, + [666] = {.lex_state = 205, .external_lex_state = 31}, + [667] = {.lex_state = 253, .external_lex_state = 2}, + [668] = {.lex_state = 245, .external_lex_state = 7}, + [669] = {.lex_state = 245, .external_lex_state = 7}, + [670] = {.lex_state = 245, .external_lex_state = 7}, + [671] = {.lex_state = 253, .external_lex_state = 2}, + [672] = {.lex_state = 205, .external_lex_state = 32}, + [673] = {.lex_state = 253, .external_lex_state = 2}, + [674] = {.lex_state = 253, .external_lex_state = 2}, + [675] = {.lex_state = 245, .external_lex_state = 7}, + [676] = {.lex_state = 106, .external_lex_state = 8}, + [677] = {.lex_state = 245, .external_lex_state = 7}, + [678] = {.lex_state = 245, .external_lex_state = 7}, + [679] = {.lex_state = 245, .external_lex_state = 7}, + [680] = {.lex_state = 245, .external_lex_state = 7}, + [681] = {.lex_state = 245, .external_lex_state = 7}, + [682] = {.lex_state = 245, .external_lex_state = 7}, + [683] = {.lex_state = 106, .external_lex_state = 8}, + [684] = {.lex_state = 106, .external_lex_state = 12}, + [685] = {.lex_state = 245, .external_lex_state = 7}, + [686] = {.lex_state = 205, .external_lex_state = 31}, + [687] = {.lex_state = 106, .external_lex_state = 12}, + [688] = {.lex_state = 191, .external_lex_state = 33}, + [689] = {.lex_state = 245, .external_lex_state = 7}, + [690] = {.lex_state = 205, .external_lex_state = 31}, + [691] = {.lex_state = 245, .external_lex_state = 7}, + [692] = {.lex_state = 253, .external_lex_state = 2}, + [693] = {.lex_state = 245, .external_lex_state = 7}, + [694] = {.lex_state = 247, .external_lex_state = 19}, + [695] = {.lex_state = 106, .external_lex_state = 8}, + [696] = {.lex_state = 245, .external_lex_state = 7}, + [697] = {.lex_state = 245, .external_lex_state = 7}, + [698] = {.lex_state = 245, .external_lex_state = 7}, + [699] = {.lex_state = 245, .external_lex_state = 7}, + [700] = {.lex_state = 245, .external_lex_state = 7}, + [701] = {.lex_state = 245, .external_lex_state = 7}, + [702] = {.lex_state = 245, .external_lex_state = 7}, + [703] = {.lex_state = 245, .external_lex_state = 7}, + [704] = {.lex_state = 245, .external_lex_state = 7}, + [705] = {.lex_state = 245, .external_lex_state = 7}, + [706] = {.lex_state = 245, .external_lex_state = 11}, + [707] = {.lex_state = 245, .external_lex_state = 7}, + [708] = {.lex_state = 205, .external_lex_state = 18}, + [709] = {.lex_state = 5, .external_lex_state = 2}, + [710] = {.lex_state = 245, .external_lex_state = 7}, + [711] = {.lex_state = 253, .external_lex_state = 2}, + [712] = {.lex_state = 245, .external_lex_state = 11}, + [713] = {.lex_state = 205, .external_lex_state = 32}, + [714] = {.lex_state = 245, .external_lex_state = 7}, + [715] = {.lex_state = 245, .external_lex_state = 11}, + [716] = {.lex_state = 191, .external_lex_state = 33}, + [717] = {.lex_state = 245, .external_lex_state = 11}, + [718] = {.lex_state = 253, .external_lex_state = 2}, + [719] = {.lex_state = 253, .external_lex_state = 2}, + [720] = {.lex_state = 247, .external_lex_state = 19}, + [721] = {.lex_state = 245, .external_lex_state = 7}, + [722] = {.lex_state = 253, .external_lex_state = 2}, + [723] = {.lex_state = 253, .external_lex_state = 2}, + [724] = {.lex_state = 245, .external_lex_state = 7}, + [725] = {.lex_state = 245, .external_lex_state = 7}, + [726] = {.lex_state = 245, .external_lex_state = 7}, + [727] = {.lex_state = 205, .external_lex_state = 32}, + [728] = {.lex_state = 253, .external_lex_state = 2}, + [729] = {.lex_state = 245, .external_lex_state = 7}, + [730] = {.lex_state = 245, .external_lex_state = 7}, + [731] = {.lex_state = 253, .external_lex_state = 2}, + [732] = {.lex_state = 205, .external_lex_state = 32}, + [733] = {.lex_state = 205, .external_lex_state = 32}, + [734] = {.lex_state = 247, .external_lex_state = 19}, + [735] = {.lex_state = 187, .external_lex_state = 32}, + [736] = {.lex_state = 245, .external_lex_state = 7}, + [737] = {.lex_state = 245, .external_lex_state = 7}, + [738] = {.lex_state = 253, .external_lex_state = 2}, + [739] = {.lex_state = 253, .external_lex_state = 2}, + [740] = {.lex_state = 253, .external_lex_state = 2}, + [741] = {.lex_state = 245, .external_lex_state = 7}, + [742] = {.lex_state = 106, .external_lex_state = 8}, + [743] = {.lex_state = 205, .external_lex_state = 32}, + [744] = {.lex_state = 106, .external_lex_state = 8}, + [745] = {.lex_state = 245, .external_lex_state = 7}, + [746] = {.lex_state = 245, .external_lex_state = 7}, + [747] = {.lex_state = 245, .external_lex_state = 7}, + [748] = {.lex_state = 245, .external_lex_state = 7}, + [749] = {.lex_state = 245, .external_lex_state = 7}, + [750] = {.lex_state = 253, .external_lex_state = 2}, + [751] = {.lex_state = 191, .external_lex_state = 33}, + [752] = {.lex_state = 191, .external_lex_state = 33}, + [753] = {.lex_state = 191, .external_lex_state = 33}, + [754] = {.lex_state = 191, .external_lex_state = 33}, + [755] = {.lex_state = 191, .external_lex_state = 33}, + [756] = {.lex_state = 191, .external_lex_state = 33}, + [757] = {.lex_state = 191, .external_lex_state = 33}, + [758] = {.lex_state = 191, .external_lex_state = 33}, + [759] = {.lex_state = 191, .external_lex_state = 33}, + [760] = {.lex_state = 191, .external_lex_state = 33}, + [761] = {.lex_state = 191, .external_lex_state = 33}, + [762] = {.lex_state = 191, .external_lex_state = 33}, + [763] = {.lex_state = 191, .external_lex_state = 33}, + [764] = {.lex_state = 191, .external_lex_state = 33}, + [765] = {.lex_state = 205, .external_lex_state = 32}, + [766] = {.lex_state = 245, .external_lex_state = 7}, + [767] = {.lex_state = 205, .external_lex_state = 18}, + [768] = {.lex_state = 245, .external_lex_state = 7}, + [769] = {.lex_state = 247, .external_lex_state = 23}, + [770] = {.lex_state = 253, .external_lex_state = 2}, + [771] = {.lex_state = 206, .external_lex_state = 34}, + [772] = {.lex_state = 253, .external_lex_state = 2}, + [773] = {.lex_state = 193, .external_lex_state = 2}, + [774] = {.lex_state = 253, .external_lex_state = 2}, + [775] = {.lex_state = 253, .external_lex_state = 2}, + [776] = {.lex_state = 195, .external_lex_state = 2}, + [777] = {.lex_state = 206, .external_lex_state = 34}, + [778] = {.lex_state = 253, .external_lex_state = 2}, + [779] = {.lex_state = 253, .external_lex_state = 2}, + [780] = {.lex_state = 247, .external_lex_state = 22}, + [781] = {.lex_state = 194, .external_lex_state = 2}, + [782] = {.lex_state = 253, .external_lex_state = 2}, + [783] = {.lex_state = 194, .external_lex_state = 2}, + [784] = {.lex_state = 253, .external_lex_state = 2}, + [785] = {.lex_state = 253, .external_lex_state = 2}, + [786] = {.lex_state = 245, .external_lex_state = 7}, + [787] = {.lex_state = 245, .external_lex_state = 7}, + [788] = {.lex_state = 253, .external_lex_state = 2}, + [789] = {.lex_state = 253, .external_lex_state = 2}, + [790] = {.lex_state = 253, .external_lex_state = 2}, + [791] = {.lex_state = 253, .external_lex_state = 2}, + [792] = {.lex_state = 253, .external_lex_state = 2}, + [793] = {.lex_state = 206, .external_lex_state = 34}, + [794] = {.lex_state = 253, .external_lex_state = 2}, + [795] = {.lex_state = 247, .external_lex_state = 23}, + [796] = {.lex_state = 247, .external_lex_state = 22}, + [797] = {.lex_state = 253, .external_lex_state = 2}, + [798] = {.lex_state = 195, .external_lex_state = 2}, + [799] = {.lex_state = 247, .external_lex_state = 23}, + [800] = {.lex_state = 247, .external_lex_state = 23}, + [801] = {.lex_state = 245, .external_lex_state = 17}, + [802] = {.lex_state = 206, .external_lex_state = 34}, + [803] = {.lex_state = 245, .external_lex_state = 17}, + [804] = {.lex_state = 245, .external_lex_state = 17}, + [805] = {.lex_state = 193, .external_lex_state = 2}, + [806] = {.lex_state = 247, .external_lex_state = 23}, + [807] = {.lex_state = 206, .external_lex_state = 34}, + [808] = {.lex_state = 253, .external_lex_state = 2}, + [809] = {.lex_state = 206, .external_lex_state = 34}, + [810] = {.lex_state = 206, .external_lex_state = 35}, + [811] = {.lex_state = 206, .external_lex_state = 34}, + [812] = {.lex_state = 206, .external_lex_state = 34}, + [813] = {.lex_state = 206, .external_lex_state = 34}, + [814] = {.lex_state = 206, .external_lex_state = 34}, + [815] = {.lex_state = 206, .external_lex_state = 35}, + [816] = {.lex_state = 206, .external_lex_state = 34}, + [817] = {.lex_state = 206, .external_lex_state = 34}, + [818] = {.lex_state = 206, .external_lex_state = 34}, + [819] = {.lex_state = 206, .external_lex_state = 34}, + [820] = {.lex_state = 206, .external_lex_state = 34}, + [821] = {.lex_state = 206, .external_lex_state = 34}, + [822] = {.lex_state = 206, .external_lex_state = 36}, + [823] = {.lex_state = 206, .external_lex_state = 34}, + [824] = {.lex_state = 206, .external_lex_state = 36}, + [825] = {.lex_state = 253, .external_lex_state = 2}, + [826] = {.lex_state = 206, .external_lex_state = 34}, + [827] = {.lex_state = 247, .external_lex_state = 30}, + [828] = {.lex_state = 206, .external_lex_state = 35}, + [829] = {.lex_state = 253, .external_lex_state = 2}, + [830] = {.lex_state = 206, .external_lex_state = 36}, + [831] = {.lex_state = 253, .external_lex_state = 2}, + [832] = {.lex_state = 253, .external_lex_state = 2}, + [833] = {.lex_state = 253, .external_lex_state = 2}, + [834] = {.lex_state = 253, .external_lex_state = 2}, + [835] = {.lex_state = 247, .external_lex_state = 30}, + [836] = {.lex_state = 253, .external_lex_state = 2}, + [837] = {.lex_state = 253, .external_lex_state = 2}, + [838] = {.lex_state = 253, .external_lex_state = 2}, + [839] = {.lex_state = 253, .external_lex_state = 2}, + [840] = {.lex_state = 253, .external_lex_state = 2}, + [841] = {.lex_state = 119, .external_lex_state = 7}, + [842] = {.lex_state = 206, .external_lex_state = 35}, + [843] = {.lex_state = 119, .external_lex_state = 7}, + [844] = {.lex_state = 206, .external_lex_state = 35}, + [845] = {.lex_state = 206, .external_lex_state = 35}, + [846] = {.lex_state = 245, .external_lex_state = 17}, + [847] = {.lex_state = 253, .external_lex_state = 2}, + [848] = {.lex_state = 253, .external_lex_state = 2}, + [849] = {.lex_state = 253, .external_lex_state = 2}, + [850] = {.lex_state = 245, .external_lex_state = 17}, + [851] = {.lex_state = 253, .external_lex_state = 2}, + [852] = {.lex_state = 206, .external_lex_state = 35}, + [853] = {.lex_state = 199, .external_lex_state = 18}, + [854] = {.lex_state = 206, .external_lex_state = 36}, + [855] = {.lex_state = 206, .external_lex_state = 36}, + [856] = {.lex_state = 206, .external_lex_state = 37}, + [857] = {.lex_state = 206, .external_lex_state = 36}, + [858] = {.lex_state = 206, .external_lex_state = 36}, + [859] = {.lex_state = 205, .external_lex_state = 32}, + [860] = {.lex_state = 206, .external_lex_state = 36}, + [861] = {.lex_state = 206, .external_lex_state = 36}, + [862] = {.lex_state = 206, .external_lex_state = 36}, + [863] = {.lex_state = 206, .external_lex_state = 36}, + [864] = {.lex_state = 206, .external_lex_state = 35}, + [865] = {.lex_state = 206, .external_lex_state = 35}, + [866] = {.lex_state = 206, .external_lex_state = 35}, + [867] = {.lex_state = 205, .external_lex_state = 32}, + [868] = {.lex_state = 206, .external_lex_state = 35}, + [869] = {.lex_state = 206, .external_lex_state = 36}, + [870] = {.lex_state = 206, .external_lex_state = 35}, + [871] = {.lex_state = 206, .external_lex_state = 36}, + [872] = {.lex_state = 206, .external_lex_state = 35}, + [873] = {.lex_state = 206, .external_lex_state = 36}, + [874] = {.lex_state = 206, .external_lex_state = 36}, + [875] = {.lex_state = 206, .external_lex_state = 37}, + [876] = {.lex_state = 199, .external_lex_state = 18}, + [877] = {.lex_state = 206, .external_lex_state = 35}, + [878] = {.lex_state = 206, .external_lex_state = 35}, + [879] = {.lex_state = 206, .external_lex_state = 36}, + [880] = {.lex_state = 206, .external_lex_state = 35}, + [881] = {.lex_state = 206, .external_lex_state = 36}, + [882] = {.lex_state = 206, .external_lex_state = 35}, + [883] = {.lex_state = 205, .external_lex_state = 32}, + [884] = {.lex_state = 206, .external_lex_state = 37}, + [885] = {.lex_state = 206, .external_lex_state = 35}, + [886] = {.lex_state = 206, .external_lex_state = 35}, + [887] = {.lex_state = 206, .external_lex_state = 35}, + [888] = {.lex_state = 198, .external_lex_state = 38}, + [889] = {.lex_state = 198, .external_lex_state = 38}, + [890] = {.lex_state = 198, .external_lex_state = 38}, + [891] = {.lex_state = 198, .external_lex_state = 38}, + [892] = {.lex_state = 198, .external_lex_state = 38}, + [893] = {.lex_state = 241, .external_lex_state = 23}, + [894] = {.lex_state = 198, .external_lex_state = 38}, + [895] = {.lex_state = 198, .external_lex_state = 38}, + [896] = {.lex_state = 115, .external_lex_state = 39}, + [897] = {.lex_state = 198, .external_lex_state = 38}, + [898] = {.lex_state = 206, .external_lex_state = 37}, + [899] = {.lex_state = 206, .external_lex_state = 37}, + [900] = {.lex_state = 206, .external_lex_state = 37}, + [901] = {.lex_state = 206, .external_lex_state = 37}, + [902] = {.lex_state = 198, .external_lex_state = 38}, + [903] = {.lex_state = 206, .external_lex_state = 37}, + [904] = {.lex_state = 115, .external_lex_state = 39}, + [905] = {.lex_state = 115, .external_lex_state = 39}, + [906] = {.lex_state = 206, .external_lex_state = 37}, + [907] = {.lex_state = 198, .external_lex_state = 38}, + [908] = {.lex_state = 206, .external_lex_state = 37}, + [909] = {.lex_state = 198, .external_lex_state = 38}, + [910] = {.lex_state = 198, .external_lex_state = 38}, + [911] = {.lex_state = 198, .external_lex_state = 38}, + [912] = {.lex_state = 206, .external_lex_state = 37}, + [913] = {.lex_state = 198, .external_lex_state = 38}, + [914] = {.lex_state = 198, .external_lex_state = 38}, + [915] = {.lex_state = 198, .external_lex_state = 38}, + [916] = {.lex_state = 198, .external_lex_state = 38}, + [917] = {.lex_state = 206, .external_lex_state = 37}, + [918] = {.lex_state = 198, .external_lex_state = 38}, + [919] = {.lex_state = 198, .external_lex_state = 38}, + [920] = {.lex_state = 198, .external_lex_state = 38}, + [921] = {.lex_state = 206, .external_lex_state = 37}, + [922] = {.lex_state = 198, .external_lex_state = 38}, + [923] = {.lex_state = 206, .external_lex_state = 37}, + [924] = {.lex_state = 206, .external_lex_state = 37}, + [925] = {.lex_state = 115, .external_lex_state = 39}, + [926] = {.lex_state = 198, .external_lex_state = 38}, + [927] = {.lex_state = 205, .external_lex_state = 32}, + [928] = {.lex_state = 205, .external_lex_state = 20}, + [929] = {.lex_state = 205, .external_lex_state = 32}, + [930] = {.lex_state = 198, .external_lex_state = 38}, + [931] = {.lex_state = 198, .external_lex_state = 38}, + [932] = {.lex_state = 198, .external_lex_state = 38}, + [933] = {.lex_state = 198, .external_lex_state = 38}, + [934] = {.lex_state = 115, .external_lex_state = 39}, + [935] = {.lex_state = 198, .external_lex_state = 38}, + [936] = {.lex_state = 206, .external_lex_state = 37}, + [937] = {.lex_state = 115, .external_lex_state = 39}, + [938] = {.lex_state = 206, .external_lex_state = 37}, + [939] = {.lex_state = 198, .external_lex_state = 38}, + [940] = {.lex_state = 198, .external_lex_state = 38}, + [941] = {.lex_state = 241, .external_lex_state = 23}, + [942] = {.lex_state = 198, .external_lex_state = 38}, + [943] = {.lex_state = 198, .external_lex_state = 38}, + [944] = {.lex_state = 198, .external_lex_state = 38}, + [945] = {.lex_state = 198, .external_lex_state = 38}, + [946] = {.lex_state = 241, .external_lex_state = 23}, + [947] = {.lex_state = 247, .external_lex_state = 40}, + [948] = {.lex_state = 241, .external_lex_state = 30}, + [949] = {.lex_state = 205, .external_lex_state = 29}, + [950] = {.lex_state = 247, .external_lex_state = 40}, + [951] = {.lex_state = 198, .external_lex_state = 38}, + [952] = {.lex_state = 198, .external_lex_state = 38}, + [953] = {.lex_state = 241, .external_lex_state = 23}, + [954] = {.lex_state = 205, .external_lex_state = 29}, + [955] = {.lex_state = 198, .external_lex_state = 38}, + [956] = {.lex_state = 205, .external_lex_state = 18}, + [957] = {.lex_state = 198, .external_lex_state = 38}, + [958] = {.lex_state = 198, .external_lex_state = 38}, + [959] = {.lex_state = 198, .external_lex_state = 38}, + [960] = {.lex_state = 198, .external_lex_state = 38}, + [961] = {.lex_state = 205, .external_lex_state = 18}, + [962] = {.lex_state = 198, .external_lex_state = 38}, + [963] = {.lex_state = 241, .external_lex_state = 23}, + [964] = {.lex_state = 198, .external_lex_state = 38}, + [965] = {.lex_state = 241, .external_lex_state = 23}, + [966] = {.lex_state = 241, .external_lex_state = 23}, + [967] = {.lex_state = 198, .external_lex_state = 38}, + [968] = {.lex_state = 241, .external_lex_state = 23}, + [969] = {.lex_state = 198, .external_lex_state = 38}, + [970] = {.lex_state = 198, .external_lex_state = 38}, + [971] = {.lex_state = 198, .external_lex_state = 38}, + [972] = {.lex_state = 241, .external_lex_state = 23}, + [973] = {.lex_state = 198, .external_lex_state = 38}, + [974] = {.lex_state = 198, .external_lex_state = 38}, + [975] = {.lex_state = 241, .external_lex_state = 23}, + [976] = {.lex_state = 198, .external_lex_state = 38}, + [977] = {.lex_state = 198, .external_lex_state = 38}, + [978] = {.lex_state = 198, .external_lex_state = 38}, + [979] = {.lex_state = 198, .external_lex_state = 38}, + [980] = {.lex_state = 198, .external_lex_state = 38}, + [981] = {.lex_state = 241, .external_lex_state = 23}, + [982] = {.lex_state = 198, .external_lex_state = 38}, + [983] = {.lex_state = 198, .external_lex_state = 38}, + [984] = {.lex_state = 198, .external_lex_state = 38}, + [985] = {.lex_state = 122, .external_lex_state = 27}, + [986] = {.lex_state = 198, .external_lex_state = 38}, + [987] = {.lex_state = 205, .external_lex_state = 18}, + [988] = {.lex_state = 205, .external_lex_state = 18}, + [989] = {.lex_state = 205, .external_lex_state = 18}, + [990] = {.lex_state = 198, .external_lex_state = 38}, + [991] = {.lex_state = 198, .external_lex_state = 38}, + [992] = {.lex_state = 241, .external_lex_state = 23}, + [993] = {.lex_state = 198, .external_lex_state = 38}, + [994] = {.lex_state = 241, .external_lex_state = 23}, + [995] = {.lex_state = 241, .external_lex_state = 23}, + [996] = {.lex_state = 198, .external_lex_state = 38}, + [997] = {.lex_state = 198, .external_lex_state = 38}, + [998] = {.lex_state = 198, .external_lex_state = 38}, + [999] = {.lex_state = 198, .external_lex_state = 38}, + [1000] = {.lex_state = 198, .external_lex_state = 38}, + [1001] = {.lex_state = 247, .external_lex_state = 40}, + [1002] = {.lex_state = 241, .external_lex_state = 23}, + [1003] = {.lex_state = 241, .external_lex_state = 14}, + [1004] = {.lex_state = 241, .external_lex_state = 30}, + [1005] = {.lex_state = 241, .external_lex_state = 24}, + [1006] = {.lex_state = 241, .external_lex_state = 15}, + [1007] = {.lex_state = 241, .external_lex_state = 24}, + [1008] = {.lex_state = 241, .external_lex_state = 14}, + [1009] = {.lex_state = 241, .external_lex_state = 24}, + [1010] = {.lex_state = 242, .external_lex_state = 15}, + [1011] = {.lex_state = 247, .external_lex_state = 40}, + [1012] = {.lex_state = 242, .external_lex_state = 15}, + [1013] = {.lex_state = 242, .external_lex_state = 15}, + [1014] = {.lex_state = 247, .external_lex_state = 40}, + [1015] = {.lex_state = 242, .external_lex_state = 15}, + [1016] = {.lex_state = 247, .external_lex_state = 40}, + [1017] = {.lex_state = 247, .external_lex_state = 40}, + [1018] = {.lex_state = 242, .external_lex_state = 15}, + [1019] = {.lex_state = 242, .external_lex_state = 15}, + [1020] = {.lex_state = 247, .external_lex_state = 40}, + [1021] = {.lex_state = 242, .external_lex_state = 15}, + [1022] = {.lex_state = 242, .external_lex_state = 15}, + [1023] = {.lex_state = 242, .external_lex_state = 15}, + [1024] = {.lex_state = 242, .external_lex_state = 15}, + [1025] = {.lex_state = 242, .external_lex_state = 15}, + [1026] = {.lex_state = 241, .external_lex_state = 14}, + [1027] = {.lex_state = 242, .external_lex_state = 15}, + [1028] = {.lex_state = 247, .external_lex_state = 40}, + [1029] = {.lex_state = 247, .external_lex_state = 40}, + [1030] = {.lex_state = 247, .external_lex_state = 40}, + [1031] = {.lex_state = 241, .external_lex_state = 15}, + [1032] = {.lex_state = 247, .external_lex_state = 40}, + [1033] = {.lex_state = 247, .external_lex_state = 40}, + [1034] = {.lex_state = 247, .external_lex_state = 40}, + [1035] = {.lex_state = 241, .external_lex_state = 15}, + [1036] = {.lex_state = 247, .external_lex_state = 40}, + [1037] = {.lex_state = 241, .external_lex_state = 15}, + [1038] = {.lex_state = 247, .external_lex_state = 40}, + [1039] = {.lex_state = 247, .external_lex_state = 40}, + [1040] = {.lex_state = 241, .external_lex_state = 30}, + [1041] = {.lex_state = 241, .external_lex_state = 15}, + [1042] = {.lex_state = 241, .external_lex_state = 23}, + [1043] = {.lex_state = 241, .external_lex_state = 15}, + [1044] = {.lex_state = 241, .external_lex_state = 14}, + [1045] = {.lex_state = 241, .external_lex_state = 14}, + [1046] = {.lex_state = 241, .external_lex_state = 14}, + [1047] = {.lex_state = 241, .external_lex_state = 14}, + [1048] = {.lex_state = 241, .external_lex_state = 14}, + [1049] = {.lex_state = 241, .external_lex_state = 14}, + [1050] = {.lex_state = 241, .external_lex_state = 15}, + [1051] = {.lex_state = 241, .external_lex_state = 15}, + [1052] = {.lex_state = 241, .external_lex_state = 23}, + [1053] = {.lex_state = 241, .external_lex_state = 30}, + [1054] = {.lex_state = 241, .external_lex_state = 15}, + [1055] = {.lex_state = 241, .external_lex_state = 15}, + [1056] = {.lex_state = 241, .external_lex_state = 15}, + [1057] = {.lex_state = 242, .external_lex_state = 15}, + [1058] = {.lex_state = 241, .external_lex_state = 15}, + [1059] = {.lex_state = 241, .external_lex_state = 15}, + [1060] = {.lex_state = 241, .external_lex_state = 15}, + [1061] = {.lex_state = 241, .external_lex_state = 30}, + [1062] = {.lex_state = 241, .external_lex_state = 15}, + [1063] = {.lex_state = 241, .external_lex_state = 15}, + [1064] = {.lex_state = 241, .external_lex_state = 14}, + [1065] = {.lex_state = 241, .external_lex_state = 23}, + [1066] = {.lex_state = 241, .external_lex_state = 15}, + [1067] = {.lex_state = 241, .external_lex_state = 15}, + [1068] = {.lex_state = 241, .external_lex_state = 15}, + [1069] = {.lex_state = 241, .external_lex_state = 15}, + [1070] = {.lex_state = 241, .external_lex_state = 15}, + [1071] = {.lex_state = 241, .external_lex_state = 14}, + [1072] = {.lex_state = 241, .external_lex_state = 15}, + [1073] = {.lex_state = 241, .external_lex_state = 14}, + [1074] = {.lex_state = 241, .external_lex_state = 15}, + [1075] = {.lex_state = 241, .external_lex_state = 30}, + [1076] = {.lex_state = 241, .external_lex_state = 30}, + [1077] = {.lex_state = 241, .external_lex_state = 30}, + [1078] = {.lex_state = 241, .external_lex_state = 30}, + [1079] = {.lex_state = 241, .external_lex_state = 30}, + [1080] = {.lex_state = 241, .external_lex_state = 30}, + [1081] = {.lex_state = 241, .external_lex_state = 30}, + [1082] = {.lex_state = 241, .external_lex_state = 23}, + [1083] = {.lex_state = 241, .external_lex_state = 23}, + [1084] = {.lex_state = 241, .external_lex_state = 15}, + [1085] = {.lex_state = 241, .external_lex_state = 30}, + [1086] = {.lex_state = 241, .external_lex_state = 14}, + [1087] = {.lex_state = 241, .external_lex_state = 15}, + [1088] = {.lex_state = 241, .external_lex_state = 15}, + [1089] = {.lex_state = 241, .external_lex_state = 30}, + [1090] = {.lex_state = 241, .external_lex_state = 23}, + [1091] = {.lex_state = 241, .external_lex_state = 30}, + [1092] = {.lex_state = 206, .external_lex_state = 41}, + [1093] = {.lex_state = 241, .external_lex_state = 7}, + [1094] = {.lex_state = 241, .external_lex_state = 14}, + [1095] = {.lex_state = 241, .external_lex_state = 15}, + [1096] = {.lex_state = 241, .external_lex_state = 14}, + [1097] = {.lex_state = 241, .external_lex_state = 14}, + [1098] = {.lex_state = 241, .external_lex_state = 14}, + [1099] = {.lex_state = 241, .external_lex_state = 8}, + [1100] = {.lex_state = 205, .external_lex_state = 32}, + [1101] = {.lex_state = 242, .external_lex_state = 7}, + [1102] = {.lex_state = 241, .external_lex_state = 15}, + [1103] = {.lex_state = 241, .external_lex_state = 24}, + [1104] = {.lex_state = 241, .external_lex_state = 24}, + [1105] = {.lex_state = 206, .external_lex_state = 41}, + [1106] = {.lex_state = 241, .external_lex_state = 24}, + [1107] = {.lex_state = 241, .external_lex_state = 15}, + [1108] = {.lex_state = 241, .external_lex_state = 24}, + [1109] = {.lex_state = 206, .external_lex_state = 41}, + [1110] = {.lex_state = 241, .external_lex_state = 15}, + [1111] = {.lex_state = 241, .external_lex_state = 30}, + [1112] = {.lex_state = 241, .external_lex_state = 15}, + [1113] = {.lex_state = 241, .external_lex_state = 14}, + [1114] = {.lex_state = 241, .external_lex_state = 15}, + [1115] = {.lex_state = 241, .external_lex_state = 30}, + [1116] = {.lex_state = 241, .external_lex_state = 15}, + [1117] = {.lex_state = 241, .external_lex_state = 15}, + [1118] = {.lex_state = 241, .external_lex_state = 30}, + [1119] = {.lex_state = 241, .external_lex_state = 15}, + [1120] = {.lex_state = 241, .external_lex_state = 24}, + [1121] = {.lex_state = 241, .external_lex_state = 24}, + [1122] = {.lex_state = 241, .external_lex_state = 24}, + [1123] = {.lex_state = 241, .external_lex_state = 14}, + [1124] = {.lex_state = 241, .external_lex_state = 24}, + [1125] = {.lex_state = 241, .external_lex_state = 24}, + [1126] = {.lex_state = 126, .external_lex_state = 42}, + [1127] = {.lex_state = 241, .external_lex_state = 24}, + [1128] = {.lex_state = 206, .external_lex_state = 41}, + [1129] = {.lex_state = 241, .external_lex_state = 30}, + [1130] = {.lex_state = 241, .external_lex_state = 15}, + [1131] = {.lex_state = 241, .external_lex_state = 7}, + [1132] = {.lex_state = 241, .external_lex_state = 24}, + [1133] = {.lex_state = 241, .external_lex_state = 15}, + [1134] = {.lex_state = 241, .external_lex_state = 30}, + [1135] = {.lex_state = 241, .external_lex_state = 15}, + [1136] = {.lex_state = 241, .external_lex_state = 8}, + [1137] = {.lex_state = 241, .external_lex_state = 15}, + [1138] = {.lex_state = 241, .external_lex_state = 30}, + [1139] = {.lex_state = 206, .external_lex_state = 41}, + [1140] = {.lex_state = 241, .external_lex_state = 15}, + [1141] = {.lex_state = 241, .external_lex_state = 15}, + [1142] = {.lex_state = 242, .external_lex_state = 7}, + [1143] = {.lex_state = 241, .external_lex_state = 7}, + [1144] = {.lex_state = 241, .external_lex_state = 15}, + [1145] = {.lex_state = 241, .external_lex_state = 15}, + [1146] = {.lex_state = 241, .external_lex_state = 15}, + [1147] = {.lex_state = 241, .external_lex_state = 15}, + [1148] = {.lex_state = 242, .external_lex_state = 7}, + [1149] = {.lex_state = 241, .external_lex_state = 24}, + [1150] = {.lex_state = 241, .external_lex_state = 23}, + [1151] = {.lex_state = 241, .external_lex_state = 15}, + [1152] = {.lex_state = 241, .external_lex_state = 30}, + [1153] = {.lex_state = 241, .external_lex_state = 15}, + [1154] = {.lex_state = 241, .external_lex_state = 15}, + [1155] = {.lex_state = 241, .external_lex_state = 15}, + [1156] = {.lex_state = 241, .external_lex_state = 30}, + [1157] = {.lex_state = 242, .external_lex_state = 15}, + [1158] = {.lex_state = 241, .external_lex_state = 28}, + [1159] = {.lex_state = 241, .external_lex_state = 23}, + [1160] = {.lex_state = 241, .external_lex_state = 28}, + [1161] = {.lex_state = 241, .external_lex_state = 15}, + [1162] = {.lex_state = 241, .external_lex_state = 15}, + [1163] = {.lex_state = 241, .external_lex_state = 7}, + [1164] = {.lex_state = 241, .external_lex_state = 15}, + [1165] = {.lex_state = 241, .external_lex_state = 15}, + [1166] = {.lex_state = 242, .external_lex_state = 15}, + [1167] = {.lex_state = 206, .external_lex_state = 41}, + [1168] = {.lex_state = 241, .external_lex_state = 15}, + [1169] = {.lex_state = 241, .external_lex_state = 28}, + [1170] = {.lex_state = 242, .external_lex_state = 15}, + [1171] = {.lex_state = 241, .external_lex_state = 30}, + [1172] = {.lex_state = 241, .external_lex_state = 24}, + [1173] = {.lex_state = 241, .external_lex_state = 28}, + [1174] = {.lex_state = 241, .external_lex_state = 15}, + [1175] = {.lex_state = 241, .external_lex_state = 15}, + [1176] = {.lex_state = 242, .external_lex_state = 15}, + [1177] = {.lex_state = 241, .external_lex_state = 24}, + [1178] = {.lex_state = 242, .external_lex_state = 15}, + [1179] = {.lex_state = 242, .external_lex_state = 15}, + [1180] = {.lex_state = 241, .external_lex_state = 15}, + [1181] = {.lex_state = 242, .external_lex_state = 15}, + [1182] = {.lex_state = 242, .external_lex_state = 15}, + [1183] = {.lex_state = 206, .external_lex_state = 41}, + [1184] = {.lex_state = 242, .external_lex_state = 15}, + [1185] = {.lex_state = 241, .external_lex_state = 30}, + [1186] = {.lex_state = 241, .external_lex_state = 30}, + [1187] = {.lex_state = 242, .external_lex_state = 15}, + [1188] = {.lex_state = 241, .external_lex_state = 15}, + [1189] = {.lex_state = 241, .external_lex_state = 15}, + [1190] = {.lex_state = 242, .external_lex_state = 15}, + [1191] = {.lex_state = 241, .external_lex_state = 15}, + [1192] = {.lex_state = 205, .external_lex_state = 32}, + [1193] = {.lex_state = 205, .external_lex_state = 32}, + [1194] = {.lex_state = 241, .external_lex_state = 15}, + [1195] = {.lex_state = 241, .external_lex_state = 14}, + [1196] = {.lex_state = 242, .external_lex_state = 15}, + [1197] = {.lex_state = 242, .external_lex_state = 15}, + [1198] = {.lex_state = 241, .external_lex_state = 28}, + [1199] = {.lex_state = 241, .external_lex_state = 28}, + [1200] = {.lex_state = 241, .external_lex_state = 15}, + [1201] = {.lex_state = 242, .external_lex_state = 15}, + [1202] = {.lex_state = 241, .external_lex_state = 28}, + [1203] = {.lex_state = 242, .external_lex_state = 15}, + [1204] = {.lex_state = 242, .external_lex_state = 15}, + [1205] = {.lex_state = 242, .external_lex_state = 15}, + [1206] = {.lex_state = 242, .external_lex_state = 15}, + [1207] = {.lex_state = 242, .external_lex_state = 15}, + [1208] = {.lex_state = 241, .external_lex_state = 28}, + [1209] = {.lex_state = 241, .external_lex_state = 28}, + [1210] = {.lex_state = 242, .external_lex_state = 15}, + [1211] = {.lex_state = 242, .external_lex_state = 15}, + [1212] = {.lex_state = 241, .external_lex_state = 28}, + [1213] = {.lex_state = 242, .external_lex_state = 15}, + [1214] = {.lex_state = 242, .external_lex_state = 15}, + [1215] = {.lex_state = 241, .external_lex_state = 14}, + [1216] = {.lex_state = 241, .external_lex_state = 15}, + [1217] = {.lex_state = 242, .external_lex_state = 15}, + [1218] = {.lex_state = 241, .external_lex_state = 15}, + [1219] = {.lex_state = 241, .external_lex_state = 15}, + [1220] = {.lex_state = 242, .external_lex_state = 15}, + [1221] = {.lex_state = 241, .external_lex_state = 28}, + [1222] = {.lex_state = 242, .external_lex_state = 15}, + [1223] = {.lex_state = 241, .external_lex_state = 15}, + [1224] = {.lex_state = 242, .external_lex_state = 15}, + [1225] = {.lex_state = 242, .external_lex_state = 15}, + [1226] = {.lex_state = 242, .external_lex_state = 15}, + [1227] = {.lex_state = 241, .external_lex_state = 28}, + [1228] = {.lex_state = 242, .external_lex_state = 15}, + [1229] = {.lex_state = 242, .external_lex_state = 15}, + [1230] = {.lex_state = 242, .external_lex_state = 15}, + [1231] = {.lex_state = 242, .external_lex_state = 15}, + [1232] = {.lex_state = 242, .external_lex_state = 15}, + [1233] = {.lex_state = 242, .external_lex_state = 15}, + [1234] = {.lex_state = 241, .external_lex_state = 28}, + [1235] = {.lex_state = 241, .external_lex_state = 15}, + [1236] = {.lex_state = 242, .external_lex_state = 15}, + [1237] = {.lex_state = 241, .external_lex_state = 28}, + [1238] = {.lex_state = 242, .external_lex_state = 15}, + [1239] = {.lex_state = 241, .external_lex_state = 15}, + [1240] = {.lex_state = 242, .external_lex_state = 15}, + [1241] = {.lex_state = 242, .external_lex_state = 15}, + [1242] = {.lex_state = 241, .external_lex_state = 28}, + [1243] = {.lex_state = 241, .external_lex_state = 28}, + [1244] = {.lex_state = 242, .external_lex_state = 15}, + [1245] = {.lex_state = 206, .external_lex_state = 41}, + [1246] = {.lex_state = 241, .external_lex_state = 15}, + [1247] = {.lex_state = 205, .external_lex_state = 32}, + [1248] = {.lex_state = 206, .external_lex_state = 41}, + [1249] = {.lex_state = 241, .external_lex_state = 14}, + [1250] = {.lex_state = 241, .external_lex_state = 28}, + [1251] = {.lex_state = 241, .external_lex_state = 30}, + [1252] = {.lex_state = 242, .external_lex_state = 15}, + [1253] = {.lex_state = 242, .external_lex_state = 15}, + [1254] = {.lex_state = 242, .external_lex_state = 15}, + [1255] = {.lex_state = 242, .external_lex_state = 15}, + [1256] = {.lex_state = 241, .external_lex_state = 15}, + [1257] = {.lex_state = 206, .external_lex_state = 41}, + [1258] = {.lex_state = 242, .external_lex_state = 15}, + [1259] = {.lex_state = 242, .external_lex_state = 15}, + [1260] = {.lex_state = 242, .external_lex_state = 15}, + [1261] = {.lex_state = 242, .external_lex_state = 15}, + [1262] = {.lex_state = 242, .external_lex_state = 15}, + [1263] = {.lex_state = 242, .external_lex_state = 15}, + [1264] = {.lex_state = 241, .external_lex_state = 15}, + [1265] = {.lex_state = 241, .external_lex_state = 15}, + [1266] = {.lex_state = 241, .external_lex_state = 15}, + [1267] = {.lex_state = 205, .external_lex_state = 32}, + [1268] = {.lex_state = 242, .external_lex_state = 15}, + [1269] = {.lex_state = 241, .external_lex_state = 15}, + [1270] = {.lex_state = 241, .external_lex_state = 7}, + [1271] = {.lex_state = 205, .external_lex_state = 32}, + [1272] = {.lex_state = 206, .external_lex_state = 41}, + [1273] = {.lex_state = 242, .external_lex_state = 15}, + [1274] = {.lex_state = 242, .external_lex_state = 15}, + [1275] = {.lex_state = 242, .external_lex_state = 15}, + [1276] = {.lex_state = 206, .external_lex_state = 41}, + [1277] = {.lex_state = 242, .external_lex_state = 15}, + [1278] = {.lex_state = 242, .external_lex_state = 15}, + [1279] = {.lex_state = 242, .external_lex_state = 15}, + [1280] = {.lex_state = 242, .external_lex_state = 15}, + [1281] = {.lex_state = 206, .external_lex_state = 41}, + [1282] = {.lex_state = 242, .external_lex_state = 15}, + [1283] = {.lex_state = 242, .external_lex_state = 15}, + [1284] = {.lex_state = 206, .external_lex_state = 41}, + [1285] = {.lex_state = 241, .external_lex_state = 7}, + [1286] = {.lex_state = 205, .external_lex_state = 32}, + [1287] = {.lex_state = 241, .external_lex_state = 28}, + [1288] = {.lex_state = 206, .external_lex_state = 41}, + [1289] = {.lex_state = 241, .external_lex_state = 15}, + [1290] = {.lex_state = 205, .external_lex_state = 32}, + [1291] = {.lex_state = 242, .external_lex_state = 15}, + [1292] = {.lex_state = 206, .external_lex_state = 41}, + [1293] = {.lex_state = 206, .external_lex_state = 41}, + [1294] = {.lex_state = 206, .external_lex_state = 41}, + [1295] = {.lex_state = 206, .external_lex_state = 41}, + [1296] = {.lex_state = 206, .external_lex_state = 41}, + [1297] = {.lex_state = 242, .external_lex_state = 15}, + [1298] = {.lex_state = 242, .external_lex_state = 15}, + [1299] = {.lex_state = 207, .external_lex_state = 43}, + [1300] = {.lex_state = 207, .external_lex_state = 43}, + [1301] = {.lex_state = 241, .external_lex_state = 15}, + [1302] = {.lex_state = 242, .external_lex_state = 15}, + [1303] = {.lex_state = 241, .external_lex_state = 15}, + [1304] = {.lex_state = 241, .external_lex_state = 15}, + [1305] = {.lex_state = 241, .external_lex_state = 8}, + [1306] = {.lex_state = 207, .external_lex_state = 43}, + [1307] = {.lex_state = 241, .external_lex_state = 15}, + [1308] = {.lex_state = 207, .external_lex_state = 43}, + [1309] = {.lex_state = 241, .external_lex_state = 15}, + [1310] = {.lex_state = 242, .external_lex_state = 15}, + [1311] = {.lex_state = 241, .external_lex_state = 14}, + [1312] = {.lex_state = 207, .external_lex_state = 43}, + [1313] = {.lex_state = 207, .external_lex_state = 43}, + [1314] = {.lex_state = 241, .external_lex_state = 15}, + [1315] = {.lex_state = 241, .external_lex_state = 15}, + [1316] = {.lex_state = 241, .external_lex_state = 14}, + [1317] = {.lex_state = 241, .external_lex_state = 14}, + [1318] = {.lex_state = 205, .external_lex_state = 44}, + [1319] = {.lex_state = 205, .external_lex_state = 44}, + [1320] = {.lex_state = 241, .external_lex_state = 14}, + [1321] = {.lex_state = 241, .external_lex_state = 14}, + [1322] = {.lex_state = 241, .external_lex_state = 14}, + [1323] = {.lex_state = 118, .external_lex_state = 45}, + [1324] = {.lex_state = 241, .external_lex_state = 14}, + [1325] = {.lex_state = 241, .external_lex_state = 14}, + [1326] = {.lex_state = 241, .external_lex_state = 15}, + [1327] = {.lex_state = 205, .external_lex_state = 32}, + [1328] = {.lex_state = 241, .external_lex_state = 14}, + [1329] = {.lex_state = 241, .external_lex_state = 23}, + [1330] = {.lex_state = 241, .external_lex_state = 14}, + [1331] = {.lex_state = 241, .external_lex_state = 14}, + [1332] = {.lex_state = 241, .external_lex_state = 14}, + [1333] = {.lex_state = 241, .external_lex_state = 14}, + [1334] = {.lex_state = 241, .external_lex_state = 14}, + [1335] = {.lex_state = 241, .external_lex_state = 14}, + [1336] = {.lex_state = 205, .external_lex_state = 32}, + [1337] = {.lex_state = 241, .external_lex_state = 14}, + [1338] = {.lex_state = 205, .external_lex_state = 44}, + [1339] = {.lex_state = 241, .external_lex_state = 14}, + [1340] = {.lex_state = 241, .external_lex_state = 14}, + [1341] = {.lex_state = 205, .external_lex_state = 32}, + [1342] = {.lex_state = 241, .external_lex_state = 14}, + [1343] = {.lex_state = 205, .external_lex_state = 32}, + [1344] = {.lex_state = 241, .external_lex_state = 14}, + [1345] = {.lex_state = 241, .external_lex_state = 14}, + [1346] = {.lex_state = 241, .external_lex_state = 14}, + [1347] = {.lex_state = 241, .external_lex_state = 14}, + [1348] = {.lex_state = 241, .external_lex_state = 14}, + [1349] = {.lex_state = 241, .external_lex_state = 14}, + [1350] = {.lex_state = 205, .external_lex_state = 44}, + [1351] = {.lex_state = 241, .external_lex_state = 14}, + [1352] = {.lex_state = 241, .external_lex_state = 14}, + [1353] = {.lex_state = 241, .external_lex_state = 14}, + [1354] = {.lex_state = 205, .external_lex_state = 44}, + [1355] = {.lex_state = 241, .external_lex_state = 15}, + [1356] = {.lex_state = 241, .external_lex_state = 23}, + [1357] = {.lex_state = 241, .external_lex_state = 14}, + [1358] = {.lex_state = 241, .external_lex_state = 14}, + [1359] = {.lex_state = 241, .external_lex_state = 14}, + [1360] = {.lex_state = 205, .external_lex_state = 44}, + [1361] = {.lex_state = 127, .external_lex_state = 42}, + [1362] = {.lex_state = 241, .external_lex_state = 14}, + [1363] = {.lex_state = 241, .external_lex_state = 14}, + [1364] = {.lex_state = 241, .external_lex_state = 14}, + [1365] = {.lex_state = 205, .external_lex_state = 44}, + [1366] = {.lex_state = 241, .external_lex_state = 14}, + [1367] = {.lex_state = 241, .external_lex_state = 14}, + [1368] = {.lex_state = 241, .external_lex_state = 14}, + [1369] = {.lex_state = 241, .external_lex_state = 14}, + [1370] = {.lex_state = 241, .external_lex_state = 14}, + [1371] = {.lex_state = 241, .external_lex_state = 14}, + [1372] = {.lex_state = 205, .external_lex_state = 44}, + [1373] = {.lex_state = 118, .external_lex_state = 45}, + [1374] = {.lex_state = 241, .external_lex_state = 14}, + [1375] = {.lex_state = 205, .external_lex_state = 44}, + [1376] = {.lex_state = 241, .external_lex_state = 14}, + [1377] = {.lex_state = 241, .external_lex_state = 14}, + [1378] = {.lex_state = 241, .external_lex_state = 14}, + [1379] = {.lex_state = 118, .external_lex_state = 45}, + [1380] = {.lex_state = 241, .external_lex_state = 14}, + [1381] = {.lex_state = 205, .external_lex_state = 44}, + [1382] = {.lex_state = 205, .external_lex_state = 44}, + [1383] = {.lex_state = 241, .external_lex_state = 14}, + [1384] = {.lex_state = 241, .external_lex_state = 14}, + [1385] = {.lex_state = 241, .external_lex_state = 14}, + [1386] = {.lex_state = 241, .external_lex_state = 14}, + [1387] = {.lex_state = 241, .external_lex_state = 14}, + [1388] = {.lex_state = 241, .external_lex_state = 14}, + [1389] = {.lex_state = 241, .external_lex_state = 14}, + [1390] = {.lex_state = 241, .external_lex_state = 14}, + [1391] = {.lex_state = 241, .external_lex_state = 14}, + [1392] = {.lex_state = 241, .external_lex_state = 14}, + [1393] = {.lex_state = 205, .external_lex_state = 44}, + [1394] = {.lex_state = 241, .external_lex_state = 14}, + [1395] = {.lex_state = 241, .external_lex_state = 15}, + [1396] = {.lex_state = 205, .external_lex_state = 44}, + [1397] = {.lex_state = 241, .external_lex_state = 15}, + [1398] = {.lex_state = 241, .external_lex_state = 30}, + [1399] = {.lex_state = 241, .external_lex_state = 30}, + [1400] = {.lex_state = 217, .external_lex_state = 35}, + [1401] = {.lex_state = 241, .external_lex_state = 30}, + [1402] = {.lex_state = 118, .external_lex_state = 45}, + [1403] = {.lex_state = 241, .external_lex_state = 7}, + [1404] = {.lex_state = 241, .external_lex_state = 7}, + [1405] = {.lex_state = 217, .external_lex_state = 35}, + [1406] = {.lex_state = 241, .external_lex_state = 15}, + [1407] = {.lex_state = 241, .external_lex_state = 15}, + [1408] = {.lex_state = 241, .external_lex_state = 15}, + [1409] = {.lex_state = 241, .external_lex_state = 15}, + [1410] = {.lex_state = 217, .external_lex_state = 35}, + [1411] = {.lex_state = 241, .external_lex_state = 15}, + [1412] = {.lex_state = 217, .external_lex_state = 35}, + [1413] = {.lex_state = 217, .external_lex_state = 35}, + [1414] = {.lex_state = 217, .external_lex_state = 37}, + [1415] = {.lex_state = 241, .external_lex_state = 15}, + [1416] = {.lex_state = 217, .external_lex_state = 35}, + [1417] = {.lex_state = 217, .external_lex_state = 37}, + [1418] = {.lex_state = 217, .external_lex_state = 35}, + [1419] = {.lex_state = 217, .external_lex_state = 37}, + [1420] = {.lex_state = 241, .external_lex_state = 15}, + [1421] = {.lex_state = 217, .external_lex_state = 35}, + [1422] = {.lex_state = 217, .external_lex_state = 35}, + [1423] = {.lex_state = 217, .external_lex_state = 35}, + [1424] = {.lex_state = 217, .external_lex_state = 35}, + [1425] = {.lex_state = 217, .external_lex_state = 35}, + [1426] = {.lex_state = 217, .external_lex_state = 35}, + [1427] = {.lex_state = 217, .external_lex_state = 35}, + [1428] = {.lex_state = 198, .external_lex_state = 18}, + [1429] = {.lex_state = 198, .external_lex_state = 31}, + [1430] = {.lex_state = 217, .external_lex_state = 35}, + [1431] = {.lex_state = 241, .external_lex_state = 15}, + [1432] = {.lex_state = 198, .external_lex_state = 18}, + [1433] = {.lex_state = 198, .external_lex_state = 31}, + [1434] = {.lex_state = 198, .external_lex_state = 31}, + [1435] = {.lex_state = 198, .external_lex_state = 31}, + [1436] = {.lex_state = 217, .external_lex_state = 35}, + [1437] = {.lex_state = 217, .external_lex_state = 37}, + [1438] = {.lex_state = 217, .external_lex_state = 35}, + [1439] = {.lex_state = 241, .external_lex_state = 15}, + [1440] = {.lex_state = 198, .external_lex_state = 31}, + [1441] = {.lex_state = 217, .external_lex_state = 37}, + [1442] = {.lex_state = 198, .external_lex_state = 31}, + [1443] = {.lex_state = 198, .external_lex_state = 31}, + [1444] = {.lex_state = 198, .external_lex_state = 31}, + [1445] = {.lex_state = 198, .external_lex_state = 31}, + [1446] = {.lex_state = 241, .external_lex_state = 15}, + [1447] = {.lex_state = 198, .external_lex_state = 31}, + [1448] = {.lex_state = 198, .external_lex_state = 31}, + [1449] = {.lex_state = 241, .external_lex_state = 15}, + [1450] = {.lex_state = 217, .external_lex_state = 37}, + [1451] = {.lex_state = 217, .external_lex_state = 37}, + [1452] = {.lex_state = 217, .external_lex_state = 37}, + [1453] = {.lex_state = 198, .external_lex_state = 31}, + [1454] = {.lex_state = 217, .external_lex_state = 37}, + [1455] = {.lex_state = 217, .external_lex_state = 37}, + [1456] = {.lex_state = 198, .external_lex_state = 31}, + [1457] = {.lex_state = 217, .external_lex_state = 37}, + [1458] = {.lex_state = 198, .external_lex_state = 31}, + [1459] = {.lex_state = 217, .external_lex_state = 37}, + [1460] = {.lex_state = 217, .external_lex_state = 37}, + [1461] = {.lex_state = 217, .external_lex_state = 37}, + [1462] = {.lex_state = 217, .external_lex_state = 37}, + [1463] = {.lex_state = 217, .external_lex_state = 37}, + [1464] = {.lex_state = 217, .external_lex_state = 37}, + [1465] = {.lex_state = 217, .external_lex_state = 37}, + [1466] = {.lex_state = 212, .external_lex_state = 46}, + [1467] = {.lex_state = 212, .external_lex_state = 46}, + [1468] = {.lex_state = 241, .external_lex_state = 40}, + [1469] = {.lex_state = 213, .external_lex_state = 47}, + [1470] = {.lex_state = 213, .external_lex_state = 47}, + [1471] = {.lex_state = 212, .external_lex_state = 46}, + [1472] = {.lex_state = 124, .external_lex_state = 42}, + [1473] = {.lex_state = 245, .external_lex_state = 45}, + [1474] = {.lex_state = 241, .external_lex_state = 17}, + [1475] = {.lex_state = 245, .external_lex_state = 45}, + [1476] = {.lex_state = 212, .external_lex_state = 46}, + [1477] = {.lex_state = 212, .external_lex_state = 46}, + [1478] = {.lex_state = 212, .external_lex_state = 46}, + [1479] = {.lex_state = 213, .external_lex_state = 47}, + [1480] = {.lex_state = 241, .external_lex_state = 17}, + [1481] = {.lex_state = 212, .external_lex_state = 46}, + [1482] = {.lex_state = 212, .external_lex_state = 46}, + [1483] = {.lex_state = 212, .external_lex_state = 46}, + [1484] = {.lex_state = 245, .external_lex_state = 45}, + [1485] = {.lex_state = 212, .external_lex_state = 46}, + [1486] = {.lex_state = 241, .external_lex_state = 40}, + [1487] = {.lex_state = 213, .external_lex_state = 47}, + [1488] = {.lex_state = 212, .external_lex_state = 46}, + [1489] = {.lex_state = 241, .external_lex_state = 17}, + [1490] = {.lex_state = 213, .external_lex_state = 47}, + [1491] = {.lex_state = 245, .external_lex_state = 45}, + [1492] = {.lex_state = 212, .external_lex_state = 46}, + [1493] = {.lex_state = 241, .external_lex_state = 17}, + [1494] = {.lex_state = 212, .external_lex_state = 46}, + [1495] = {.lex_state = 212, .external_lex_state = 46}, + [1496] = {.lex_state = 213, .external_lex_state = 47}, + [1497] = {.lex_state = 212, .external_lex_state = 46}, + [1498] = {.lex_state = 213, .external_lex_state = 47}, + [1499] = {.lex_state = 212, .external_lex_state = 46}, + [1500] = {.lex_state = 212, .external_lex_state = 46}, + [1501] = {.lex_state = 212, .external_lex_state = 46}, + [1502] = {.lex_state = 212, .external_lex_state = 46}, + [1503] = {.lex_state = 198, .external_lex_state = 18}, + [1504] = {.lex_state = 212, .external_lex_state = 46}, + [1505] = {.lex_state = 212, .external_lex_state = 46}, + [1506] = {.lex_state = 212, .external_lex_state = 46}, + [1507] = {.lex_state = 213, .external_lex_state = 47}, + [1508] = {.lex_state = 212, .external_lex_state = 46}, + [1509] = {.lex_state = 212, .external_lex_state = 46}, + [1510] = {.lex_state = 213, .external_lex_state = 47}, + [1511] = {.lex_state = 205, .external_lex_state = 48}, + [1512] = {.lex_state = 198, .external_lex_state = 31}, + [1513] = {.lex_state = 212, .external_lex_state = 46}, + [1514] = {.lex_state = 198, .external_lex_state = 31}, + [1515] = {.lex_state = 212, .external_lex_state = 46}, + [1516] = {.lex_state = 212, .external_lex_state = 46}, + [1517] = {.lex_state = 212, .external_lex_state = 46}, + [1518] = {.lex_state = 212, .external_lex_state = 46}, + [1519] = {.lex_state = 212, .external_lex_state = 46}, + [1520] = {.lex_state = 212, .external_lex_state = 46}, + [1521] = {.lex_state = 212, .external_lex_state = 46}, + [1522] = {.lex_state = 212, .external_lex_state = 46}, + [1523] = {.lex_state = 212, .external_lex_state = 46}, + [1524] = {.lex_state = 212, .external_lex_state = 46}, + [1525] = {.lex_state = 212, .external_lex_state = 46}, + [1526] = {.lex_state = 212, .external_lex_state = 46}, + [1527] = {.lex_state = 212, .external_lex_state = 46}, + [1528] = {.lex_state = 212, .external_lex_state = 46}, + [1529] = {.lex_state = 212, .external_lex_state = 46}, + [1530] = {.lex_state = 212, .external_lex_state = 46}, + [1531] = {.lex_state = 213, .external_lex_state = 47}, + [1532] = {.lex_state = 245, .external_lex_state = 45}, + [1533] = {.lex_state = 241, .external_lex_state = 17}, + [1534] = {.lex_state = 212, .external_lex_state = 46}, + [1535] = {.lex_state = 212, .external_lex_state = 46}, + [1536] = {.lex_state = 205, .external_lex_state = 48}, + [1537] = {.lex_state = 212, .external_lex_state = 46}, + [1538] = {.lex_state = 212, .external_lex_state = 46}, + [1539] = {.lex_state = 212, .external_lex_state = 46}, + [1540] = {.lex_state = 212, .external_lex_state = 46}, + [1541] = {.lex_state = 213, .external_lex_state = 47}, + [1542] = {.lex_state = 212, .external_lex_state = 46}, + [1543] = {.lex_state = 212, .external_lex_state = 46}, + [1544] = {.lex_state = 198, .external_lex_state = 31}, + [1545] = {.lex_state = 212, .external_lex_state = 46}, + [1546] = {.lex_state = 212, .external_lex_state = 46}, + [1547] = {.lex_state = 212, .external_lex_state = 46}, + [1548] = {.lex_state = 212, .external_lex_state = 46}, + [1549] = {.lex_state = 212, .external_lex_state = 46}, + [1550] = {.lex_state = 212, .external_lex_state = 46}, + [1551] = {.lex_state = 213, .external_lex_state = 47}, + [1552] = {.lex_state = 212, .external_lex_state = 46}, + [1553] = {.lex_state = 212, .external_lex_state = 46}, + [1554] = {.lex_state = 212, .external_lex_state = 46}, + [1555] = {.lex_state = 212, .external_lex_state = 46}, + [1556] = {.lex_state = 212, .external_lex_state = 46}, + [1557] = {.lex_state = 212, .external_lex_state = 46}, + [1558] = {.lex_state = 245, .external_lex_state = 45}, + [1559] = {.lex_state = 205, .external_lex_state = 48}, + [1560] = {.lex_state = 212, .external_lex_state = 46}, + [1561] = {.lex_state = 212, .external_lex_state = 46}, + [1562] = {.lex_state = 212, .external_lex_state = 46}, + [1563] = {.lex_state = 212, .external_lex_state = 46}, + [1564] = {.lex_state = 212, .external_lex_state = 46}, + [1565] = {.lex_state = 212, .external_lex_state = 46}, + [1566] = {.lex_state = 213, .external_lex_state = 47}, + [1567] = {.lex_state = 241, .external_lex_state = 17}, + [1568] = {.lex_state = 212, .external_lex_state = 46}, + [1569] = {.lex_state = 241, .external_lex_state = 40}, + [1570] = {.lex_state = 212, .external_lex_state = 46}, + [1571] = {.lex_state = 241, .external_lex_state = 40}, + [1572] = {.lex_state = 212, .external_lex_state = 46}, + [1573] = {.lex_state = 212, .external_lex_state = 46}, + [1574] = {.lex_state = 212, .external_lex_state = 46}, + [1575] = {.lex_state = 213, .external_lex_state = 47}, + [1576] = {.lex_state = 212, .external_lex_state = 46}, + [1577] = {.lex_state = 245, .external_lex_state = 45}, + [1578] = {.lex_state = 198, .external_lex_state = 31}, + [1579] = {.lex_state = 198, .external_lex_state = 31}, + [1580] = {.lex_state = 121, .external_lex_state = 49}, + [1581] = {.lex_state = 205}, + [1582] = {.lex_state = 241, .external_lex_state = 40}, + [1583] = {.lex_state = 241, .external_lex_state = 40}, + [1584] = {.lex_state = 205}, + [1585] = {.lex_state = 241, .external_lex_state = 40}, + [1586] = {.lex_state = 205}, + [1587] = {.lex_state = 121, .external_lex_state = 49}, + [1588] = {.lex_state = 205}, + [1589] = {.lex_state = 241, .external_lex_state = 40}, + [1590] = {.lex_state = 205}, + [1591] = {.lex_state = 241, .external_lex_state = 40}, + [1592] = {.lex_state = 241, .external_lex_state = 40}, + [1593] = {.lex_state = 205}, + [1594] = {.lex_state = 205}, + [1595] = {.lex_state = 205}, + [1596] = {.lex_state = 241, .external_lex_state = 40}, + [1597] = {.lex_state = 241, .external_lex_state = 40}, + [1598] = {.lex_state = 205}, + [1599] = {.lex_state = 205}, + [1600] = {.lex_state = 205}, + [1601] = {.lex_state = 241, .external_lex_state = 40}, + [1602] = {.lex_state = 205}, + [1603] = {.lex_state = 205}, + [1604] = {.lex_state = 205}, + [1605] = {.lex_state = 198, .external_lex_state = 31}, + [1606] = {.lex_state = 198, .external_lex_state = 31}, + [1607] = {.lex_state = 198, .external_lex_state = 31}, + [1608] = {.lex_state = 198, .external_lex_state = 31}, + [1609] = {.lex_state = 241, .external_lex_state = 17}, + [1610] = {.lex_state = 198, .external_lex_state = 31}, + [1611] = {.lex_state = 198, .external_lex_state = 31}, + [1612] = {.lex_state = 198, .external_lex_state = 31}, + [1613] = {.lex_state = 198, .external_lex_state = 31}, + [1614] = {.lex_state = 205}, + [1615] = {.lex_state = 205}, + [1616] = {.lex_state = 198, .external_lex_state = 31}, + [1617] = {.lex_state = 198, .external_lex_state = 31}, + [1618] = {.lex_state = 198, .external_lex_state = 31}, + [1619] = {.lex_state = 198, .external_lex_state = 31}, + [1620] = {.lex_state = 198, .external_lex_state = 31}, + [1621] = {.lex_state = 198, .external_lex_state = 31}, + [1622] = {.lex_state = 198, .external_lex_state = 31}, + [1623] = {.lex_state = 198, .external_lex_state = 31}, + [1624] = {.lex_state = 198, .external_lex_state = 31}, + [1625] = {.lex_state = 198, .external_lex_state = 31}, + [1626] = {.lex_state = 198, .external_lex_state = 31}, + [1627] = {.lex_state = 198, .external_lex_state = 31}, + [1628] = {.lex_state = 198, .external_lex_state = 31}, + [1629] = {.lex_state = 198, .external_lex_state = 31}, + [1630] = {.lex_state = 198, .external_lex_state = 31}, + [1631] = {.lex_state = 198, .external_lex_state = 31}, + [1632] = {.lex_state = 198, .external_lex_state = 31}, + [1633] = {.lex_state = 198, .external_lex_state = 31}, + [1634] = {.lex_state = 198, .external_lex_state = 31}, + [1635] = {.lex_state = 198, .external_lex_state = 31}, + [1636] = {.lex_state = 198, .external_lex_state = 31}, + [1637] = {.lex_state = 198, .external_lex_state = 31}, + [1638] = {.lex_state = 205}, + [1639] = {.lex_state = 198, .external_lex_state = 31}, + [1640] = {.lex_state = 198, .external_lex_state = 31}, + [1641] = {.lex_state = 205}, + [1642] = {.lex_state = 241, .external_lex_state = 40}, + [1643] = {.lex_state = 205}, + [1644] = {.lex_state = 205}, + [1645] = {.lex_state = 198, .external_lex_state = 31}, + [1646] = {.lex_state = 241, .external_lex_state = 40}, + [1647] = {.lex_state = 198, .external_lex_state = 31}, + [1648] = {.lex_state = 198, .external_lex_state = 31}, + [1649] = {.lex_state = 198, .external_lex_state = 31}, + [1650] = {.lex_state = 205}, + [1651] = {.lex_state = 198, .external_lex_state = 31}, + [1652] = {.lex_state = 198, .external_lex_state = 31}, + [1653] = {.lex_state = 198, .external_lex_state = 31}, + [1654] = {.lex_state = 198, .external_lex_state = 31}, + [1655] = {.lex_state = 198, .external_lex_state = 31}, + [1656] = {.lex_state = 198, .external_lex_state = 31}, + [1657] = {.lex_state = 198, .external_lex_state = 31}, + [1658] = {.lex_state = 198, .external_lex_state = 31}, + [1659] = {.lex_state = 241, .external_lex_state = 40}, + [1660] = {.lex_state = 198, .external_lex_state = 31}, + [1661] = {.lex_state = 198, .external_lex_state = 31}, + [1662] = {.lex_state = 198, .external_lex_state = 31}, + [1663] = {.lex_state = 198, .external_lex_state = 31}, + [1664] = {.lex_state = 205}, + [1665] = {.lex_state = 198, .external_lex_state = 31}, + [1666] = {.lex_state = 198, .external_lex_state = 31}, + [1667] = {.lex_state = 198, .external_lex_state = 31}, + [1668] = {.lex_state = 205}, + [1669] = {.lex_state = 121, .external_lex_state = 49}, + [1670] = {.lex_state = 205}, + [1671] = {.lex_state = 241, .external_lex_state = 40}, + [1672] = {.lex_state = 241, .external_lex_state = 40}, + [1673] = {.lex_state = 205}, + [1674] = {.lex_state = 205}, + [1675] = {.lex_state = 205}, + [1676] = {.lex_state = 205}, + [1677] = {.lex_state = 205}, + [1678] = {.lex_state = 205}, + [1679] = {.lex_state = 205}, + [1680] = {.lex_state = 205}, + [1681] = {.lex_state = 205}, + [1682] = {.lex_state = 121, .external_lex_state = 49}, + [1683] = {.lex_state = 121, .external_lex_state = 49}, + [1684] = {.lex_state = 121, .external_lex_state = 49}, + [1685] = {.lex_state = 121, .external_lex_state = 49}, + [1686] = {.lex_state = 121, .external_lex_state = 49}, + [1687] = {.lex_state = 121, .external_lex_state = 49}, + [1688] = {.lex_state = 121, .external_lex_state = 49}, + [1689] = {.lex_state = 121, .external_lex_state = 49}, + [1690] = {.lex_state = 121, .external_lex_state = 49}, + [1691] = {.lex_state = 121, .external_lex_state = 49}, + [1692] = {.lex_state = 121, .external_lex_state = 49}, + [1693] = {.lex_state = 121, .external_lex_state = 49}, + [1694] = {.lex_state = 121, .external_lex_state = 49}, + [1695] = {.lex_state = 205}, + [1696] = {.lex_state = 205}, + [1697] = {.lex_state = 209, .external_lex_state = 50}, + [1698] = {.lex_state = 215, .external_lex_state = 51}, + [1699] = {.lex_state = 215, .external_lex_state = 51}, + [1700] = {.lex_state = 205}, + [1701] = {.lex_state = 121, .external_lex_state = 49}, + [1702] = {.lex_state = 197, .external_lex_state = 52}, + [1703] = {.lex_state = 197, .external_lex_state = 52}, + [1704] = {.lex_state = 197, .external_lex_state = 52}, + [1705] = {.lex_state = 197, .external_lex_state = 52}, + [1706] = {.lex_state = 197, .external_lex_state = 52}, + [1707] = {.lex_state = 197, .external_lex_state = 52}, + [1708] = {.lex_state = 197, .external_lex_state = 52}, + [1709] = {.lex_state = 197, .external_lex_state = 52}, + [1710] = {.lex_state = 197, .external_lex_state = 52}, + [1711] = {.lex_state = 197, .external_lex_state = 52}, + [1712] = {.lex_state = 197, .external_lex_state = 52}, + [1713] = {.lex_state = 197, .external_lex_state = 52}, + [1714] = {.lex_state = 197, .external_lex_state = 52}, + [1715] = {.lex_state = 197, .external_lex_state = 52}, + [1716] = {.lex_state = 197, .external_lex_state = 52}, + [1717] = {.lex_state = 197, .external_lex_state = 52}, + [1718] = {.lex_state = 197, .external_lex_state = 52}, + [1719] = {.lex_state = 197, .external_lex_state = 52}, + [1720] = {.lex_state = 197, .external_lex_state = 52}, + [1721] = {.lex_state = 197, .external_lex_state = 52}, + [1722] = {.lex_state = 197, .external_lex_state = 52}, + [1723] = {.lex_state = 197, .external_lex_state = 52}, + [1724] = {.lex_state = 197, .external_lex_state = 52}, + [1725] = {.lex_state = 197, .external_lex_state = 52}, + [1726] = {.lex_state = 241, .external_lex_state = 17}, + [1727] = {.lex_state = 197, .external_lex_state = 52}, + [1728] = {.lex_state = 197, .external_lex_state = 52}, + [1729] = {.lex_state = 197, .external_lex_state = 52}, + [1730] = {.lex_state = 241, .external_lex_state = 17}, + [1731] = {.lex_state = 197, .external_lex_state = 52}, + [1732] = {.lex_state = 197, .external_lex_state = 52}, + [1733] = {.lex_state = 197, .external_lex_state = 52}, + [1734] = {.lex_state = 197, .external_lex_state = 52}, + [1735] = {.lex_state = 197, .external_lex_state = 52}, + [1736] = {.lex_state = 197, .external_lex_state = 52}, + [1737] = {.lex_state = 197, .external_lex_state = 52}, + [1738] = {.lex_state = 197, .external_lex_state = 52}, + [1739] = {.lex_state = 197, .external_lex_state = 52}, + [1740] = {.lex_state = 197, .external_lex_state = 52}, + [1741] = {.lex_state = 197, .external_lex_state = 52}, + [1742] = {.lex_state = 197, .external_lex_state = 52}, + [1743] = {.lex_state = 197, .external_lex_state = 52}, + [1744] = {.lex_state = 200, .external_lex_state = 52}, + [1745] = {.lex_state = 197, .external_lex_state = 52}, + [1746] = {.lex_state = 197, .external_lex_state = 52}, + [1747] = {.lex_state = 197, .external_lex_state = 52}, + [1748] = {.lex_state = 197, .external_lex_state = 52}, + [1749] = {.lex_state = 197, .external_lex_state = 52}, + [1750] = {.lex_state = 197, .external_lex_state = 52}, + [1751] = {.lex_state = 197, .external_lex_state = 52}, + [1752] = {.lex_state = 197, .external_lex_state = 52}, + [1753] = {.lex_state = 197, .external_lex_state = 52}, + [1754] = {.lex_state = 197, .external_lex_state = 52}, + [1755] = {.lex_state = 197, .external_lex_state = 52}, + [1756] = {.lex_state = 197, .external_lex_state = 52}, + [1757] = {.lex_state = 197, .external_lex_state = 52}, + [1758] = {.lex_state = 197, .external_lex_state = 52}, + [1759] = {.lex_state = 197, .external_lex_state = 52}, + [1760] = {.lex_state = 197, .external_lex_state = 52}, + [1761] = {.lex_state = 197, .external_lex_state = 52}, + [1762] = {.lex_state = 197, .external_lex_state = 52}, + [1763] = {.lex_state = 197, .external_lex_state = 52}, + [1764] = {.lex_state = 197, .external_lex_state = 52}, + [1765] = {.lex_state = 197, .external_lex_state = 52}, + [1766] = {.lex_state = 197, .external_lex_state = 52}, + [1767] = {.lex_state = 197, .external_lex_state = 52}, + [1768] = {.lex_state = 197, .external_lex_state = 52}, + [1769] = {.lex_state = 202, .external_lex_state = 52}, + [1770] = {.lex_state = 202, .external_lex_state = 52}, + [1771] = {.lex_state = 202, .external_lex_state = 52}, + [1772] = {.lex_state = 202, .external_lex_state = 52}, + [1773] = {.lex_state = 202, .external_lex_state = 52}, + [1774] = {.lex_state = 202, .external_lex_state = 52}, + [1775] = {.lex_state = 202, .external_lex_state = 52}, + [1776] = {.lex_state = 202, .external_lex_state = 52}, + [1777] = {.lex_state = 202, .external_lex_state = 52}, + [1778] = {.lex_state = 202, .external_lex_state = 52}, + [1779] = {.lex_state = 202, .external_lex_state = 52}, + [1780] = {.lex_state = 202, .external_lex_state = 52}, + [1781] = {.lex_state = 247, .external_lex_state = 49}, + [1782] = {.lex_state = 202, .external_lex_state = 52}, + [1783] = {.lex_state = 202, .external_lex_state = 52}, + [1784] = {.lex_state = 202, .external_lex_state = 52}, + [1785] = {.lex_state = 202, .external_lex_state = 52}, + [1786] = {.lex_state = 202, .external_lex_state = 52}, + [1787] = {.lex_state = 210, .external_lex_state = 50}, + [1788] = {.lex_state = 247, .external_lex_state = 49}, + [1789] = {.lex_state = 202, .external_lex_state = 52}, + [1790] = {.lex_state = 202, .external_lex_state = 52}, + [1791] = {.lex_state = 201, .external_lex_state = 52}, + [1792] = {.lex_state = 202, .external_lex_state = 52}, + [1793] = {.lex_state = 202, .external_lex_state = 52}, + [1794] = {.lex_state = 202, .external_lex_state = 52}, + [1795] = {.lex_state = 202, .external_lex_state = 52}, + [1796] = {.lex_state = 202, .external_lex_state = 52}, + [1797] = {.lex_state = 202, .external_lex_state = 52}, + [1798] = {.lex_state = 202, .external_lex_state = 52}, + [1799] = {.lex_state = 202, .external_lex_state = 52}, + [1800] = {.lex_state = 202, .external_lex_state = 52}, + [1801] = {.lex_state = 202, .external_lex_state = 52}, + [1802] = {.lex_state = 202, .external_lex_state = 52}, + [1803] = {.lex_state = 202, .external_lex_state = 52}, + [1804] = {.lex_state = 202, .external_lex_state = 52}, + [1805] = {.lex_state = 202, .external_lex_state = 52}, + [1806] = {.lex_state = 214}, + [1807] = {.lex_state = 203, .external_lex_state = 52}, + [1808] = {.lex_state = 198, .external_lex_state = 53}, + [1809] = {.lex_state = 203, .external_lex_state = 52}, + [1810] = {.lex_state = 203, .external_lex_state = 52}, + [1811] = {.lex_state = 214}, + [1812] = {.lex_state = 207, .external_lex_state = 43}, + [1813] = {.lex_state = 214}, + [1814] = {.lex_state = 207, .external_lex_state = 43}, + [1815] = {.lex_state = 214}, + [1816] = {.lex_state = 207, .external_lex_state = 43}, + [1817] = {.lex_state = 214}, + [1818] = {.lex_state = 207, .external_lex_state = 43}, + [1819] = {.lex_state = 207, .external_lex_state = 43}, + [1820] = {.lex_state = 203, .external_lex_state = 52}, + [1821] = {.lex_state = 214}, + [1822] = {.lex_state = 214}, + [1823] = {.lex_state = 214}, + [1824] = {.lex_state = 203, .external_lex_state = 52}, + [1825] = {.lex_state = 214}, + [1826] = {.lex_state = 198, .external_lex_state = 53}, + [1827] = {.lex_state = 214}, + [1828] = {.lex_state = 203, .external_lex_state = 52}, + [1829] = {.lex_state = 203, .external_lex_state = 52}, + [1830] = {.lex_state = 214}, + [1831] = {.lex_state = 198, .external_lex_state = 53}, + [1832] = {.lex_state = 214}, + [1833] = {.lex_state = 214}, + [1834] = {.lex_state = 203, .external_lex_state = 52}, + [1835] = {.lex_state = 214}, + [1836] = {.lex_state = 214}, + [1837] = {.lex_state = 203, .external_lex_state = 52}, + [1838] = {.lex_state = 214}, + [1839] = {.lex_state = 214}, + [1840] = {.lex_state = 203, .external_lex_state = 52}, + [1841] = {.lex_state = 214}, + [1842] = {.lex_state = 203, .external_lex_state = 52}, + [1843] = {.lex_state = 214}, + [1844] = {.lex_state = 214}, + [1845] = {.lex_state = 214}, + [1846] = {.lex_state = 214}, + [1847] = {.lex_state = 198, .external_lex_state = 53}, + [1848] = {.lex_state = 214}, + [1849] = {.lex_state = 214}, + [1850] = {.lex_state = 214}, + [1851] = {.lex_state = 214}, + [1852] = {.lex_state = 203, .external_lex_state = 52}, + [1853] = {.lex_state = 203, .external_lex_state = 52}, + [1854] = {.lex_state = 214}, + [1855] = {.lex_state = 214}, + [1856] = {.lex_state = 207, .external_lex_state = 43}, + [1857] = {.lex_state = 214}, + [1858] = {.lex_state = 214}, + [1859] = {.lex_state = 203, .external_lex_state = 52}, + [1860] = {.lex_state = 214}, + [1861] = {.lex_state = 214}, + [1862] = {.lex_state = 214}, + [1863] = {.lex_state = 214}, + [1864] = {.lex_state = 214}, + [1865] = {.lex_state = 207, .external_lex_state = 43}, + [1866] = {.lex_state = 203, .external_lex_state = 52}, + [1867] = {.lex_state = 214}, + [1868] = {.lex_state = 214}, + [1869] = {.lex_state = 203, .external_lex_state = 52}, + [1870] = {.lex_state = 207, .external_lex_state = 43}, + [1871] = {.lex_state = 214}, + [1872] = {.lex_state = 198, .external_lex_state = 53}, + [1873] = {.lex_state = 203, .external_lex_state = 52}, + [1874] = {.lex_state = 214}, + [1875] = {.lex_state = 214}, + [1876] = {.lex_state = 207, .external_lex_state = 43}, + [1877] = {.lex_state = 198, .external_lex_state = 53}, + [1878] = {.lex_state = 214}, + [1879] = {.lex_state = 203, .external_lex_state = 52}, + [1880] = {.lex_state = 214}, + [1881] = {.lex_state = 214}, + [1882] = {.lex_state = 203, .external_lex_state = 52}, + [1883] = {.lex_state = 214}, + [1884] = {.lex_state = 214}, + [1885] = {.lex_state = 214}, + [1886] = {.lex_state = 203, .external_lex_state = 52}, + [1887] = {.lex_state = 198, .external_lex_state = 53}, + [1888] = {.lex_state = 207, .external_lex_state = 43}, + [1889] = {.lex_state = 214}, + [1890] = {.lex_state = 214}, + [1891] = {.lex_state = 207, .external_lex_state = 43}, + [1892] = {.lex_state = 203, .external_lex_state = 52}, + [1893] = {.lex_state = 214}, + [1894] = {.lex_state = 203, .external_lex_state = 52}, + [1895] = {.lex_state = 203, .external_lex_state = 52}, + [1896] = {.lex_state = 214}, + [1897] = {.lex_state = 214}, + [1898] = {.lex_state = 214}, + [1899] = {.lex_state = 207, .external_lex_state = 43}, + [1900] = {.lex_state = 214}, + [1901] = {.lex_state = 203, .external_lex_state = 52}, + [1902] = {.lex_state = 203, .external_lex_state = 52}, + [1903] = {.lex_state = 214}, + [1904] = {.lex_state = 203, .external_lex_state = 52}, + [1905] = {.lex_state = 203, .external_lex_state = 52}, + [1906] = {.lex_state = 214}, + [1907] = {.lex_state = 214}, + [1908] = {.lex_state = 214}, + [1909] = {.lex_state = 214}, + [1910] = {.lex_state = 214}, + [1911] = {.lex_state = 214}, + [1912] = {.lex_state = 203, .external_lex_state = 52}, + [1913] = {.lex_state = 214}, + [1914] = {.lex_state = 214}, + [1915] = {.lex_state = 214}, + [1916] = {.lex_state = 203, .external_lex_state = 52}, + [1917] = {.lex_state = 203, .external_lex_state = 52}, + [1918] = {.lex_state = 203, .external_lex_state = 52}, + [1919] = {.lex_state = 214}, + [1920] = {.lex_state = 207, .external_lex_state = 43}, + [1921] = {.lex_state = 214}, + [1922] = {.lex_state = 205, .external_lex_state = 44}, + [1923] = {.lex_state = 205, .external_lex_state = 44}, + [1924] = {.lex_state = 205, .external_lex_state = 44}, + [1925] = {.lex_state = 205, .external_lex_state = 44}, + [1926] = {.lex_state = 205, .external_lex_state = 44}, + [1927] = {.lex_state = 205, .external_lex_state = 44}, + [1928] = {.lex_state = 205, .external_lex_state = 44}, + [1929] = {.lex_state = 205, .external_lex_state = 44}, + [1930] = {.lex_state = 205, .external_lex_state = 44}, + [1931] = {.lex_state = 205, .external_lex_state = 44}, + [1932] = {.lex_state = 205, .external_lex_state = 44}, + [1933] = {.lex_state = 205, .external_lex_state = 44}, + [1934] = {.lex_state = 205, .external_lex_state = 44}, + [1935] = {.lex_state = 198}, + [1936] = {.lex_state = 198}, + [1937] = {.lex_state = 198}, + [1938] = {.lex_state = 198}, + [1939] = {.lex_state = 198}, + [1940] = {.lex_state = 198}, + [1941] = {.lex_state = 198}, + [1942] = {.lex_state = 254, .external_lex_state = 54}, + [1943] = {.lex_state = 198}, + [1944] = {.lex_state = 254, .external_lex_state = 54}, + [1945] = {.lex_state = 254, .external_lex_state = 54}, + [1946] = {.lex_state = 198}, + [1947] = {.lex_state = 198}, + [1948] = {.lex_state = 198}, + [1949] = {.lex_state = 198}, + [1950] = {.lex_state = 198}, + [1951] = {.lex_state = 198}, + [1952] = {.lex_state = 198}, + [1953] = {.lex_state = 245, .external_lex_state = 45}, + [1954] = {.lex_state = 67, .external_lex_state = 49}, + [1955] = {.lex_state = 208}, + [1956] = {.lex_state = 67, .external_lex_state = 49}, + [1957] = {.lex_state = 67, .external_lex_state = 49}, + [1958] = {.lex_state = 214, .external_lex_state = 55}, + [1959] = {.lex_state = 211, .external_lex_state = 56}, + [1960] = {.lex_state = 214, .external_lex_state = 55}, + [1961] = {.lex_state = 214, .external_lex_state = 55}, + [1962] = {.lex_state = 67, .external_lex_state = 49}, + [1963] = {.lex_state = 214, .external_lex_state = 55}, + [1964] = {.lex_state = 214, .external_lex_state = 55}, + [1965] = {.lex_state = 214, .external_lex_state = 55}, + [1966] = {.lex_state = 214, .external_lex_state = 55}, + [1967] = {.lex_state = 214, .external_lex_state = 55}, + [1968] = {.lex_state = 67, .external_lex_state = 49}, + [1969] = {.lex_state = 214, .external_lex_state = 55}, + [1970] = {.lex_state = 214, .external_lex_state = 55}, + [1971] = {.lex_state = 211, .external_lex_state = 56}, + [1972] = {.lex_state = 211, .external_lex_state = 56}, + [1973] = {.lex_state = 214, .external_lex_state = 55}, + [1974] = {.lex_state = 67, .external_lex_state = 49}, + [1975] = {.lex_state = 67, .external_lex_state = 49}, + [1976] = {.lex_state = 67, .external_lex_state = 49}, + [1977] = {.lex_state = 67, .external_lex_state = 49}, + [1978] = {.lex_state = 67, .external_lex_state = 49}, + [1979] = {.lex_state = 67, .external_lex_state = 49}, + [1980] = {.lex_state = 214}, + [1981] = {.lex_state = 67, .external_lex_state = 49}, + [1982] = {.lex_state = 67, .external_lex_state = 49}, + [1983] = {.lex_state = 214}, + [1984] = {.lex_state = 67, .external_lex_state = 49}, + [1985] = {.lex_state = 67, .external_lex_state = 49}, + [1986] = {.lex_state = 67, .external_lex_state = 49}, + [1987] = {.lex_state = 67, .external_lex_state = 49}, + [1988] = {.lex_state = 67, .external_lex_state = 49}, + [1989] = {.lex_state = 67, .external_lex_state = 49}, + [1990] = {.lex_state = 67, .external_lex_state = 45}, + [1991] = {.lex_state = 254}, + [1992] = {.lex_state = 217, .external_lex_state = 55}, + [1993] = {.lex_state = 67, .external_lex_state = 45}, + [1994] = {.lex_state = 254, .external_lex_state = 54}, + [1995] = {.lex_state = 217, .external_lex_state = 55}, + [1996] = {.lex_state = 67, .external_lex_state = 45}, + [1997] = {.lex_state = 254}, + [1998] = {.lex_state = 217, .external_lex_state = 55}, + [1999] = {.lex_state = 67, .external_lex_state = 45}, + [2000] = {.lex_state = 254, .external_lex_state = 54}, + [2001] = {.lex_state = 254, .external_lex_state = 54}, + [2002] = {.lex_state = 211, .external_lex_state = 56}, + [2003] = {.lex_state = 254}, + [2004] = {.lex_state = 217, .external_lex_state = 55}, + [2005] = {.lex_state = 254, .external_lex_state = 54}, + [2006] = {.lex_state = 254, .external_lex_state = 54}, + [2007] = {.lex_state = 211, .external_lex_state = 56}, + [2008] = {.lex_state = 211, .external_lex_state = 56}, + [2009] = {.lex_state = 67, .external_lex_state = 45}, + [2010] = {.lex_state = 211, .external_lex_state = 56}, + [2011] = {.lex_state = 254, .external_lex_state = 54}, + [2012] = {.lex_state = 67, .external_lex_state = 45}, + [2013] = {.lex_state = 254}, + [2014] = {.lex_state = 254}, + [2015] = {.lex_state = 254}, + [2016] = {.lex_state = 254, .external_lex_state = 54}, + [2017] = {.lex_state = 211, .external_lex_state = 56}, + [2018] = {.lex_state = 254, .external_lex_state = 57}, + [2019] = {.lex_state = 254, .external_lex_state = 57}, + [2020] = {.lex_state = 217, .external_lex_state = 55}, + [2021] = {.lex_state = 217, .external_lex_state = 55}, + [2022] = {.lex_state = 217, .external_lex_state = 55}, + [2023] = {.lex_state = 217, .external_lex_state = 55}, + [2024] = {.lex_state = 254, .external_lex_state = 57}, + [2025] = {.lex_state = 254, .external_lex_state = 57}, + [2026] = {.lex_state = 254, .external_lex_state = 57}, + [2027] = {.lex_state = 254, .external_lex_state = 57}, + [2028] = {.lex_state = 254, .external_lex_state = 57}, + [2029] = {.lex_state = 254, .external_lex_state = 57}, + [2030] = {.lex_state = 254, .external_lex_state = 57}, + [2031] = {.lex_state = 217, .external_lex_state = 55}, + [2032] = {.lex_state = 254, .external_lex_state = 57}, + [2033] = {.lex_state = 254, .external_lex_state = 57}, + [2034] = {.lex_state = 254, .external_lex_state = 57}, + [2035] = {.lex_state = 254, .external_lex_state = 57}, + [2036] = {.lex_state = 254, .external_lex_state = 57}, + [2037] = {.lex_state = 217, .external_lex_state = 55}, + [2038] = {.lex_state = 254, .external_lex_state = 57}, + [2039] = {.lex_state = 254, .external_lex_state = 57}, + [2040] = {.lex_state = 254, .external_lex_state = 57}, + [2041] = {.lex_state = 254, .external_lex_state = 57}, + [2042] = {.lex_state = 254, .external_lex_state = 57}, + [2043] = {.lex_state = 254, .external_lex_state = 57}, + [2044] = {.lex_state = 254, .external_lex_state = 57}, + [2045] = {.lex_state = 254, .external_lex_state = 57}, + [2046] = {.lex_state = 254, .external_lex_state = 57}, + [2047] = {.lex_state = 254, .external_lex_state = 57}, + [2048] = {.lex_state = 254, .external_lex_state = 57}, + [2049] = {.lex_state = 254, .external_lex_state = 57}, + [2050] = {.lex_state = 254, .external_lex_state = 57}, + [2051] = {.lex_state = 217, .external_lex_state = 55}, + [2052] = {.lex_state = 217, .external_lex_state = 55}, + [2053] = {.lex_state = 217, .external_lex_state = 55}, + [2054] = {.lex_state = 217, .external_lex_state = 55}, + [2055] = {.lex_state = 254, .external_lex_state = 57}, + [2056] = {.lex_state = 254, .external_lex_state = 57}, + [2057] = {.lex_state = 254, .external_lex_state = 57}, + [2058] = {.lex_state = 254, .external_lex_state = 57}, + [2059] = {.lex_state = 217, .external_lex_state = 55}, + [2060] = {.lex_state = 254, .external_lex_state = 57}, + [2061] = {.lex_state = 254, .external_lex_state = 57}, + [2062] = {.lex_state = 254, .external_lex_state = 57}, + [2063] = {.lex_state = 254, .external_lex_state = 57}, + [2064] = {.lex_state = 217, .external_lex_state = 55}, + [2065] = {.lex_state = 254}, + [2066] = {.lex_state = 217, .external_lex_state = 55}, + [2067] = {.lex_state = 217, .external_lex_state = 55}, + [2068] = {.lex_state = 254, .external_lex_state = 57}, + [2069] = {.lex_state = 217, .external_lex_state = 55}, + [2070] = {.lex_state = 217, .external_lex_state = 55}, + [2071] = {.lex_state = 196, .external_lex_state = 55}, + [2072] = {.lex_state = 196, .external_lex_state = 55}, + [2073] = {.lex_state = 196, .external_lex_state = 55}, + [2074] = {.lex_state = 217, .external_lex_state = 55}, + [2075] = {.lex_state = 217}, + [2076] = {.lex_state = 217, .external_lex_state = 48}, + [2077] = {.lex_state = 196, .external_lex_state = 55}, + [2078] = {.lex_state = 217}, + [2079] = {.lex_state = 217, .external_lex_state = 48}, + [2080] = {.lex_state = 217, .external_lex_state = 48}, + [2081] = {.lex_state = 217, .external_lex_state = 48}, + [2082] = {.lex_state = 217, .external_lex_state = 48}, + [2083] = {.lex_state = 217}, + [2084] = {.lex_state = 217, .external_lex_state = 48}, + [2085] = {.lex_state = 217}, + [2086] = {.lex_state = 217, .external_lex_state = 48}, + [2087] = {.lex_state = 217}, + [2088] = {.lex_state = 217}, + [2089] = {.lex_state = 217, .external_lex_state = 48}, + [2090] = {.lex_state = 196, .external_lex_state = 55}, + [2091] = {.lex_state = 217, .external_lex_state = 48}, + [2092] = {.lex_state = 217}, + [2093] = {.lex_state = 217}, + [2094] = {.lex_state = 217}, + [2095] = {.lex_state = 217}, + [2096] = {.lex_state = 217, .external_lex_state = 48}, + [2097] = {.lex_state = 217}, + [2098] = {.lex_state = 217}, + [2099] = {.lex_state = 217}, + [2100] = {.lex_state = 254, .external_lex_state = 58}, + [2101] = {.lex_state = 198}, + [2102] = {.lex_state = 217}, + [2103] = {.lex_state = 217}, + [2104] = {.lex_state = 254, .external_lex_state = 58}, + [2105] = {.lex_state = 254}, + [2106] = {.lex_state = 254}, + [2107] = {.lex_state = 254, .external_lex_state = 58}, + [2108] = {.lex_state = 254, .external_lex_state = 58}, + [2109] = {.lex_state = 254, .external_lex_state = 58}, + [2110] = {.lex_state = 254, .external_lex_state = 58}, + [2111] = {.lex_state = 254}, + [2112] = {.lex_state = 254, .external_lex_state = 58}, + [2113] = {.lex_state = 254, .external_lex_state = 58}, + [2114] = {.lex_state = 254}, + [2115] = {.lex_state = 198}, + [2116] = {.lex_state = 198}, + [2117] = {.lex_state = 198}, + [2118] = {.lex_state = 254, .external_lex_state = 58}, + [2119] = {.lex_state = 254}, + [2120] = {.lex_state = 254, .external_lex_state = 58}, + [2121] = {.lex_state = 254}, + [2122] = {.lex_state = 198}, + [2123] = {.lex_state = 198}, + [2124] = {.lex_state = 254}, + [2125] = {.lex_state = 198}, + [2126] = {.lex_state = 254, .external_lex_state = 58}, + [2127] = {.lex_state = 254, .external_lex_state = 58}, + [2128] = {.lex_state = 241, .external_lex_state = 45}, + [2129] = {.lex_state = 254}, + [2130] = {.lex_state = 241, .external_lex_state = 45}, + [2131] = {.lex_state = 254}, + [2132] = {.lex_state = 254}, + [2133] = {.lex_state = 198}, + [2134] = {.lex_state = 254, .external_lex_state = 58}, + [2135] = {.lex_state = 254, .external_lex_state = 58}, + [2136] = {.lex_state = 254, .external_lex_state = 59}, + [2137] = {.lex_state = 254, .external_lex_state = 59}, + [2138] = {.lex_state = 198}, + [2139] = {.lex_state = 254, .external_lex_state = 58}, + [2140] = {.lex_state = 196}, + [2141] = {.lex_state = 254, .external_lex_state = 58}, + [2142] = {.lex_state = 241, .external_lex_state = 45}, + [2143] = {.lex_state = 198}, + [2144] = {.lex_state = 254, .external_lex_state = 58}, + [2145] = {.lex_state = 254, .external_lex_state = 58}, + [2146] = {.lex_state = 198}, + [2147] = {.lex_state = 241, .external_lex_state = 45}, + [2148] = {.lex_state = 198}, + [2149] = {.lex_state = 198}, + [2150] = {.lex_state = 254}, + [2151] = {.lex_state = 241, .external_lex_state = 45}, + [2152] = {.lex_state = 254}, + [2153] = {.lex_state = 254, .external_lex_state = 58}, + [2154] = {.lex_state = 254}, + [2155] = {.lex_state = 241, .external_lex_state = 45}, + [2156] = {.lex_state = 241, .external_lex_state = 45}, + [2157] = {.lex_state = 254}, + [2158] = {.lex_state = 254}, + [2159] = {.lex_state = 254}, + [2160] = {.lex_state = 254}, + [2161] = {.lex_state = 241, .external_lex_state = 45}, + [2162] = {.lex_state = 254}, + [2163] = {.lex_state = 254}, + [2164] = {.lex_state = 254}, + [2165] = {.lex_state = 254, .external_lex_state = 59}, + [2166] = {.lex_state = 241, .external_lex_state = 45}, + [2167] = {.lex_state = 254, .external_lex_state = 59}, + [2168] = {.lex_state = 254}, + [2169] = {.lex_state = 254}, + [2170] = {.lex_state = 254}, + [2171] = {.lex_state = 254, .external_lex_state = 58}, + [2172] = {.lex_state = 254}, + [2173] = {.lex_state = 254, .external_lex_state = 58}, + [2174] = {.lex_state = 254, .external_lex_state = 58}, + [2175] = {.lex_state = 254, .external_lex_state = 58}, + [2176] = {.lex_state = 254}, + [2177] = {.lex_state = 254, .external_lex_state = 58}, + [2178] = {.lex_state = 241, .external_lex_state = 45}, + [2179] = {.lex_state = 241, .external_lex_state = 45}, + [2180] = {.lex_state = 254}, + [2181] = {.lex_state = 254, .external_lex_state = 58}, + [2182] = {.lex_state = 254}, + [2183] = {.lex_state = 254}, + [2184] = {.lex_state = 241, .external_lex_state = 45}, + [2185] = {.lex_state = 254}, + [2186] = {.lex_state = 198}, + [2187] = {.lex_state = 254}, + [2188] = {.lex_state = 196}, + [2189] = {.lex_state = 254}, + [2190] = {.lex_state = 254}, + [2191] = {.lex_state = 254}, + [2192] = {.lex_state = 196}, + [2193] = {.lex_state = 254}, + [2194] = {.lex_state = 254, .external_lex_state = 58}, + [2195] = {.lex_state = 254, .external_lex_state = 58}, + [2196] = {.lex_state = 254}, + [2197] = {.lex_state = 196}, + [2198] = {.lex_state = 254}, + [2199] = {.lex_state = 254}, + [2200] = {.lex_state = 254}, + [2201] = {.lex_state = 254}, + [2202] = {.lex_state = 196}, + [2203] = {.lex_state = 196}, + [2204] = {.lex_state = 254}, + [2205] = {.lex_state = 254, .external_lex_state = 60}, + [2206] = {.lex_state = 254}, + [2207] = {.lex_state = 254, .external_lex_state = 60}, + [2208] = {.lex_state = 196}, + [2209] = {.lex_state = 254}, + [2210] = {.lex_state = 196}, + [2211] = {.lex_state = 241, .external_lex_state = 45}, + [2212] = {.lex_state = 254}, + [2213] = {.lex_state = 254}, + [2214] = {.lex_state = 196}, + [2215] = {.lex_state = 254}, + [2216] = {.lex_state = 254}, + [2217] = {.lex_state = 196}, + [2218] = {.lex_state = 254, .external_lex_state = 58}, + [2219] = {.lex_state = 254, .external_lex_state = 58}, + [2220] = {.lex_state = 254}, + [2221] = {.lex_state = 196}, + [2222] = {.lex_state = 254, .external_lex_state = 58}, + [2223] = {.lex_state = 254}, + [2224] = {.lex_state = 254}, + [2225] = {.lex_state = 196}, + [2226] = {.lex_state = 196}, + [2227] = {.lex_state = 254}, + [2228] = {.lex_state = 254}, + [2229] = {.lex_state = 254}, + [2230] = {.lex_state = 254}, + [2231] = {.lex_state = 241, .external_lex_state = 45}, + [2232] = {.lex_state = 254}, + [2233] = {.lex_state = 196}, + [2234] = {.lex_state = 254}, + [2235] = {.lex_state = 254}, + [2236] = {.lex_state = 196}, + [2237] = {.lex_state = 254}, + [2238] = {.lex_state = 254}, + [2239] = {.lex_state = 254, .external_lex_state = 59}, + [2240] = {.lex_state = 196}, + [2241] = {.lex_state = 196}, + [2242] = {.lex_state = 254}, + [2243] = {.lex_state = 254, .external_lex_state = 59}, + [2244] = {.lex_state = 241, .external_lex_state = 45}, + [2245] = {.lex_state = 241, .external_lex_state = 45}, + [2246] = {.lex_state = 196}, + [2247] = {.lex_state = 196}, + [2248] = {.lex_state = 254}, + [2249] = {.lex_state = 254}, + [2250] = {.lex_state = 198}, + [2251] = {.lex_state = 198}, + [2252] = {.lex_state = 196}, + [2253] = {.lex_state = 196}, + [2254] = {.lex_state = 254, .external_lex_state = 58}, + [2255] = {.lex_state = 254, .external_lex_state = 60}, + [2256] = {.lex_state = 254}, + [2257] = {.lex_state = 254, .external_lex_state = 60}, + [2258] = {.lex_state = 254, .external_lex_state = 58}, + [2259] = {.lex_state = 254, .external_lex_state = 58}, + [2260] = {.lex_state = 254, .external_lex_state = 58}, + [2261] = {.lex_state = 196}, + [2262] = {.lex_state = 254}, + [2263] = {.lex_state = 254}, + [2264] = {.lex_state = 196}, + [2265] = {.lex_state = 196}, + [2266] = {.lex_state = 254}, + [2267] = {.lex_state = 196}, + [2268] = {.lex_state = 254}, + [2269] = {.lex_state = 254}, + [2270] = {.lex_state = 196}, + [2271] = {.lex_state = 254}, + [2272] = {.lex_state = 241, .external_lex_state = 45}, + [2273] = {.lex_state = 241, .external_lex_state = 45}, + [2274] = {.lex_state = 254}, + [2275] = {.lex_state = 254}, + [2276] = {.lex_state = 254}, + [2277] = {.lex_state = 196}, + [2278] = {.lex_state = 254}, + [2279] = {.lex_state = 254}, + [2280] = {.lex_state = 196}, + [2281] = {.lex_state = 254, .external_lex_state = 58}, + [2282] = {.lex_state = 254}, + [2283] = {.lex_state = 196}, + [2284] = {.lex_state = 254}, + [2285] = {.lex_state = 254}, + [2286] = {.lex_state = 254}, + [2287] = {.lex_state = 254, .external_lex_state = 58}, + [2288] = {.lex_state = 254}, + [2289] = {.lex_state = 196}, + [2290] = {.lex_state = 196}, + [2291] = {.lex_state = 254}, + [2292] = {.lex_state = 254}, + [2293] = {.lex_state = 254}, + [2294] = {.lex_state = 254}, + [2295] = {.lex_state = 254, .external_lex_state = 60}, + [2296] = {.lex_state = 254}, + [2297] = {.lex_state = 254}, + [2298] = {.lex_state = 196}, + [2299] = {.lex_state = 254}, + [2300] = {.lex_state = 198}, + [2301] = {.lex_state = 198}, + [2302] = {.lex_state = 196}, + [2303] = {.lex_state = 254}, + [2304] = {.lex_state = 254}, + [2305] = {.lex_state = 196}, + [2306] = {.lex_state = 198}, + [2307] = {.lex_state = 254}, + [2308] = {.lex_state = 254}, + [2309] = {.lex_state = 254}, + [2310] = {.lex_state = 254}, + [2311] = {.lex_state = 198}, + [2312] = {.lex_state = 254, .external_lex_state = 60}, + [2313] = {.lex_state = 196}, + [2314] = {.lex_state = 196}, + [2315] = {.lex_state = 254}, + [2316] = {.lex_state = 196}, + [2317] = {.lex_state = 254}, + [2318] = {.lex_state = 196}, + [2319] = {.lex_state = 254}, + [2320] = {.lex_state = 196}, + [2321] = {.lex_state = 254}, + [2322] = {.lex_state = 254}, + [2323] = {.lex_state = 196}, + [2324] = {.lex_state = 196}, + [2325] = {.lex_state = 196}, + [2326] = {.lex_state = 254}, + [2327] = {.lex_state = 254}, + [2328] = {.lex_state = 196}, + [2329] = {.lex_state = 254}, + [2330] = {.lex_state = 254}, + [2331] = {.lex_state = 254}, + [2332] = {.lex_state = 254}, + [2333] = {.lex_state = 254}, + [2334] = {.lex_state = 196}, + [2335] = {.lex_state = 254}, + [2336] = {.lex_state = 254}, + [2337] = {.lex_state = 196}, + [2338] = {.lex_state = 196}, + [2339] = {.lex_state = 198}, +}; + +static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { + [0] = { + [ts_builtin_sym_end] = ACTIONS(1), + [sym_word] = ACTIONS(1), + [anon_sym_for] = ACTIONS(1), + [anon_sym_in] = ACTIONS(1), + [anon_sym_while] = ACTIONS(1), + [anon_sym_until] = ACTIONS(1), + [anon_sym_do] = ACTIONS(1), + [anon_sym_done] = ACTIONS(1), + [anon_sym_if] = ACTIONS(1), + [anon_sym_then] = ACTIONS(1), + [anon_sym_fi] = ACTIONS(1), + [anon_sym_elif] = ACTIONS(1), + [anon_sym_else] = ACTIONS(1), + [anon_sym_case] = ACTIONS(1), + [anon_sym_esac] = ACTIONS(1), + [anon_sym_LPAREN] = ACTIONS(1), + [anon_sym_PIPE] = ACTIONS(1), + [anon_sym_RPAREN] = ACTIONS(1), + [anon_sym_SEMI_SEMI] = ACTIONS(1), + [anon_sym_LBRACE] = ACTIONS(1), + [anon_sym_RBRACE] = ACTIONS(1), + [anon_sym_AMP_AMP] = ACTIONS(1), + [anon_sym_PIPE_PIPE] = ACTIONS(1), + [anon_sym_BANG] = ACTIONS(1), + [anon_sym_EQ] = ACTIONS(1), + [anon_sym_LT] = ACTIONS(1), + [anon_sym_GT] = ACTIONS(1), + [anon_sym_GT_GT] = ACTIONS(1), + [anon_sym_AMP_GT] = ACTIONS(1), + [anon_sym_AMP_GT_GT] = ACTIONS(1), + [anon_sym_LT_AMP] = ACTIONS(1), + [anon_sym_GT_AMP] = ACTIONS(1), + [anon_sym_GT_PIPE] = ACTIONS(1), + [anon_sym_LT_AMP_DASH] = ACTIONS(1), + [anon_sym_GT_AMP_DASH] = ACTIONS(1), + [anon_sym_LT_LT] = ACTIONS(1), + [anon_sym_LT_LT_DASH] = ACTIONS(1), + [anon_sym_PIPE_AMP] = ACTIONS(1), + [anon_sym_DOLLAR_LPAREN_LPAREN] = ACTIONS(1), + [anon_sym_STAR_EQ] = ACTIONS(1), + [anon_sym_SLASH_EQ] = ACTIONS(1), + [anon_sym_PERCENT_EQ] = ACTIONS(1), + [anon_sym_LT_LT_EQ] = ACTIONS(1), + [anon_sym_GT_GT_EQ] = ACTIONS(1), + [anon_sym_AMP_EQ] = ACTIONS(1), + [anon_sym_CARET_EQ] = ACTIONS(1), + [anon_sym_PIPE_EQ] = ACTIONS(1), + [anon_sym_CARET] = ACTIONS(1), + [anon_sym_AMP] = ACTIONS(1), + [anon_sym_LT_EQ] = ACTIONS(1), + [anon_sym_GT_EQ] = ACTIONS(1), + [anon_sym_PLUS] = ACTIONS(1), + [anon_sym_DASH] = ACTIONS(1), + [anon_sym_STAR] = ACTIONS(1), + [anon_sym_SLASH] = ACTIONS(1), + [anon_sym_PERCENT] = ACTIONS(1), + [anon_sym_QMARK] = ACTIONS(1), + [anon_sym_COLON] = ACTIONS(1), + [anon_sym_DASH2] = ACTIONS(1), + [anon_sym_PLUS2] = ACTIONS(1), + [anon_sym_TILDE] = ACTIONS(1), + [aux_sym_concatenation_token1] = ACTIONS(1), + [anon_sym_DOLLAR] = ACTIONS(1), + [anon_sym_DQUOTE] = ACTIONS(1), + [sym_raw_string] = ACTIONS(1), + [sym_number] = ACTIONS(1), + [anon_sym_POUND] = ACTIONS(1), + [anon_sym_DOLLAR_LBRACE] = ACTIONS(1), + [anon_sym_DASH3] = ACTIONS(1), + [anon_sym_COLON_EQ] = ACTIONS(1), + [anon_sym_EQ2] = ACTIONS(1), + [anon_sym_COLON_QMARK] = ACTIONS(1), + [anon_sym_QMARK2] = ACTIONS(1), + [anon_sym_PLUS3] = ACTIONS(1), + [anon_sym_PERCENT_PERCENT] = ACTIONS(1), + [anon_sym_DOLLAR_LPAREN] = ACTIONS(1), + [anon_sym_BQUOTE] = ACTIONS(1), + [sym_comment] = ACTIONS(3), + [anon_sym_AT] = ACTIONS(1), + [anon_sym_0] = ACTIONS(1), + [anon_sym__] = ACTIONS(1), + [anon_sym_SEMI] = ACTIONS(1), + [sym_heredoc_start] = ACTIONS(1), + [sym_simple_heredoc_body] = ACTIONS(1), + [sym__heredoc_body_beginning] = ACTIONS(1), + [sym_heredoc_content] = ACTIONS(1), + [sym_heredoc_end] = ACTIONS(1), + [sym_file_descriptor] = ACTIONS(1), + [sym__empty_value] = ACTIONS(1), + [sym__concat] = ACTIONS(1), + [sym_variable_name] = ACTIONS(1), + [sym_regex] = ACTIONS(1), + [sym__expansion_word] = ACTIONS(1), + [sym_extglob_pattern] = ACTIONS(1), + [sym__bare_dollar] = ACTIONS(1), + [sym__immediate_double_hash] = ACTIONS(1), + [sym___error_recovery] = ACTIONS(1), + }, + [1] = { + [sym_program] = STATE(2331), + [sym__statements] = STATE(2330), + [sym__statement_not_pipeline] = STATE(2125), + [sym_redirected_statement] = STATE(1006), + [sym_for_statement] = STATE(1006), + [sym_while_statement] = STATE(1006), + [sym_if_statement] = STATE(1006), + [sym_case_statement] = STATE(1006), + [sym_function_definition] = STATE(1006), + [sym_compound_statement] = STATE(1006), + [sym_subshell] = STATE(1006), + [sym_pipeline] = STATE(1175), + [sym_list] = STATE(1006), + [sym_negated_command] = STATE(1006), + [sym_command] = STATE(1006), + [sym_command_name] = STATE(183), + [sym_variable_assignment] = STATE(236), + [sym__variable_assignments] = STATE(1006), + [sym_file_redirect] = STATE(685), + [sym_arithmetic_expansion] = STATE(291), + [sym_concatenation] = STATE(636), + [sym_string] = STATE(291), + [sym_simple_expansion] = STATE(291), + [sym_expansion] = STATE(291), + [sym_command_substitution] = STATE(291), + [aux_sym__statements_repeat1] = STATE(133), + [aux_sym_redirected_statement_repeat2] = STATE(1219), + [aux_sym_command_repeat1] = STATE(743), + [ts_builtin_sym_end] = ACTIONS(5), + [sym_word] = ACTIONS(7), + [anon_sym_for] = ACTIONS(9), + [anon_sym_while] = ACTIONS(11), + [anon_sym_until] = ACTIONS(11), + [anon_sym_if] = ACTIONS(13), + [anon_sym_case] = ACTIONS(15), + [anon_sym_LPAREN] = ACTIONS(17), + [anon_sym_LBRACE] = ACTIONS(19), + [anon_sym_BANG] = ACTIONS(21), + [anon_sym_LT] = ACTIONS(23), + [anon_sym_GT] = ACTIONS(23), + [anon_sym_GT_GT] = ACTIONS(23), + [anon_sym_AMP_GT] = ACTIONS(23), + [anon_sym_AMP_GT_GT] = ACTIONS(23), + [anon_sym_LT_AMP] = ACTIONS(23), + [anon_sym_GT_AMP] = ACTIONS(23), + [anon_sym_GT_PIPE] = ACTIONS(23), + [anon_sym_LT_AMP_DASH] = ACTIONS(25), + [anon_sym_GT_AMP_DASH] = ACTIONS(25), + [anon_sym_DOLLAR_LPAREN_LPAREN] = ACTIONS(27), + [anon_sym_DOLLAR] = ACTIONS(29), + [anon_sym_DQUOTE] = ACTIONS(31), + [sym_raw_string] = ACTIONS(33), + [sym_number] = ACTIONS(33), + [anon_sym_DOLLAR_LBRACE] = ACTIONS(35), + [anon_sym_DOLLAR_LPAREN] = ACTIONS(37), + [anon_sym_BQUOTE] = ACTIONS(39), + [sym_comment] = ACTIONS(3), + [sym_file_descriptor] = ACTIONS(41), + [sym_variable_name] = ACTIONS(43), + }, +}; + +static const uint16_t ts_small_parse_table[] = { + [0] = 36, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(47), 1, + anon_sym_fi, + ACTIONS(49), 1, + anon_sym_elif, + ACTIONS(51), 1, + anon_sym_else, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(4), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2199), 1, + sym_else_clause, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(2015), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [135] = 36, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(49), 1, + anon_sym_elif, + ACTIONS(51), 1, + anon_sym_else, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(77), 1, + anon_sym_fi, + STATE(5), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2294), 1, + sym_else_clause, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(2013), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [270] = 36, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(49), 1, + anon_sym_elif, + ACTIONS(51), 1, + anon_sym_else, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(79), 1, + anon_sym_fi, + STATE(24), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2190), 1, + sym_else_clause, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(2003), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [405] = 36, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(49), 1, + anon_sym_elif, + ACTIONS(51), 1, + anon_sym_else, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(81), 1, + anon_sym_fi, + STATE(24), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2269), 1, + sym_else_clause, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(1991), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [540] = 36, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(49), 1, + anon_sym_elif, + ACTIONS(51), 1, + anon_sym_else, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(83), 1, + anon_sym_fi, + STATE(24), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2158), 1, + sym_else_clause, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(2014), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [675] = 36, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(49), 1, + anon_sym_elif, + ACTIONS(51), 1, + anon_sym_else, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(85), 1, + anon_sym_fi, + STATE(6), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2288), 1, + sym_else_clause, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(1997), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [810] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(99), 1, + anon_sym_LF, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2118), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [938] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + ACTIONS(127), 1, + anon_sym_LF, + STATE(8), 1, + aux_sym__case_item_last_repeat2, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2108), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [1066] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(99), 1, + anon_sym_LF, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2159), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [1194] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(129), 1, + anon_sym_LF, + STATE(14), 1, + aux_sym__case_item_last_repeat2, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2162), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [1322] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(131), 1, + anon_sym_LF, + STATE(34), 1, + aux_sym__case_item_last_repeat2, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2163), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [1450] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(99), 1, + anon_sym_LF, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2164), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [1578] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(99), 1, + anon_sym_LF, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2152), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [1706] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(133), 1, + anon_sym_LF, + STATE(23), 1, + aux_sym__case_item_last_repeat2, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2168), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [1834] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(135), 1, + anon_sym_LF, + STATE(10), 1, + aux_sym__case_item_last_repeat2, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2169), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [1962] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(99), 1, + anon_sym_LF, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2170), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [2090] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(137), 1, + anon_sym_LF, + STATE(13), 1, + aux_sym__case_item_last_repeat2, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2172), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [2218] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(99), 1, + anon_sym_LF, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2122), 1, + sym__statement_not_pipeline, + STATE(2126), 1, + sym__statements, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [2346] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(139), 1, + anon_sym_LF, + STATE(17), 1, + aux_sym__case_item_last_repeat2, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2180), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [2474] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(99), 1, + anon_sym_LF, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2122), 1, + sym__statement_not_pipeline, + STATE(2127), 1, + sym__statements, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [2602] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(99), 1, + anon_sym_LF, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2120), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [2730] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(99), 1, + anon_sym_LF, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2157), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [2858] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(141), 1, + sym_word, + ACTIONS(144), 1, + anon_sym_for, + ACTIONS(150), 1, + anon_sym_if, + ACTIONS(155), 1, + anon_sym_case, + ACTIONS(158), 1, + anon_sym_LPAREN, + ACTIONS(161), 1, + anon_sym_LBRACE, + ACTIONS(164), 1, + anon_sym_BANG, + ACTIONS(173), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(176), 1, + anon_sym_DOLLAR, + ACTIONS(179), 1, + anon_sym_DQUOTE, + ACTIONS(185), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(188), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(191), 1, + anon_sym_BQUOTE, + ACTIONS(194), 1, + sym_file_descriptor, + ACTIONS(197), 1, + sym_variable_name, + STATE(24), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(147), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(170), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(182), 2, + sym_raw_string, + sym_number, + ACTIONS(153), 3, + anon_sym_fi, + anon_sym_elif, + anon_sym_else, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(167), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [2982] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + ACTIONS(200), 1, + anon_sym_LF, + STATE(19), 1, + aux_sym__case_item_last_repeat2, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2112), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [3110] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(99), 1, + anon_sym_LF, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2100), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [3238] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(24), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + ACTIONS(202), 3, + anon_sym_fi, + anon_sym_elif, + anon_sym_else, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [3362] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + ACTIONS(204), 1, + anon_sym_LF, + STATE(21), 1, + aux_sym__case_item_last_repeat2, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2107), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [3490] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + ACTIONS(206), 1, + anon_sym_LF, + STATE(22), 1, + aux_sym__case_item_last_repeat2, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2109), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [3618] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(99), 1, + anon_sym_LF, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2110), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [3746] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + ACTIONS(208), 1, + anon_sym_LF, + STATE(26), 1, + aux_sym__case_item_last_repeat2, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2113), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [3874] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(27), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + ACTIONS(210), 3, + anon_sym_fi, + anon_sym_elif, + anon_sym_else, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [3998] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + ACTIONS(212), 1, + anon_sym_LF, + STATE(30), 1, + aux_sym__case_item_last_repeat2, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2104), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [4126] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(99), 1, + anon_sym_LF, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2154), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [4254] = 33, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(214), 1, + anon_sym_do, + STATE(118), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(280), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1235), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(1324), 1, + sym_do_group, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1174), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [4379] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(141), 1, + sym_word, + ACTIONS(144), 1, + anon_sym_for, + ACTIONS(150), 1, + anon_sym_if, + ACTIONS(155), 1, + anon_sym_case, + ACTIONS(158), 1, + anon_sym_LPAREN, + ACTIONS(161), 1, + anon_sym_LBRACE, + ACTIONS(164), 1, + anon_sym_BANG, + ACTIONS(173), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(176), 1, + anon_sym_DOLLAR, + ACTIONS(179), 1, + anon_sym_DQUOTE, + ACTIONS(185), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(188), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(191), 1, + anon_sym_BQUOTE, + ACTIONS(194), 1, + sym_file_descriptor, + ACTIONS(197), 1, + sym_variable_name, + STATE(36), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(147), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(153), 2, + anon_sym_done, + anon_sym_then, + ACTIONS(170), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(182), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(167), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [4502] = 33, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(216), 1, + anon_sym_do, + STATE(118), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(280), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1187), 1, + sym_do_group, + STATE(1235), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1174), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [4627] = 33, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(218), 1, + anon_sym_do, + STATE(118), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(280), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1235), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(1610), 1, + sym_do_group, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1174), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [4752] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(675), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2323), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [4874] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2223), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [4996] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(238), 1, + anon_sym_done, + STATE(93), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [5118] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2333), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [5240] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(714), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2334), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [5362] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2336), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [5484] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(240), 1, + anon_sym_then, + STATE(36), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [5606] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(242), 1, + anon_sym_fi, + STATE(72), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(256), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1289), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1135), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [5728] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(680), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2265), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [5850] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(244), 1, + anon_sym_done, + STATE(36), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [5972] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(246), 1, + anon_sym_RBRACE, + STATE(98), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(281), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1200), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1141), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [6094] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2321), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [6216] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2327), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [6338] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(745), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2320), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [6460] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2324), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [6582] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2303), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [6704] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(721), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2302), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [6826] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2285), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [6948] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(748), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2280), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [7070] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2274), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [7192] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(678), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2267), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [7314] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2262), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [7436] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(691), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2261), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [7558] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2237), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [7680] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(696), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2236), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [7802] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2185), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [7924] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2322), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [8046] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(707), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2208), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [8168] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2187), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [8290] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(699), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2188), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [8412] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2191), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [8534] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(701), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2192), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [8656] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2196), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [8778] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(248), 1, + anon_sym_fi, + STATE(79), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(256), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1289), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1135), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [8900] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(250), 1, + anon_sym_then, + STATE(36), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9022] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(729), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2328), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9144] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(702), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2197), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9266] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2131), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9388] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2201), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9510] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(703), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2203), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9632] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(141), 1, + sym_word, + ACTIONS(144), 1, + anon_sym_for, + ACTIONS(150), 1, + anon_sym_if, + ACTIONS(153), 1, + anon_sym_fi, + ACTIONS(155), 1, + anon_sym_case, + ACTIONS(158), 1, + anon_sym_LPAREN, + ACTIONS(161), 1, + anon_sym_LBRACE, + ACTIONS(164), 1, + anon_sym_BANG, + ACTIONS(173), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(176), 1, + anon_sym_DOLLAR, + ACTIONS(179), 1, + anon_sym_DQUOTE, + ACTIONS(185), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(188), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(191), 1, + anon_sym_BQUOTE, + ACTIONS(194), 1, + sym_file_descriptor, + ACTIONS(197), 1, + sym_variable_name, + STATE(79), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(256), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1289), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(147), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(170), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(182), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(167), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1135), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9754] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(766), 1, + sym_file_redirect, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2313), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9876] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(252), 1, + anon_sym_done, + STATE(36), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9998] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2213), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [10120] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(704), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2214), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [10242] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2310), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [10364] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2216), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [10486] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(254), 1, + anon_sym_done, + STATE(81), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [10608] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(746), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2305), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [10730] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(736), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2140), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [10852] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2304), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [10974] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(668), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2298), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [11096] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(741), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2217), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [11218] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2247), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [11340] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(256), 1, + anon_sym_done, + STATE(36), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [11462] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2293), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [11584] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(677), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2289), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [11706] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(258), 1, + anon_sym_RBRACE, + STATE(98), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(281), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1200), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1141), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [11828] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2286), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [11950] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(141), 1, + sym_word, + ACTIONS(144), 1, + anon_sym_for, + ACTIONS(150), 1, + anon_sym_if, + ACTIONS(153), 1, + anon_sym_RBRACE, + ACTIONS(155), 1, + anon_sym_case, + ACTIONS(158), 1, + anon_sym_LPAREN, + ACTIONS(161), 1, + anon_sym_LBRACE, + ACTIONS(164), 1, + anon_sym_BANG, + ACTIONS(173), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(176), 1, + anon_sym_DOLLAR, + ACTIONS(179), 1, + anon_sym_DQUOTE, + ACTIONS(185), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(188), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(191), 1, + anon_sym_BQUOTE, + ACTIONS(194), 1, + sym_file_descriptor, + ACTIONS(197), 1, + sym_variable_name, + STATE(98), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(281), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1200), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(147), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(170), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(182), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(167), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1141), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [12072] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(737), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2325), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [12194] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2224), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [12316] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(749), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2283), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [12438] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(725), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2226), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [12560] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2282), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [12682] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2232), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [12804] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(260), 1, + anon_sym_then, + STATE(36), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [12926] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2235), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [13048] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2315), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [13170] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(679), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2277), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [13292] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(700), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2233), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [13414] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2238), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [13536] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2318), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [13658] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(698), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2225), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [13780] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(262), 1, + anon_sym_RBRACE, + STATE(98), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(281), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1200), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1141), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [13902] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(264), 1, + anon_sym_then, + STATE(36), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [14024] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2275), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [14146] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(681), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2270), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [14268] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(266), 1, + anon_sym_done, + STATE(48), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [14390] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(141), 1, + sym_word, + ACTIONS(144), 1, + anon_sym_for, + ACTIONS(150), 1, + anon_sym_if, + ACTIONS(153), 1, + anon_sym_do, + ACTIONS(155), 1, + anon_sym_case, + ACTIONS(158), 1, + anon_sym_LPAREN, + ACTIONS(161), 1, + anon_sym_LBRACE, + ACTIONS(164), 1, + anon_sym_BANG, + ACTIONS(173), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(176), 1, + anon_sym_DOLLAR, + ACTIONS(179), 1, + anon_sym_DQUOTE, + ACTIONS(185), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(188), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(191), 1, + anon_sym_BQUOTE, + ACTIONS(194), 1, + sym_file_descriptor, + ACTIONS(197), 1, + sym_variable_name, + STATE(118), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(280), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1235), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(147), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(170), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(182), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(167), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1174), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [14512] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(689), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2241), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [14634] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2248), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [14756] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2268), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [14878] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(710), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2253), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [15000] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(730), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2316), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [15122] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(682), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2264), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [15244] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2263), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [15366] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(49), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(281), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1200), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1141), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [15485] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(45), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [15604] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(73), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [15723] = 42, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(137), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(253), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1010), 1, + sym__variable_assignments, + STATE(1012), 1, + sym_command, + STATE(1013), 1, + sym_negated_command, + STATE(1015), 1, + sym_list, + STATE(1018), 1, + sym_subshell, + STATE(1019), 1, + sym_compound_statement, + STATE(1021), 1, + sym_function_definition, + STATE(1022), 1, + sym_case_statement, + STATE(1023), 1, + sym_if_statement, + STATE(1024), 1, + sym_while_statement, + STATE(1025), 1, + sym_for_statement, + STATE(1027), 1, + sym_redirected_statement, + STATE(1166), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [15864] = 42, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(137), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(255), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1095), 1, + sym_function_definition, + STATE(1102), 1, + sym_redirected_statement, + STATE(1130), 1, + sym_for_statement, + STATE(1144), 1, + sym_while_statement, + STATE(1145), 1, + sym_if_statement, + STATE(1147), 1, + sym__variable_assignments, + STATE(1151), 1, + sym_command, + STATE(1153), 1, + sym_negated_command, + STATE(1155), 1, + sym_list, + STATE(1161), 1, + sym_compound_statement, + STATE(1165), 1, + sym_subshell, + STATE(1180), 1, + sym_case_statement, + STATE(1194), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [16005] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(105), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [16124] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(35), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(280), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1235), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1174), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [16243] = 42, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + sym_word, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(21), 1, + anon_sym_BANG, + ACTIONS(27), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(29), 1, + anon_sym_DOLLAR, + ACTIONS(31), 1, + anon_sym_DQUOTE, + ACTIONS(35), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(37), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(39), 1, + anon_sym_BQUOTE, + ACTIONS(41), 1, + sym_file_descriptor, + ACTIONS(43), 1, + sym_variable_name, + STATE(137), 1, + aux_sym__statements_repeat1, + STATE(183), 1, + sym_command_name, + STATE(238), 1, + sym_variable_assignment, + STATE(636), 1, + sym_concatenation, + STATE(685), 1, + sym_file_redirect, + STATE(743), 1, + aux_sym_command_repeat1, + STATE(1031), 1, + sym_list, + STATE(1035), 1, + sym_redirected_statement, + STATE(1037), 1, + sym_for_statement, + STATE(1041), 1, + sym_while_statement, + STATE(1043), 1, + sym_if_statement, + STATE(1051), 1, + sym_case_statement, + STATE(1059), 1, + sym_function_definition, + STATE(1066), 1, + sym_compound_statement, + STATE(1074), 1, + sym_subshell, + STATE(1084), 1, + sym_negated_command, + STATE(1087), 1, + sym__variable_assignments, + STATE(1088), 1, + sym_command, + STATE(1107), 1, + sym_pipeline, + STATE(1219), 1, + aux_sym_redirected_statement_repeat2, + STATE(2125), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(25), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(33), 2, + sym_raw_string, + sym_number, + STATE(291), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(23), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [16384] = 42, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(137), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(226), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1003), 1, + sym__variable_assignments, + STATE(1008), 1, + sym_negated_command, + STATE(1026), 1, + sym_compound_statement, + STATE(1044), 1, + sym_redirected_statement, + STATE(1045), 1, + sym_for_statement, + STATE(1046), 1, + sym_while_statement, + STATE(1047), 1, + sym_if_statement, + STATE(1048), 1, + sym_case_statement, + STATE(1049), 1, + sym_function_definition, + STATE(1064), 1, + sym_subshell, + STATE(1071), 1, + sym_list, + STATE(1073), 1, + sym_command, + STATE(1113), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [16525] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(113), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(281), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1200), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1141), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [16644] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(114), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [16763] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(268), 1, + sym_word, + ACTIONS(271), 1, + anon_sym_for, + ACTIONS(277), 1, + anon_sym_if, + ACTIONS(280), 1, + anon_sym_case, + ACTIONS(283), 1, + anon_sym_LPAREN, + ACTIONS(286), 1, + anon_sym_LBRACE, + ACTIONS(289), 1, + anon_sym_BANG, + ACTIONS(298), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(301), 1, + anon_sym_DOLLAR, + ACTIONS(304), 1, + anon_sym_DQUOTE, + ACTIONS(310), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(313), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(316), 1, + anon_sym_BQUOTE, + ACTIONS(319), 1, + sym_file_descriptor, + ACTIONS(322), 1, + sym_variable_name, + STATE(137), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(277), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1191), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(274), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(295), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(307), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(292), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1162), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [16882] = 42, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(137), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(228), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1050), 1, + sym_case_statement, + STATE(1054), 1, + sym__variable_assignments, + STATE(1055), 1, + sym_command, + STATE(1056), 1, + sym_negated_command, + STATE(1058), 1, + sym_list, + STATE(1060), 1, + sym_subshell, + STATE(1062), 1, + sym_compound_statement, + STATE(1063), 1, + sym_function_definition, + STATE(1067), 1, + sym_if_statement, + STATE(1068), 1, + sym_while_statement, + STATE(1069), 1, + sym_for_statement, + STATE(1070), 1, + sym_redirected_statement, + STATE(1114), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [17023] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(37), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(280), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1235), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1174), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [17142] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(96), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(281), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1200), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1141), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [17261] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(38), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(280), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1235), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1174), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [17380] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(185), 1, + sym_command_name, + STATE(257), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1117), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1119), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [17496] = 29, + ACTIONS(3), 1, + sym_comment, + ACTIONS(325), 1, + sym_word, + ACTIONS(327), 1, + anon_sym_for, + ACTIONS(331), 1, + anon_sym_if, + ACTIONS(333), 1, + anon_sym_case, + ACTIONS(335), 1, + anon_sym_LPAREN, + ACTIONS(337), 1, + anon_sym_LBRACE, + ACTIONS(339), 1, + anon_sym_BANG, + ACTIONS(345), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(347), 1, + anon_sym_DOLLAR, + ACTIONS(349), 1, + anon_sym_DQUOTE, + ACTIONS(353), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(355), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(357), 1, + anon_sym_BQUOTE, + ACTIONS(359), 1, + sym_file_descriptor, + ACTIONS(361), 1, + sym_variable_name, + STATE(287), 1, + sym_command_name, + STATE(732), 1, + aux_sym_command_repeat1, + STATE(767), 1, + sym_variable_assignment, + STATE(928), 1, + sym_concatenation, + STATE(961), 1, + sym_file_redirect, + STATE(1440), 1, + aux_sym_redirected_statement_repeat2, + STATE(1445), 1, + sym_pipeline, + ACTIONS(329), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(343), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(351), 2, + sym_raw_string, + sym_number, + STATE(777), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(341), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1514), 13, + sym__statement_not_pipeline, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [17610] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(189), 1, + sym_command_name, + STATE(298), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1179), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1181), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [17726] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(363), 1, + sym_word, + ACTIONS(365), 1, + anon_sym_BANG, + ACTIONS(373), 1, + sym_file_descriptor, + ACTIONS(375), 1, + sym_variable_name, + STATE(259), 1, + sym_command_name, + STATE(618), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(713), 1, + aux_sym_command_repeat1, + STATE(726), 1, + sym_file_redirect, + STATE(1411), 1, + sym_pipeline, + STATE(1420), 1, + aux_sym_redirected_statement_repeat2, + STATE(2123), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(369), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(371), 2, + sym_raw_string, + sym_number, + STATE(734), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(367), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1395), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [17842] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(363), 1, + sym_word, + ACTIONS(365), 1, + anon_sym_BANG, + ACTIONS(373), 1, + sym_file_descriptor, + ACTIONS(375), 1, + sym_variable_name, + STATE(259), 1, + sym_command_name, + STATE(620), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(713), 1, + aux_sym_command_repeat1, + STATE(726), 1, + sym_file_redirect, + STATE(1420), 1, + aux_sym_redirected_statement_repeat2, + STATE(1431), 1, + sym_pipeline, + STATE(2123), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(369), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(371), 2, + sym_raw_string, + sym_number, + STATE(734), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(367), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1406), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [17958] = 29, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(189), 1, + sym_command_name, + STATE(301), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(1444), 1, + sym_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1170), 13, + sym__statement_not_pipeline, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18072] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(184), 1, + sym_command_name, + STATE(267), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1097), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1094), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18188] = 29, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(184), 1, + sym_command_name, + STATE(248), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(1443), 1, + sym_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1317), 13, + sym__statement_not_pipeline, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18302] = 29, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(185), 1, + sym_command_name, + STATE(254), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(1442), 1, + sym_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1170), 13, + sym__statement_not_pipeline, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18416] = 29, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(363), 1, + sym_word, + ACTIONS(365), 1, + anon_sym_BANG, + ACTIONS(373), 1, + sym_file_descriptor, + ACTIONS(375), 1, + sym_variable_name, + STATE(259), 1, + sym_command_name, + STATE(619), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(713), 1, + aux_sym_command_repeat1, + STATE(726), 1, + sym_file_redirect, + STATE(1420), 1, + aux_sym_redirected_statement_repeat2, + STATE(1447), 1, + sym_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(369), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(371), 2, + sym_raw_string, + sym_number, + STATE(734), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(367), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1170), 13, + sym__statement_not_pipeline, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18530] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(325), 1, + sym_word, + ACTIONS(327), 1, + anon_sym_for, + ACTIONS(331), 1, + anon_sym_if, + ACTIONS(333), 1, + anon_sym_case, + ACTIONS(335), 1, + anon_sym_LPAREN, + ACTIONS(337), 1, + anon_sym_LBRACE, + ACTIONS(339), 1, + anon_sym_BANG, + ACTIONS(345), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(347), 1, + anon_sym_DOLLAR, + ACTIONS(349), 1, + anon_sym_DQUOTE, + ACTIONS(353), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(355), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(357), 1, + anon_sym_BQUOTE, + ACTIONS(359), 1, + sym_file_descriptor, + ACTIONS(361), 1, + sym_variable_name, + STATE(287), 1, + sym_command_name, + STATE(708), 1, + sym_variable_assignment, + STATE(732), 1, + aux_sym_command_repeat1, + STATE(928), 1, + sym_concatenation, + STATE(961), 1, + sym_file_redirect, + STATE(1434), 1, + sym_pipeline, + STATE(1440), 1, + aux_sym_redirected_statement_repeat2, + STATE(2101), 1, + sym__statement_not_pipeline, + ACTIONS(329), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(343), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(351), 2, + sym_raw_string, + sym_number, + STATE(777), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(341), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1435), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18646] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + sym_word, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(21), 1, + anon_sym_BANG, + ACTIONS(27), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(29), 1, + anon_sym_DOLLAR, + ACTIONS(31), 1, + anon_sym_DQUOTE, + ACTIONS(35), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(37), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(39), 1, + anon_sym_BQUOTE, + ACTIONS(41), 1, + sym_file_descriptor, + ACTIONS(43), 1, + sym_variable_name, + STATE(183), 1, + sym_command_name, + STATE(266), 1, + sym_variable_assignment, + STATE(636), 1, + sym_concatenation, + STATE(685), 1, + sym_file_redirect, + STATE(743), 1, + aux_sym_command_repeat1, + STATE(1154), 1, + sym_pipeline, + STATE(1219), 1, + aux_sym_redirected_statement_repeat2, + STATE(2125), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(25), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(33), 2, + sym_raw_string, + sym_number, + STATE(291), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(23), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1168), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18762] = 29, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(191), 1, + sym_command_name, + STATE(295), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(1453), 1, + sym_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1170), 13, + sym__statement_not_pipeline, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18876] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(191), 1, + sym_command_name, + STATE(296), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1265), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1264), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18992] = 29, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + sym_word, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(21), 1, + anon_sym_BANG, + ACTIONS(27), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(29), 1, + anon_sym_DOLLAR, + ACTIONS(31), 1, + anon_sym_DQUOTE, + ACTIONS(35), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(37), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(39), 1, + anon_sym_BQUOTE, + ACTIONS(41), 1, + sym_file_descriptor, + ACTIONS(43), 1, + sym_variable_name, + STATE(183), 1, + sym_command_name, + STATE(276), 1, + sym_variable_assignment, + STATE(636), 1, + sym_concatenation, + STATE(685), 1, + sym_file_redirect, + STATE(743), 1, + aux_sym_command_repeat1, + STATE(1219), 1, + aux_sym_redirected_statement_repeat2, + STATE(1456), 1, + sym_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(25), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(33), 2, + sym_raw_string, + sym_number, + STATE(291), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(23), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1170), 13, + sym__statement_not_pipeline, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [19106] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(363), 1, + sym_word, + ACTIONS(365), 1, + anon_sym_BANG, + ACTIONS(373), 1, + sym_file_descriptor, + ACTIONS(375), 1, + sym_variable_name, + STATE(259), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(626), 1, + sym_variable_assignment, + STATE(713), 1, + aux_sym_command_repeat1, + STATE(726), 1, + sym_file_redirect, + STATE(1408), 1, + sym_pipeline, + STATE(1420), 1, + aux_sym_redirected_statement_repeat2, + STATE(2123), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(369), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(371), 2, + sym_raw_string, + sym_number, + STATE(734), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(367), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1407), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [19222] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(377), 1, + sym_variable_name, + STATE(189), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1192), 1, + sym_variable_assignment, + STATE(1297), 1, + aux_sym_redirected_statement_repeat2, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + STATE(1268), 7, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_compound_statement, + sym_subshell, + sym_command, + sym__variable_assignments, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [19319] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(27), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(29), 1, + anon_sym_DOLLAR, + ACTIONS(31), 1, + anon_sym_DQUOTE, + ACTIONS(35), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(37), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(39), 1, + anon_sym_BQUOTE, + ACTIONS(41), 1, + sym_file_descriptor, + ACTIONS(377), 1, + sym_variable_name, + STATE(183), 1, + sym_command_name, + STATE(636), 1, + sym_concatenation, + STATE(685), 1, + sym_file_redirect, + STATE(743), 1, + aux_sym_command_repeat1, + STATE(1266), 1, + aux_sym_redirected_statement_repeat2, + STATE(1267), 1, + sym_variable_assignment, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(25), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(33), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(291), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + STATE(1268), 7, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_compound_statement, + sym_subshell, + sym_command, + sym__variable_assignments, + ACTIONS(23), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [19416] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(377), 1, + sym_variable_name, + STATE(191), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1286), 1, + sym_variable_assignment, + STATE(1309), 1, + aux_sym_redirected_statement_repeat2, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + STATE(1268), 7, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_compound_statement, + sym_subshell, + sym_command, + sym__variable_assignments, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [19513] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(327), 1, + anon_sym_for, + ACTIONS(331), 1, + anon_sym_if, + ACTIONS(335), 1, + anon_sym_LPAREN, + ACTIONS(337), 1, + anon_sym_LBRACE, + ACTIONS(345), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(347), 1, + anon_sym_DOLLAR, + ACTIONS(349), 1, + anon_sym_DQUOTE, + ACTIONS(353), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(355), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(357), 1, + anon_sym_BQUOTE, + ACTIONS(359), 1, + sym_file_descriptor, + ACTIONS(377), 1, + sym_variable_name, + STATE(287), 1, + sym_command_name, + STATE(732), 1, + aux_sym_command_repeat1, + STATE(928), 1, + sym_concatenation, + STATE(961), 1, + sym_file_redirect, + STATE(1247), 1, + sym_variable_assignment, + STATE(1458), 1, + aux_sym_redirected_statement_repeat2, + ACTIONS(329), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(343), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(351), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(777), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + STATE(1619), 7, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_compound_statement, + sym_subshell, + sym_command, + sym__variable_assignments, + ACTIONS(341), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [19610] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(377), 1, + sym_variable_name, + STATE(185), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1239), 1, + aux_sym_redirected_statement_repeat2, + STATE(1271), 1, + sym_variable_assignment, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + STATE(1268), 7, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_compound_statement, + sym_subshell, + sym_command, + sym__variable_assignments, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [19707] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(377), 1, + sym_variable_name, + STATE(184), 1, + sym_command_name, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1249), 1, + aux_sym_redirected_statement_repeat2, + STATE(1290), 1, + sym_variable_assignment, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + STATE(1384), 7, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_compound_statement, + sym_subshell, + sym_command, + sym__variable_assignments, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [19804] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(373), 1, + sym_file_descriptor, + ACTIONS(377), 1, + sym_variable_name, + STATE(259), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(713), 1, + aux_sym_command_repeat1, + STATE(726), 1, + sym_file_redirect, + STATE(1193), 1, + sym_variable_assignment, + STATE(1415), 1, + aux_sym_redirected_statement_repeat2, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(369), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(371), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(734), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + STATE(1268), 7, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_compound_statement, + sym_subshell, + sym_command, + sym__variable_assignments, + ACTIONS(367), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [19901] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(387), 1, + sym_variable_name, + ACTIONS(383), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(381), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 29, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [19958] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(393), 1, + sym_variable_name, + ACTIONS(391), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(385), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(389), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 28, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20015] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(399), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(397), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(395), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 29, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20072] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(399), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(397), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(395), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 28, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20128] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(405), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(403), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(401), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 28, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20184] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(411), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(409), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(407), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 28, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20240] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(417), 1, + sym_variable_name, + ACTIONS(415), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(385), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(413), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 27, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20296] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(423), 1, + sym_variable_name, + ACTIONS(421), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(419), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 28, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20351] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(429), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(427), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(425), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 27, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20406] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(411), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(409), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(407), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 27, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20461] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(435), 1, + sym_variable_name, + ACTIONS(433), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(431), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 28, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20516] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(441), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(439), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(437), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 27, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20571] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(447), 1, + sym_variable_name, + ACTIONS(445), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(443), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 28, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20626] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(453), 1, + sym_variable_name, + ACTIONS(451), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(449), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 28, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20681] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(461), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(463), 1, + anon_sym_DOLLAR, + ACTIONS(465), 1, + anon_sym_DQUOTE, + ACTIONS(467), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(469), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(471), 1, + anon_sym_BQUOTE, + ACTIONS(473), 1, + sym__bare_dollar, + STATE(194), 1, + aux_sym_command_repeat2, + STATE(706), 1, + sym_concatenation, + STATE(1204), 1, + sym_subshell, + ACTIONS(455), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(457), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(333), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(459), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [20755] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(455), 1, + sym_file_descriptor, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + STATE(199), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + STATE(1204), 1, + sym_subshell, + ACTIONS(475), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(334), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(459), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [20829] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(423), 1, + sym_variable_name, + ACTIONS(421), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(419), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 27, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20883] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(447), 1, + sym_variable_name, + ACTIONS(445), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(443), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 27, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20937] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(461), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(463), 1, + anon_sym_DOLLAR, + ACTIONS(465), 1, + anon_sym_DQUOTE, + ACTIONS(467), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(469), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(471), 1, + anon_sym_BQUOTE, + ACTIONS(473), 1, + sym__bare_dollar, + STATE(202), 1, + aux_sym_command_repeat2, + STATE(706), 1, + sym_concatenation, + STATE(1263), 1, + sym_subshell, + ACTIONS(491), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(457), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(333), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(493), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21011] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(491), 1, + sym_file_descriptor, + ACTIONS(497), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(499), 1, + anon_sym_DOLLAR, + ACTIONS(501), 1, + anon_sym_DQUOTE, + ACTIONS(503), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(505), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(507), 1, + anon_sym_BQUOTE, + ACTIONS(509), 1, + sym__bare_dollar, + STATE(200), 1, + aux_sym_command_repeat2, + STATE(684), 1, + sym_concatenation, + STATE(1330), 1, + sym_subshell, + ACTIONS(495), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(385), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(493), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21085] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(491), 1, + sym_file_descriptor, + STATE(196), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + STATE(1263), 1, + sym_subshell, + ACTIONS(475), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(334), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(493), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21159] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(455), 1, + sym_file_descriptor, + ACTIONS(497), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(499), 1, + anon_sym_DOLLAR, + ACTIONS(501), 1, + anon_sym_DQUOTE, + ACTIONS(503), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(505), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(507), 1, + anon_sym_BQUOTE, + ACTIONS(509), 1, + sym__bare_dollar, + STATE(201), 1, + aux_sym_command_repeat2, + STATE(684), 1, + sym_concatenation, + STATE(1332), 1, + sym_subshell, + ACTIONS(495), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(385), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(459), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21233] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(455), 1, + sym_file_descriptor, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(489), 1, + sym__bare_dollar, + STATE(242), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + STATE(1204), 1, + sym_subshell, + ACTIONS(511), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(459), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [21304] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(399), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(397), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(395), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 25, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [21357] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(491), 1, + sym_file_descriptor, + STATE(239), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + STATE(1263), 1, + sym_subshell, + ACTIONS(511), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(493), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [21428] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(455), 1, + sym_file_descriptor, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + STATE(219), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + STATE(1204), 1, + sym_subshell, + ACTIONS(511), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(459), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21501] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(491), 1, + sym_file_descriptor, + STATE(243), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + STATE(1263), 1, + sym_subshell, + ACTIONS(511), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(493), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21574] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(518), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(521), 1, + anon_sym_DOLLAR, + ACTIONS(524), 1, + anon_sym_DQUOTE, + ACTIONS(527), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(530), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(533), 1, + anon_sym_BQUOTE, + ACTIONS(536), 2, + sym_file_descriptor, + sym_variable_name, + STATE(192), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(513), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(339), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21638] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(208), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(538), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + STATE(377), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [21688] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(461), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(463), 1, + anon_sym_DOLLAR, + ACTIONS(465), 1, + anon_sym_DQUOTE, + ACTIONS(467), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(469), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(471), 1, + anon_sym_BQUOTE, + ACTIONS(473), 1, + sym__bare_dollar, + STATE(210), 1, + aux_sym_command_repeat2, + STATE(706), 1, + sym_concatenation, + ACTIONS(542), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(457), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(333), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(544), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21756] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + STATE(192), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(339), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [21806] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(552), 1, + sym_file_descriptor, + STATE(206), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(475), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(334), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(550), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21874] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + STATE(192), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(339), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [21924] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(559), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(562), 1, + anon_sym_DOLLAR, + ACTIONS(565), 1, + anon_sym_DQUOTE, + ACTIONS(568), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(571), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(574), 1, + anon_sym_BQUOTE, + ACTIONS(577), 1, + sym_file_descriptor, + ACTIONS(579), 1, + sym__bare_dollar, + STATE(198), 1, + aux_sym_command_repeat2, + STATE(684), 1, + sym_concatenation, + ACTIONS(554), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(385), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(557), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21992] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(542), 1, + sym_file_descriptor, + STATE(206), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(475), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(334), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(544), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22060] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(497), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(499), 1, + anon_sym_DOLLAR, + ACTIONS(501), 1, + anon_sym_DQUOTE, + ACTIONS(503), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(505), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(507), 1, + anon_sym_BQUOTE, + ACTIONS(509), 1, + sym__bare_dollar, + ACTIONS(552), 1, + sym_file_descriptor, + STATE(198), 1, + aux_sym_command_repeat2, + STATE(684), 1, + sym_concatenation, + ACTIONS(495), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(385), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(550), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22128] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(497), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(499), 1, + anon_sym_DOLLAR, + ACTIONS(501), 1, + anon_sym_DQUOTE, + ACTIONS(503), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(505), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(507), 1, + anon_sym_BQUOTE, + ACTIONS(509), 1, + sym__bare_dollar, + ACTIONS(542), 1, + sym_file_descriptor, + STATE(198), 1, + aux_sym_command_repeat2, + STATE(684), 1, + sym_concatenation, + ACTIONS(495), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(385), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(544), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22196] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(461), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(463), 1, + anon_sym_DOLLAR, + ACTIONS(465), 1, + anon_sym_DQUOTE, + ACTIONS(467), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(469), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(471), 1, + anon_sym_BQUOTE, + ACTIONS(473), 1, + sym__bare_dollar, + STATE(210), 1, + aux_sym_command_repeat2, + STATE(706), 1, + sym_concatenation, + ACTIONS(552), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(457), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(333), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(550), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22264] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(208), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(548), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + STATE(377), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [22314] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(411), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(409), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(407), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [22366] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + STATE(211), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(361), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [22416] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(577), 1, + sym_file_descriptor, + ACTIONS(585), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(588), 1, + anon_sym_DOLLAR, + ACTIONS(591), 1, + anon_sym_DQUOTE, + ACTIONS(594), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(597), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(600), 1, + anon_sym_BQUOTE, + ACTIONS(603), 1, + sym__bare_dollar, + STATE(206), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(582), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(334), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(557), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22484] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + STATE(211), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(361), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [22534] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(609), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(612), 1, + anon_sym_DOLLAR, + ACTIONS(615), 1, + anon_sym_DQUOTE, + ACTIONS(618), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(621), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(624), 1, + anon_sym_BQUOTE, + STATE(208), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(536), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(606), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(377), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22598] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(631), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(629), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(627), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 24, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [22650] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(636), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(639), 1, + anon_sym_DOLLAR, + ACTIONS(642), 1, + anon_sym_DQUOTE, + ACTIONS(645), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(648), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(651), 1, + anon_sym_BQUOTE, + ACTIONS(654), 1, + sym__bare_dollar, + STATE(210), 1, + aux_sym_command_repeat2, + STATE(706), 1, + sym_concatenation, + ACTIONS(577), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(633), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(333), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(557), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22718] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(660), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(663), 1, + anon_sym_DOLLAR, + ACTIONS(666), 1, + anon_sym_DQUOTE, + ACTIONS(669), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(672), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(675), 1, + anon_sym_BQUOTE, + ACTIONS(536), 2, + sym_file_descriptor, + sym_variable_name, + STATE(211), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(657), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(361), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22782] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(518), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(521), 1, + anon_sym_DOLLAR, + ACTIONS(524), 1, + anon_sym_DQUOTE, + ACTIONS(527), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(530), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(533), 1, + anon_sym_BQUOTE, + ACTIONS(536), 2, + sym_file_descriptor, + sym_variable_name, + STATE(212), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(678), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(458), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22845] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(536), 1, + sym_file_descriptor, + ACTIONS(684), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(687), 1, + anon_sym_DOLLAR, + ACTIONS(690), 1, + anon_sym_DQUOTE, + ACTIONS(693), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(696), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(699), 1, + anon_sym_BQUOTE, + STATE(213), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(681), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(506), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22908] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(704), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(706), 1, + anon_sym_DOLLAR, + ACTIONS(708), 1, + anon_sym_DQUOTE, + ACTIONS(710), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(712), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(714), 1, + anon_sym_BQUOTE, + ACTIONS(548), 2, + sym_file_descriptor, + ts_builtin_sym_end, + STATE(220), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(702), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(447), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22971] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + STATE(212), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(458), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [23020] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 1, + sym_file_descriptor, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(227), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(716), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(600), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [23083] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 1, + sym_file_descriptor, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(227), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(716), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(600), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [23146] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(577), 1, + sym_file_descriptor, + ACTIONS(585), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(588), 1, + anon_sym_DOLLAR, + ACTIONS(591), 1, + anon_sym_DQUOTE, + ACTIONS(594), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(597), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(600), 1, + anon_sym_BQUOTE, + ACTIONS(603), 1, + sym__bare_dollar, + STATE(218), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(730), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(557), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [23213] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(542), 1, + sym_file_descriptor, + STATE(218), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(511), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(544), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [23280] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(736), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(739), 1, + anon_sym_DOLLAR, + ACTIONS(742), 1, + anon_sym_DQUOTE, + ACTIONS(745), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(748), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(751), 1, + anon_sym_BQUOTE, + ACTIONS(536), 2, + sym_file_descriptor, + ts_builtin_sym_end, + STATE(220), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(733), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(447), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [23343] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(724), 1, + sym_concatenation, + ACTIONS(754), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + STATE(371), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [23392] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(676), 1, + sym_concatenation, + ACTIONS(760), 2, + sym_file_descriptor, + sym_variable_name, + STATE(341), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [23441] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(683), 1, + sym_concatenation, + ACTIONS(754), 2, + sym_file_descriptor, + sym_variable_name, + STATE(340), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [23490] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + STATE(212), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(458), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [23539] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(704), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(706), 1, + anon_sym_DOLLAR, + ACTIONS(708), 1, + anon_sym_DQUOTE, + ACTIONS(710), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(712), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(714), 1, + anon_sym_BQUOTE, + ACTIONS(538), 2, + sym_file_descriptor, + ts_builtin_sym_end, + STATE(220), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(702), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(447), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [23602] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(776), 1, + sym_variable_name, + STATE(752), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + STATE(1136), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(772), 3, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [23665] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(536), 1, + sym_file_descriptor, + ACTIONS(782), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(785), 1, + anon_sym_DOLLAR, + ACTIONS(788), 1, + anon_sym_DQUOTE, + ACTIONS(791), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(794), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(797), 1, + anon_sym_BQUOTE, + STATE(227), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(779), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(600), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [23728] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(806), 1, + sym_variable_name, + STATE(740), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + STATE(1143), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(800), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [23791] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(776), 1, + sym_variable_name, + STATE(688), 1, + sym_terminator, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(809), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + STATE(1136), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(772), 3, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [23854] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 1, + sym_file_descriptor, + ACTIONS(813), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(815), 1, + anon_sym_DOLLAR, + ACTIONS(817), 1, + anon_sym_DQUOTE, + ACTIONS(819), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(821), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(823), 1, + anon_sym_BQUOTE, + STATE(213), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(811), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(506), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [23917] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(829), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(827), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(825), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 23, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [23968] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(447), 1, + sym_variable_name, + ACTIONS(445), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(443), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [24019] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(670), 1, + sym_concatenation, + ACTIONS(760), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + STATE(342), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [24068] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 1, + sym_file_descriptor, + ACTIONS(813), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(815), 1, + anon_sym_DOLLAR, + ACTIONS(817), 1, + anon_sym_DQUOTE, + ACTIONS(819), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(821), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(823), 1, + anon_sym_BQUOTE, + STATE(213), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(811), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(506), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [24131] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(806), 1, + sym_variable_name, + ACTIONS(809), 1, + anon_sym_RPAREN, + STATE(728), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + STATE(1143), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(800), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [24194] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(831), 1, + ts_builtin_sym_end, + ACTIONS(837), 1, + sym_variable_name, + STATE(770), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1131), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(833), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [24257] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(423), 1, + sym_variable_name, + ACTIONS(421), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(419), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [24308] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(837), 1, + sym_variable_name, + ACTIONS(840), 1, + ts_builtin_sym_end, + STATE(794), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1131), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(833), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [24371] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(552), 1, + sym_file_descriptor, + STATE(218), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(511), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(550), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [24436] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(705), 1, + sym_concatenation, + ACTIONS(760), 2, + sym_file_descriptor, + sym_variable_name, + STATE(325), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [24485] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(768), 1, + sym_concatenation, + ACTIONS(754), 2, + sym_file_descriptor, + sym_variable_name, + STATE(337), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [24534] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(542), 1, + sym_file_descriptor, + STATE(218), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(511), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(544), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [24599] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(552), 1, + sym_file_descriptor, + STATE(218), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(511), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(550), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [24666] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(809), 1, + anon_sym_BQUOTE, + ACTIONS(844), 1, + sym_variable_name, + STATE(829), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1142), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(800), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 18, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [24728] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(857), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(871), 1, + sym_file_descriptor, + STATE(1558), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + STATE(2244), 1, + sym__heredoc_expression, + STATE(2245), 1, + sym__heredoc_pipeline, + ACTIONS(849), 2, + anon_sym_PIPE, + anon_sym_PIPE_AMP, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1567), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [24806] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 1, + sym_file_descriptor, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + STATE(263), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(873), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [24866] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 1, + sym_file_descriptor, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + STATE(263), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(873), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [24926] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(776), 1, + sym_variable_name, + ACTIONS(875), 1, + sym_file_descriptor, + STATE(1136), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(766), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [24978] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(760), 1, + sym_file_descriptor, + ACTIONS(879), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(881), 1, + anon_sym_DOLLAR, + ACTIONS(883), 1, + anon_sym_DQUOTE, + ACTIONS(885), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(887), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(889), 1, + anon_sym_BQUOTE, + STATE(1345), 1, + sym_concatenation, + ACTIONS(877), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1173), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [25040] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 1, + sym_file_descriptor, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(263), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(873), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [25102] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(455), 1, + sym_file_descriptor, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + STATE(391), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + STATE(1204), 1, + sym_subshell, + ACTIONS(891), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(796), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(459), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [25172] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(692), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(800), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [25232] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(844), 1, + sym_variable_name, + STATE(848), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1142), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(800), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 18, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [25294] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(806), 1, + sym_variable_name, + ACTIONS(875), 1, + sym_file_descriptor, + STATE(1143), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(766), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [25346] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(740), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(800), 3, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [25408] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(783), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(898), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [25468] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(806), 1, + sym_variable_name, + STATE(1143), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 9, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [25522] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(754), 1, + sym_file_descriptor, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + STATE(1205), 1, + sym_concatenation, + ACTIONS(902), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1118), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [25584] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(491), 1, + sym_file_descriptor, + STATE(306), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + STATE(1263), 1, + sym_subshell, + ACTIONS(891), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(796), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(493), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [25654] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(760), 1, + sym_file_descriptor, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + STATE(1197), 1, + sym_concatenation, + ACTIONS(916), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1111), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [25716] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 1, + sym_file_descriptor, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(263), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(873), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [25778] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(809), 1, + anon_sym_SEMI_SEMI, + ACTIONS(895), 1, + sym_variable_name, + STATE(728), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(800), 3, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [25840] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(536), 1, + sym_file_descriptor, + ACTIONS(782), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(785), 1, + anon_sym_DOLLAR, + ACTIONS(788), 1, + anon_sym_DQUOTE, + ACTIONS(791), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(794), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(797), 1, + anon_sym_BQUOTE, + STATE(263), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(918), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [25902] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(768), 1, + sym_concatenation, + ACTIONS(754), 2, + sym_file_descriptor, + sym_variable_name, + STATE(460), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [25950] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(925), 1, + sym_variable_name, + ACTIONS(923), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(921), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 23, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [26000] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(837), 1, + sym_variable_name, + ACTIONS(927), 1, + ts_builtin_sym_end, + STATE(1131), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 8, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [26056] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(776), 1, + sym_variable_name, + STATE(1136), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 9, + anon_sym_esac, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [26110] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + STATE(1205), 1, + sym_concatenation, + ACTIONS(754), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(929), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1134), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [26172] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(931), 1, + aux_sym_heredoc_redirect_token1, + STATE(1473), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + STATE(2128), 1, + sym__heredoc_expression, + STATE(2184), 1, + sym__heredoc_pipeline, + ACTIONS(849), 2, + anon_sym_PIPE, + anon_sym_PIPE_AMP, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1474), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [26250] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(937), 1, + sym_variable_name, + ACTIONS(935), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(933), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 23, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [26300] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(705), 1, + sym_concatenation, + ACTIONS(760), 2, + sym_file_descriptor, + sym_variable_name, + STATE(501), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [26348] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + STATE(1197), 1, + sym_concatenation, + ACTIONS(760), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(939), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1138), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [26410] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(941), 1, + aux_sym_heredoc_redirect_token1, + STATE(1532), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + STATE(2272), 1, + sym__heredoc_expression, + STATE(2273), 1, + sym__heredoc_pipeline, + ACTIONS(849), 2, + anon_sym_PIPE, + anon_sym_PIPE_AMP, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1533), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [26488] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(943), 1, + aux_sym_heredoc_redirect_token1, + STATE(1475), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + STATE(2178), 1, + sym__heredoc_expression, + STATE(2179), 1, + sym__heredoc_pipeline, + ACTIONS(849), 2, + anon_sym_PIPE, + anon_sym_PIPE_AMP, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1480), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [26566] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(945), 1, + aux_sym_heredoc_redirect_token1, + STATE(1484), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + STATE(2142), 1, + sym__heredoc_pipeline, + STATE(2147), 1, + sym__heredoc_expression, + ACTIONS(849), 2, + anon_sym_PIPE, + anon_sym_PIPE_AMP, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1489), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [26644] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(837), 1, + sym_variable_name, + ACTIONS(875), 2, + sym_file_descriptor, + ts_builtin_sym_end, + STATE(1131), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(766), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [26696] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(825), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(800), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [26756] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(947), 1, + aux_sym_heredoc_redirect_token1, + STATE(1491), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + STATE(2155), 1, + sym__heredoc_pipeline, + STATE(2156), 1, + sym__heredoc_expression, + ACTIONS(849), 2, + anon_sym_PIPE, + anon_sym_PIPE_AMP, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1493), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [26834] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(615), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(949), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [26894] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(773), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(951), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [26954] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(798), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(953), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [27014] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(754), 1, + sym_file_descriptor, + ACTIONS(879), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(881), 1, + anon_sym_DOLLAR, + ACTIONS(883), 1, + anon_sym_DQUOTE, + ACTIONS(885), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(887), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(889), 1, + anon_sym_BQUOTE, + STATE(1359), 1, + sym_concatenation, + ACTIONS(955), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1158), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [27076] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(963), 1, + sym__concat, + STATE(293), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27125] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(760), 1, + sym_file_descriptor, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + STATE(1197), 1, + sym_concatenation, + ACTIONS(965), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1156), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [27184] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(335), 1, + anon_sym_LPAREN, + ACTIONS(455), 1, + sym_file_descriptor, + ACTIONS(969), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(971), 1, + anon_sym_DOLLAR, + ACTIONS(973), 1, + anon_sym_DQUOTE, + ACTIONS(975), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(977), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(979), 1, + anon_sym_BQUOTE, + ACTIONS(981), 1, + sym__bare_dollar, + STATE(465), 1, + aux_sym_command_repeat2, + STATE(949), 1, + sym_concatenation, + STATE(1655), 1, + sym_subshell, + ACTIONS(967), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(830), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(459), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [27253] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(985), 1, + aux_sym_concatenation_token1, + ACTIONS(990), 1, + sym__concat, + STATE(286), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(983), 30, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27302] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(335), 1, + anon_sym_LPAREN, + ACTIONS(491), 1, + sym_file_descriptor, + ACTIONS(969), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(971), 1, + anon_sym_DOLLAR, + ACTIONS(973), 1, + anon_sym_DQUOTE, + ACTIONS(975), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(977), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(979), 1, + anon_sym_BQUOTE, + ACTIONS(981), 1, + sym__bare_dollar, + STATE(434), 1, + aux_sym_command_repeat2, + STATE(949), 1, + sym_concatenation, + STATE(1608), 1, + sym_subshell, + ACTIONS(967), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(830), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(493), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [27371] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(995), 1, + anon_sym_LPAREN, + ACTIONS(998), 1, + aux_sym_concatenation_token1, + ACTIONS(1002), 1, + sym__concat, + STATE(297), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27422] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(998), 1, + aux_sym_concatenation_token1, + ACTIONS(1002), 1, + sym__concat, + STATE(297), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 30, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27471] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(754), 1, + sym_file_descriptor, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + STATE(1205), 1, + sym_concatenation, + ACTIONS(1004), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1185), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [27532] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1006), 1, + aux_sym_concatenation_token1, + ACTIONS(1008), 1, + sym__concat, + STATE(300), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(993), 29, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27581] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1006), 1, + aux_sym_concatenation_token1, + ACTIONS(1008), 1, + sym__concat, + ACTIONS(1010), 1, + anon_sym_LPAREN, + STATE(300), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(993), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27632] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1013), 1, + aux_sym_concatenation_token1, + ACTIONS(1016), 1, + sym__concat, + STATE(293), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(983), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27681] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1019), 1, + aux_sym_concatenation_token1, + ACTIONS(1022), 1, + sym__concat, + STATE(294), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(983), 29, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27730] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(875), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(766), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [27781] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 8, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [27834] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(998), 1, + aux_sym_concatenation_token1, + ACTIONS(1025), 1, + sym__concat, + STATE(286), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 30, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27883] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(844), 1, + sym_variable_name, + STATE(1142), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 8, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [27936] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1027), 1, + sym__concat, + STATE(283), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27985] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1006), 1, + aux_sym_concatenation_token1, + ACTIONS(1029), 1, + sym__concat, + STATE(294), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(957), 29, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28034] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(844), 1, + sym_variable_name, + ACTIONS(875), 1, + sym_file_descriptor, + STATE(1142), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 8, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + ACTIONS(766), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [28085] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1027), 1, + sym__concat, + ACTIONS(1031), 1, + anon_sym_LPAREN, + STATE(283), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28136] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(760), 1, + sym_file_descriptor, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + STATE(1197), 1, + sym_concatenation, + ACTIONS(1034), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1186), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [28197] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(754), 1, + sym_file_descriptor, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + STATE(1205), 1, + sym_concatenation, + ACTIONS(1036), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1152), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [28256] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1038), 1, + aux_sym_concatenation_token1, + ACTIONS(1040), 1, + sym__concat, + STATE(344), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28304] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(552), 1, + sym_file_descriptor, + STATE(390), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(891), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(796), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(550), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [28368] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1042), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28410] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1046), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28452] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1050), 1, + aux_sym_concatenation_token1, + ACTIONS(1053), 1, + sym__concat, + STATE(309), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(983), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28500] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1058), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28542] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1060), 1, + aux_sym_concatenation_token1, + ACTIONS(1062), 1, + sym__concat, + STATE(319), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(957), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28590] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(125), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(184), 1, + sym_command_name, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(742), 1, + sym_variable_assignment, + STATE(1339), 1, + sym_command, + STATE(1340), 1, + sym_subshell, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [28668] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1042), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28710] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1046), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28752] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1072), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28794] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1042), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1044), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [28836] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1046), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1048), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [28878] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1072), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1070), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [28920] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1076), 1, + aux_sym_concatenation_token1, + ACTIONS(1079), 1, + sym__concat, + STATE(319), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(983), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28968] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1082), 1, + aux_sym_concatenation_token1, + ACTIONS(1084), 1, + sym__concat, + STATE(327), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(957), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29016] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1086), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1088), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [29058] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(351), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29106] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1086), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29148] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1098), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1100), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [29190] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(351), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29238] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1102), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1104), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [29280] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1106), 1, + aux_sym_concatenation_token1, + ACTIONS(1109), 1, + sym__concat, + STATE(327), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(983), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29328] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1112), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1114), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [29370] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1118), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [29412] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1120), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1122), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [29454] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1118), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [29496] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1124), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1126), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [29538] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1082), 1, + aux_sym_concatenation_token1, + ACTIONS(1132), 1, + sym__concat, + STATE(320), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1128), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1130), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29586] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1038), 1, + aux_sym_concatenation_token1, + ACTIONS(1134), 1, + sym__concat, + STATE(305), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1128), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1130), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29634] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1142), 1, + anon_sym_EQ, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1148), 13, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [29700] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1060), 1, + aux_sym_concatenation_token1, + ACTIONS(1164), 1, + sym__concat, + STATE(311), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29748] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(351), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29796] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1166), 1, + aux_sym_concatenation_token1, + ACTIONS(1169), 1, + sym__concat, + STATE(338), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(983), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29844] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(351), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1174), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1172), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29892] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1060), 1, + aux_sym_concatenation_token1, + ACTIONS(1164), 1, + sym__concat, + STATE(311), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29940] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1060), 1, + aux_sym_concatenation_token1, + ACTIONS(1164), 1, + sym__concat, + STATE(311), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29988] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1176), 1, + aux_sym_concatenation_token1, + ACTIONS(1178), 1, + sym__concat, + STATE(372), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(546), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30036] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1176), 1, + aux_sym_concatenation_token1, + ACTIONS(1178), 1, + sym__concat, + STATE(372), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1090), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30084] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1180), 1, + aux_sym_concatenation_token1, + ACTIONS(1183), 1, + sym__concat, + STATE(344), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(983), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30132] = 7, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1186), 6, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1188), 19, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [30182] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1186), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1188), 19, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [30226] = 7, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1186), 6, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1188), 19, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [30276] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1027), 1, + sym__concat, + ACTIONS(1190), 1, + anon_sym_LPAREN, + STATE(400), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30326] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1193), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30368] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(232), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(185), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(747), 1, + sym_variable_assignment, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1283), 1, + sym_subshell, + STATE(1298), 1, + sym_command, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [30446] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1197), 1, + sym__concat, + STATE(338), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(957), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30494] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(983), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30536] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + STATE(383), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(795), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [30582] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1193), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30624] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(189), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(786), 1, + sym_variable_assignment, + STATE(1283), 1, + sym_subshell, + STATE(1298), 1, + sym_command, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [30702] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1072), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30744] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1199), 1, + aux_sym_concatenation_token1, + ACTIONS(1201), 1, + sym__concat, + STATE(379), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30792] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1207), 1, + sym_variable_name, + ACTIONS(1205), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1203), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [30840] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1086), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30882] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1209), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1211), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [30924] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1060), 1, + aux_sym_concatenation_token1, + ACTIONS(1164), 1, + sym__concat, + STATE(311), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1174), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1172), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30972] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1098), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31014] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1124), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31056] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(375), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(259), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(713), 1, + aux_sym_command_repeat1, + STATE(747), 1, + sym_variable_assignment, + STATE(1283), 1, + sym_subshell, + STATE(1298), 1, + sym_command, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(371), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(734), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [31134] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1102), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31176] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(191), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(747), 1, + sym_variable_assignment, + STATE(1283), 1, + sym_subshell, + STATE(1298), 1, + sym_command, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [31254] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1098), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31296] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1102), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31338] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(983), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31380] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1213), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1215), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [31422] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1176), 1, + aux_sym_concatenation_token1, + ACTIONS(1178), 1, + sym__concat, + STATE(372), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(540), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31470] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1176), 1, + aux_sym_concatenation_token1, + ACTIONS(1217), 1, + sym__concat, + STATE(309), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(957), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31518] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31560] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1120), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31602] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31644] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1112), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31686] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1176), 1, + aux_sym_concatenation_token1, + ACTIONS(1178), 1, + sym__concat, + STATE(372), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1174), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1172), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31734] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + STATE(383), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(795), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [31780] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1219), 1, + aux_sym_concatenation_token1, + ACTIONS(1222), 1, + sym__concat, + STATE(379), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(983), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31828] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(983), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31870] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1102), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31912] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1098), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31954] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(518), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(521), 1, + anon_sym_DOLLAR, + ACTIONS(524), 1, + anon_sym_DQUOTE, + ACTIONS(527), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(530), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(533), 1, + anon_sym_BQUOTE, + ACTIONS(536), 2, + sym_file_descriptor, + sym_variable_name, + STATE(383), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1225), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(795), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [32014] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1112), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32056] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1199), 1, + aux_sym_concatenation_token1, + ACTIONS(1228), 1, + sym__concat, + STATE(357), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1128), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1130), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32104] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32146] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1120), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32188] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32230] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1124), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32272] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(577), 1, + sym_file_descriptor, + ACTIONS(585), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(588), 1, + anon_sym_DOLLAR, + ACTIONS(591), 1, + anon_sym_DQUOTE, + ACTIONS(594), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(597), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(600), 1, + anon_sym_BQUOTE, + ACTIONS(603), 1, + sym__bare_dollar, + STATE(390), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(1230), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(796), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(557), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [32336] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(542), 1, + sym_file_descriptor, + STATE(390), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(891), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(796), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(544), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [32400] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1193), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32442] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1112), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32484] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1124), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32526] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1116), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32568] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1120), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32610] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1116), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32652] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1058), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32694] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1086), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32736] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1233), 1, + sym__concat, + STATE(293), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 29, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32784] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1072), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32826] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1046), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32868] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1235), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 19, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [32912] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 10, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1237), 19, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [32958] = 9, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 4, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1237), 17, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [33012] = 10, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 4, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1237), 15, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [33068] = 11, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 3, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_CARET, + ACTIONS(1237), 15, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [33126] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 12, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_COLON, + [33194] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 8, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1237), 19, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [33242] = 7, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 6, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1237), 19, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [33292] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1235), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 12, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_COLON, + [33360] = 14, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1235), 1, + anon_sym_EQ, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 14, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [33424] = 13, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1235), 1, + anon_sym_EQ, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 15, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [33486] = 12, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1235), 2, + anon_sym_PIPE, + anon_sym_EQ, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 15, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [33546] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1243), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1245), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [33588] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1042), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [33630] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(29), 1, + anon_sym_DOLLAR, + ACTIONS(31), 1, + anon_sym_DQUOTE, + ACTIONS(35), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(37), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(39), 1, + anon_sym_BQUOTE, + ACTIONS(43), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(183), 1, + sym_command_name, + STATE(636), 1, + sym_concatenation, + STATE(693), 1, + sym_variable_assignment, + STATE(743), 1, + aux_sym_command_repeat1, + STATE(1283), 1, + sym_subshell, + STATE(1298), 1, + sym_command, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(33), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(291), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [33708] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1058), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [33750] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1027), 1, + sym__concat, + ACTIONS(1247), 1, + anon_sym_LPAREN, + STATE(400), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [33800] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1027), 1, + sym__concat, + STATE(400), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 29, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [33848] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(335), 1, + anon_sym_LPAREN, + ACTIONS(345), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(347), 1, + anon_sym_DOLLAR, + ACTIONS(349), 1, + anon_sym_DQUOTE, + ACTIONS(353), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(355), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(357), 1, + anon_sym_BQUOTE, + ACTIONS(361), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(287), 1, + sym_command_name, + STATE(732), 1, + aux_sym_command_repeat1, + STATE(928), 1, + sym_concatenation, + STATE(956), 1, + sym_variable_assignment, + STATE(1343), 1, + sym_file_redirect, + STATE(1606), 1, + sym_subshell, + STATE(1607), 1, + sym_command, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(351), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(777), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [33926] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1112), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [33967] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1250), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [34036] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1072), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34077] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1042), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34118] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1046), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34159] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1072), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34200] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(961), 1, + sym_file_descriptor, + ACTIONS(1254), 1, + aux_sym_concatenation_token1, + ACTIONS(1256), 1, + sym__concat, + STATE(432), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34247] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1098), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34288] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1102), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34329] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1262), 1, + sym_variable_name, + ACTIONS(1260), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1258), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [34376] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 1, + sym_file_descriptor, + ACTIONS(1264), 1, + aux_sym_concatenation_token1, + ACTIONS(1267), 1, + sym__concat, + STATE(432), 1, + aux_sym_concatenation_repeat1, + ACTIONS(983), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34423] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1270), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [34492] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(552), 1, + sym_file_descriptor, + ACTIONS(969), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(971), 1, + anon_sym_DOLLAR, + ACTIONS(973), 1, + anon_sym_DQUOTE, + ACTIONS(975), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(977), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(979), 1, + anon_sym_BQUOTE, + ACTIONS(981), 1, + sym__bare_dollar, + STATE(487), 1, + aux_sym_command_repeat2, + STATE(949), 1, + sym_concatenation, + ACTIONS(967), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(830), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(550), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [34555] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1124), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34596] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1272), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [34665] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1274), 31, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_done, + anon_sym_if, + anon_sym_then, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [34706] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1086), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34747] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1072), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34788] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1046), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34829] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1042), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34870] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1058), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34911] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 1, + sym_file_descriptor, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(567), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1278), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(827), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [34970] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 1, + sym_file_descriptor, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(567), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1278), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(827), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [35029] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1193), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35070] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 1, + sym_file_descriptor, + ACTIONS(1280), 1, + aux_sym_concatenation_token1, + ACTIONS(1283), 1, + sym__concat, + STATE(446), 1, + aux_sym_concatenation_repeat1, + ACTIONS(983), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35117] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1286), 1, + aux_sym_concatenation_token1, + ACTIONS(1288), 1, + sym__concat, + STATE(588), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1174), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(1172), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35164] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1098), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35205] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1290), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [35274] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1102), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35315] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1292), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [35384] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1294), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [35453] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1296), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [35522] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(983), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35563] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1112), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35604] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1116), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35645] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1120), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35686] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(500), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1174), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1172), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35733] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1116), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35774] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(500), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35821] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1298), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [35890] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1213), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1215), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [35931] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1300), 1, + anon_sym_COLON, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36000] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1306), 1, + sym_variable_name, + ACTIONS(1304), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1302), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [36047] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(542), 1, + sym_file_descriptor, + ACTIONS(969), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(971), 1, + anon_sym_DOLLAR, + ACTIONS(973), 1, + anon_sym_DQUOTE, + ACTIONS(975), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(977), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(979), 1, + anon_sym_BQUOTE, + ACTIONS(981), 1, + sym__bare_dollar, + STATE(487), 1, + aux_sym_command_repeat2, + STATE(949), 1, + sym_concatenation, + ACTIONS(967), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(830), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(544), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [36110] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1124), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [36151] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1308), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36220] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1310), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36289] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(983), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [36330] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1312), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36399] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1314), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36468] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1316), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36537] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1318), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36606] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(961), 1, + sym_file_descriptor, + ACTIONS(1320), 1, + aux_sym_concatenation_token1, + ACTIONS(1322), 1, + sym__concat, + STATE(446), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [36653] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1324), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36722] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1326), 1, + anon_sym_PIPE, + ACTIONS(1328), 1, + anon_sym_RPAREN, + ACTIONS(1330), 1, + anon_sym_AMP_AMP, + ACTIONS(1332), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1334), 1, + anon_sym_EQ, + ACTIONS(1342), 1, + anon_sym_CARET, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1354), 1, + anon_sym_QMARK, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1340), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36791] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(983), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [36832] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1358), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36901] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1038), 1, + aux_sym_concatenation_token1, + ACTIONS(1134), 1, + sym__concat, + STATE(543), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1128), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1130), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [36948] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1042), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [36989] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1306), 1, + sym_variable_name, + ACTIONS(1304), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1302), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [37036] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1046), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37077] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1118), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [37118] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1120), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1122), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [37159] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1118), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [37200] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1112), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1114), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [37241] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(577), 1, + sym_file_descriptor, + ACTIONS(1363), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1366), 1, + anon_sym_DOLLAR, + ACTIONS(1369), 1, + anon_sym_DQUOTE, + ACTIONS(1372), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1375), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1378), 1, + anon_sym_BQUOTE, + ACTIONS(1381), 1, + sym__bare_dollar, + STATE(487), 1, + aux_sym_command_repeat2, + STATE(949), 1, + sym_concatenation, + ACTIONS(1360), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(830), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(557), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [37304] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1058), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37345] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1384), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [37414] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1086), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37455] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1086), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37496] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1086), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1088), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [37537] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1306), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(1304), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1302), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [37584] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1046), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1048), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [37625] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1042), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1044), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [37666] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1072), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37707] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1098), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37748] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1102), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37789] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1112), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37830] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1386), 1, + sym__concat, + STATE(338), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(957), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37877] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(500), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37924] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1388), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [37993] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1390), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [38062] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(500), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38109] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1392), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [38178] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_file_descriptor, + ACTIONS(1254), 1, + aux_sym_concatenation_token1, + ACTIONS(1394), 1, + sym__concat, + STATE(428), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1172), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38225] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1396), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [38294] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1398), 1, + anon_sym_COLON, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [38363] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1193), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38404] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1116), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38445] = 7, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1186), 6, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1188), 18, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + [38494] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1186), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1188), 18, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + [38537] = 7, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1186), 6, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1188), 18, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + [38586] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1120), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38627] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1116), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38668] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1124), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1126), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [38709] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1102), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1104), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [38750] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1098), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1100), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [38791] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1193), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38832] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1058), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38873] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1098), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38914] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1102), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38955] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1072), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1070), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [38996] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(983), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39037] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1262), 1, + sym_variable_name, + ACTIONS(1260), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1258), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [39084] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(768), 1, + sym_concatenation, + ACTIONS(754), 2, + sym_file_descriptor, + sym_variable_name, + STATE(806), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [39129] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1209), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1211), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [39170] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1400), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [39239] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1402), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [39308] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1124), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39349] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1408), 1, + sym_variable_name, + ACTIONS(1406), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1404), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [39396] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1058), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39437] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1042), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39478] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1046), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39519] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1410), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [39588] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1072), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39629] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1124), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39670] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1412), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [39739] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39780] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1262), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(1260), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1258), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [39827] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1120), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39868] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39909] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1038), 1, + aux_sym_concatenation_token1, + ACTIONS(1414), 1, + sym__concat, + STATE(344), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39956] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1086), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39997] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1416), 1, + aux_sym_concatenation_token1, + ACTIONS(1419), 1, + sym__concat, + STATE(545), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(983), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40044] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(983), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40085] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1426), 1, + sym_variable_name, + ACTIONS(1424), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1422), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [40132] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1193), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40173] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1098), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40214] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1102), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40255] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(983), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40296] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1112), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40337] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1116), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40378] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1120), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40419] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1116), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40460] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1124), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40501] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1326), 1, + anon_sym_PIPE, + ACTIONS(1330), 1, + anon_sym_AMP_AMP, + ACTIONS(1332), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1334), 1, + anon_sym_EQ, + ACTIONS(1342), 1, + anon_sym_CARET, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1354), 1, + anon_sym_QMARK, + ACTIONS(1428), 1, + anon_sym_RPAREN, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1340), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [40570] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + STATE(587), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(828), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [40615] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1430), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [40684] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1058), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40725] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1042), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40766] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1046), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40807] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1072), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40848] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1112), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40889] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40930] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1086), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40971] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(536), 1, + sym_file_descriptor, + ACTIONS(782), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(785), 1, + anon_sym_DOLLAR, + ACTIONS(788), 1, + anon_sym_DQUOTE, + ACTIONS(791), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(794), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(797), 1, + anon_sym_BQUOTE, + STATE(567), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1432), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(827), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [41030] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1243), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1245), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [41071] = 12, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1342), 1, + anon_sym_CARET, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1235), 2, + anon_sym_PIPE, + anon_sym_EQ, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 14, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + [41130] = 13, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1235), 1, + anon_sym_EQ, + ACTIONS(1326), 1, + anon_sym_PIPE, + ACTIONS(1342), 1, + anon_sym_CARET, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 14, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + [41191] = 14, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1235), 1, + anon_sym_EQ, + ACTIONS(1326), 1, + anon_sym_PIPE, + ACTIONS(1330), 1, + anon_sym_AMP_AMP, + ACTIONS(1342), 1, + anon_sym_CARET, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 13, + anon_sym_RPAREN, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + [41254] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1235), 1, + anon_sym_EQ, + ACTIONS(1326), 1, + anon_sym_PIPE, + ACTIONS(1330), 1, + anon_sym_AMP_AMP, + ACTIONS(1332), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1342), 1, + anon_sym_CARET, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1354), 1, + anon_sym_QMARK, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 11, + anon_sym_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [41321] = 7, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 6, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1237), 18, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + [41370] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 8, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1237), 18, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + [41417] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1326), 1, + anon_sym_PIPE, + ACTIONS(1330), 1, + anon_sym_AMP_AMP, + ACTIONS(1332), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1334), 1, + anon_sym_EQ, + ACTIONS(1342), 1, + anon_sym_CARET, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1354), 1, + anon_sym_QMARK, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 11, + anon_sym_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [41484] = 11, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1235), 3, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_CARET, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 14, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + [41541] = 10, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 4, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1237), 14, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + [41596] = 9, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 4, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1237), 16, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_QMARK, + [41649] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 10, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1237), 18, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + [41694] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1235), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 18, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + [41737] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1193), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [41778] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1120), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [41819] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + STATE(587), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(828), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [41864] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1435), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [41933] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1437), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [42002] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1086), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42043] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1442), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1445), 1, + anon_sym_DOLLAR, + ACTIONS(1448), 1, + anon_sym_DQUOTE, + ACTIONS(1451), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1454), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1457), 1, + anon_sym_BQUOTE, + ACTIONS(536), 2, + sym_file_descriptor, + sym_variable_name, + STATE(587), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1439), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(828), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [42102] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1286), 1, + aux_sym_concatenation_token1, + ACTIONS(1460), 1, + sym__concat, + STATE(545), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(957), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42149] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1046), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42190] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1042), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42231] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1462), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [42300] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1193), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42341] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1098), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42382] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42423] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(705), 1, + sym_concatenation, + ACTIONS(760), 2, + sym_file_descriptor, + sym_variable_name, + STATE(800), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [42468] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1102), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42509] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1124), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42550] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1116), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42591] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1112), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42632] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_file_descriptor, + ACTIONS(1320), 1, + aux_sym_concatenation_token1, + ACTIONS(1464), 1, + sym__concat, + STATE(474), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1172), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42679] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1142), 1, + anon_sym_EQ, + ACTIONS(1326), 1, + anon_sym_PIPE, + ACTIONS(1330), 1, + anon_sym_AMP_AMP, + ACTIONS(1332), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1342), 1, + anon_sym_CARET, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1148), 12, + anon_sym_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + [42744] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1058), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42785] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1116), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42826] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1120), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42867] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1058), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42907] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1086), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42947] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(983), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42987] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1102), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43027] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1058), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43067] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1112), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43107] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1098), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43147] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1072), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43187] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1098), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43227] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1116), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43267] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1468), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1466), 30, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_fi, + anon_sym_elif, + anon_sym_else, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [43307] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1046), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43347] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1042), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43387] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(1472), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(1474), 1, + sym_variable_name, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(1470), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1404), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [43441] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(875), 1, + sym_file_descriptor, + ACTIONS(1474), 1, + sym_variable_name, + STATE(1404), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(766), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [43489] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(1474), 1, + sym_variable_name, + ACTIONS(1477), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(1470), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1404), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [43543] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1112), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43583] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 30, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43623] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1120), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43663] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43703] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(983), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43743] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(1474), 1, + sym_variable_name, + STATE(1404), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 5, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [43793] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1086), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43833] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(961), 1, + sym_file_descriptor, + ACTIONS(1320), 1, + aux_sym_concatenation_token1, + ACTIONS(1479), 1, + sym__concat, + STATE(446), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43879] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1046), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43919] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1042), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43959] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1102), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43999] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1072), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44039] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1116), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44079] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1120), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44119] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1116), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44159] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1000), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(993), 29, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44199] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1262), 1, + sym_variable_name, + ACTIONS(1260), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1258), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [44245] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(987), 1, + sym_concatenation, + ACTIONS(760), 2, + sym_file_descriptor, + sym_variable_name, + STATE(845), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [44289] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(988), 1, + sym_concatenation, + ACTIONS(754), 2, + sym_file_descriptor, + sym_variable_name, + STATE(844), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [44333] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1116), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44373] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1120), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44413] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1124), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44453] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1116), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44493] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1112), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44533] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1086), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44573] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1116), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44613] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_file_descriptor, + ACTIONS(1320), 1, + aux_sym_concatenation_token1, + ACTIONS(1464), 1, + sym__concat, + STATE(628), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1172), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44659] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1124), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44699] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1193), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44739] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1042), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44779] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 1, + sym_file_descriptor, + ACTIONS(1483), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1485), 1, + anon_sym_DOLLAR, + ACTIONS(1487), 1, + anon_sym_DQUOTE, + ACTIONS(1489), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1491), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1493), 1, + anon_sym_BQUOTE, + STATE(653), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1481), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(856), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [44837] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1058), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44877] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(536), 1, + sym_file_descriptor, + ACTIONS(1498), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1501), 1, + anon_sym_DOLLAR, + ACTIONS(1504), 1, + anon_sym_DQUOTE, + ACTIONS(1507), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1510), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1513), 1, + anon_sym_BQUOTE, + STATE(653), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1495), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(856), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [44935] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1193), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44975] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1046), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45015] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1124), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45055] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1102), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45095] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(760), 1, + sym_file_descriptor, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + STATE(1197), 1, + sym_concatenation, + ACTIONS(1516), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1398), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [45153] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1193), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45193] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1072), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45233] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1098), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45273] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(983), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45313] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1306), 1, + sym_variable_name, + ACTIONS(1304), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1302), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [45359] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1274), 30, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_fi, + anon_sym_elif, + anon_sym_else, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [45399] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(754), 1, + sym_file_descriptor, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + STATE(1205), 1, + sym_concatenation, + ACTIONS(1518), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1399), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [45457] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 1, + sym_file_descriptor, + ACTIONS(1483), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1485), 1, + anon_sym_DOLLAR, + ACTIONS(1487), 1, + anon_sym_DQUOTE, + ACTIONS(1489), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1491), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1493), 1, + anon_sym_BQUOTE, + STATE(653), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1481), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(856), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [45515] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [45556] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1530), 1, + anon_sym_RPAREN, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [45603] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1094), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1090), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45642] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(546), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45681] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [45722] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(377), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(187), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1100), 2, + sym_variable_assignment, + aux_sym_command_repeat1, + ACTIONS(65), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [45789] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [45830] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [45871] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1541), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [45918] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45957] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1544), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46004] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1547), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46051] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1550), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46098] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1553), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46145] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1556), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46192] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1559), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46239] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [46278] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1128), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1130), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [46317] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1562), 1, + ts_builtin_sym_end, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46364] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(754), 1, + sym_file_descriptor, + ACTIONS(1566), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1568), 1, + anon_sym_DOLLAR, + ACTIONS(1570), 1, + anon_sym_DQUOTE, + ACTIONS(1572), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1574), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1576), 1, + anon_sym_BQUOTE, + STATE(1639), 1, + sym_concatenation, + ACTIONS(1564), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1437), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [46421] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1580), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1578), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [46460] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1582), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [46501] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1584), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46548] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(760), 1, + sym_file_descriptor, + ACTIONS(1566), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1568), 1, + anon_sym_DOLLAR, + ACTIONS(1570), 1, + anon_sym_DQUOTE, + ACTIONS(1572), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1574), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1576), 1, + anon_sym_BQUOTE, + STATE(1605), 1, + sym_concatenation, + ACTIONS(1587), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1417), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [46605] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1589), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46652] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1468), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1466), 29, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_done, + anon_sym_if, + anon_sym_then, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [46691] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_variable_name, + ACTIONS(1592), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1594), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [46734] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1596), 1, + sym__concat, + STATE(293), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [46779] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [46818] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1598), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46865] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [46904] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1601), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46951] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1604), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46998] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1607), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47045] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1610), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47092] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1613), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47139] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1616), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47186] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1619), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47233] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [47272] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1128), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1130), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [47311] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1622), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47358] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(1625), 1, + sym_variable_name, + STATE(1432), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1433), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 4, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [47407] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1630), 1, + anon_sym_LF, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + ACTIONS(1633), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1628), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [47450] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1635), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47497] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [47538] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1128), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1130), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [47577] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(377), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(251), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1100), 2, + sym_variable_assignment, + aux_sym_command_repeat1, + ACTIONS(371), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(734), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [47644] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1638), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47691] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1580), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1578), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [47730] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1274), 29, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_SEMI_SEMI, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [47769] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1580), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1578), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [47808] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [47849] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [47890] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1027), 1, + sym__concat, + ACTIONS(1641), 1, + anon_sym_LPAREN, + STATE(694), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [47937] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1644), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47984] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48025] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48066] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(540), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [48105] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1647), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [48152] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 10, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [48197] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(377), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(186), 1, + sym_command_name, + STATE(622), 1, + sym_concatenation, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1100), 2, + sym_variable_assignment, + aux_sym_command_repeat1, + ACTIONS(115), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [48264] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1582), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48305] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1650), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [48352] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1653), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [48399] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48440] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(345), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(347), 1, + anon_sym_DOLLAR, + ACTIONS(349), 1, + anon_sym_DQUOTE, + ACTIONS(353), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(355), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(357), 1, + anon_sym_BQUOTE, + ACTIONS(377), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(285), 1, + sym_command_name, + STATE(928), 1, + sym_concatenation, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1100), 2, + sym_variable_assignment, + aux_sym_command_repeat1, + ACTIONS(351), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(777), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [48507] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(377), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(190), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1100), 2, + sym_variable_assignment, + aux_sym_command_repeat1, + ACTIONS(65), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [48574] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1027), 1, + sym__concat, + STATE(694), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48619] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1660), 1, + sym_variable_name, + ACTIONS(1658), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1656), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 18, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48664] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1662), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [48711] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1665), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [48758] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48799] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48840] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48881] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1668), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [48928] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_variable_name, + ACTIONS(1592), 1, + sym_file_descriptor, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1594), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [48971] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(27), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(29), 1, + anon_sym_DOLLAR, + ACTIONS(31), 1, + anon_sym_DQUOTE, + ACTIONS(35), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(37), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(39), 1, + anon_sym_BQUOTE, + ACTIONS(377), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(179), 1, + sym_command_name, + STATE(636), 1, + sym_concatenation, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1100), 2, + sym_variable_assignment, + aux_sym_command_repeat1, + ACTIONS(33), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(291), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [49038] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 10, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [49083] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1671), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [49130] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1674), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [49177] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_variable_name, + ACTIONS(1592), 1, + sym_file_descriptor, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1594), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [49220] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1677), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [49267] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1680), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [49314] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49355] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49396] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49437] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49478] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49519] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49560] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49601] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49642] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49683] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49724] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49765] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49806] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49847] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49888] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49929] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(377), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(180), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1100), 2, + sym_variable_assignment, + aux_sym_command_repeat1, + ACTIONS(228), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [49996] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1683), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [50043] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(875), 1, + sym_file_descriptor, + ACTIONS(1625), 1, + sym_variable_name, + STATE(1432), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1433), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(766), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [50090] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [50129] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1686), 1, + sym__concat, + STATE(338), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(957), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50173] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1688), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50213] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1690), 1, + anon_sym_LPAREN, + ACTIONS(1693), 1, + aux_sym_concatenation_token1, + ACTIONS(1695), 1, + sym__concat, + STATE(802), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50259] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50299] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1468), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1466), 28, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_do, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50337] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50377] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50417] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1274), 28, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50455] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1693), 1, + aux_sym_concatenation_token1, + ACTIONS(1695), 1, + sym__concat, + STATE(802), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 25, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50499] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50539] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50579] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1038), 1, + aux_sym_concatenation_token1, + ACTIONS(1699), 1, + sym__concat, + STATE(344), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50623] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1274), 28, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_fi, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50661] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1274), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50699] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1468), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1466), 28, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_fi, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50737] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50777] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50817] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_variable_name, + ACTIONS(1592), 1, + sym_file_descriptor, + ACTIONS(762), 8, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + ACTIONS(1594), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [50859] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1526), 8, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 11, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_BQUOTE, + [50903] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50943] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50983] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51023] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51063] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51103] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1701), 1, + aux_sym_concatenation_token1, + ACTIONS(1704), 1, + sym__concat, + STATE(793), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(983), 25, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51147] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51187] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(769), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1174), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1172), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51231] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1038), 1, + aux_sym_concatenation_token1, + ACTIONS(1134), 1, + sym__concat, + STATE(780), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1128), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1130), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51275] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51315] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1468), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1466), 28, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51353] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(769), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51397] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(769), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51441] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 1, + sym_file_descriptor, + ACTIONS(1709), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1711), 1, + anon_sym_DOLLAR, + ACTIONS(1713), 1, + anon_sym_DQUOTE, + ACTIONS(1715), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1717), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1719), 1, + anon_sym_BQUOTE, + STATE(804), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1707), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(950), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + [51497] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1693), 1, + aux_sym_concatenation_token1, + ACTIONS(1721), 1, + sym__concat, + STATE(793), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 25, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51541] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 1, + sym_file_descriptor, + ACTIONS(1709), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1711), 1, + anon_sym_DOLLAR, + ACTIONS(1713), 1, + anon_sym_DQUOTE, + ACTIONS(1715), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1717), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1719), 1, + anon_sym_BQUOTE, + STATE(804), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1707), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(950), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + [51597] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(536), 1, + sym_file_descriptor, + ACTIONS(1726), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1729), 1, + anon_sym_DOLLAR, + ACTIONS(1732), 1, + anon_sym_DQUOTE, + ACTIONS(1735), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1738), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1741), 1, + anon_sym_BQUOTE, + STATE(804), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1723), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(950), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + [51653] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1274), 28, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_do, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51691] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(769), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51735] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1046), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51772] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [51811] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1072), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51848] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1744), 1, + aux_sym_concatenation_token1, + ACTIONS(1746), 1, + sym__concat, + STATE(815), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(957), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51891] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1086), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51928] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1098), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51965] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1102), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52002] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1193), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52039] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1748), 1, + aux_sym_concatenation_token1, + ACTIONS(1751), 1, + sym__concat, + STATE(815), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(983), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52082] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1112), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52119] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52156] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1058), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52193] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1120), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52230] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52267] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1124), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52304] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1754), 1, + aux_sym_concatenation_token1, + ACTIONS(1756), 1, + sym__concat, + STATE(824), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52347] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(983), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52384] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1758), 1, + aux_sym_concatenation_token1, + ACTIONS(1761), 1, + sym__concat, + STATE(824), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(983), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52427] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52464] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1042), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52501] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_file_descriptor, + ACTIONS(1320), 1, + aux_sym_concatenation_token1, + ACTIONS(1464), 1, + sym__concat, + STATE(835), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1172), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52544] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1744), 1, + aux_sym_concatenation_token1, + ACTIONS(1764), 1, + sym__concat, + STATE(810), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1174), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1172), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52587] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1582), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [52626] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1754), 1, + aux_sym_concatenation_token1, + ACTIONS(1766), 1, + sym__concat, + STATE(822), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1128), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1130), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52669] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [52708] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [52747] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [52786] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [52825] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(961), 1, + sym_file_descriptor, + ACTIONS(1320), 1, + aux_sym_concatenation_token1, + ACTIONS(1768), 1, + sym__concat, + STATE(446), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52868] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [52907] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [52946] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [52985] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [53024] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [53063] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1262), 1, + sym_variable_name, + ACTIONS(1260), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1258), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [53106] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1744), 1, + aux_sym_concatenation_token1, + ACTIONS(1764), 1, + sym__concat, + STATE(810), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53149] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1306), 1, + sym_variable_name, + ACTIONS(1304), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1302), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [53192] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1744), 1, + aux_sym_concatenation_token1, + ACTIONS(1764), 1, + sym__concat, + STATE(810), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53235] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1744), 1, + aux_sym_concatenation_token1, + ACTIONS(1764), 1, + sym__concat, + STATE(810), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53278] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(754), 1, + sym_file_descriptor, + ACTIONS(1772), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1774), 1, + anon_sym_DOLLAR, + ACTIONS(1776), 1, + anon_sym_DQUOTE, + ACTIONS(1778), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1780), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1782), 1, + anon_sym_BQUOTE, + STATE(1730), 1, + sym_concatenation, + ACTIONS(1770), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1486), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + [53333] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [53372] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [53411] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [53450] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(760), 1, + sym_file_descriptor, + ACTIONS(1772), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1774), 1, + anon_sym_DOLLAR, + ACTIONS(1776), 1, + anon_sym_DQUOTE, + ACTIONS(1778), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1780), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1782), 1, + anon_sym_BQUOTE, + STATE(1726), 1, + sym_concatenation, + ACTIONS(1784), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1468), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + [53505] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [53544] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1098), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53580] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1790), 1, + sym_variable_name, + ACTIONS(1788), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1786), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [53622] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1124), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53658] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1120), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53694] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_file_descriptor, + ACTIONS(1792), 1, + aux_sym_concatenation_token1, + ACTIONS(1794), 1, + sym__concat, + STATE(884), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1172), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53736] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53772] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1112), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53808] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + STATE(883), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(1109), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53848] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1102), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53884] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1098), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53920] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1086), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53956] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1072), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53992] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1124), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54028] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1116), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54064] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1120), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54100] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + STATE(883), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(1109), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54140] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1116), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54176] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(983), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54212] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1046), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54248] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54284] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(983), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54320] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1042), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54356] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1058), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54392] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 1, + sym_file_descriptor, + ACTIONS(1796), 1, + aux_sym_concatenation_token1, + ACTIONS(1799), 1, + sym__concat, + STATE(875), 1, + aux_sym_concatenation_repeat1, + ACTIONS(983), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54434] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1806), 1, + sym_variable_name, + ACTIONS(1804), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1802), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [54476] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1058), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54512] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1112), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54548] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1046), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54584] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1193), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54620] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1193), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54656] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1072), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54692] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1811), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1814), 1, + anon_sym_DOLLAR, + ACTIONS(1817), 1, + anon_sym_DQUOTE, + ACTIONS(1820), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1823), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1826), 1, + anon_sym_BQUOTE, + ACTIONS(536), 2, + sym_file_descriptor, + sym_variable_name, + STATE(883), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1808), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1109), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [54746] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(961), 1, + sym_file_descriptor, + ACTIONS(1792), 1, + aux_sym_concatenation_token1, + ACTIONS(1829), 1, + sym__concat, + STATE(875), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54788] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1086), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54824] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1042), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54860] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1102), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54896] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1835), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(503), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [54957] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1857), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(461), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55018] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1859), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(468), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55079] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1861), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(433), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55140] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1863), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(471), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55201] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1865), 1, + aux_sym_concatenation_token1, + ACTIONS(1868), 1, + sym__concat, + STATE(893), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 4, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [55242] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1871), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(467), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55303] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1873), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(423), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55364] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1877), 1, + anon_sym_esac, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1299), 1, + sym_terminator, + STATE(1360), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2141), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(1881), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [55429] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1897), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(451), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55490] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1042), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [55525] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1046), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [55560] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1072), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [55595] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1098), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [55630] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1899), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(475), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55691] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1102), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [55726] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(1901), 1, + anon_sym_esac, + STATE(1313), 1, + sym_terminator, + STATE(1381), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2139), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(1881), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [55791] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(1903), 1, + anon_sym_esac, + STATE(1300), 1, + sym_terminator, + STATE(1393), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2195), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(1881), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [55856] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1124), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [55891] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1905), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(559), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55952] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1086), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [55987] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1907), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(591), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56048] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1909), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(453), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56109] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1911), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(507), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56170] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1112), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [56205] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1913), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(502), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56266] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1915), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(472), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56327] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1917), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(538), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56388] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1919), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(470), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56449] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1116), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [56484] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1921), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(529), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56545] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1923), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(505), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56606] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1925), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(535), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56667] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1120), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [56702] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1927), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(489), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56763] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(983), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [56798] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1116), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [56833] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(1929), 1, + anon_sym_esac, + STATE(1308), 1, + sym_terminator, + STATE(1338), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2287), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(1881), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [56898] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1931), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(473), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56959] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(1336), 1, + sym_concatenation, + ACTIONS(754), 2, + sym_file_descriptor, + sym_variable_name, + STATE(1128), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [56998] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 25, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [57033] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(1327), 1, + sym_concatenation, + ACTIONS(760), 2, + sym_file_descriptor, + sym_variable_name, + STATE(1105), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [57072] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1933), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(452), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57133] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1935), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(585), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57194] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1937), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(528), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57255] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1939), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(449), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57316] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(1941), 1, + anon_sym_esac, + STATE(1312), 1, + sym_terminator, + STATE(1372), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2281), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(1881), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [57381] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1943), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(436), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57442] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1193), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [57477] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(1945), 1, + anon_sym_esac, + STATE(1306), 1, + sym_terminator, + STATE(1318), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2258), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(1881), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [57542] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1058), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [57577] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1947), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(478), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57638] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1949), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(584), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57699] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1098), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [57733] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(513), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57791] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(570), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57849] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(571), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57907] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(572), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57965] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1102), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [57999] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 1, + sym_file_descriptor, + ACTIONS(1975), 1, + aux_sym_concatenation_token1, + ACTIONS(1978), 1, + sym__concat, + STATE(947), 1, + aux_sym_concatenation_repeat1, + ACTIONS(983), 22, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [58039] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1981), 1, + aux_sym_concatenation_token1, + ACTIONS(1984), 1, + sym__concat, + STATE(948), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [58079] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1128), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1130), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [58113] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_file_descriptor, + ACTIONS(1987), 1, + aux_sym_concatenation_token1, + ACTIONS(1989), 1, + sym__concat, + STATE(1001), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1172), 22, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [58153] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(573), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58211] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(574), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58269] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1072), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [58303] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1580), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1578), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [58337] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(575), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58395] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_variable_name, + ACTIONS(1592), 1, + sym_file_descriptor, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1594), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [58433] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(576), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58491] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(577), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58549] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(476), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58607] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(463), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58665] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1528), 5, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [58705] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(578), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58763] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1046), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [58797] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(569), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58855] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1112), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [58889] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [58923] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(579), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58981] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1042), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [59015] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(413), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59073] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(412), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59131] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(411), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59189] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1086), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [59223] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(410), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59281] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(580), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59339] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1120), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [59373] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(512), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59431] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(409), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59489] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(408), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59547] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(407), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59605] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(406), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59663] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [59697] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(405), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59755] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(404), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59813] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(403), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59871] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1995), 1, + sym_variable_name, + ACTIONS(1993), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1991), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + [59911] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(511), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59969] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [60003] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [60037] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [60071] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(335), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [60129] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(508), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [60187] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [60221] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(601), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [60279] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1058), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [60313] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1193), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [60347] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(347), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [60405] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(346), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [60463] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(345), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [60521] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(557), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [60579] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(414), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [60637] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(961), 1, + sym_file_descriptor, + ACTIONS(1987), 1, + aux_sym_concatenation_token1, + ACTIONS(1997), 1, + sym__concat, + STATE(947), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 22, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [60677] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1124), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [60711] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(751), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [60762] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1046), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [60795] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2007), 1, + aux_sym_concatenation_token1, + ACTIONS(2010), 1, + sym__concat, + STATE(1005), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [60834] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(831), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(770), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [60885] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2021), 1, + aux_sym_concatenation_token1, + ACTIONS(2023), 1, + sym__concat, + STATE(1009), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1090), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [60924] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(754), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [60975] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2021), 1, + aux_sym_concatenation_token1, + ACTIONS(2025), 1, + sym__concat, + STATE(1005), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [61014] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(847), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61065] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1042), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [61098] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(849), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61149] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(851), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61200] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1193), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [61233] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(808), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61284] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1046), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [61317] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(983), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [61350] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(832), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61401] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(833), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61452] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1058), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [61485] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(834), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61536] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(836), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61587] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(837), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61638] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(838), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61689] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(839), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61740] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(758), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61791] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(840), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61842] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1072), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [61875] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1086), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [61908] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1098), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [61941] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(790), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61992] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1102), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [62025] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1112), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [62058] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1116), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [62091] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(789), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62142] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1120), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [62175] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(775), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62226] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1116), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [62259] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1124), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [62292] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [62325] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(788), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62376] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2037), 1, + sym__concat, + STATE(893), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 19, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [62415] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(772), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62466] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(764), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62517] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(763), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62568] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(762), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62619] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(761), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62670] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(760), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62721] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(759), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62772] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(711), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62823] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(774), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62874] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2045), 1, + sym__concat, + STATE(893), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [62913] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1058), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [62946] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(750), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62997] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(739), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63048] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(738), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63099] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(809), 1, + anon_sym_BQUOTE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(829), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63150] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(731), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63201] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(779), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63252] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(722), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63303] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1193), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [63336] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(719), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63387] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(718), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63438] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(757), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63489] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2047), 1, + sym__concat, + STATE(893), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 4, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [63528] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(784), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63579] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(671), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63630] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(667), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63681] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(673), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63732] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(674), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63783] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(755), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63834] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(809), 1, + anon_sym_RPAREN, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(728), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63885] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(753), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63936] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(785), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63987] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64020] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1072), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64053] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1120), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64086] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64119] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1112), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64152] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1098), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64185] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1102), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64218] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2049), 1, + sym__concat, + STATE(1042), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1090), 19, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [64257] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2049), 1, + sym__concat, + STATE(1065), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 4, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1090), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [64296] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(791), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [64347] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1086), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64380] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(688), 1, + sym_terminator, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(809), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [64431] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(797), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [64482] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(792), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [64533] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1124), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64566] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2049), 1, + sym__concat, + STATE(1052), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1090), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64605] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1042), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64638] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + aux_sym_concatenation_token1, + ACTIONS(2053), 1, + sym__concat, + STATE(1139), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [64676] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2059), 1, + sym_variable_name, + ACTIONS(2057), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1093), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2055), 19, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [64712] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 18, + anon_sym_esac, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [64748] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(718), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [64798] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(688), 1, + sym_terminator, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(809), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [64846] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [64880] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2079), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2081), 1, + sym_file_descriptor, + ACTIONS(2073), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2076), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + STATE(1098), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2068), 7, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2070), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [64922] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2084), 1, + sym_variable_name, + ACTIONS(2057), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1099), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2055), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [64958] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2095), 1, + sym_file_descriptor, + ACTIONS(2098), 1, + sym_variable_name, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(2092), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1100), 2, + sym_variable_assignment, + aux_sym_command_repeat1, + ACTIONS(2089), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2087), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [65000] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1094), 4, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1090), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [65032] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(674), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [65082] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65114] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1120), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65146] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + aux_sym_concatenation_token1, + ACTIONS(2053), 1, + sym__concat, + STATE(1139), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [65184] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65216] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(778), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [65264] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1112), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65296] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + aux_sym_concatenation_token1, + ACTIONS(2053), 1, + sym__concat, + STATE(1139), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1174), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1172), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [65334] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(809), 1, + anon_sym_RPAREN, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(728), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [65382] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1171), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 19, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [65420] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(692), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [65468] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(756), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [65516] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(723), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [65564] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2105), 1, + sym__concat, + STATE(948), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [65602] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2079), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2116), 1, + sym_file_descriptor, + ACTIONS(2110), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2113), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + STATE(1116), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2068), 7, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2107), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [65644] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 19, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [65678] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1171), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 19, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [65716] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 18, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [65752] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1086), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65784] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1124), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65816] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1102), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65848] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2005), 1, + sym_file_descriptor, + ACTIONS(2121), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1098), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2119), 7, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [65890] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1098), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65922] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1072), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65954] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2127), 1, + sym_variable_name, + ACTIONS(2125), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(2123), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 12, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [65990] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1046), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [66022] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + aux_sym_concatenation_token1, + ACTIONS(2053), 1, + sym__concat, + STATE(1139), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [66060] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2129), 1, + sym__concat, + STATE(948), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [66098] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(673), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66148] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2135), 1, + sym_variable_name, + STATE(1163), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2131), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2133), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [66184] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1042), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [66216] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2019), 1, + sym_file_descriptor, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2121), 2, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + STATE(1164), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2119), 6, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66258] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1129), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [66296] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2137), 1, + aux_sym_heredoc_redirect_token1, + STATE(783), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(898), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66344] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2139), 1, + sym_variable_name, + ACTIONS(2131), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1099), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2133), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [66380] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2043), 1, + sym_file_descriptor, + ACTIONS(2121), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1116), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2119), 7, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66422] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1129), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [66460] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + aux_sym_concatenation_token1, + ACTIONS(2141), 1, + sym__concat, + STATE(1167), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(957), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [66498] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2143), 1, + aux_sym_heredoc_redirect_token1, + STATE(615), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(949), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66546] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2145), 1, + aux_sym_heredoc_redirect_token1, + STATE(798), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(953), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66594] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2147), 1, + sym_variable_name, + ACTIONS(2131), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1148), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2133), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [66630] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2149), 1, + sym_variable_name, + ACTIONS(2131), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1093), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2133), 19, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [66666] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(667), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66716] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(671), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66766] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(809), 1, + anon_sym_SEMI_SEMI, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(728), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66816] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(750), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66866] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2151), 1, + sym_variable_name, + ACTIONS(2057), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1148), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2055), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [66902] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1193), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [66934] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2154), 1, + sym__concat, + STATE(893), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [66972] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(739), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67022] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1115), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [67060] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(738), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67110] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(927), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67144] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(731), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67194] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1115), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [67232] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2033), 1, + sym_file_descriptor, + ACTIONS(2121), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1178), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2119), 7, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67274] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2156), 1, + aux_sym_concatenation_token1, + ACTIONS(2158), 1, + sym__concat, + STATE(1160), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67312] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2049), 1, + sym__concat, + STATE(1150), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1090), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67350] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2156), 1, + aux_sym_concatenation_token1, + ACTIONS(2160), 1, + sym__concat, + STATE(1169), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67388] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(719), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67438] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(825), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67486] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2162), 1, + sym_variable_name, + STATE(1163), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2057), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2055), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67522] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2171), 1, + sym_file_descriptor, + ACTIONS(2079), 2, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2113), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2168), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1164), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2068), 6, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2165), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67564] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(722), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67614] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(831), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67662] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2174), 1, + aux_sym_concatenation_token1, + ACTIONS(2177), 1, + sym__concat, + STATE(1167), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(983), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [67700] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(927), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 17, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67736] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2180), 1, + aux_sym_concatenation_token1, + ACTIONS(2183), 1, + sym__concat, + STATE(1169), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67774] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2188), 1, + anon_sym_PIPE, + STATE(1512), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2186), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2191), 19, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [67810] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2193), 1, + sym__concat, + STATE(948), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 19, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67848] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1058), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [67880] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2156), 1, + aux_sym_concatenation_token1, + ACTIONS(2158), 1, + sym__concat, + STATE(1160), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67918] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2195), 1, + aux_sym_heredoc_redirect_token1, + STATE(773), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(951), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67966] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(831), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(770), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [68014] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(809), 1, + anon_sym_BQUOTE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(829), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [68062] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [68094] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2079), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2203), 1, + sym_file_descriptor, + ACTIONS(2113), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2200), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1178), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2068), 7, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + ACTIONS(2197), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [68136] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68170] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(711), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [68220] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 18, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68256] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2206), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2208), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68287] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(983), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [68318] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2218), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2220), 1, + sym_file_descriptor, + ACTIONS(2215), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1184), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2212), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2210), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68357] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1251), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [68394] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1251), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [68431] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2223), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2225), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68462] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2229), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2231), 1, + sym_file_descriptor, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1218), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2227), 9, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [68501] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2239), 1, + sym_file_descriptor, + ACTIONS(2218), 2, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2236), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1189), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2210), 8, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2233), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [68540] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2242), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2244), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68571] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(825), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [68616] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(844), 1, + sym_variable_name, + STATE(1142), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [68651] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(1474), 1, + sym_variable_name, + STATE(1404), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [68686] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(723), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [68733] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2218), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2252), 1, + sym_file_descriptor, + ACTIONS(2249), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1195), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2246), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2210), 9, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [68772] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2255), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2257), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68803] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68834] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [68865] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1120), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [68896] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2145), 1, + aux_sym_heredoc_redirect_token1, + STATE(798), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(953), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [68941] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2259), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2261), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68972] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [69003] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2263), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2265), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69034] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2267), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2269), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69065] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69096] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2271), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2273), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69127] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2229), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2275), 1, + sym_file_descriptor, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1184), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2227), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69166] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1112), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [69197] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1086), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [69228] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2277), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2279), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69259] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2281), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2283), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69290] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1124), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [69321] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2285), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2287), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69352] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2289), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2291), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69383] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2229), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2293), 1, + sym_file_descriptor, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1195), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2227), 9, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [69422] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(809), 1, + anon_sym_SEMI_SEMI, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(728), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [69469] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2285), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2287), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69500] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2218), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2301), 1, + sym_file_descriptor, + ACTIONS(2298), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1218), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2295), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2210), 9, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [69539] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2304), 1, + sym_file_descriptor, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2229), 2, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + STATE(1189), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2227), 8, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [69578] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2306), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2308), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69609] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1102), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [69640] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2310), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2312), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69671] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2143), 1, + aux_sym_heredoc_redirect_token1, + STATE(615), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(949), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [69716] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2314), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2316), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69747] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2318), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2320), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69778] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2322), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2324), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69809] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [69840] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2326), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2328), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69871] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2330), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2332), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69902] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2334), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2336), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69933] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2334), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2336), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69964] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2338), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2340), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69995] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2338), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2340), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70026] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1098), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [70057] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2195), 1, + aux_sym_heredoc_redirect_token1, + STATE(773), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(951), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [70102] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2342), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2344), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70133] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1072), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [70164] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2346), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2348), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70195] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2231), 1, + sym_file_descriptor, + ACTIONS(2352), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1218), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2350), 9, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [70234] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2354), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2356), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70265] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2358), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2360), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70296] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1046), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [70327] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1042), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [70358] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2354), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2356), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70389] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1102), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [70420] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(692), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [70465] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(1625), 1, + sym_variable_name, + STATE(1432), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [70500] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1098), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [70531] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2293), 1, + sym_file_descriptor, + ACTIONS(2352), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1195), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2350), 9, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [70570] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1058), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [70601] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2362), 1, + sym__concat, + STATE(948), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [70638] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2364), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2366), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70669] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2368), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2370), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70700] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2372), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2374), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70731] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2376), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2378), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70762] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2121), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1269), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2119), 6, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [70803] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1042), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [70834] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2380), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2382), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70865] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2384), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2386), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70896] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2388), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2390), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70927] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2392), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2394), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70958] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2376), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2378), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70989] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2396), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2398), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71020] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 17, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [71055] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [71088] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2304), 1, + sym_file_descriptor, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2352), 2, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + STATE(1189), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2350), 8, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [71127] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(837), 1, + sym_variable_name, + STATE(1131), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71162] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2352), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2350), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71193] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2079), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2406), 1, + sym_file_descriptor, + ACTIONS(2113), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2403), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1269), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2068), 6, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2400), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [71234] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2409), 1, + sym_variable_name, + ACTIONS(2131), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1285), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2133), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [71269] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(806), 1, + sym_variable_name, + STATE(1143), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71304] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1046), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71335] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2411), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2413), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71366] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2411), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2413), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71397] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2415), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2417), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71428] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1058), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71459] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2419), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2421), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71490] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2419), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2421), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71521] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2423), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2425), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71552] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2423), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2425), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71583] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1086), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71614] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2427), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2429), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71645] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1592), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1594), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71676] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1072), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71707] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2431), 1, + sym_variable_name, + ACTIONS(2057), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1285), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2055), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [71742] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71777] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1193), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [71808] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1124), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71839] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2137), 1, + aux_sym_heredoc_redirect_token1, + STATE(783), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(898), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [71884] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(776), 1, + sym_variable_name, + STATE(1136), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71919] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2434), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2436), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71950] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1116), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71981] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1193), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [72012] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1120), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [72043] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1116), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [72074] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1112), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [72105] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2275), 1, + sym_file_descriptor, + ACTIONS(2352), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1184), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2350), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [72144] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1592), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1594), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [72175] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(2438), 1, + anon_sym_esac, + STATE(1350), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2174), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [72231] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(1901), 1, + anon_sym_esac, + STATE(1382), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2181), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [72287] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2442), 1, + anon_sym_PIPE, + STATE(1304), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2440), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2444), 17, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72321] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2446), 1, + anon_sym_PIPE, + STATE(1310), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2440), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2444), 18, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [72355] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2218), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2454), 1, + sym_file_descriptor, + ACTIONS(2451), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1303), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2210), 8, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2448), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [72393] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2457), 1, + anon_sym_PIPE, + STATE(1304), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2186), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2191), 17, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72427] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1094), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1090), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72457] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(2460), 1, + anon_sym_esac, + STATE(1354), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2219), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [72513] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2229), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2462), 1, + sym_file_descriptor, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1303), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2227), 8, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72551] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(1945), 1, + anon_sym_esac, + STATE(1319), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2260), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [72607] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2352), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2462), 1, + sym_file_descriptor, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1303), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2350), 8, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72645] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2464), 1, + anon_sym_PIPE, + STATE(1310), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2186), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2191), 18, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [72679] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2467), 1, + anon_sym_PIPE, + STATE(1311), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2186), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2191), 18, + anon_sym_esac, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72713] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1877), 1, + anon_sym_esac, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1365), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2145), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [72769] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(2470), 1, + anon_sym_esac, + STATE(1375), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2134), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [72825] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2472), 1, + anon_sym_PIPE, + STATE(1315), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2440), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2444), 18, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72859] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2474), 1, + anon_sym_PIPE, + STATE(1315), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2186), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2191), 18, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72893] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2477), 1, + anon_sym_PIPE, + STATE(1311), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2440), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2444), 18, + anon_sym_esac, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72927] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2188), 1, + anon_sym_PIPE, + STATE(1512), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2186), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2191), 18, + anon_sym_esac, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72961] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2218), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [73014] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2222), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [73067] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2271), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2273), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73096] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2263), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2265), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73125] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2259), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2261), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73154] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + STATE(2124), 1, + sym_terminator, + STATE(1402), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(2479), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(2481), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1669), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [73201] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2223), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2225), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73230] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2289), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2291), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73259] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2483), 1, + anon_sym_PIPE, + STATE(1326), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2186), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2191), 17, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73292] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [73321] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2281), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2283), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73350] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2049), 1, + sym__concat, + STATE(1356), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1090), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [73385] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2396), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2398), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73414] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2427), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2429), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73443] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2267), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2269), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73472] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2285), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2287), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73501] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2419), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2421), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73530] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2285), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2287), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73559] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [73588] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2306), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2308), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73617] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2259), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [73670] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1592), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(1594), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73699] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1592), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(1594), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73728] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [73757] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2242), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2244), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73786] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1539), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1526), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [73815] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2314), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2316), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73844] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73873] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2423), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2425), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73902] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2423), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2425), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73931] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2434), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2436), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73960] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2322), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2324), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73989] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2153), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [74042] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2419), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2421), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74071] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2415), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2417), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74100] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2411), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2413), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74129] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2194), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [74182] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2486), 1, + anon_sym_PIPE, + STATE(1326), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2440), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2444), 17, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74215] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2488), 1, + sym__concat, + STATE(893), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [74250] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2326), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2328), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74279] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2330), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2332), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74308] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74337] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2173), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [74390] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2127), 1, + sym_variable_name, + ACTIONS(2125), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(379), 9, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(2123), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [74423] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2334), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2336), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74452] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2334), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2336), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74481] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2338), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2340), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74510] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2175), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [74563] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2364), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2366), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74592] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2411), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2413), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74621] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2338), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2340), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74650] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2342), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2344), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74679] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2346), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2348), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74708] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2368), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2370), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74737] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2144), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [74790] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + STATE(2119), 1, + sym_terminator, + STATE(1402), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(2479), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(2481), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1669), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [74837] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2354), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2356), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74866] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2254), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [74919] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2380), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2382), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74948] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2206), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2208), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74977] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2388), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2390), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75006] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + STATE(2105), 1, + sym_terminator, + STATE(1402), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(2479), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(2481), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1669), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [75053] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2392), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2394), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75082] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2135), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [75135] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2171), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [75188] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2358), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2360), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75217] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2352), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2350), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75246] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2376), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2378), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75275] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2354), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2356), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75304] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2318), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2320), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75333] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2310), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2312), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75362] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2255), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2257), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75391] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2277), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2279), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75420] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2384), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2386), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75449] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2376), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2378), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75478] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2177), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [75531] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2372), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2374), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75560] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2494), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2496), 1, + sym_file_descriptor, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(1470), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2492), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2490), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [75600] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2501), 1, + anon_sym_LPAREN, + ACTIONS(2504), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2507), 1, + anon_sym_DOLLAR, + ACTIONS(2510), 1, + anon_sym_DQUOTE, + ACTIONS(2513), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2516), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2519), 1, + anon_sym_BQUOTE, + ACTIONS(2522), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2093), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(2498), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1995), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [75650] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2121), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2496), 1, + sym_file_descriptor, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2492), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2119), 3, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1409), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2490), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [75688] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1401), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [75722] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1401), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [75756] = 5, + ACTIONS(1074), 1, + sym_comment, + STATE(1400), 1, + aux_sym_concatenation_repeat1, + ACTIONS(2525), 2, + sym__concat, + aux_sym_concatenation_token1, + ACTIONS(983), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(988), 10, + sym_file_descriptor, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [75788] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2528), 1, + sym__concat, + STATE(948), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [75822] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2533), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2536), 1, + anon_sym_DOLLAR, + ACTIONS(2539), 1, + anon_sym_DQUOTE, + ACTIONS(2542), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2545), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2548), 1, + anon_sym_BQUOTE, + STATE(1402), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(2530), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(516), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1669), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [75866] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2551), 1, + sym_variable_name, + ACTIONS(2057), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1403), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2055), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [75898] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2554), 1, + sym_variable_name, + ACTIONS(2131), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1403), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2133), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [75930] = 5, + ACTIONS(1074), 1, + sym_comment, + STATE(1410), 1, + aux_sym_concatenation_repeat1, + ACTIONS(2556), 2, + sym__concat, + aux_sym_concatenation_token1, + ACTIONS(1090), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1094), 10, + sym_file_descriptor, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [75962] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2496), 1, + sym_file_descriptor, + ACTIONS(2558), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(1470), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2492), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2490), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [76002] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 14, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [76034] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [76064] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2079), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2566), 1, + sym_file_descriptor, + ACTIONS(2113), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2563), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2068), 3, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1409), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2560), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [76102] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2556), 1, + aux_sym_concatenation_token1, + ACTIONS(2569), 1, + sym__concat, + STATE(1400), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(961), 10, + sym_file_descriptor, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76136] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2494), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2496), 1, + sym_file_descriptor, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(1470), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2492), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2490), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [76173] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1120), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1122), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76200] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1102), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1104), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76227] = 5, + ACTIONS(1074), 1, + sym_comment, + STATE(1414), 1, + aux_sym_concatenation_repeat1, + ACTIONS(2571), 2, + sym__concat, + aux_sym_concatenation_token1, + ACTIONS(983), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(988), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76258] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2352), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2574), 1, + sym_file_descriptor, + ACTIONS(2492), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1439), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2350), 5, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2490), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [76293] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1124), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1126), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76320] = 5, + ACTIONS(1074), 1, + sym_comment, + STATE(1419), 1, + aux_sym_concatenation_repeat1, + ACTIONS(2576), 2, + sym__concat, + aux_sym_concatenation_token1, + ACTIONS(546), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(548), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76351] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1193), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1195), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76378] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2576), 1, + aux_sym_concatenation_token1, + ACTIONS(2578), 1, + sym__concat, + STATE(1414), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(961), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76411] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2229), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2574), 1, + sym_file_descriptor, + ACTIONS(2492), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1439), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2227), 5, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2490), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [76446] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1086), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1088), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76473] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1072), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1070), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76500] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1046), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1048), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76527] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1112), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1114), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76554] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1118), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76581] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1098), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1100), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76608] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1118), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76635] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2580), 1, + sym_variable_name, + STATE(1428), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2055), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2057), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76666] = 10, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2068), 1, + anon_sym_PIPE, + ACTIONS(2592), 1, + anon_sym_LT_LT, + ACTIONS(2595), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2598), 1, + sym_file_descriptor, + ACTIONS(2079), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2589), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2586), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1429), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2583), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [76707] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1042), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1044), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76734] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2496), 1, + sym_file_descriptor, + ACTIONS(2558), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(1470), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2492), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2490), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [76771] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2601), 1, + sym_variable_name, + STATE(1428), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2133), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2131), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76802] = 10, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2119), 1, + anon_sym_PIPE, + ACTIONS(2609), 1, + anon_sym_LT_LT, + ACTIONS(2611), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2613), 1, + sym_file_descriptor, + ACTIONS(2121), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2607), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2605), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1429), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2603), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [76843] = 4, + ACTIONS(1074), 1, + sym_comment, + STATE(1433), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(927), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76872] = 5, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(1074), 1, + sym_comment, + STATE(1433), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 6, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(927), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76903] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(983), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(988), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76930] = 5, + ACTIONS(1074), 1, + sym_comment, + STATE(1419), 1, + aux_sym_concatenation_repeat1, + ACTIONS(2576), 2, + sym__concat, + aux_sym_concatenation_token1, + ACTIONS(540), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(538), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76961] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1058), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1056), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76988] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2218), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2621), 1, + sym_file_descriptor, + ACTIONS(2618), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1439), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2210), 5, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2615), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [77023] = 8, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2624), 1, + sym_file_descriptor, + ACTIONS(2227), 2, + anon_sym_PIPE, + anon_sym_LT_LT, + ACTIONS(2607), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1448), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2229), 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT_DASH, + ACTIONS(2605), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(2603), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77059] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1086), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1088), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77085] = 9, + ACTIONS(804), 1, + anon_sym_LT_LT, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2043), 1, + sym_file_descriptor, + ACTIONS(2632), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2626), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2630), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2628), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77123] = 9, + ACTIONS(770), 1, + anon_sym_LT_LT, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2005), 1, + sym_file_descriptor, + ACTIONS(2640), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2634), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2638), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2636), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77161] = 9, + ACTIONS(804), 1, + anon_sym_LT_LT, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2033), 1, + sym_file_descriptor, + ACTIONS(2632), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2642), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2646), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2644), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77199] = 9, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2609), 1, + anon_sym_LT_LT, + ACTIONS(2611), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2613), 1, + sym_file_descriptor, + ACTIONS(2607), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2648), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2605), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1433), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2603), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77237] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2650), 1, + anon_sym_PIPE, + STATE(1449), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2440), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2444), 14, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [77267] = 9, + ACTIONS(804), 1, + anon_sym_LT_LT, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2496), 1, + sym_file_descriptor, + ACTIONS(2632), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2652), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2656), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2654), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2490), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77305] = 8, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2667), 1, + sym_file_descriptor, + ACTIONS(2210), 2, + anon_sym_PIPE, + anon_sym_LT_LT, + ACTIONS(2664), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1448), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2218), 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT_DASH, + ACTIONS(2661), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(2658), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77341] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2670), 1, + anon_sym_PIPE, + STATE(1449), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2186), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2191), 14, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [77371] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(983), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(988), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77397] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1058), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1056), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77423] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1193), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1195), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77449] = 9, + ACTIONS(804), 1, + anon_sym_LT_LT, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2632), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2673), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2677), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2675), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77487] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1042), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1044), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77513] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1118), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77539] = 9, + ACTIONS(804), 1, + anon_sym_LT_LT, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2019), 1, + sym_file_descriptor, + ACTIONS(2632), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2679), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2683), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2681), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77577] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1120), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1122), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77603] = 8, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2624), 1, + sym_file_descriptor, + ACTIONS(2350), 2, + anon_sym_PIPE, + anon_sym_LT_LT, + ACTIONS(2607), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1448), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2352), 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT_DASH, + ACTIONS(2605), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(2603), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77639] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1072), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1070), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77665] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1118), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77691] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1112), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1114), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77717] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1102), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1104), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77743] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1124), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1126), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77769] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1046), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1048), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77795] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1098), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1100), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77821] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(345), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(347), 1, + anon_sym_DOLLAR, + ACTIONS(349), 1, + anon_sym_DQUOTE, + ACTIONS(353), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(355), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(357), 1, + anon_sym_BQUOTE, + ACTIONS(2687), 1, + sym__bare_dollar, + ACTIONS(2685), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(823), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [77860] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(2691), 1, + anon_sym_DOLLAR, + ACTIONS(2693), 1, + sym__bare_dollar, + ACTIONS(2689), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(551), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [77899] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2695), 1, + aux_sym_concatenation_token1, + ACTIONS(2697), 1, + sym__concat, + STATE(1569), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 12, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [77930] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2701), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2703), 1, + anon_sym_DOLLAR, + ACTIONS(2705), 1, + anon_sym_DQUOTE, + ACTIONS(2707), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2709), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2711), 1, + anon_sym_BQUOTE, + ACTIONS(2713), 1, + sym__comment_word, + ACTIONS(2715), 1, + sym__empty_value, + STATE(1503), 1, + sym_concatenation, + ACTIONS(2699), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1405), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [77973] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + ACTIONS(2731), 1, + sym__comment_word, + ACTIONS(2733), 1, + sym__empty_value, + STATE(697), 1, + sym_concatenation, + ACTIONS(2717), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(504), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78016] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2737), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2739), 1, + anon_sym_DOLLAR, + ACTIONS(2741), 1, + anon_sym_DQUOTE, + ACTIONS(2743), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2745), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2747), 1, + anon_sym_BQUOTE, + ACTIONS(2749), 1, + sym__bare_dollar, + ACTIONS(2735), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1177), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78055] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2755), 1, + sym_variable_name, + ACTIONS(2753), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(379), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2751), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [78084] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(2757), 1, + aux_sym_heredoc_redirect_token1, + STATE(1577), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78127] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(2759), 1, + aux_sym_heredoc_redirect_token1, + STATE(2151), 1, + sym__heredoc_expression, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1609), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [78162] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(2761), 1, + aux_sym_heredoc_redirect_token1, + STATE(1577), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78205] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + ACTIONS(2765), 1, + sym__bare_dollar, + ACTIONS(2763), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(524), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78244] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(2769), 1, + sym__bare_dollar, + ACTIONS(2767), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(380), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78283] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2773), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2775), 1, + anon_sym_DOLLAR, + ACTIONS(2777), 1, + anon_sym_DQUOTE, + ACTIONS(2779), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2781), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2783), 1, + anon_sym_BQUOTE, + ACTIONS(2785), 1, + sym__bare_dollar, + ACTIONS(2771), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1183), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78322] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2789), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2791), 1, + anon_sym_DOLLAR, + ACTIONS(2793), 1, + anon_sym_DQUOTE, + ACTIONS(2795), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2797), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2799), 1, + anon_sym_BQUOTE, + ACTIONS(2801), 1, + sym__comment_word, + ACTIONS(2803), 1, + sym__empty_value, + STATE(695), 1, + sym_concatenation, + ACTIONS(2787), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(336), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78365] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(2805), 1, + aux_sym_heredoc_redirect_token1, + STATE(2130), 1, + sym__heredoc_expression, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1609), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [78400] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2811), 1, + anon_sym_DOLLAR, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2821), 1, + sym__bare_dollar, + ACTIONS(2807), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(992), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78439] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + ACTIONS(2825), 1, + anon_sym_DOLLAR, + ACTIONS(2827), 1, + sym__bare_dollar, + ACTIONS(2823), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1040), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78478] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2701), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2705), 1, + anon_sym_DQUOTE, + ACTIONS(2707), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2709), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2711), 1, + anon_sym_BQUOTE, + ACTIONS(2831), 1, + anon_sym_DOLLAR, + ACTIONS(2833), 1, + sym__bare_dollar, + ACTIONS(2829), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1436), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78517] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(2835), 1, + aux_sym_heredoc_redirect_token1, + STATE(1577), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78560] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2737), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2741), 1, + anon_sym_DQUOTE, + ACTIONS(2743), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2745), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2747), 1, + anon_sym_BQUOTE, + ACTIONS(2749), 1, + sym__bare_dollar, + ACTIONS(2837), 1, + anon_sym_DOLLAR, + ACTIONS(2735), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1177), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78599] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2695), 1, + aux_sym_concatenation_token1, + ACTIONS(2697), 1, + sym__concat, + STATE(1569), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 12, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [78630] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2841), 1, + anon_sym_DOLLAR, + ACTIONS(2843), 1, + sym__comment_word, + ACTIONS(2845), 1, + sym__empty_value, + STATE(1101), 1, + sym_concatenation, + ACTIONS(2839), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1329), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78673] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(461), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(463), 1, + anon_sym_DOLLAR, + ACTIONS(465), 1, + anon_sym_DQUOTE, + ACTIONS(467), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(469), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(471), 1, + anon_sym_BQUOTE, + ACTIONS(2849), 1, + sym__bare_dollar, + ACTIONS(2847), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(477), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78712] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(2851), 1, + aux_sym_heredoc_redirect_token1, + STATE(2161), 1, + sym__heredoc_expression, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1609), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [78747] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2841), 1, + anon_sym_DOLLAR, + ACTIONS(2843), 1, + sym__comment_word, + ACTIONS(2845), 1, + sym__empty_value, + STATE(1101), 1, + sym_concatenation, + ACTIONS(2853), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1090), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78790] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(2855), 1, + aux_sym_heredoc_redirect_token1, + STATE(1577), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78833] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(879), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(883), 1, + anon_sym_DQUOTE, + ACTIONS(885), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(887), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(889), 1, + anon_sym_BQUOTE, + ACTIONS(2859), 1, + anon_sym_DOLLAR, + ACTIONS(2861), 1, + sym__bare_dollar, + ACTIONS(2857), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1227), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78872] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(2863), 1, + aux_sym_heredoc_redirect_token1, + STATE(2166), 1, + sym__heredoc_expression, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1609), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [78907] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(27), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(31), 1, + anon_sym_DQUOTE, + ACTIONS(35), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(37), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(39), 1, + anon_sym_BQUOTE, + ACTIONS(2867), 1, + anon_sym_DOLLAR, + ACTIONS(2869), 1, + sym__bare_dollar, + ACTIONS(2865), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(369), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78946] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(27), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(29), 1, + anon_sym_DOLLAR, + ACTIONS(31), 1, + anon_sym_DQUOTE, + ACTIONS(35), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(37), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(39), 1, + anon_sym_BQUOTE, + ACTIONS(2869), 1, + sym__bare_dollar, + ACTIONS(2865), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(369), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78985] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2841), 1, + anon_sym_DOLLAR, + ACTIONS(2843), 1, + sym__comment_word, + ACTIONS(2845), 1, + sym__empty_value, + STATE(1101), 1, + sym_concatenation, + ACTIONS(2871), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1082), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79028] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(813), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(817), 1, + anon_sym_DQUOTE, + ACTIONS(819), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(821), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(823), 1, + anon_sym_BQUOTE, + ACTIONS(2875), 1, + anon_sym_DOLLAR, + ACTIONS(2877), 1, + sym__bare_dollar, + ACTIONS(2873), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(607), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79067] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2881), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2883), 1, + anon_sym_DOLLAR, + ACTIONS(2885), 1, + anon_sym_DQUOTE, + ACTIONS(2887), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2889), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2891), 1, + anon_sym_BQUOTE, + ACTIONS(2893), 1, + sym__comment_word, + ACTIONS(2895), 1, + sym__empty_value, + STATE(989), 1, + sym_concatenation, + ACTIONS(2879), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(842), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79110] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(704), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(708), 1, + anon_sym_DQUOTE, + ACTIONS(710), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(712), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(714), 1, + anon_sym_BQUOTE, + ACTIONS(2899), 1, + anon_sym_DOLLAR, + ACTIONS(2901), 1, + sym__bare_dollar, + ACTIONS(2897), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(662), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79149] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2773), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2777), 1, + anon_sym_DQUOTE, + ACTIONS(2779), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2781), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2783), 1, + anon_sym_BQUOTE, + ACTIONS(2785), 1, + sym__bare_dollar, + ACTIONS(2903), 1, + anon_sym_DOLLAR, + ACTIONS(2771), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1183), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79188] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2821), 1, + sym__bare_dollar, + ACTIONS(2905), 1, + anon_sym_DOLLAR, + ACTIONS(2807), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(992), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79227] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + ACTIONS(2827), 1, + sym__bare_dollar, + ACTIONS(2907), 1, + anon_sym_DOLLAR, + ACTIONS(2823), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1040), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79266] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1090), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1094), 10, + sym_file_descriptor, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [79291] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2911), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2913), 1, + anon_sym_DOLLAR, + ACTIONS(2915), 1, + anon_sym_DQUOTE, + ACTIONS(2917), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2919), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2921), 1, + anon_sym_BQUOTE, + ACTIONS(2923), 1, + sym__bare_dollar, + ACTIONS(2909), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(454), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79330] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + ACTIONS(2765), 1, + sym__bare_dollar, + ACTIONS(2925), 1, + anon_sym_DOLLAR, + ACTIONS(2763), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(524), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79369] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1566), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1570), 1, + anon_sym_DQUOTE, + ACTIONS(1572), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1574), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1576), 1, + anon_sym_BQUOTE, + ACTIONS(2929), 1, + anon_sym_DOLLAR, + ACTIONS(2931), 1, + sym__bare_dollar, + ACTIONS(2927), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1450), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79408] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + ACTIONS(2731), 1, + sym__comment_word, + ACTIONS(2733), 1, + sym__empty_value, + STATE(697), 1, + sym_concatenation, + ACTIONS(2933), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(799), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79451] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(2693), 1, + sym__bare_dollar, + ACTIONS(2689), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(551), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79490] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(461), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(465), 1, + anon_sym_DQUOTE, + ACTIONS(467), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(469), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(471), 1, + anon_sym_BQUOTE, + ACTIONS(2849), 1, + sym__bare_dollar, + ACTIONS(2935), 1, + anon_sym_DOLLAR, + ACTIONS(2847), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(477), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79529] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2773), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2777), 1, + anon_sym_DQUOTE, + ACTIONS(2779), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2781), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2783), 1, + anon_sym_BQUOTE, + ACTIONS(2903), 1, + anon_sym_DOLLAR, + ACTIONS(2939), 1, + sym__comment_word, + ACTIONS(2941), 1, + sym__empty_value, + STATE(1341), 1, + sym_concatenation, + ACTIONS(2937), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1092), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79572] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(2075), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(2943), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1998), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79613] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2945), 1, + anon_sym_PIPE, + STATE(1544), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2444), 6, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2440), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [79642] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2821), 1, + sym__bare_dollar, + ACTIONS(2947), 1, + anon_sym_DOLLAR, + ACTIONS(2807), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(992), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79681] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2188), 1, + anon_sym_PIPE, + STATE(1512), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2191), 6, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2186), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [79710] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + ACTIONS(2827), 1, + sym__bare_dollar, + ACTIONS(2949), 1, + anon_sym_DOLLAR, + ACTIONS(2823), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1040), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79749] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(2693), 1, + sym__bare_dollar, + ACTIONS(2951), 1, + anon_sym_DOLLAR, + ACTIONS(2689), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(551), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79788] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + ACTIONS(2765), 1, + sym__bare_dollar, + ACTIONS(2953), 1, + anon_sym_DOLLAR, + ACTIONS(2763), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(524), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79827] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(2769), 1, + sym__bare_dollar, + ACTIONS(2955), 1, + anon_sym_DOLLAR, + ACTIONS(2767), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(380), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79866] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(2769), 1, + sym__bare_dollar, + ACTIONS(2957), 1, + anon_sym_DOLLAR, + ACTIONS(2767), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(380), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79905] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1483), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1487), 1, + anon_sym_DQUOTE, + ACTIONS(1489), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1491), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1493), 1, + anon_sym_BQUOTE, + ACTIONS(2961), 1, + anon_sym_DOLLAR, + ACTIONS(2963), 1, + sym__bare_dollar, + ACTIONS(2959), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(923), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79944] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(813), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(815), 1, + anon_sym_DOLLAR, + ACTIONS(817), 1, + anon_sym_DQUOTE, + ACTIONS(819), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(821), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(823), 1, + anon_sym_BQUOTE, + ACTIONS(2877), 1, + sym__bare_dollar, + ACTIONS(2873), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(607), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79983] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + ACTIONS(2827), 1, + sym__bare_dollar, + ACTIONS(2965), 1, + anon_sym_DOLLAR, + ACTIONS(2823), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1040), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80022] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(2969), 1, + anon_sym_DOLLAR, + ACTIONS(2971), 1, + sym__bare_dollar, + ACTIONS(2967), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1693), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80061] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1566), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1568), 1, + anon_sym_DOLLAR, + ACTIONS(1570), 1, + anon_sym_DQUOTE, + ACTIONS(1572), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1574), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1576), 1, + anon_sym_BQUOTE, + ACTIONS(2931), 1, + sym__bare_dollar, + ACTIONS(2927), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1450), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80100] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + ACTIONS(2975), 1, + anon_sym_DOLLAR, + ACTIONS(2977), 1, + sym__bare_dollar, + ACTIONS(2973), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(625), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80139] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(497), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(501), 1, + anon_sym_DQUOTE, + ACTIONS(503), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(505), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(507), 1, + anon_sym_BQUOTE, + ACTIONS(2981), 1, + anon_sym_DOLLAR, + ACTIONS(2983), 1, + sym__bare_dollar, + ACTIONS(2979), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(546), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80178] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1483), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1485), 1, + anon_sym_DOLLAR, + ACTIONS(1487), 1, + anon_sym_DQUOTE, + ACTIONS(1489), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1491), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1493), 1, + anon_sym_BQUOTE, + ACTIONS(2963), 1, + sym__bare_dollar, + ACTIONS(2959), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(923), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80217] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(2987), 1, + anon_sym_DOLLAR, + ACTIONS(2989), 1, + sym__bare_dollar, + ACTIONS(2985), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(2074), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80256] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(497), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(499), 1, + anon_sym_DOLLAR, + ACTIONS(501), 1, + anon_sym_DQUOTE, + ACTIONS(503), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(505), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(507), 1, + anon_sym_BQUOTE, + ACTIONS(2983), 1, + sym__bare_dollar, + ACTIONS(2979), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(546), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80295] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(704), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(706), 1, + anon_sym_DOLLAR, + ACTIONS(708), 1, + anon_sym_DQUOTE, + ACTIONS(710), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(712), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(714), 1, + anon_sym_BQUOTE, + ACTIONS(2901), 1, + sym__bare_dollar, + ACTIONS(2897), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(662), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80334] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2737), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2741), 1, + anon_sym_DQUOTE, + ACTIONS(2743), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2745), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2747), 1, + anon_sym_BQUOTE, + ACTIONS(2837), 1, + anon_sym_DOLLAR, + ACTIONS(2993), 1, + sym__comment_word, + ACTIONS(2995), 1, + sym__empty_value, + STATE(1305), 1, + sym_concatenation, + ACTIONS(2991), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1007), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80377] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(2997), 1, + aux_sym_heredoc_redirect_token1, + STATE(1577), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80420] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(2999), 1, + aux_sym_heredoc_redirect_token1, + STATE(2231), 1, + sym__heredoc_expression, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1609), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [80455] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2789), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2793), 1, + anon_sym_DQUOTE, + ACTIONS(2795), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2797), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2799), 1, + anon_sym_BQUOTE, + ACTIONS(3003), 1, + anon_sym_DOLLAR, + ACTIONS(3005), 1, + sym__bare_dollar, + ACTIONS(3001), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(469), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80494] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2701), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2703), 1, + anon_sym_DOLLAR, + ACTIONS(2705), 1, + anon_sym_DQUOTE, + ACTIONS(2707), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2709), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2711), 1, + anon_sym_BQUOTE, + ACTIONS(2833), 1, + sym__bare_dollar, + ACTIONS(2829), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1436), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80533] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(2103), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(3007), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2037), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80574] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + ACTIONS(2827), 1, + sym__bare_dollar, + ACTIONS(2823), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1040), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80613] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2789), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2791), 1, + anon_sym_DOLLAR, + ACTIONS(2793), 1, + anon_sym_DQUOTE, + ACTIONS(2795), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2797), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2799), 1, + anon_sym_BQUOTE, + ACTIONS(3005), 1, + sym__bare_dollar, + ACTIONS(3001), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(469), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80652] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(969), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(973), 1, + anon_sym_DQUOTE, + ACTIONS(975), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(977), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(979), 1, + anon_sym_BQUOTE, + ACTIONS(3011), 1, + anon_sym_DOLLAR, + ACTIONS(3013), 1, + sym__bare_dollar, + ACTIONS(3009), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(869), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80691] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(2971), 1, + sym__bare_dollar, + ACTIONS(2967), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1693), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80730] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2841), 1, + anon_sym_DOLLAR, + ACTIONS(2843), 1, + sym__comment_word, + ACTIONS(2845), 1, + sym__empty_value, + STATE(1101), 1, + sym_concatenation, + ACTIONS(3015), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1159), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80773] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(2769), 1, + sym__bare_dollar, + ACTIONS(3017), 1, + anon_sym_DOLLAR, + ACTIONS(2767), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(380), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80812] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + ACTIONS(2977), 1, + sym__bare_dollar, + ACTIONS(3019), 1, + anon_sym_DOLLAR, + ACTIONS(2973), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(625), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80851] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3021), 1, + anon_sym_PIPE, + STATE(1544), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2191), 6, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2186), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [80880] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(969), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(971), 1, + anon_sym_DOLLAR, + ACTIONS(973), 1, + anon_sym_DQUOTE, + ACTIONS(975), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(977), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(979), 1, + anon_sym_BQUOTE, + ACTIONS(3013), 1, + sym__bare_dollar, + ACTIONS(3009), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(869), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80919] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + ACTIONS(2765), 1, + sym__bare_dollar, + ACTIONS(3024), 1, + anon_sym_DOLLAR, + ACTIONS(2763), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(524), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80958] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(2693), 1, + sym__bare_dollar, + ACTIONS(3026), 1, + anon_sym_DOLLAR, + ACTIONS(2689), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(551), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80997] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2881), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2885), 1, + anon_sym_DQUOTE, + ACTIONS(2887), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2889), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2891), 1, + anon_sym_BQUOTE, + ACTIONS(3030), 1, + anon_sym_DOLLAR, + ACTIONS(3032), 1, + sym__bare_dollar, + ACTIONS(3028), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(872), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81036] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + ACTIONS(2827), 1, + sym__bare_dollar, + ACTIONS(3034), 1, + anon_sym_DOLLAR, + ACTIONS(2823), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1040), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81075] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(2971), 1, + sym__bare_dollar, + ACTIONS(3036), 1, + anon_sym_DOLLAR, + ACTIONS(2967), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1693), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81114] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2911), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2913), 1, + anon_sym_DOLLAR, + ACTIONS(2915), 1, + anon_sym_DQUOTE, + ACTIONS(2917), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2919), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2921), 1, + anon_sym_BQUOTE, + ACTIONS(3040), 1, + sym__comment_word, + ACTIONS(3042), 1, + sym__empty_value, + STATE(669), 1, + sym_concatenation, + ACTIONS(3038), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(343), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81157] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + ACTIONS(2977), 1, + sym__bare_dollar, + ACTIONS(3044), 1, + anon_sym_DOLLAR, + ACTIONS(2973), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(625), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81196] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2821), 1, + sym__bare_dollar, + ACTIONS(3046), 1, + anon_sym_DOLLAR, + ACTIONS(2807), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(992), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81235] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2881), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2883), 1, + anon_sym_DOLLAR, + ACTIONS(2885), 1, + anon_sym_DQUOTE, + ACTIONS(2887), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2889), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2891), 1, + anon_sym_BQUOTE, + ACTIONS(3032), 1, + sym__bare_dollar, + ACTIONS(3028), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(872), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81274] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2821), 1, + sym__bare_dollar, + ACTIONS(3048), 1, + anon_sym_DOLLAR, + ACTIONS(2807), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(992), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81313] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + ACTIONS(2977), 1, + sym__bare_dollar, + ACTIONS(2973), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(625), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81352] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(879), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(881), 1, + anon_sym_DOLLAR, + ACTIONS(883), 1, + anon_sym_DQUOTE, + ACTIONS(885), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(887), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(889), 1, + anon_sym_BQUOTE, + ACTIONS(2861), 1, + sym__bare_dollar, + ACTIONS(2857), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1227), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81391] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(3050), 1, + aux_sym_heredoc_redirect_token1, + STATE(1577), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81434] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(2095), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(3052), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1992), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81475] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(3056), 1, + sym__bare_dollar, + ACTIONS(3054), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(352), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81514] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3060), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3062), 1, + anon_sym_DOLLAR, + ACTIONS(3064), 1, + anon_sym_DQUOTE, + ACTIONS(3066), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3068), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3070), 1, + anon_sym_BQUOTE, + ACTIONS(3072), 1, + sym__bare_dollar, + ACTIONS(3058), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1982), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81553] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(3056), 1, + sym__bare_dollar, + ACTIONS(3074), 1, + anon_sym_DOLLAR, + ACTIONS(3054), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(352), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81592] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2911), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2915), 1, + anon_sym_DQUOTE, + ACTIONS(2917), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2919), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2921), 1, + anon_sym_BQUOTE, + ACTIONS(2923), 1, + sym__bare_dollar, + ACTIONS(3076), 1, + anon_sym_DOLLAR, + ACTIONS(2909), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(454), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81631] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1772), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1774), 1, + anon_sym_DOLLAR, + ACTIONS(1776), 1, + anon_sym_DQUOTE, + ACTIONS(1778), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1780), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1782), 1, + anon_sym_BQUOTE, + ACTIONS(3080), 1, + sym__bare_dollar, + ACTIONS(3078), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1596), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81670] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(345), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(349), 1, + anon_sym_DQUOTE, + ACTIONS(353), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(355), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(357), 1, + anon_sym_BQUOTE, + ACTIONS(2687), 1, + sym__bare_dollar, + ACTIONS(3082), 1, + anon_sym_DOLLAR, + ACTIONS(2685), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(823), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81709] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2841), 1, + anon_sym_DOLLAR, + ACTIONS(2843), 1, + sym__comment_word, + ACTIONS(2845), 1, + sym__empty_value, + STATE(1101), 1, + sym_concatenation, + ACTIONS(3084), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1083), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81752] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(3086), 1, + aux_sym_heredoc_redirect_token1, + STATE(2211), 1, + sym__heredoc_expression, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1609), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [81787] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1709), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1711), 1, + anon_sym_DOLLAR, + ACTIONS(1713), 1, + anon_sym_DQUOTE, + ACTIONS(1715), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1717), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1719), 1, + anon_sym_BQUOTE, + ACTIONS(3090), 1, + sym__bare_dollar, + ACTIONS(3088), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1017), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81826] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2695), 1, + aux_sym_concatenation_token1, + ACTIONS(3092), 1, + sym__concat, + STATE(1571), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 12, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [81857] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1709), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1713), 1, + anon_sym_DQUOTE, + ACTIONS(1715), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1717), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1719), 1, + anon_sym_BQUOTE, + ACTIONS(3090), 1, + sym__bare_dollar, + ACTIONS(3094), 1, + anon_sym_DOLLAR, + ACTIONS(3088), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1017), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81896] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3096), 1, + aux_sym_concatenation_token1, + ACTIONS(3099), 1, + sym__concat, + STATE(1571), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 12, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [81927] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(2989), 1, + sym__bare_dollar, + ACTIONS(2985), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(2074), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81966] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1772), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1776), 1, + anon_sym_DQUOTE, + ACTIONS(1778), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1780), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1782), 1, + anon_sym_BQUOTE, + ACTIONS(3080), 1, + sym__bare_dollar, + ACTIONS(3102), 1, + anon_sym_DOLLAR, + ACTIONS(3078), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1596), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82005] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3060), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3064), 1, + anon_sym_DQUOTE, + ACTIONS(3066), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3068), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3070), 1, + anon_sym_BQUOTE, + ACTIONS(3072), 1, + sym__bare_dollar, + ACTIONS(3104), 1, + anon_sym_DOLLAR, + ACTIONS(3058), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1982), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82044] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + ACTIONS(2731), 1, + sym__comment_word, + ACTIONS(2733), 1, + sym__empty_value, + STATE(697), 1, + sym_concatenation, + ACTIONS(3106), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(322), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82087] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2821), 1, + sym__bare_dollar, + ACTIONS(2841), 1, + anon_sym_DOLLAR, + ACTIONS(2807), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(992), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82126] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3111), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3113), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3116), 1, + anon_sym_DOLLAR, + ACTIONS(3119), 1, + anon_sym_DQUOTE, + ACTIONS(3122), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3125), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3128), 1, + anon_sym_BQUOTE, + STATE(1577), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + ACTIONS(3108), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82169] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2394), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2392), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [82193] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2336), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2334), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [82217] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3131), 1, + aux_sym_concatenation_token1, + ACTIONS(3134), 1, + sym__concat, + STATE(1580), 1, + aux_sym_concatenation_repeat1, + ACTIONS(983), 13, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [82245] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2911), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2913), 1, + anon_sym_DOLLAR, + ACTIONS(2915), 1, + anon_sym_DQUOTE, + ACTIONS(2917), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2919), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2921), 1, + anon_sym_BQUOTE, + STATE(193), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3137), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(377), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82283] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1193), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82307] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1042), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82331] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2911), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2913), 1, + anon_sym_DOLLAR, + ACTIONS(2915), 1, + anon_sym_DQUOTE, + ACTIONS(2917), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2919), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2921), 1, + anon_sym_BQUOTE, + STATE(203), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3137), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(377), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82369] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1046), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82393] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + STATE(215), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3139), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(458), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82431] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3141), 1, + aux_sym_concatenation_token1, + ACTIONS(3143), 1, + sym__concat, + STATE(1580), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 13, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [82459] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + STATE(1323), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(2479), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1669), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82497] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1072), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82521] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2773), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2777), 1, + anon_sym_DQUOTE, + ACTIONS(2779), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2781), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2783), 1, + anon_sym_BQUOTE, + ACTIONS(2903), 1, + anon_sym_DOLLAR, + STATE(867), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3145), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1109), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82559] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1058), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82583] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1086), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82607] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1709), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1711), 1, + anon_sym_DOLLAR, + ACTIONS(1713), 1, + anon_sym_DQUOTE, + ACTIONS(1715), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1717), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1719), 1, + anon_sym_BQUOTE, + STATE(803), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1707), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(950), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82645] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + STATE(378), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3147), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(795), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82683] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + STATE(353), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3147), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(795), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82721] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82745] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1098), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82769] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2773), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2777), 1, + anon_sym_DQUOTE, + ACTIONS(2779), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2781), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2783), 1, + anon_sym_BQUOTE, + ACTIONS(2903), 1, + anon_sym_DOLLAR, + STATE(859), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3145), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1109), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82807] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + STATE(1373), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(2479), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1669), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82845] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1709), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1711), 1, + anon_sym_DOLLAR, + ACTIONS(1713), 1, + anon_sym_DQUOTE, + ACTIONS(1715), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1717), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1719), 1, + anon_sym_BQUOTE, + STATE(801), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1707), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(950), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82883] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1102), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82907] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + STATE(195), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3149), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(339), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82945] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + STATE(197), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3149), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(339), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82983] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + STATE(1379), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(2479), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1669), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [83021] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(546), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(548), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83045] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1594), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1592), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83069] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1594), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1592), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83093] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2398), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2396), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83117] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2218), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3157), 1, + sym_file_descriptor, + ACTIONS(2210), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(3154), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1609), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(3151), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [83149] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2225), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2223), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83173] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2257), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2255), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83197] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2283), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2281), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83221] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2386), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2384), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83245] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(443), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1278), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(827), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [83283] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(444), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1278), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(827), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [83321] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2279), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2277), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83345] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2312), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2310), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83369] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2320), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2318), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83393] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2350), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2352), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83417] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2390), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2388), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83441] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2208), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2206), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83465] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2382), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2380), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83489] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2370), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2368), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83513] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2366), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2364), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83537] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2244), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2242), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83561] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2429), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2427), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83585] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2261), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2259), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83609] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2265), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2263), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83633] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2273), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2271), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83657] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2287), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2285), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83681] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2291), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2289), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83705] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2287), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2285), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83729] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2308), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2306), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83753] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2316), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2314), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83777] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2324), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2322), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83801] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2328), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2326), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83825] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2332), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2330), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83849] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(704), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(706), 1, + anon_sym_DOLLAR, + ACTIONS(708), 1, + anon_sym_DQUOTE, + ACTIONS(710), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(712), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(714), 1, + anon_sym_BQUOTE, + STATE(225), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(702), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(447), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [83887] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(540), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(538), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83911] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2336), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2334), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83935] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(216), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(716), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(600), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [83973] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1112), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [83997] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(217), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(716), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(600), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84035] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(704), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(706), 1, + anon_sym_DOLLAR, + ACTIONS(708), 1, + anon_sym_DQUOTE, + ACTIONS(710), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(712), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(714), 1, + anon_sym_BQUOTE, + STATE(214), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(702), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(447), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84073] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2340), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2338), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84097] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [84121] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2340), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2338), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84145] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2344), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2342), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84169] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2348), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2346), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84193] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(813), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(815), 1, + anon_sym_DOLLAR, + ACTIONS(817), 1, + anon_sym_DQUOTE, + ACTIONS(819), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(821), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(823), 1, + anon_sym_BQUOTE, + STATE(230), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(811), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(506), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84231] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2356), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2354), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84255] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2360), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2358), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84279] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2356), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2354), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84303] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2374), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2372), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84327] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2269), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2267), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84351] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2378), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2376), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84375] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2413), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2411), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84399] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2413), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2411), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84423] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1120), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [84447] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2417), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2415), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84471] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2421), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2419), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84495] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2421), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2419), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84519] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2436), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2434), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84543] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(261), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(873), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84581] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2425), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2423), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84605] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2425), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2423), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84629] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2378), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2376), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84653] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(813), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(815), 1, + anon_sym_DOLLAR, + ACTIONS(817), 1, + anon_sym_DQUOTE, + ACTIONS(819), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(821), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(823), 1, + anon_sym_BQUOTE, + STATE(234), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(811), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(506), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84691] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3141), 1, + aux_sym_concatenation_token1, + ACTIONS(3160), 1, + sym__concat, + STATE(1587), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1172), 13, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [84719] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(250), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(873), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84757] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [84781] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1124), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [84805] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1483), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1485), 1, + anon_sym_DOLLAR, + ACTIONS(1487), 1, + anon_sym_DQUOTE, + ACTIONS(1489), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1491), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1493), 1, + anon_sym_BQUOTE, + STATE(651), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1481), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(856), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84843] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1483), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1485), 1, + anon_sym_DOLLAR, + ACTIONS(1487), 1, + anon_sym_DQUOTE, + ACTIONS(1489), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1491), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1493), 1, + anon_sym_BQUOTE, + STATE(666), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1481), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(856), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84881] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(246), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(873), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84919] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2881), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2883), 1, + anon_sym_DOLLAR, + ACTIONS(2885), 1, + anon_sym_DQUOTE, + ACTIONS(2887), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2889), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2891), 1, + anon_sym_BQUOTE, + STATE(558), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3162), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(828), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84957] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(247), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(873), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84995] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2881), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2883), 1, + anon_sym_DOLLAR, + ACTIONS(2885), 1, + anon_sym_DQUOTE, + ACTIONS(2887), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2889), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2891), 1, + anon_sym_BQUOTE, + STATE(583), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3162), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(828), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [85033] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2789), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2791), 1, + anon_sym_DOLLAR, + ACTIONS(2793), 1, + anon_sym_DQUOTE, + ACTIONS(2795), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2797), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2799), 1, + anon_sym_BQUOTE, + STATE(205), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3164), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(361), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [85071] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + STATE(224), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3139), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(458), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [85109] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2789), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2791), 1, + anon_sym_DOLLAR, + ACTIONS(2793), 1, + anon_sym_DQUOTE, + ACTIONS(2795), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2797), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2799), 1, + anon_sym_BQUOTE, + STATE(207), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3164), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(361), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [85147] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 1, + sym__concat, + ACTIONS(1046), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85170] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 1, + sym__concat, + ACTIONS(1042), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85193] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 1, + sym__concat, + ACTIONS(1124), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85216] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 1, + sym__concat, + ACTIONS(1102), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85239] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 1, + sym__concat, + ACTIONS(1086), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85262] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 1, + sym__concat, + ACTIONS(1112), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85285] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 1, + sym__concat, + ACTIONS(1098), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85308] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 1, + sym__concat, + ACTIONS(1116), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85331] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 1, + sym__concat, + ACTIONS(1072), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85354] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 1, + sym__concat, + ACTIONS(1120), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85377] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 1, + sym__concat, + ACTIONS(1116), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85400] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 1, + sym__concat, + ACTIONS(983), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85423] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 1, + sym__concat, + ACTIONS(1193), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85446] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3060), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3064), 1, + anon_sym_DQUOTE, + ACTIONS(3066), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3068), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3070), 1, + anon_sym_BQUOTE, + ACTIONS(3104), 1, + anon_sym_DOLLAR, + STATE(2009), 1, + sym_concatenation, + ACTIONS(3166), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1954), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [85483] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3060), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3064), 1, + anon_sym_DQUOTE, + ACTIONS(3066), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3068), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3070), 1, + anon_sym_BQUOTE, + ACTIONS(3104), 1, + anon_sym_DOLLAR, + STATE(2012), 1, + sym_concatenation, + ACTIONS(3168), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1956), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [85520] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(3172), 1, + anon_sym_RBRACE, + ACTIONS(3174), 1, + sym_variable_name, + ACTIONS(3176), 1, + sym__expansion_word, + STATE(2276), 1, + sym__concatenation_in_expansion, + ACTIONS(3170), 2, + sym_raw_string, + sym_word, + STATE(2073), 2, + sym_string, + sym_expansion, + STATE(2077), 2, + sym_simple_expansion, + sym_command_substitution, + [85563] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3178), 1, + anon_sym_RBRACE, + ACTIONS(3180), 1, + anon_sym_PERCENT, + STATE(2296), 2, + sym_expansion_expression, + sym_expansion_regex, + ACTIONS(3182), 3, + sym__immediate_double_hash, + anon_sym_POUND, + anon_sym_PERCENT_PERCENT, + ACTIONS(3184), 8, + anon_sym_COLON_DASH, + anon_sym_DASH3, + anon_sym_COLON_EQ, + anon_sym_EQ2, + anon_sym_COLON_QMARK, + anon_sym_QMARK2, + anon_sym_COLON_PLUS, + anon_sym_PLUS3, + [85592] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3180), 1, + anon_sym_PERCENT, + ACTIONS(3186), 1, + anon_sym_RBRACE, + STATE(2297), 2, + sym_expansion_expression, + sym_expansion_regex, + ACTIONS(3182), 3, + sym__immediate_double_hash, + anon_sym_POUND, + anon_sym_PERCENT_PERCENT, + ACTIONS(3184), 8, + anon_sym_COLON_DASH, + anon_sym_DASH3, + anon_sym_COLON_EQ, + anon_sym_EQ2, + anon_sym_COLON_QMARK, + anon_sym_QMARK2, + anon_sym_COLON_PLUS, + anon_sym_PLUS3, + [85621] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3060), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3064), 1, + anon_sym_DQUOTE, + ACTIONS(3066), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3068), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3070), 1, + anon_sym_BQUOTE, + ACTIONS(3104), 1, + anon_sym_DOLLAR, + STATE(1999), 1, + sym_concatenation, + ACTIONS(3188), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1957), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [85658] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 1, + sym__concat, + ACTIONS(1058), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85681] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3192), 1, + anon_sym_DQUOTE, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85709] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3200), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85737] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3202), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85765] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3204), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85793] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3206), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85821] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3208), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85849] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3210), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85877] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3212), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85905] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3214), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85933] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3216), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85961] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3218), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85989] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3220), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86017] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3222), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86045] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3224), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86073] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3226), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86101] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3228), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86129] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3230), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86157] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3232), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86185] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3234), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86213] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3236), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86241] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3238), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86269] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3240), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86297] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3242), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86325] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3244), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86353] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 12, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [86375] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3246), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86403] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3248), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86431] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3250), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86459] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 12, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [86481] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3252), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86509] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3254), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86537] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3256), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86565] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3258), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86593] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3260), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86621] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3262), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86649] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3264), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86677] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3266), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86705] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3268), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86733] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3270), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86761] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3272), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86789] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3274), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86817] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3276), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86845] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3282), 1, + sym_variable_name, + ACTIONS(379), 2, + anon_sym_PIPE, + anon_sym_RPAREN, + ACTIONS(3280), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3278), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86871] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3284), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86899] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3286), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86927] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3288), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86955] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3290), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86983] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3292), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87011] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3294), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87039] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3296), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87067] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3298), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87095] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3300), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87123] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3302), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87151] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3304), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87179] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3306), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87207] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3308), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87235] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3310), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87263] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3312), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87291] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3314), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87319] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3316), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87347] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3318), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87375] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3320), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87403] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3322), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87431] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3324), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87459] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3326), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87487] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3328), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87515] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3330), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87543] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3332), 1, + anon_sym_RBRACE, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + STATE(2299), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87572] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3342), 1, + anon_sym_RBRACE, + STATE(2193), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87601] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3344), 1, + anon_sym_RBRACE, + STATE(2291), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87630] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3346), 1, + anon_sym_RBRACE, + STATE(2189), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87659] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3348), 1, + anon_sym_RBRACE, + STATE(2200), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87688] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3350), 1, + anon_sym_RBRACE, + STATE(2292), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87717] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3352), 1, + anon_sym_RBRACE, + STATE(2307), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87746] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3354), 1, + anon_sym_RBRACE, + STATE(2309), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87775] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3356), 1, + anon_sym_RBRACE, + STATE(2284), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87804] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3358), 1, + anon_sym_RBRACE, + STATE(2326), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87833] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3360), 1, + anon_sym_RBRACE, + STATE(2198), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87862] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3362), 1, + anon_sym_RBRACE, + STATE(2278), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87891] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3141), 1, + aux_sym_concatenation_token1, + ACTIONS(3364), 1, + sym__concat, + STATE(1580), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 10, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [87916] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3366), 1, + anon_sym_RBRACE, + STATE(2206), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87945] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3368), 1, + anon_sym_RBRACE, + STATE(2279), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87974] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3370), 1, + anon_sym_RBRACE, + STATE(2150), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88003] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3372), 1, + anon_sym_RBRACE, + STATE(2319), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88032] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3374), 1, + anon_sym_RBRACE, + STATE(2215), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88061] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(3378), 1, + sym_raw_string, + ACTIONS(3376), 3, + sym_variable_name, + sym__expansion_word, + sym_word, + STATE(2090), 4, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [88094] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3141), 1, + aux_sym_concatenation_token1, + ACTIONS(3160), 1, + sym__concat, + STATE(1781), 1, + aux_sym_concatenation_repeat1, + ACTIONS(3380), 10, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [88119] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3382), 1, + anon_sym_RBRACE, + STATE(2271), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88148] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3384), 1, + anon_sym_RBRACE, + STATE(2183), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88177] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [88202] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3386), 1, + anon_sym_RBRACE, + STATE(2209), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88231] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3388), 1, + anon_sym_RBRACE, + STATE(2332), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88260] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3390), 1, + anon_sym_RBRACE, + STATE(2266), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88289] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3392), 1, + anon_sym_RBRACE, + STATE(2220), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88318] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3394), 1, + anon_sym_RBRACE, + STATE(2317), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88347] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3396), 1, + anon_sym_RBRACE, + STATE(2256), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88376] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3398), 1, + anon_sym_RBRACE, + STATE(2329), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88405] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3400), 1, + anon_sym_RBRACE, + STATE(2228), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88434] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3402), 1, + anon_sym_RBRACE, + STATE(2234), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88463] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3404), 1, + anon_sym_RBRACE, + STATE(2227), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88492] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3406), 1, + anon_sym_RBRACE, + STATE(2249), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88521] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3408), 1, + anon_sym_RBRACE, + STATE(2335), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88550] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3410), 1, + anon_sym_RBRACE, + STATE(2242), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88579] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3412), 1, + anon_sym_RBRACE, + STATE(2229), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88608] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3416), 1, + anon_sym_DOLLAR, + ACTIONS(3418), 1, + anon_sym_DQUOTE, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + STATE(1874), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [88642] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3432), 1, + sym_variable_name, + ACTIONS(3430), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3428), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [88664] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3440), 1, + anon_sym_LT_LT, + ACTIONS(3442), 1, + anon_sym_LT_LT_DASH, + ACTIONS(3438), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3436), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3434), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [88690] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(393), 1, + sym_variable_name, + ACTIONS(391), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(389), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [88712] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2127), 1, + sym_variable_name, + ACTIONS(2125), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(2123), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [88734] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3444), 1, + anon_sym_DOLLAR, + ACTIONS(3446), 1, + anon_sym_DQUOTE, + STATE(1813), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [88768] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3450), 1, + anon_sym_esac, + ACTIONS(3452), 1, + sym_extglob_pattern, + ACTIONS(3448), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [88790] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3454), 1, + anon_sym_DOLLAR, + ACTIONS(3456), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [88824] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3450), 1, + anon_sym_esac, + ACTIONS(3452), 1, + sym_extglob_pattern, + ACTIONS(3448), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [88846] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3458), 1, + anon_sym_DOLLAR, + ACTIONS(3460), 1, + anon_sym_DQUOTE, + STATE(1843), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [88880] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3464), 1, + anon_sym_esac, + ACTIONS(3466), 1, + sym_extglob_pattern, + ACTIONS(3462), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [88902] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3468), 1, + anon_sym_DOLLAR, + ACTIONS(3470), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [88936] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3474), 1, + anon_sym_esac, + ACTIONS(3476), 1, + sym_extglob_pattern, + ACTIONS(3472), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [88958] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3474), 1, + anon_sym_esac, + ACTIONS(3476), 1, + sym_extglob_pattern, + ACTIONS(3472), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [88980] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(423), 1, + sym_variable_name, + ACTIONS(421), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(419), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89002] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3478), 1, + anon_sym_DOLLAR, + ACTIONS(3480), 1, + anon_sym_DQUOTE, + STATE(1823), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89036] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3482), 1, + anon_sym_DOLLAR, + ACTIONS(3484), 1, + anon_sym_DQUOTE, + STATE(1817), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89070] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3486), 1, + anon_sym_DOLLAR, + ACTIONS(3488), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89104] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1790), 1, + sym_variable_name, + ACTIONS(1788), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1786), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89126] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3490), 1, + anon_sym_DOLLAR, + ACTIONS(3492), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89160] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3500), 1, + anon_sym_LT_LT, + ACTIONS(3502), 1, + anon_sym_LT_LT_DASH, + ACTIONS(3498), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3496), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3494), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [89186] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3504), 1, + anon_sym_DOLLAR, + ACTIONS(3506), 1, + anon_sym_DQUOTE, + STATE(1825), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89220] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1426), 1, + sym_variable_name, + ACTIONS(1424), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1422), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89242] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3282), 1, + sym_variable_name, + ACTIONS(3280), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3278), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89264] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3508), 1, + anon_sym_DOLLAR, + ACTIONS(3510), 1, + anon_sym_DQUOTE, + STATE(1832), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89298] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3440), 1, + anon_sym_LT_LT, + ACTIONS(3442), 1, + anon_sym_LT_LT_DASH, + ACTIONS(3516), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3514), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3512), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [89324] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3518), 1, + anon_sym_DOLLAR, + ACTIONS(3520), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89358] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3522), 1, + anon_sym_DOLLAR, + ACTIONS(3524), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89392] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(417), 1, + sym_variable_name, + ACTIONS(415), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(413), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89414] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3526), 1, + anon_sym_DOLLAR, + ACTIONS(3528), 1, + anon_sym_DQUOTE, + STATE(1850), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89448] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3530), 1, + anon_sym_DOLLAR, + ACTIONS(3532), 1, + anon_sym_DQUOTE, + STATE(1833), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89482] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(435), 1, + sym_variable_name, + ACTIONS(433), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(431), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89504] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3534), 1, + anon_sym_DOLLAR, + ACTIONS(3536), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89538] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3538), 1, + anon_sym_DOLLAR, + ACTIONS(3540), 1, + anon_sym_DQUOTE, + STATE(1838), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89572] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1306), 1, + sym_variable_name, + ACTIONS(1304), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1302), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89594] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3542), 1, + anon_sym_DOLLAR, + ACTIONS(3544), 1, + anon_sym_DQUOTE, + STATE(1845), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89628] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1262), 1, + sym_variable_name, + ACTIONS(1260), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1258), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89650] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3546), 1, + anon_sym_DOLLAR, + ACTIONS(3548), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89684] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3550), 1, + anon_sym_DOLLAR, + ACTIONS(3552), 1, + anon_sym_DQUOTE, + STATE(1848), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89718] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3554), 1, + anon_sym_DOLLAR, + ACTIONS(3556), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89752] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3558), 1, + anon_sym_DOLLAR, + ACTIONS(3560), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89786] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3440), 1, + anon_sym_LT_LT, + ACTIONS(3442), 1, + anon_sym_LT_LT_DASH, + ACTIONS(3566), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3564), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3562), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [89812] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3568), 1, + anon_sym_DOLLAR, + ACTIONS(3570), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89846] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3572), 1, + anon_sym_DOLLAR, + ACTIONS(3574), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89880] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3576), 1, + anon_sym_DOLLAR, + ACTIONS(3578), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89914] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3580), 1, + anon_sym_DOLLAR, + ACTIONS(3582), 1, + anon_sym_DQUOTE, + STATE(1849), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89948] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1806), 1, + sym_variable_name, + ACTIONS(1804), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1802), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89970] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(631), 1, + sym_variable_name, + ACTIONS(629), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(627), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89992] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3584), 1, + anon_sym_DOLLAR, + ACTIONS(3586), 1, + anon_sym_DQUOTE, + STATE(1858), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90026] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3588), 1, + anon_sym_DOLLAR, + ACTIONS(3590), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90060] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 1, + sym_extglob_pattern, + ACTIONS(1274), 11, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [90080] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3592), 1, + anon_sym_DOLLAR, + ACTIONS(3594), 1, + anon_sym_DQUOTE, + STATE(1855), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90114] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3596), 1, + anon_sym_DOLLAR, + ACTIONS(3598), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90148] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(429), 1, + sym_variable_name, + ACTIONS(427), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(425), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [90170] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3600), 1, + anon_sym_DOLLAR, + ACTIONS(3602), 1, + anon_sym_DQUOTE, + STATE(1862), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90204] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3604), 1, + anon_sym_DOLLAR, + ACTIONS(3606), 1, + anon_sym_DQUOTE, + STATE(1878), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90238] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3608), 1, + anon_sym_DOLLAR, + ACTIONS(3610), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90272] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3612), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3615), 1, + anon_sym_DOLLAR, + ACTIONS(3618), 1, + anon_sym_DQUOTE, + ACTIONS(3620), 1, + sym_string_content, + ACTIONS(3623), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3626), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3629), 1, + anon_sym_BQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90306] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3632), 1, + anon_sym_DOLLAR, + ACTIONS(3634), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90340] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3638), 1, + anon_sym_esac, + ACTIONS(3640), 1, + sym_extglob_pattern, + ACTIONS(3636), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [90362] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1207), 1, + sym_variable_name, + ACTIONS(1205), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1203), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [90384] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3642), 1, + anon_sym_DOLLAR, + ACTIONS(3644), 1, + anon_sym_DQUOTE, + STATE(1871), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90418] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3646), 1, + anon_sym_DOLLAR, + ACTIONS(3648), 1, + anon_sym_DQUOTE, + STATE(1864), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90452] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(925), 1, + sym_variable_name, + ACTIONS(923), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(921), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [90474] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3652), 1, + anon_sym_esac, + ACTIONS(3654), 1, + sym_extglob_pattern, + ACTIONS(3650), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [90496] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3656), 1, + anon_sym_DOLLAR, + ACTIONS(3658), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90530] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3440), 1, + anon_sym_LT_LT, + ACTIONS(3442), 1, + anon_sym_LT_LT_DASH, + ACTIONS(3664), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3662), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3660), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [90556] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2755), 1, + sym_variable_name, + ACTIONS(2753), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(2751), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [90578] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3666), 1, + anon_sym_DOLLAR, + ACTIONS(3668), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90612] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3670), 1, + anon_sym_DOLLAR, + ACTIONS(3672), 1, + anon_sym_DQUOTE, + STATE(1889), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90646] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3676), 1, + anon_sym_esac, + ACTIONS(3678), 1, + sym_extglob_pattern, + ACTIONS(3674), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [90668] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3440), 1, + anon_sym_LT_LT, + ACTIONS(3442), 1, + anon_sym_LT_LT_DASH, + ACTIONS(3684), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3682), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3680), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [90694] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3686), 1, + anon_sym_DOLLAR, + ACTIONS(3688), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90728] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1995), 1, + sym_variable_name, + ACTIONS(1993), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1991), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [90750] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3690), 1, + anon_sym_DOLLAR, + ACTIONS(3692), 1, + anon_sym_DQUOTE, + STATE(1884), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90784] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3694), 1, + anon_sym_DOLLAR, + ACTIONS(3696), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90818] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(441), 1, + sym_variable_name, + ACTIONS(439), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(437), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [90840] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3698), 1, + anon_sym_DOLLAR, + ACTIONS(3700), 1, + anon_sym_DQUOTE, + STATE(1885), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90874] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3702), 1, + anon_sym_DOLLAR, + ACTIONS(3704), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90908] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3706), 1, + anon_sym_DOLLAR, + ACTIONS(3708), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90942] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(405), 1, + sym_variable_name, + ACTIONS(403), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(401), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [90964] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3716), 1, + anon_sym_LT_LT, + ACTIONS(3718), 1, + anon_sym_LT_LT_DASH, + ACTIONS(3714), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3712), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3710), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [90990] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3722), 1, + anon_sym_esac, + ACTIONS(3724), 1, + sym_extglob_pattern, + ACTIONS(3720), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [91012] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3726), 1, + anon_sym_DOLLAR, + ACTIONS(3728), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91046] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3730), 1, + anon_sym_DOLLAR, + ACTIONS(3732), 1, + anon_sym_DQUOTE, + STATE(1881), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91080] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3722), 1, + anon_sym_esac, + ACTIONS(3724), 1, + sym_extglob_pattern, + ACTIONS(3720), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [91102] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(387), 1, + sym_variable_name, + ACTIONS(383), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(381), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91124] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3734), 1, + anon_sym_DOLLAR, + ACTIONS(3736), 1, + anon_sym_DQUOTE, + STATE(1897), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91158] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3742), 1, + sym_variable_name, + ACTIONS(3740), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3738), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91180] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(447), 1, + sym_variable_name, + ACTIONS(445), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(443), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91202] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3744), 1, + anon_sym_DOLLAR, + ACTIONS(3746), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91236] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3748), 1, + anon_sym_DOLLAR, + ACTIONS(3750), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91270] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3752), 1, + anon_sym_DOLLAR, + ACTIONS(3754), 1, + anon_sym_DQUOTE, + STATE(1915), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91304] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3758), 1, + anon_sym_esac, + ACTIONS(3760), 1, + sym_extglob_pattern, + ACTIONS(3756), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [91326] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3762), 1, + anon_sym_DOLLAR, + ACTIONS(3764), 1, + anon_sym_DQUOTE, + STATE(1896), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91360] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(453), 1, + sym_variable_name, + ACTIONS(451), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(449), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91382] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(411), 1, + sym_variable_name, + ACTIONS(409), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(407), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91404] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3766), 1, + anon_sym_DOLLAR, + ACTIONS(3768), 1, + anon_sym_DQUOTE, + STATE(1908), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91438] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(399), 1, + sym_variable_name, + ACTIONS(397), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(395), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91460] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(937), 1, + sym_variable_name, + ACTIONS(935), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(933), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91482] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3770), 1, + anon_sym_DOLLAR, + ACTIONS(3772), 1, + anon_sym_DQUOTE, + STATE(1910), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91516] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3774), 1, + anon_sym_DOLLAR, + ACTIONS(3776), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91550] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3778), 1, + anon_sym_DOLLAR, + ACTIONS(3780), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91584] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3782), 1, + anon_sym_DOLLAR, + ACTIONS(3784), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91618] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3786), 1, + anon_sym_DOLLAR, + ACTIONS(3788), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91652] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3790), 1, + anon_sym_DOLLAR, + ACTIONS(3792), 1, + anon_sym_DQUOTE, + STATE(1907), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91686] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1408), 1, + sym_variable_name, + ACTIONS(1406), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1404), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91708] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3794), 1, + anon_sym_DOLLAR, + ACTIONS(3796), 1, + anon_sym_DQUOTE, + STATE(1846), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91742] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3798), 1, + anon_sym_DOLLAR, + ACTIONS(3800), 1, + anon_sym_DQUOTE, + STATE(1909), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91776] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3802), 1, + anon_sym_DOLLAR, + ACTIONS(3804), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91810] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1660), 1, + sym_variable_name, + ACTIONS(1658), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1656), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91832] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3810), 1, + sym_variable_name, + ACTIONS(3808), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3806), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91854] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(829), 1, + sym_variable_name, + ACTIONS(827), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(825), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91876] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3812), 1, + anon_sym_DOLLAR, + ACTIONS(3814), 1, + anon_sym_DQUOTE, + STATE(1921), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91910] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3676), 1, + anon_sym_esac, + ACTIONS(3678), 1, + sym_extglob_pattern, + ACTIONS(3674), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [91932] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3816), 1, + anon_sym_DOLLAR, + ACTIONS(3818), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91966] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3724), 1, + sym_extglob_pattern, + ACTIONS(3720), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [91985] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3822), 1, + sym_extglob_pattern, + ACTIONS(3820), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92004] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3466), 1, + sym_extglob_pattern, + ACTIONS(3462), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92023] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3640), 1, + sym_extglob_pattern, + ACTIONS(3636), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92042] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3654), 1, + sym_extglob_pattern, + ACTIONS(3650), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92061] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3476), 1, + sym_extglob_pattern, + ACTIONS(3472), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92080] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3476), 1, + sym_extglob_pattern, + ACTIONS(3472), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92099] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3678), 1, + sym_extglob_pattern, + ACTIONS(3674), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92118] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3678), 1, + sym_extglob_pattern, + ACTIONS(3674), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92137] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3452), 1, + sym_extglob_pattern, + ACTIONS(3448), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92156] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3760), 1, + sym_extglob_pattern, + ACTIONS(3756), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92175] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3452), 1, + sym_extglob_pattern, + ACTIONS(3448), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92194] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3724), 1, + sym_extglob_pattern, + ACTIONS(3720), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92213] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3714), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3712), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3710), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92233] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3828), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3826), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3824), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92253] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3516), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3514), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3512), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92273] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3834), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3832), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3830), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92293] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3840), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3838), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3836), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92313] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3438), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3436), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3434), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92333] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3846), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3844), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3842), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92353] = 8, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3848), 1, + anon_sym_DOLLAR, + ACTIONS(3850), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3852), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3854), 1, + anon_sym_BQUOTE, + ACTIONS(3856), 1, + sym_heredoc_content, + ACTIONS(3858), 1, + sym_heredoc_end, + STATE(1944), 4, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + aux_sym_heredoc_body_repeat1, + [92381] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3864), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3862), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3860), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92401] = 8, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3848), 1, + anon_sym_DOLLAR, + ACTIONS(3850), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3852), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3854), 1, + anon_sym_BQUOTE, + ACTIONS(3866), 1, + sym_heredoc_content, + ACTIONS(3868), 1, + sym_heredoc_end, + STATE(1945), 4, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + aux_sym_heredoc_body_repeat1, + [92429] = 8, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3870), 1, + anon_sym_DOLLAR, + ACTIONS(3873), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3876), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3879), 1, + anon_sym_BQUOTE, + ACTIONS(3882), 1, + sym_heredoc_content, + ACTIONS(3885), 1, + sym_heredoc_end, + STATE(1945), 4, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + aux_sym_heredoc_body_repeat1, + [92457] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3891), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3889), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3887), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92477] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3897), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3895), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3893), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92497] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3498), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3496), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3494), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92517] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3566), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3564), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3562), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92537] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3903), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3901), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3899), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92557] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3664), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3662), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3660), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92577] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3684), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3682), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3680), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92597] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3380), 10, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92613] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3905), 1, + anon_sym_in, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3909), 1, + aux_sym_concatenation_token1, + ACTIONS(3911), 1, + sym__concat, + STATE(1962), 1, + aux_sym_concatenation_repeat1, + STATE(2176), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [92640] = 7, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3915), 1, + anon_sym_DQUOTE, + ACTIONS(3917), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3919), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3921), 1, + anon_sym_BQUOTE, + ACTIONS(3913), 2, + anon_sym_PIPE, + anon_sym_RPAREN, + STATE(2081), 3, + sym_string, + sym_expansion, + sym_command_substitution, + [92665] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3909), 1, + aux_sym_concatenation_token1, + ACTIONS(3911), 1, + sym__concat, + ACTIONS(3923), 1, + anon_sym_in, + STATE(1962), 1, + aux_sym_concatenation_repeat1, + STATE(2132), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [92692] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3909), 1, + aux_sym_concatenation_token1, + ACTIONS(3911), 1, + sym__concat, + ACTIONS(3925), 1, + anon_sym_in, + STATE(1962), 1, + aux_sym_concatenation_repeat1, + STATE(2308), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [92719] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 1, + sym__concat, + ACTIONS(1116), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92735] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3927), 1, + anon_sym_RPAREN, + ACTIONS(3929), 1, + anon_sym_RBRACE, + ACTIONS(3931), 1, + anon_sym_DQUOTE, + ACTIONS(3933), 1, + sym_raw_string, + ACTIONS(3935), 1, + aux_sym_expansion_regex_token1, + ACTIONS(3937), 1, + sym_regex, + STATE(1972), 2, + sym_string, + aux_sym_expansion_regex_repeat1, + [92761] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3939), 1, + sym__concat, + ACTIONS(3618), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92777] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 1, + sym__concat, + ACTIONS(1058), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92793] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(961), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3909), 1, + aux_sym_concatenation_token1, + ACTIONS(3941), 1, + sym__concat, + STATE(1968), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 4, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [92815] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3945), 1, + sym__concat, + ACTIONS(3943), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92831] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 1, + sym__concat, + ACTIONS(1042), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92847] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 1, + sym__concat, + ACTIONS(1193), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92863] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 1, + sym__concat, + ACTIONS(1046), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92879] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 1, + sym__concat, + ACTIONS(1086), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92895] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3947), 1, + aux_sym_concatenation_token1, + ACTIONS(3950), 1, + sym__concat, + STATE(1968), 1, + aux_sym_concatenation_repeat1, + ACTIONS(983), 4, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [92917] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 1, + sym__concat, + ACTIONS(1112), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92933] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 1, + sym__concat, + ACTIONS(1116), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92949] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3927), 1, + anon_sym_RPAREN, + ACTIONS(3931), 1, + anon_sym_DQUOTE, + ACTIONS(3935), 1, + aux_sym_expansion_regex_token1, + ACTIONS(3953), 1, + anon_sym_RBRACE, + ACTIONS(3955), 1, + sym_raw_string, + ACTIONS(3957), 1, + sym_regex, + STATE(1959), 2, + sym_string, + aux_sym_expansion_regex_repeat1, + [92975] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3959), 1, + anon_sym_RPAREN, + ACTIONS(3962), 1, + anon_sym_RBRACE, + ACTIONS(3964), 1, + anon_sym_DQUOTE, + ACTIONS(3967), 1, + sym_raw_string, + ACTIONS(3970), 1, + aux_sym_expansion_regex_token1, + ACTIONS(3973), 1, + sym_regex, + STATE(1972), 2, + sym_string, + aux_sym_expansion_regex_repeat1, + [93001] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 1, + sym__concat, + ACTIONS(1120), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93017] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1124), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93032] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1098), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93047] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1042), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93062] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1193), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93077] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1120), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93092] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1112), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93107] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3618), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93120] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1046), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93135] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93150] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3976), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93163] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1072), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93178] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93193] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93208] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1058), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93223] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1102), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93238] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1086), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93253] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3978), 1, + anon_sym_in, + STATE(2114), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [93271] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3980), 1, + anon_sym_fi, + ACTIONS(3982), 1, + anon_sym_elif, + ACTIONS(3984), 1, + anon_sym_else, + STATE(2230), 1, + sym_else_clause, + STATE(2065), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + [93291] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(3988), 1, + anon_sym_RPAREN, + STATE(2031), 1, + aux_sym_concatenation_repeat1, + STATE(2092), 1, + aux_sym__case_item_last_repeat1, + ACTIONS(3990), 2, + sym__concat, + aux_sym_concatenation_token1, + [93311] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3992), 1, + anon_sym_in, + STATE(2106), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [93329] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 1, + anon_sym_DOLLAR, + ACTIONS(1118), 5, + sym_heredoc_content, + sym_heredoc_end, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93343] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(3994), 1, + anon_sym_RPAREN, + STATE(2031), 1, + aux_sym_concatenation_repeat1, + STATE(2097), 1, + aux_sym__case_item_last_repeat1, + ACTIONS(3990), 2, + sym__concat, + aux_sym_concatenation_token1, + [93363] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3996), 1, + anon_sym_in, + STATE(2121), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [93381] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3982), 1, + anon_sym_elif, + ACTIONS(3984), 1, + anon_sym_else, + ACTIONS(3998), 1, + anon_sym_fi, + STATE(2204), 1, + sym_else_clause, + STATE(2065), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + [93401] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4000), 1, + anon_sym_RPAREN, + STATE(2031), 1, + aux_sym_concatenation_repeat1, + STATE(2098), 1, + aux_sym__case_item_last_repeat1, + ACTIONS(3990), 2, + sym__concat, + aux_sym_concatenation_token1, + [93421] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3925), 1, + anon_sym_in, + STATE(2308), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [93439] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1112), 1, + anon_sym_DOLLAR, + ACTIONS(1114), 5, + sym_heredoc_content, + sym_heredoc_end, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93453] = 3, + ACTIONS(1046), 1, + anon_sym_DOLLAR, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1048), 5, + sym_heredoc_content, + sym_heredoc_end, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93467] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 2, + sym_regex, + aux_sym_expansion_regex_token1, + ACTIONS(1124), 4, + anon_sym_RPAREN, + anon_sym_RBRACE, + anon_sym_DQUOTE, + sym_raw_string, + [93481] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3982), 1, + anon_sym_elif, + ACTIONS(3984), 1, + anon_sym_else, + ACTIONS(4002), 1, + anon_sym_fi, + STATE(2160), 1, + sym_else_clause, + STATE(2065), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + [93501] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4004), 1, + anon_sym_RPAREN, + STATE(2031), 1, + aux_sym_concatenation_repeat1, + STATE(2085), 1, + aux_sym__case_item_last_repeat1, + ACTIONS(3990), 2, + sym__concat, + aux_sym_concatenation_token1, + [93521] = 3, + ACTIONS(1042), 1, + anon_sym_DOLLAR, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1044), 5, + sym_heredoc_content, + sym_heredoc_end, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93535] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1120), 1, + anon_sym_DOLLAR, + ACTIONS(1122), 5, + sym_heredoc_content, + sym_heredoc_end, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93549] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 2, + sym_regex, + aux_sym_expansion_regex_token1, + ACTIONS(1098), 4, + anon_sym_RPAREN, + anon_sym_RBRACE, + anon_sym_DQUOTE, + sym_raw_string, + [93563] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4008), 2, + sym_regex, + aux_sym_expansion_regex_token1, + ACTIONS(4006), 4, + anon_sym_RPAREN, + anon_sym_RBRACE, + anon_sym_DQUOTE, + sym_raw_string, + [93577] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3905), 1, + anon_sym_in, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + STATE(2176), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [93595] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 2, + sym_regex, + aux_sym_expansion_regex_token1, + ACTIONS(1072), 4, + anon_sym_RPAREN, + anon_sym_RBRACE, + anon_sym_DQUOTE, + sym_raw_string, + [93609] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1086), 1, + anon_sym_DOLLAR, + ACTIONS(1088), 5, + sym_heredoc_content, + sym_heredoc_end, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93623] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3923), 1, + anon_sym_in, + STATE(2132), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [93641] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3982), 1, + anon_sym_elif, + ACTIONS(3984), 1, + anon_sym_else, + ACTIONS(4010), 1, + anon_sym_fi, + STATE(2212), 1, + sym_else_clause, + STATE(2065), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + [93661] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3982), 1, + anon_sym_elif, + ACTIONS(3984), 1, + anon_sym_else, + ACTIONS(4012), 1, + anon_sym_fi, + STATE(2129), 1, + sym_else_clause, + STATE(2065), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + [93681] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3982), 1, + anon_sym_elif, + ACTIONS(3984), 1, + anon_sym_else, + ACTIONS(4014), 1, + anon_sym_fi, + STATE(2182), 1, + sym_else_clause, + STATE(2065), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + [93701] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 1, + anon_sym_DOLLAR, + ACTIONS(1118), 5, + sym_heredoc_content, + sym_heredoc_end, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93715] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 2, + sym_regex, + aux_sym_expansion_regex_token1, + ACTIONS(1102), 4, + anon_sym_RPAREN, + anon_sym_RBRACE, + anon_sym_DQUOTE, + sym_raw_string, + [93729] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(2239), 1, + sym_heredoc_body, + STATE(1229), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [93746] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + STATE(1352), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [93763] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1114), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [93774] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1118), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [93785] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1122), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [93796] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1118), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [93807] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(1255), 1, + sym__heredoc_body, + STATE(1262), 1, + sym__simple_heredoc_body, + STATE(2239), 1, + sym_heredoc_body, + [93826] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(1273), 1, + sym__heredoc_body, + STATE(1274), 1, + sym__simple_heredoc_body, + STATE(2239), 1, + sym_heredoc_body, + [93845] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(1661), 1, + sym__heredoc_body, + STATE(1662), 1, + sym__simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + [93864] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(2239), 1, + sym_heredoc_body, + STATE(1254), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [93881] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + STATE(1344), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [93898] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + STATE(1358), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [93915] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(1362), 1, + sym__heredoc_body, + STATE(1363), 1, + sym__simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + [93934] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3990), 1, + aux_sym_concatenation_token1, + ACTIONS(4024), 1, + sym__concat, + STATE(2066), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + anon_sym_PIPE, + anon_sym_RPAREN, + [93951] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(1364), 1, + sym__heredoc_body, + STATE(1368), 1, + sym__simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + [93970] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + STATE(1369), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [93987] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + STATE(1394), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94004] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(1385), 1, + sym__simple_heredoc_body, + STATE(1392), 1, + sym__heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + [94023] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(1353), 1, + sym__simple_heredoc_body, + STATE(1367), 1, + sym__heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + [94042] = 4, + ACTIONS(1074), 1, + sym_comment, + STATE(2031), 1, + aux_sym_concatenation_repeat1, + ACTIONS(3990), 2, + sym__concat, + aux_sym_concatenation_token1, + ACTIONS(4026), 2, + anon_sym_PIPE, + anon_sym_RPAREN, + [94057] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(1277), 1, + sym__heredoc_body, + STATE(1278), 1, + sym__simple_heredoc_body, + STATE(2239), 1, + sym_heredoc_body, + [94076] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(1334), 1, + sym__heredoc_body, + STATE(1351), 1, + sym__simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + [94095] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(1346), 1, + sym__simple_heredoc_body, + STATE(1347), 1, + sym__heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + [94114] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(1279), 1, + sym__heredoc_body, + STATE(1280), 1, + sym__simple_heredoc_body, + STATE(2239), 1, + sym_heredoc_body, + [94133] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + STATE(1625), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94150] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + STATE(1660), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94167] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(2239), 1, + sym_heredoc_body, + STATE(1236), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94184] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(1232), 1, + sym__heredoc_body, + STATE(1233), 1, + sym__simple_heredoc_body, + STATE(2239), 1, + sym_heredoc_body, + [94203] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(1230), 1, + sym__heredoc_body, + STATE(1231), 1, + sym__simple_heredoc_body, + STATE(2239), 1, + sym_heredoc_body, + [94222] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(1657), 1, + sym__heredoc_body, + STATE(1658), 1, + sym__simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + [94241] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(1656), 1, + sym__simple_heredoc_body, + STATE(1667), 1, + sym__heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + [94260] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + STATE(1654), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94277] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(2239), 1, + sym_heredoc_body, + STATE(1275), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94294] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1088), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [94305] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1048), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [94316] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1044), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [94327] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1126), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [94338] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(2239), 1, + sym_heredoc_body, + STATE(1224), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94355] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + STATE(1648), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94372] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + STATE(1342), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94389] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(1665), 1, + sym__heredoc_body, + STATE(1666), 1, + sym__simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + [94408] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1104), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [94419] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(1645), 1, + sym__heredoc_body, + STATE(1647), 1, + sym__simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + [94438] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(1579), 1, + sym__heredoc_body, + STATE(1640), 1, + sym__simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + [94457] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + STATE(1637), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94474] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + STATE(1634), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94491] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1100), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [94502] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4030), 1, + anon_sym_elif, + ACTIONS(4028), 2, + anon_sym_fi, + anon_sym_else, + STATE(2065), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + [94517] = 4, + ACTIONS(1074), 1, + sym_comment, + STATE(2066), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + anon_sym_PIPE, + anon_sym_RPAREN, + ACTIONS(4033), 2, + sym__concat, + aux_sym_concatenation_token1, + [94532] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1070), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [94543] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(2239), 1, + sym_heredoc_body, + STATE(1190), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94560] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1195), 4, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + aux_sym_concatenation_token1, + [94570] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1056), 4, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + aux_sym_concatenation_token1, + [94580] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4036), 1, + anon_sym_RBRACE, + STATE(2071), 1, + aux_sym__concatenation_in_expansion_repeat1, + ACTIONS(4038), 2, + sym__concat, + aux_sym_concatenation_token1, + [94594] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4041), 1, + anon_sym_RBRACE, + STATE(2071), 1, + aux_sym__concatenation_in_expansion_repeat1, + ACTIONS(4043), 2, + sym__concat, + aux_sym_concatenation_token1, + [94608] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4045), 1, + anon_sym_RBRACE, + STATE(2072), 1, + aux_sym__concatenation_in_expansion_repeat1, + ACTIONS(4043), 2, + sym__concat, + aux_sym_concatenation_token1, + [94622] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(988), 4, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + aux_sym_concatenation_token1, + [94632] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4000), 1, + anon_sym_RPAREN, + STATE(2099), 1, + aux_sym__case_item_last_repeat1, + [94645] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1088), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94654] = 3, + ACTIONS(1074), 1, + sym_comment, + STATE(2072), 1, + aux_sym__concatenation_in_expansion_repeat1, + ACTIONS(4043), 2, + sym__concat, + aux_sym_concatenation_token1, + [94665] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4004), 1, + anon_sym_RPAREN, + STATE(2087), 1, + aux_sym__case_item_last_repeat1, + [94678] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1118), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94687] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1114), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94696] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4049), 1, + sym_extglob_pattern, + ACTIONS(4047), 2, + anon_sym_PIPE, + anon_sym_RPAREN, + [94707] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1104), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94716] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4051), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94729] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1126), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94738] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4053), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94751] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1100), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94760] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4055), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94773] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4057), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94786] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1118), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94795] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4036), 3, + sym__concat, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [94804] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1070), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94813] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4059), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94826] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(3994), 1, + anon_sym_RPAREN, + STATE(2083), 1, + aux_sym__case_item_last_repeat1, + [94839] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4061), 1, + anon_sym_PIPE, + ACTIONS(4064), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94852] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(3988), 1, + anon_sym_RPAREN, + STATE(2088), 1, + aux_sym__case_item_last_repeat1, + [94865] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1122), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94874] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4066), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94887] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4068), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94900] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4070), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94913] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4072), 1, + anon_sym_esac, + ACTIONS(4074), 1, + anon_sym_SEMI_SEMI, + [94923] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4076), 1, + anon_sym_PIPE, + STATE(1512), 1, + aux_sym_pipeline_repeat1, + [94933] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4078), 2, + anon_sym_PIPE, + anon_sym_RPAREN, + [94941] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4026), 2, + anon_sym_PIPE, + anon_sym_RPAREN, + [94949] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4080), 1, + anon_sym_esac, + ACTIONS(4082), 1, + anon_sym_SEMI_SEMI, + [94959] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4084), 1, + anon_sym_do, + STATE(1626), 1, + sym_do_group, + [94969] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4084), 1, + anon_sym_do, + STATE(1613), 1, + sym_do_group, + [94979] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4086), 1, + anon_sym_esac, + ACTIONS(4088), 1, + anon_sym_SEMI_SEMI, + [94989] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4090), 1, + anon_sym_esac, + ACTIONS(4092), 1, + anon_sym_SEMI_SEMI, + [94999] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4086), 1, + anon_sym_esac, + ACTIONS(4094), 1, + anon_sym_SEMI_SEMI, + [95009] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4096), 1, + anon_sym_esac, + ACTIONS(4098), 1, + anon_sym_SEMI_SEMI, + [95019] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1276), 2, + anon_sym_in, + anon_sym_do, + [95027] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4090), 1, + anon_sym_esac, + ACTIONS(4100), 1, + anon_sym_SEMI_SEMI, + [95037] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4102), 1, + anon_sym_esac, + ACTIONS(4104), 1, + anon_sym_SEMI_SEMI, + [95047] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4106), 1, + anon_sym_do, + STATE(1259), 1, + sym_do_group, + [95057] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4108), 1, + anon_sym_PIPE, + STATE(1314), 1, + aux_sym_pipeline_repeat1, + [95067] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4110), 1, + anon_sym_PIPE, + STATE(1302), 1, + aux_sym_pipeline_repeat1, + [95077] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4112), 1, + anon_sym_PIPE, + STATE(1355), 1, + aux_sym_pipeline_repeat1, + [95087] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4114), 1, + anon_sym_esac, + ACTIONS(4116), 1, + anon_sym_SEMI_SEMI, + [95097] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4118), 1, + anon_sym_do, + STATE(1331), 1, + sym_do_group, + [95107] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4120), 1, + anon_sym_esac, + ACTIONS(4122), 1, + anon_sym_SEMI_SEMI, + [95117] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4118), 1, + anon_sym_do, + STATE(1391), 1, + sym_do_group, + [95127] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4124), 1, + anon_sym_PIPE, + STATE(1316), 1, + aux_sym_pipeline_repeat1, + [95137] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4126), 1, + anon_sym_PIPE, + STATE(1446), 1, + aux_sym_pipeline_repeat1, + [95147] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4106), 1, + anon_sym_do, + STATE(1282), 1, + sym_do_group, + [95157] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4128), 1, + anon_sym_PIPE, + STATE(1301), 1, + aux_sym_pipeline_repeat1, + [95167] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4114), 1, + anon_sym_esac, + ACTIONS(4130), 1, + anon_sym_SEMI_SEMI, + [95177] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4120), 1, + anon_sym_esac, + ACTIONS(4132), 1, + anon_sym_SEMI_SEMI, + [95187] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4134), 1, + aux_sym_heredoc_redirect_token1, + [95194] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4136), 1, + anon_sym_fi, + [95201] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4138), 1, + aux_sym_heredoc_redirect_token1, + [95208] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4140), 1, + anon_sym_BQUOTE, + [95215] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4142), 1, + anon_sym_in, + [95222] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4144), 1, + anon_sym_EQ, + [95229] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4146), 1, + anon_sym_esac, + [95236] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4148), 1, + anon_sym_esac, + [95243] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4150), 1, + sym_heredoc_end, + [95250] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4152), 1, + sym_heredoc_end, + [95257] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4154), 1, + anon_sym_EQ, + [95264] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4156), 1, + anon_sym_esac, + [95271] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4158), 1, + anon_sym_RPAREN, + [95278] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4160), 1, + anon_sym_esac, + [95285] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4162), 1, + aux_sym_heredoc_redirect_token1, + [95292] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4164), 1, + anon_sym_EQ, + [95299] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4166), 1, + anon_sym_esac, + [95306] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4168), 1, + anon_sym_esac, + [95313] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4170), 1, + anon_sym_EQ, + [95320] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4172), 1, + aux_sym_heredoc_redirect_token1, + [95327] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4174), 1, + anon_sym_EQ, + [95334] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4176), 1, + anon_sym_EQ, + [95341] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4178), 1, + anon_sym_RBRACE, + [95348] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4180), 1, + aux_sym_heredoc_redirect_token1, + [95355] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4182), 1, + anon_sym_SEMI_SEMI, + [95362] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4184), 1, + anon_sym_esac, + [95369] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4186), 1, + anon_sym_SEMI_SEMI, + [95376] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4188), 1, + aux_sym_heredoc_redirect_token1, + [95383] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4190), 1, + aux_sym_heredoc_redirect_token1, + [95390] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4192), 1, + anon_sym_SEMI_SEMI, + [95397] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4194), 1, + anon_sym_fi, + [95404] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4196), 1, + anon_sym_SEMI_SEMI, + [95411] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4198), 1, + anon_sym_fi, + [95418] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4200), 1, + aux_sym_heredoc_redirect_token1, + [95425] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4202), 1, + anon_sym_SEMI_SEMI, + [95432] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4204), 1, + anon_sym_SEMI_SEMI, + [95439] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4206), 1, + anon_sym_SEMI_SEMI, + [95446] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4208), 1, + sym_heredoc_end, + [95453] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4210), 1, + aux_sym_heredoc_redirect_token1, + [95460] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4212), 1, + sym_heredoc_end, + [95467] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4214), 1, + anon_sym_SEMI_SEMI, + [95474] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4216), 1, + anon_sym_SEMI_SEMI, + [95481] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4218), 1, + anon_sym_SEMI_SEMI, + [95488] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4220), 1, + anon_sym_esac, + [95495] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4222), 1, + anon_sym_SEMI_SEMI, + [95502] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4224), 1, + anon_sym_esac, + [95509] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4226), 1, + anon_sym_esac, + [95516] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4228), 1, + anon_sym_esac, + [95523] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4230), 1, + anon_sym_in, + [95530] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4232), 1, + anon_sym_esac, + [95537] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4234), 1, + aux_sym_heredoc_redirect_token1, + [95544] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4236), 1, + aux_sym_heredoc_redirect_token1, + [95551] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4238), 1, + anon_sym_SEMI_SEMI, + [95558] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4240), 1, + anon_sym_esac, + [95565] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4242), 1, + anon_sym_fi, + [95572] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4244), 1, + anon_sym_RBRACE, + [95579] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4246), 1, + aux_sym_heredoc_redirect_token1, + [95586] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4248), 1, + anon_sym_BQUOTE, + [95593] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4250), 1, + anon_sym_EQ, + [95600] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4252), 1, + anon_sym_BQUOTE, + [95607] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4254), 1, + anon_sym_RPAREN, + [95614] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4256), 1, + anon_sym_RBRACE, + [95621] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4258), 1, + anon_sym_fi, + [95628] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4260), 1, + anon_sym_BQUOTE, + [95635] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4262), 1, + anon_sym_RPAREN, + [95642] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4264), 1, + anon_sym_RBRACE, + [95649] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4266), 1, + anon_sym_esac, + [95656] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4268), 1, + anon_sym_esac, + [95663] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4270), 1, + anon_sym_BQUOTE, + [95670] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4272), 1, + anon_sym_RPAREN, + [95677] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4274), 1, + anon_sym_RBRACE, + [95684] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4276), 1, + anon_sym_fi, + [95691] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4278), 1, + anon_sym_RBRACE, + [95698] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4280), 1, + anon_sym_BQUOTE, + [95705] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4282), 1, + aux_sym__simple_variable_name_token1, + [95712] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4284), 1, + anon_sym_RPAREN, + [95719] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4286), 1, + anon_sym_fi, + [95726] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4288), 1, + sym_heredoc_start, + [95733] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4290), 1, + anon_sym_RBRACE, + [95740] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4292), 1, + sym_heredoc_start, + [95747] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4294), 1, + anon_sym_RPAREN, + [95754] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4296), 1, + anon_sym_RBRACE, + [95761] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4298), 1, + anon_sym_RPAREN, + [95768] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4300), 1, + aux_sym_heredoc_redirect_token1, + [95775] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4302), 1, + anon_sym_fi, + [95782] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4304), 1, + anon_sym_BQUOTE, + [95789] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4306), 1, + anon_sym_RPAREN, + [95796] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4308), 1, + anon_sym_RBRACE, + [95803] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4310), 1, + anon_sym_BQUOTE, + [95810] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4312), 1, + anon_sym_RPAREN, + [95817] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4314), 1, + anon_sym_esac, + [95824] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4316), 1, + anon_sym_esac, + [95831] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4318), 1, + anon_sym_RBRACE, + [95838] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4320), 1, + anon_sym_RPAREN, + [95845] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4322), 1, + anon_sym_esac, + [95852] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4324), 1, + anon_sym_BQUOTE, + [95859] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4326), 1, + anon_sym_BQUOTE, + [95866] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4328), 1, + anon_sym_RPAREN, + [95873] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4330), 1, + anon_sym_RPAREN, + [95880] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4332), 1, + anon_sym_RBRACE, + [95887] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4334), 1, + anon_sym_RBRACE, + [95894] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4336), 1, + anon_sym_RBRACE, + [95901] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4338), 1, + anon_sym_fi, + [95908] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4340), 1, + aux_sym_heredoc_redirect_token1, + [95915] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4342), 1, + anon_sym_BQUOTE, + [95922] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4344), 1, + anon_sym_RPAREN, + [95929] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4346), 1, + anon_sym_RBRACE, + [95936] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4348), 1, + anon_sym_BQUOTE, + [95943] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4350), 1, + anon_sym_RPAREN, + [95950] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4352), 1, + anon_sym_BQUOTE, + [95957] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4354), 1, + anon_sym_BQUOTE, + [95964] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4356), 1, + sym_heredoc_end, + [95971] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4358), 1, + anon_sym_RPAREN, + [95978] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4360), 1, + anon_sym_RPAREN, + [95985] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4362), 1, + anon_sym_RBRACE, + [95992] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4364), 1, + sym_heredoc_end, + [95999] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4366), 1, + aux_sym_heredoc_redirect_token1, + [96006] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4368), 1, + aux_sym_heredoc_redirect_token1, + [96013] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4370), 1, + anon_sym_RPAREN, + [96020] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4372), 1, + anon_sym_RPAREN, + [96027] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4374), 1, + anon_sym_BQUOTE, + [96034] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4376), 1, + anon_sym_RBRACE, + [96041] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4378), 1, + anon_sym_EQ, + [96048] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4380), 1, + anon_sym_EQ, + [96055] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4382), 1, + aux_sym__simple_variable_name_token1, + [96062] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4384), 1, + anon_sym_RPAREN, + [96069] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4386), 1, + anon_sym_esac, + [96076] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4388), 1, + sym_heredoc_start, + [96083] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4390), 1, + anon_sym_RBRACE, + [96090] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4392), 1, + sym_heredoc_start, + [96097] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4394), 1, + anon_sym_esac, + [96104] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4396), 1, + anon_sym_esac, + [96111] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4398), 1, + anon_sym_esac, + [96118] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4400), 1, + anon_sym_RPAREN, + [96125] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4402), 1, + anon_sym_BQUOTE, + [96132] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4404), 1, + anon_sym_BQUOTE, + [96139] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4406), 1, + anon_sym_RPAREN, + [96146] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4408), 1, + anon_sym_RPAREN, + [96153] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4410), 1, + anon_sym_RBRACE, + [96160] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4412), 1, + anon_sym_RPAREN, + [96167] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4414), 1, + anon_sym_BQUOTE, + [96174] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4416), 1, + anon_sym_fi, + [96181] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4418), 1, + anon_sym_RPAREN, + [96188] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4420), 1, + anon_sym_RBRACE, + [96195] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4422), 1, + aux_sym_heredoc_redirect_token1, + [96202] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4424), 1, + aux_sym_heredoc_redirect_token1, + [96209] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4426), 1, + anon_sym_BQUOTE, + [96216] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4428), 1, + anon_sym_BQUOTE, + [96223] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4045), 1, + anon_sym_RBRACE, + [96230] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4430), 1, + anon_sym_RPAREN, + [96237] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4432), 1, + anon_sym_RBRACE, + [96244] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4434), 1, + anon_sym_RBRACE, + [96251] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4436), 1, + anon_sym_RPAREN, + [96258] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4438), 1, + anon_sym_esac, + [96265] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4440), 1, + anon_sym_BQUOTE, + [96272] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4442), 1, + anon_sym_RPAREN, + [96279] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4444), 1, + anon_sym_RBRACE, + [96286] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4446), 1, + anon_sym_BQUOTE, + [96293] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4448), 1, + anon_sym_BQUOTE, + [96300] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4450), 1, + anon_sym_esac, + [96307] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4452), 1, + anon_sym_fi, + [96314] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4454), 1, + anon_sym_RPAREN, + [96321] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4456), 1, + anon_sym_RPAREN, + [96328] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4458), 1, + anon_sym_RBRACE, + [96335] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4460), 1, + anon_sym_RBRACE, + [96342] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4462), 1, + anon_sym_BQUOTE, + [96349] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4464), 1, + anon_sym_fi, + [96356] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4466), 1, + sym_heredoc_start, + [96363] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4468), 1, + anon_sym_RBRACE, + [96370] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4470), 1, + anon_sym_RBRACE, + [96377] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4472), 1, + anon_sym_RPAREN, + [96384] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4474), 1, + anon_sym_RBRACE, + [96391] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4476), 1, + anon_sym_EQ, + [96398] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4478), 1, + anon_sym_EQ, + [96405] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4480), 1, + anon_sym_RPAREN, + [96412] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4482), 1, + anon_sym_BQUOTE, + [96419] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4484), 1, + anon_sym_BQUOTE, + [96426] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4486), 1, + anon_sym_RPAREN, + [96433] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4488), 1, + anon_sym_EQ, + [96440] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4490), 1, + anon_sym_RBRACE, + [96447] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4492), 1, + anon_sym_in, + [96454] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4494), 1, + anon_sym_RBRACE, + [96461] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4496), 1, + anon_sym_BQUOTE, + [96468] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4498), 1, + anon_sym_EQ, + [96475] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4500), 1, + sym_heredoc_start, + [96482] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4502), 1, + anon_sym_RPAREN, + [96489] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4504), 1, + anon_sym_RPAREN, + [96496] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4506), 1, + anon_sym_BQUOTE, + [96503] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4508), 1, + anon_sym_RPAREN, + [96510] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4510), 1, + anon_sym_RBRACE, + [96517] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4512), 1, + anon_sym_RPAREN, + [96524] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4514), 1, + anon_sym_RBRACE, + [96531] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4516), 1, + anon_sym_RPAREN, + [96538] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4518), 1, + anon_sym_BQUOTE, + [96545] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4520), 1, + anon_sym_BQUOTE, + [96552] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4522), 1, + anon_sym_RPAREN, + [96559] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4524), 1, + anon_sym_RPAREN, + [96566] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4526), 1, + anon_sym_RPAREN, + [96573] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4528), 1, + anon_sym_RBRACE, + [96580] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4530), 1, + anon_sym_BQUOTE, + [96587] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4532), 1, + anon_sym_RPAREN, + [96594] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4534), 1, + anon_sym_RBRACE, + [96601] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4536), 1, + ts_builtin_sym_end, + [96608] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4538), 1, + ts_builtin_sym_end, + [96615] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4540), 1, + anon_sym_RBRACE, + [96622] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4542), 1, + anon_sym_BQUOTE, + [96629] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4544), 1, + anon_sym_RPAREN, + [96636] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4546), 1, + anon_sym_RBRACE, + [96643] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4548), 1, + anon_sym_BQUOTE, + [96650] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4550), 1, + anon_sym_RPAREN, + [96657] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4552), 1, + aux_sym__simple_variable_name_token1, + [96664] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4554), 1, + anon_sym_EQ, +}; + +static const uint32_t ts_small_parse_table_map[] = { + [SMALL_STATE(2)] = 0, + [SMALL_STATE(3)] = 135, + [SMALL_STATE(4)] = 270, + [SMALL_STATE(5)] = 405, + [SMALL_STATE(6)] = 540, + [SMALL_STATE(7)] = 675, + [SMALL_STATE(8)] = 810, + [SMALL_STATE(9)] = 938, + [SMALL_STATE(10)] = 1066, + [SMALL_STATE(11)] = 1194, + [SMALL_STATE(12)] = 1322, + [SMALL_STATE(13)] = 1450, + [SMALL_STATE(14)] = 1578, + [SMALL_STATE(15)] = 1706, + [SMALL_STATE(16)] = 1834, + [SMALL_STATE(17)] = 1962, + [SMALL_STATE(18)] = 2090, + [SMALL_STATE(19)] = 2218, + [SMALL_STATE(20)] = 2346, + [SMALL_STATE(21)] = 2474, + [SMALL_STATE(22)] = 2602, + [SMALL_STATE(23)] = 2730, + [SMALL_STATE(24)] = 2858, + [SMALL_STATE(25)] = 2982, + [SMALL_STATE(26)] = 3110, + [SMALL_STATE(27)] = 3238, + [SMALL_STATE(28)] = 3362, + [SMALL_STATE(29)] = 3490, + [SMALL_STATE(30)] = 3618, + [SMALL_STATE(31)] = 3746, + [SMALL_STATE(32)] = 3874, + [SMALL_STATE(33)] = 3998, + [SMALL_STATE(34)] = 4126, + [SMALL_STATE(35)] = 4254, + [SMALL_STATE(36)] = 4379, + [SMALL_STATE(37)] = 4502, + [SMALL_STATE(38)] = 4627, + [SMALL_STATE(39)] = 4752, + [SMALL_STATE(40)] = 4874, + [SMALL_STATE(41)] = 4996, + [SMALL_STATE(42)] = 5118, + [SMALL_STATE(43)] = 5240, + [SMALL_STATE(44)] = 5362, + [SMALL_STATE(45)] = 5484, + [SMALL_STATE(46)] = 5606, + [SMALL_STATE(47)] = 5728, + [SMALL_STATE(48)] = 5850, + [SMALL_STATE(49)] = 5972, + [SMALL_STATE(50)] = 6094, + [SMALL_STATE(51)] = 6216, + [SMALL_STATE(52)] = 6338, + [SMALL_STATE(53)] = 6460, + [SMALL_STATE(54)] = 6582, + [SMALL_STATE(55)] = 6704, + [SMALL_STATE(56)] = 6826, + [SMALL_STATE(57)] = 6948, + [SMALL_STATE(58)] = 7070, + [SMALL_STATE(59)] = 7192, + [SMALL_STATE(60)] = 7314, + [SMALL_STATE(61)] = 7436, + [SMALL_STATE(62)] = 7558, + [SMALL_STATE(63)] = 7680, + [SMALL_STATE(64)] = 7802, + [SMALL_STATE(65)] = 7924, + [SMALL_STATE(66)] = 8046, + [SMALL_STATE(67)] = 8168, + [SMALL_STATE(68)] = 8290, + [SMALL_STATE(69)] = 8412, + [SMALL_STATE(70)] = 8534, + [SMALL_STATE(71)] = 8656, + [SMALL_STATE(72)] = 8778, + [SMALL_STATE(73)] = 8900, + [SMALL_STATE(74)] = 9022, + [SMALL_STATE(75)] = 9144, + [SMALL_STATE(76)] = 9266, + [SMALL_STATE(77)] = 9388, + [SMALL_STATE(78)] = 9510, + [SMALL_STATE(79)] = 9632, + [SMALL_STATE(80)] = 9754, + [SMALL_STATE(81)] = 9876, + [SMALL_STATE(82)] = 9998, + [SMALL_STATE(83)] = 10120, + [SMALL_STATE(84)] = 10242, + [SMALL_STATE(85)] = 10364, + [SMALL_STATE(86)] = 10486, + [SMALL_STATE(87)] = 10608, + [SMALL_STATE(88)] = 10730, + [SMALL_STATE(89)] = 10852, + [SMALL_STATE(90)] = 10974, + [SMALL_STATE(91)] = 11096, + [SMALL_STATE(92)] = 11218, + [SMALL_STATE(93)] = 11340, + [SMALL_STATE(94)] = 11462, + [SMALL_STATE(95)] = 11584, + [SMALL_STATE(96)] = 11706, + [SMALL_STATE(97)] = 11828, + [SMALL_STATE(98)] = 11950, + [SMALL_STATE(99)] = 12072, + [SMALL_STATE(100)] = 12194, + [SMALL_STATE(101)] = 12316, + [SMALL_STATE(102)] = 12438, + [SMALL_STATE(103)] = 12560, + [SMALL_STATE(104)] = 12682, + [SMALL_STATE(105)] = 12804, + [SMALL_STATE(106)] = 12926, + [SMALL_STATE(107)] = 13048, + [SMALL_STATE(108)] = 13170, + [SMALL_STATE(109)] = 13292, + [SMALL_STATE(110)] = 13414, + [SMALL_STATE(111)] = 13536, + [SMALL_STATE(112)] = 13658, + [SMALL_STATE(113)] = 13780, + [SMALL_STATE(114)] = 13902, + [SMALL_STATE(115)] = 14024, + [SMALL_STATE(116)] = 14146, + [SMALL_STATE(117)] = 14268, + [SMALL_STATE(118)] = 14390, + [SMALL_STATE(119)] = 14512, + [SMALL_STATE(120)] = 14634, + [SMALL_STATE(121)] = 14756, + [SMALL_STATE(122)] = 14878, + [SMALL_STATE(123)] = 15000, + [SMALL_STATE(124)] = 15122, + [SMALL_STATE(125)] = 15244, + [SMALL_STATE(126)] = 15366, + [SMALL_STATE(127)] = 15485, + [SMALL_STATE(128)] = 15604, + [SMALL_STATE(129)] = 15723, + [SMALL_STATE(130)] = 15864, + [SMALL_STATE(131)] = 16005, + [SMALL_STATE(132)] = 16124, + [SMALL_STATE(133)] = 16243, + [SMALL_STATE(134)] = 16384, + [SMALL_STATE(135)] = 16525, + [SMALL_STATE(136)] = 16644, + [SMALL_STATE(137)] = 16763, + [SMALL_STATE(138)] = 16882, + [SMALL_STATE(139)] = 17023, + [SMALL_STATE(140)] = 17142, + [SMALL_STATE(141)] = 17261, + [SMALL_STATE(142)] = 17380, + [SMALL_STATE(143)] = 17496, + [SMALL_STATE(144)] = 17610, + [SMALL_STATE(145)] = 17726, + [SMALL_STATE(146)] = 17842, + [SMALL_STATE(147)] = 17958, + [SMALL_STATE(148)] = 18072, + [SMALL_STATE(149)] = 18188, + [SMALL_STATE(150)] = 18302, + [SMALL_STATE(151)] = 18416, + [SMALL_STATE(152)] = 18530, + [SMALL_STATE(153)] = 18646, + [SMALL_STATE(154)] = 18762, + [SMALL_STATE(155)] = 18876, + [SMALL_STATE(156)] = 18992, + [SMALL_STATE(157)] = 19106, + [SMALL_STATE(158)] = 19222, + [SMALL_STATE(159)] = 19319, + [SMALL_STATE(160)] = 19416, + [SMALL_STATE(161)] = 19513, + [SMALL_STATE(162)] = 19610, + [SMALL_STATE(163)] = 19707, + [SMALL_STATE(164)] = 19804, + [SMALL_STATE(165)] = 19901, + [SMALL_STATE(166)] = 19958, + [SMALL_STATE(167)] = 20015, + [SMALL_STATE(168)] = 20072, + [SMALL_STATE(169)] = 20128, + [SMALL_STATE(170)] = 20184, + [SMALL_STATE(171)] = 20240, + [SMALL_STATE(172)] = 20296, + [SMALL_STATE(173)] = 20351, + [SMALL_STATE(174)] = 20406, + [SMALL_STATE(175)] = 20461, + [SMALL_STATE(176)] = 20516, + [SMALL_STATE(177)] = 20571, + [SMALL_STATE(178)] = 20626, + [SMALL_STATE(179)] = 20681, + [SMALL_STATE(180)] = 20755, + [SMALL_STATE(181)] = 20829, + [SMALL_STATE(182)] = 20883, + [SMALL_STATE(183)] = 20937, + [SMALL_STATE(184)] = 21011, + [SMALL_STATE(185)] = 21085, + [SMALL_STATE(186)] = 21159, + [SMALL_STATE(187)] = 21233, + [SMALL_STATE(188)] = 21304, + [SMALL_STATE(189)] = 21357, + [SMALL_STATE(190)] = 21428, + [SMALL_STATE(191)] = 21501, + [SMALL_STATE(192)] = 21574, + [SMALL_STATE(193)] = 21638, + [SMALL_STATE(194)] = 21688, + [SMALL_STATE(195)] = 21756, + [SMALL_STATE(196)] = 21806, + [SMALL_STATE(197)] = 21874, + [SMALL_STATE(198)] = 21924, + [SMALL_STATE(199)] = 21992, + [SMALL_STATE(200)] = 22060, + [SMALL_STATE(201)] = 22128, + [SMALL_STATE(202)] = 22196, + [SMALL_STATE(203)] = 22264, + [SMALL_STATE(204)] = 22314, + [SMALL_STATE(205)] = 22366, + [SMALL_STATE(206)] = 22416, + [SMALL_STATE(207)] = 22484, + [SMALL_STATE(208)] = 22534, + [SMALL_STATE(209)] = 22598, + [SMALL_STATE(210)] = 22650, + [SMALL_STATE(211)] = 22718, + [SMALL_STATE(212)] = 22782, + [SMALL_STATE(213)] = 22845, + [SMALL_STATE(214)] = 22908, + [SMALL_STATE(215)] = 22971, + [SMALL_STATE(216)] = 23020, + [SMALL_STATE(217)] = 23083, + [SMALL_STATE(218)] = 23146, + [SMALL_STATE(219)] = 23213, + [SMALL_STATE(220)] = 23280, + [SMALL_STATE(221)] = 23343, + [SMALL_STATE(222)] = 23392, + [SMALL_STATE(223)] = 23441, + [SMALL_STATE(224)] = 23490, + [SMALL_STATE(225)] = 23539, + [SMALL_STATE(226)] = 23602, + [SMALL_STATE(227)] = 23665, + [SMALL_STATE(228)] = 23728, + [SMALL_STATE(229)] = 23791, + [SMALL_STATE(230)] = 23854, + [SMALL_STATE(231)] = 23917, + [SMALL_STATE(232)] = 23968, + [SMALL_STATE(233)] = 24019, + [SMALL_STATE(234)] = 24068, + [SMALL_STATE(235)] = 24131, + [SMALL_STATE(236)] = 24194, + [SMALL_STATE(237)] = 24257, + [SMALL_STATE(238)] = 24308, + [SMALL_STATE(239)] = 24371, + [SMALL_STATE(240)] = 24436, + [SMALL_STATE(241)] = 24485, + [SMALL_STATE(242)] = 24534, + [SMALL_STATE(243)] = 24599, + [SMALL_STATE(244)] = 24666, + [SMALL_STATE(245)] = 24728, + [SMALL_STATE(246)] = 24806, + [SMALL_STATE(247)] = 24866, + [SMALL_STATE(248)] = 24926, + [SMALL_STATE(249)] = 24978, + [SMALL_STATE(250)] = 25040, + [SMALL_STATE(251)] = 25102, + [SMALL_STATE(252)] = 25172, + [SMALL_STATE(253)] = 25232, + [SMALL_STATE(254)] = 25294, + [SMALL_STATE(255)] = 25346, + [SMALL_STATE(256)] = 25408, + [SMALL_STATE(257)] = 25468, + [SMALL_STATE(258)] = 25522, + [SMALL_STATE(259)] = 25584, + [SMALL_STATE(260)] = 25654, + [SMALL_STATE(261)] = 25716, + [SMALL_STATE(262)] = 25778, + [SMALL_STATE(263)] = 25840, + [SMALL_STATE(264)] = 25902, + [SMALL_STATE(265)] = 25950, + [SMALL_STATE(266)] = 26000, + [SMALL_STATE(267)] = 26056, + [SMALL_STATE(268)] = 26110, + [SMALL_STATE(269)] = 26172, + [SMALL_STATE(270)] = 26250, + [SMALL_STATE(271)] = 26300, + [SMALL_STATE(272)] = 26348, + [SMALL_STATE(273)] = 26410, + [SMALL_STATE(274)] = 26488, + [SMALL_STATE(275)] = 26566, + [SMALL_STATE(276)] = 26644, + [SMALL_STATE(277)] = 26696, + [SMALL_STATE(278)] = 26756, + [SMALL_STATE(279)] = 26834, + [SMALL_STATE(280)] = 26894, + [SMALL_STATE(281)] = 26954, + [SMALL_STATE(282)] = 27014, + [SMALL_STATE(283)] = 27076, + [SMALL_STATE(284)] = 27125, + [SMALL_STATE(285)] = 27184, + [SMALL_STATE(286)] = 27253, + [SMALL_STATE(287)] = 27302, + [SMALL_STATE(288)] = 27371, + [SMALL_STATE(289)] = 27422, + [SMALL_STATE(290)] = 27471, + [SMALL_STATE(291)] = 27532, + [SMALL_STATE(292)] = 27581, + [SMALL_STATE(293)] = 27632, + [SMALL_STATE(294)] = 27681, + [SMALL_STATE(295)] = 27730, + [SMALL_STATE(296)] = 27781, + [SMALL_STATE(297)] = 27834, + [SMALL_STATE(298)] = 27883, + [SMALL_STATE(299)] = 27936, + [SMALL_STATE(300)] = 27985, + [SMALL_STATE(301)] = 28034, + [SMALL_STATE(302)] = 28085, + [SMALL_STATE(303)] = 28136, + [SMALL_STATE(304)] = 28197, + [SMALL_STATE(305)] = 28256, + [SMALL_STATE(306)] = 28304, + [SMALL_STATE(307)] = 28368, + [SMALL_STATE(308)] = 28410, + [SMALL_STATE(309)] = 28452, + [SMALL_STATE(310)] = 28500, + [SMALL_STATE(311)] = 28542, + [SMALL_STATE(312)] = 28590, + [SMALL_STATE(313)] = 28668, + [SMALL_STATE(314)] = 28710, + [SMALL_STATE(315)] = 28752, + [SMALL_STATE(316)] = 28794, + [SMALL_STATE(317)] = 28836, + [SMALL_STATE(318)] = 28878, + [SMALL_STATE(319)] = 28920, + [SMALL_STATE(320)] = 28968, + [SMALL_STATE(321)] = 29016, + [SMALL_STATE(322)] = 29058, + [SMALL_STATE(323)] = 29106, + [SMALL_STATE(324)] = 29148, + [SMALL_STATE(325)] = 29190, + [SMALL_STATE(326)] = 29238, + [SMALL_STATE(327)] = 29280, + [SMALL_STATE(328)] = 29328, + [SMALL_STATE(329)] = 29370, + [SMALL_STATE(330)] = 29412, + [SMALL_STATE(331)] = 29454, + [SMALL_STATE(332)] = 29496, + [SMALL_STATE(333)] = 29538, + [SMALL_STATE(334)] = 29586, + [SMALL_STATE(335)] = 29634, + [SMALL_STATE(336)] = 29700, + [SMALL_STATE(337)] = 29748, + [SMALL_STATE(338)] = 29796, + [SMALL_STATE(339)] = 29844, + [SMALL_STATE(340)] = 29892, + [SMALL_STATE(341)] = 29940, + [SMALL_STATE(342)] = 29988, + [SMALL_STATE(343)] = 30036, + [SMALL_STATE(344)] = 30084, + [SMALL_STATE(345)] = 30132, + [SMALL_STATE(346)] = 30182, + [SMALL_STATE(347)] = 30226, + [SMALL_STATE(348)] = 30276, + [SMALL_STATE(349)] = 30326, + [SMALL_STATE(350)] = 30368, + [SMALL_STATE(351)] = 30446, + [SMALL_STATE(352)] = 30494, + [SMALL_STATE(353)] = 30536, + [SMALL_STATE(354)] = 30582, + [SMALL_STATE(355)] = 30624, + [SMALL_STATE(356)] = 30702, + [SMALL_STATE(357)] = 30744, + [SMALL_STATE(358)] = 30792, + [SMALL_STATE(359)] = 30840, + [SMALL_STATE(360)] = 30882, + [SMALL_STATE(361)] = 30924, + [SMALL_STATE(362)] = 30972, + [SMALL_STATE(363)] = 31014, + [SMALL_STATE(364)] = 31056, + [SMALL_STATE(365)] = 31134, + [SMALL_STATE(366)] = 31176, + [SMALL_STATE(367)] = 31254, + [SMALL_STATE(368)] = 31296, + [SMALL_STATE(369)] = 31338, + [SMALL_STATE(370)] = 31380, + [SMALL_STATE(371)] = 31422, + [SMALL_STATE(372)] = 31470, + [SMALL_STATE(373)] = 31518, + [SMALL_STATE(374)] = 31560, + [SMALL_STATE(375)] = 31602, + [SMALL_STATE(376)] = 31644, + [SMALL_STATE(377)] = 31686, + [SMALL_STATE(378)] = 31734, + [SMALL_STATE(379)] = 31780, + [SMALL_STATE(380)] = 31828, + [SMALL_STATE(381)] = 31870, + [SMALL_STATE(382)] = 31912, + [SMALL_STATE(383)] = 31954, + [SMALL_STATE(384)] = 32014, + [SMALL_STATE(385)] = 32056, + [SMALL_STATE(386)] = 32104, + [SMALL_STATE(387)] = 32146, + [SMALL_STATE(388)] = 32188, + [SMALL_STATE(389)] = 32230, + [SMALL_STATE(390)] = 32272, + [SMALL_STATE(391)] = 32336, + [SMALL_STATE(392)] = 32400, + [SMALL_STATE(393)] = 32442, + [SMALL_STATE(394)] = 32484, + [SMALL_STATE(395)] = 32526, + [SMALL_STATE(396)] = 32568, + [SMALL_STATE(397)] = 32610, + [SMALL_STATE(398)] = 32652, + [SMALL_STATE(399)] = 32694, + [SMALL_STATE(400)] = 32736, + [SMALL_STATE(401)] = 32784, + [SMALL_STATE(402)] = 32826, + [SMALL_STATE(403)] = 32868, + [SMALL_STATE(404)] = 32912, + [SMALL_STATE(405)] = 32958, + [SMALL_STATE(406)] = 33012, + [SMALL_STATE(407)] = 33068, + [SMALL_STATE(408)] = 33126, + [SMALL_STATE(409)] = 33194, + [SMALL_STATE(410)] = 33242, + [SMALL_STATE(411)] = 33292, + [SMALL_STATE(412)] = 33360, + [SMALL_STATE(413)] = 33424, + [SMALL_STATE(414)] = 33486, + [SMALL_STATE(415)] = 33546, + [SMALL_STATE(416)] = 33588, + [SMALL_STATE(417)] = 33630, + [SMALL_STATE(418)] = 33708, + [SMALL_STATE(419)] = 33750, + [SMALL_STATE(420)] = 33800, + [SMALL_STATE(421)] = 33848, + [SMALL_STATE(422)] = 33926, + [SMALL_STATE(423)] = 33967, + [SMALL_STATE(424)] = 34036, + [SMALL_STATE(425)] = 34077, + [SMALL_STATE(426)] = 34118, + [SMALL_STATE(427)] = 34159, + [SMALL_STATE(428)] = 34200, + [SMALL_STATE(429)] = 34247, + [SMALL_STATE(430)] = 34288, + [SMALL_STATE(431)] = 34329, + [SMALL_STATE(432)] = 34376, + [SMALL_STATE(433)] = 34423, + [SMALL_STATE(434)] = 34492, + [SMALL_STATE(435)] = 34555, + [SMALL_STATE(436)] = 34596, + [SMALL_STATE(437)] = 34665, + [SMALL_STATE(438)] = 34706, + [SMALL_STATE(439)] = 34747, + [SMALL_STATE(440)] = 34788, + [SMALL_STATE(441)] = 34829, + [SMALL_STATE(442)] = 34870, + [SMALL_STATE(443)] = 34911, + [SMALL_STATE(444)] = 34970, + [SMALL_STATE(445)] = 35029, + [SMALL_STATE(446)] = 35070, + [SMALL_STATE(447)] = 35117, + [SMALL_STATE(448)] = 35164, + [SMALL_STATE(449)] = 35205, + [SMALL_STATE(450)] = 35274, + [SMALL_STATE(451)] = 35315, + [SMALL_STATE(452)] = 35384, + [SMALL_STATE(453)] = 35453, + [SMALL_STATE(454)] = 35522, + [SMALL_STATE(455)] = 35563, + [SMALL_STATE(456)] = 35604, + [SMALL_STATE(457)] = 35645, + [SMALL_STATE(458)] = 35686, + [SMALL_STATE(459)] = 35733, + [SMALL_STATE(460)] = 35774, + [SMALL_STATE(461)] = 35821, + [SMALL_STATE(462)] = 35890, + [SMALL_STATE(463)] = 35931, + [SMALL_STATE(464)] = 36000, + [SMALL_STATE(465)] = 36047, + [SMALL_STATE(466)] = 36110, + [SMALL_STATE(467)] = 36151, + [SMALL_STATE(468)] = 36220, + [SMALL_STATE(469)] = 36289, + [SMALL_STATE(470)] = 36330, + [SMALL_STATE(471)] = 36399, + [SMALL_STATE(472)] = 36468, + [SMALL_STATE(473)] = 36537, + [SMALL_STATE(474)] = 36606, + [SMALL_STATE(475)] = 36653, + [SMALL_STATE(476)] = 36722, + [SMALL_STATE(477)] = 36791, + [SMALL_STATE(478)] = 36832, + [SMALL_STATE(479)] = 36901, + [SMALL_STATE(480)] = 36948, + [SMALL_STATE(481)] = 36989, + [SMALL_STATE(482)] = 37036, + [SMALL_STATE(483)] = 37077, + [SMALL_STATE(484)] = 37118, + [SMALL_STATE(485)] = 37159, + [SMALL_STATE(486)] = 37200, + [SMALL_STATE(487)] = 37241, + [SMALL_STATE(488)] = 37304, + [SMALL_STATE(489)] = 37345, + [SMALL_STATE(490)] = 37414, + [SMALL_STATE(491)] = 37455, + [SMALL_STATE(492)] = 37496, + [SMALL_STATE(493)] = 37537, + [SMALL_STATE(494)] = 37584, + [SMALL_STATE(495)] = 37625, + [SMALL_STATE(496)] = 37666, + [SMALL_STATE(497)] = 37707, + [SMALL_STATE(498)] = 37748, + [SMALL_STATE(499)] = 37789, + [SMALL_STATE(500)] = 37830, + [SMALL_STATE(501)] = 37877, + [SMALL_STATE(502)] = 37924, + [SMALL_STATE(503)] = 37993, + [SMALL_STATE(504)] = 38062, + [SMALL_STATE(505)] = 38109, + [SMALL_STATE(506)] = 38178, + [SMALL_STATE(507)] = 38225, + [SMALL_STATE(508)] = 38294, + [SMALL_STATE(509)] = 38363, + [SMALL_STATE(510)] = 38404, + [SMALL_STATE(511)] = 38445, + [SMALL_STATE(512)] = 38494, + [SMALL_STATE(513)] = 38537, + [SMALL_STATE(514)] = 38586, + [SMALL_STATE(515)] = 38627, + [SMALL_STATE(516)] = 38668, + [SMALL_STATE(517)] = 38709, + [SMALL_STATE(518)] = 38750, + [SMALL_STATE(519)] = 38791, + [SMALL_STATE(520)] = 38832, + [SMALL_STATE(521)] = 38873, + [SMALL_STATE(522)] = 38914, + [SMALL_STATE(523)] = 38955, + [SMALL_STATE(524)] = 38996, + [SMALL_STATE(525)] = 39037, + [SMALL_STATE(526)] = 39084, + [SMALL_STATE(527)] = 39129, + [SMALL_STATE(528)] = 39170, + [SMALL_STATE(529)] = 39239, + [SMALL_STATE(530)] = 39308, + [SMALL_STATE(531)] = 39349, + [SMALL_STATE(532)] = 39396, + [SMALL_STATE(533)] = 39437, + [SMALL_STATE(534)] = 39478, + [SMALL_STATE(535)] = 39519, + [SMALL_STATE(536)] = 39588, + [SMALL_STATE(537)] = 39629, + [SMALL_STATE(538)] = 39670, + [SMALL_STATE(539)] = 39739, + [SMALL_STATE(540)] = 39780, + [SMALL_STATE(541)] = 39827, + [SMALL_STATE(542)] = 39868, + [SMALL_STATE(543)] = 39909, + [SMALL_STATE(544)] = 39956, + [SMALL_STATE(545)] = 39997, + [SMALL_STATE(546)] = 40044, + [SMALL_STATE(547)] = 40085, + [SMALL_STATE(548)] = 40132, + [SMALL_STATE(549)] = 40173, + [SMALL_STATE(550)] = 40214, + [SMALL_STATE(551)] = 40255, + [SMALL_STATE(552)] = 40296, + [SMALL_STATE(553)] = 40337, + [SMALL_STATE(554)] = 40378, + [SMALL_STATE(555)] = 40419, + [SMALL_STATE(556)] = 40460, + [SMALL_STATE(557)] = 40501, + [SMALL_STATE(558)] = 40570, + [SMALL_STATE(559)] = 40615, + [SMALL_STATE(560)] = 40684, + [SMALL_STATE(561)] = 40725, + [SMALL_STATE(562)] = 40766, + [SMALL_STATE(563)] = 40807, + [SMALL_STATE(564)] = 40848, + [SMALL_STATE(565)] = 40889, + [SMALL_STATE(566)] = 40930, + [SMALL_STATE(567)] = 40971, + [SMALL_STATE(568)] = 41030, + [SMALL_STATE(569)] = 41071, + [SMALL_STATE(570)] = 41130, + [SMALL_STATE(571)] = 41191, + [SMALL_STATE(572)] = 41254, + [SMALL_STATE(573)] = 41321, + [SMALL_STATE(574)] = 41370, + [SMALL_STATE(575)] = 41417, + [SMALL_STATE(576)] = 41484, + [SMALL_STATE(577)] = 41541, + [SMALL_STATE(578)] = 41596, + [SMALL_STATE(579)] = 41649, + [SMALL_STATE(580)] = 41694, + [SMALL_STATE(581)] = 41737, + [SMALL_STATE(582)] = 41778, + [SMALL_STATE(583)] = 41819, + [SMALL_STATE(584)] = 41864, + [SMALL_STATE(585)] = 41933, + [SMALL_STATE(586)] = 42002, + [SMALL_STATE(587)] = 42043, + [SMALL_STATE(588)] = 42102, + [SMALL_STATE(589)] = 42149, + [SMALL_STATE(590)] = 42190, + [SMALL_STATE(591)] = 42231, + [SMALL_STATE(592)] = 42300, + [SMALL_STATE(593)] = 42341, + [SMALL_STATE(594)] = 42382, + [SMALL_STATE(595)] = 42423, + [SMALL_STATE(596)] = 42468, + [SMALL_STATE(597)] = 42509, + [SMALL_STATE(598)] = 42550, + [SMALL_STATE(599)] = 42591, + [SMALL_STATE(600)] = 42632, + [SMALL_STATE(601)] = 42679, + [SMALL_STATE(602)] = 42744, + [SMALL_STATE(603)] = 42785, + [SMALL_STATE(604)] = 42826, + [SMALL_STATE(605)] = 42867, + [SMALL_STATE(606)] = 42907, + [SMALL_STATE(607)] = 42947, + [SMALL_STATE(608)] = 42987, + [SMALL_STATE(609)] = 43027, + [SMALL_STATE(610)] = 43067, + [SMALL_STATE(611)] = 43107, + [SMALL_STATE(612)] = 43147, + [SMALL_STATE(613)] = 43187, + [SMALL_STATE(614)] = 43227, + [SMALL_STATE(615)] = 43267, + [SMALL_STATE(616)] = 43307, + [SMALL_STATE(617)] = 43347, + [SMALL_STATE(618)] = 43387, + [SMALL_STATE(619)] = 43441, + [SMALL_STATE(620)] = 43489, + [SMALL_STATE(621)] = 43543, + [SMALL_STATE(622)] = 43583, + [SMALL_STATE(623)] = 43623, + [SMALL_STATE(624)] = 43663, + [SMALL_STATE(625)] = 43703, + [SMALL_STATE(626)] = 43743, + [SMALL_STATE(627)] = 43793, + [SMALL_STATE(628)] = 43833, + [SMALL_STATE(629)] = 43879, + [SMALL_STATE(630)] = 43919, + [SMALL_STATE(631)] = 43959, + [SMALL_STATE(632)] = 43999, + [SMALL_STATE(633)] = 44039, + [SMALL_STATE(634)] = 44079, + [SMALL_STATE(635)] = 44119, + [SMALL_STATE(636)] = 44159, + [SMALL_STATE(637)] = 44199, + [SMALL_STATE(638)] = 44245, + [SMALL_STATE(639)] = 44289, + [SMALL_STATE(640)] = 44333, + [SMALL_STATE(641)] = 44373, + [SMALL_STATE(642)] = 44413, + [SMALL_STATE(643)] = 44453, + [SMALL_STATE(644)] = 44493, + [SMALL_STATE(645)] = 44533, + [SMALL_STATE(646)] = 44573, + [SMALL_STATE(647)] = 44613, + [SMALL_STATE(648)] = 44659, + [SMALL_STATE(649)] = 44699, + [SMALL_STATE(650)] = 44739, + [SMALL_STATE(651)] = 44779, + [SMALL_STATE(652)] = 44837, + [SMALL_STATE(653)] = 44877, + [SMALL_STATE(654)] = 44935, + [SMALL_STATE(655)] = 44975, + [SMALL_STATE(656)] = 45015, + [SMALL_STATE(657)] = 45055, + [SMALL_STATE(658)] = 45095, + [SMALL_STATE(659)] = 45153, + [SMALL_STATE(660)] = 45193, + [SMALL_STATE(661)] = 45233, + [SMALL_STATE(662)] = 45273, + [SMALL_STATE(663)] = 45313, + [SMALL_STATE(664)] = 45359, + [SMALL_STATE(665)] = 45399, + [SMALL_STATE(666)] = 45457, + [SMALL_STATE(667)] = 45515, + [SMALL_STATE(668)] = 45556, + [SMALL_STATE(669)] = 45603, + [SMALL_STATE(670)] = 45642, + [SMALL_STATE(671)] = 45681, + [SMALL_STATE(672)] = 45722, + [SMALL_STATE(673)] = 45789, + [SMALL_STATE(674)] = 45830, + [SMALL_STATE(675)] = 45871, + [SMALL_STATE(676)] = 45918, + [SMALL_STATE(677)] = 45957, + [SMALL_STATE(678)] = 46004, + [SMALL_STATE(679)] = 46051, + [SMALL_STATE(680)] = 46098, + [SMALL_STATE(681)] = 46145, + [SMALL_STATE(682)] = 46192, + [SMALL_STATE(683)] = 46239, + [SMALL_STATE(684)] = 46278, + [SMALL_STATE(685)] = 46317, + [SMALL_STATE(686)] = 46364, + [SMALL_STATE(687)] = 46421, + [SMALL_STATE(688)] = 46460, + [SMALL_STATE(689)] = 46501, + [SMALL_STATE(690)] = 46548, + [SMALL_STATE(691)] = 46605, + [SMALL_STATE(692)] = 46652, + [SMALL_STATE(693)] = 46691, + [SMALL_STATE(694)] = 46734, + [SMALL_STATE(695)] = 46779, + [SMALL_STATE(696)] = 46818, + [SMALL_STATE(697)] = 46865, + [SMALL_STATE(698)] = 46904, + [SMALL_STATE(699)] = 46951, + [SMALL_STATE(700)] = 46998, + [SMALL_STATE(701)] = 47045, + [SMALL_STATE(702)] = 47092, + [SMALL_STATE(703)] = 47139, + [SMALL_STATE(704)] = 47186, + [SMALL_STATE(705)] = 47233, + [SMALL_STATE(706)] = 47272, + [SMALL_STATE(707)] = 47311, + [SMALL_STATE(708)] = 47358, + [SMALL_STATE(709)] = 47407, + [SMALL_STATE(710)] = 47450, + [SMALL_STATE(711)] = 47497, + [SMALL_STATE(712)] = 47538, + [SMALL_STATE(713)] = 47577, + [SMALL_STATE(714)] = 47644, + [SMALL_STATE(715)] = 47691, + [SMALL_STATE(716)] = 47730, + [SMALL_STATE(717)] = 47769, + [SMALL_STATE(718)] = 47808, + [SMALL_STATE(719)] = 47849, + [SMALL_STATE(720)] = 47890, + [SMALL_STATE(721)] = 47937, + [SMALL_STATE(722)] = 47984, + [SMALL_STATE(723)] = 48025, + [SMALL_STATE(724)] = 48066, + [SMALL_STATE(725)] = 48105, + [SMALL_STATE(726)] = 48152, + [SMALL_STATE(727)] = 48197, + [SMALL_STATE(728)] = 48264, + [SMALL_STATE(729)] = 48305, + [SMALL_STATE(730)] = 48352, + [SMALL_STATE(731)] = 48399, + [SMALL_STATE(732)] = 48440, + [SMALL_STATE(733)] = 48507, + [SMALL_STATE(734)] = 48574, + [SMALL_STATE(735)] = 48619, + [SMALL_STATE(736)] = 48664, + [SMALL_STATE(737)] = 48711, + [SMALL_STATE(738)] = 48758, + [SMALL_STATE(739)] = 48799, + [SMALL_STATE(740)] = 48840, + [SMALL_STATE(741)] = 48881, + [SMALL_STATE(742)] = 48928, + [SMALL_STATE(743)] = 48971, + [SMALL_STATE(744)] = 49038, + [SMALL_STATE(745)] = 49083, + [SMALL_STATE(746)] = 49130, + [SMALL_STATE(747)] = 49177, + [SMALL_STATE(748)] = 49220, + [SMALL_STATE(749)] = 49267, + [SMALL_STATE(750)] = 49314, + [SMALL_STATE(751)] = 49355, + [SMALL_STATE(752)] = 49396, + [SMALL_STATE(753)] = 49437, + [SMALL_STATE(754)] = 49478, + [SMALL_STATE(755)] = 49519, + [SMALL_STATE(756)] = 49560, + [SMALL_STATE(757)] = 49601, + [SMALL_STATE(758)] = 49642, + [SMALL_STATE(759)] = 49683, + [SMALL_STATE(760)] = 49724, + [SMALL_STATE(761)] = 49765, + [SMALL_STATE(762)] = 49806, + [SMALL_STATE(763)] = 49847, + [SMALL_STATE(764)] = 49888, + [SMALL_STATE(765)] = 49929, + [SMALL_STATE(766)] = 49996, + [SMALL_STATE(767)] = 50043, + [SMALL_STATE(768)] = 50090, + [SMALL_STATE(769)] = 50129, + [SMALL_STATE(770)] = 50173, + [SMALL_STATE(771)] = 50213, + [SMALL_STATE(772)] = 50259, + [SMALL_STATE(773)] = 50299, + [SMALL_STATE(774)] = 50337, + [SMALL_STATE(775)] = 50377, + [SMALL_STATE(776)] = 50417, + [SMALL_STATE(777)] = 50455, + [SMALL_STATE(778)] = 50499, + [SMALL_STATE(779)] = 50539, + [SMALL_STATE(780)] = 50579, + [SMALL_STATE(781)] = 50623, + [SMALL_STATE(782)] = 50661, + [SMALL_STATE(783)] = 50699, + [SMALL_STATE(784)] = 50737, + [SMALL_STATE(785)] = 50777, + [SMALL_STATE(786)] = 50817, + [SMALL_STATE(787)] = 50859, + [SMALL_STATE(788)] = 50903, + [SMALL_STATE(789)] = 50943, + [SMALL_STATE(790)] = 50983, + [SMALL_STATE(791)] = 51023, + [SMALL_STATE(792)] = 51063, + [SMALL_STATE(793)] = 51103, + [SMALL_STATE(794)] = 51147, + [SMALL_STATE(795)] = 51187, + [SMALL_STATE(796)] = 51231, + [SMALL_STATE(797)] = 51275, + [SMALL_STATE(798)] = 51315, + [SMALL_STATE(799)] = 51353, + [SMALL_STATE(800)] = 51397, + [SMALL_STATE(801)] = 51441, + [SMALL_STATE(802)] = 51497, + [SMALL_STATE(803)] = 51541, + [SMALL_STATE(804)] = 51597, + [SMALL_STATE(805)] = 51653, + [SMALL_STATE(806)] = 51691, + [SMALL_STATE(807)] = 51735, + [SMALL_STATE(808)] = 51772, + [SMALL_STATE(809)] = 51811, + [SMALL_STATE(810)] = 51848, + [SMALL_STATE(811)] = 51891, + [SMALL_STATE(812)] = 51928, + [SMALL_STATE(813)] = 51965, + [SMALL_STATE(814)] = 52002, + [SMALL_STATE(815)] = 52039, + [SMALL_STATE(816)] = 52082, + [SMALL_STATE(817)] = 52119, + [SMALL_STATE(818)] = 52156, + [SMALL_STATE(819)] = 52193, + [SMALL_STATE(820)] = 52230, + [SMALL_STATE(821)] = 52267, + [SMALL_STATE(822)] = 52304, + [SMALL_STATE(823)] = 52347, + [SMALL_STATE(824)] = 52384, + [SMALL_STATE(825)] = 52427, + [SMALL_STATE(826)] = 52464, + [SMALL_STATE(827)] = 52501, + [SMALL_STATE(828)] = 52544, + [SMALL_STATE(829)] = 52587, + [SMALL_STATE(830)] = 52626, + [SMALL_STATE(831)] = 52669, + [SMALL_STATE(832)] = 52708, + [SMALL_STATE(833)] = 52747, + [SMALL_STATE(834)] = 52786, + [SMALL_STATE(835)] = 52825, + [SMALL_STATE(836)] = 52868, + [SMALL_STATE(837)] = 52907, + [SMALL_STATE(838)] = 52946, + [SMALL_STATE(839)] = 52985, + [SMALL_STATE(840)] = 53024, + [SMALL_STATE(841)] = 53063, + [SMALL_STATE(842)] = 53106, + [SMALL_STATE(843)] = 53149, + [SMALL_STATE(844)] = 53192, + [SMALL_STATE(845)] = 53235, + [SMALL_STATE(846)] = 53278, + [SMALL_STATE(847)] = 53333, + [SMALL_STATE(848)] = 53372, + [SMALL_STATE(849)] = 53411, + [SMALL_STATE(850)] = 53450, + [SMALL_STATE(851)] = 53505, + [SMALL_STATE(852)] = 53544, + [SMALL_STATE(853)] = 53580, + [SMALL_STATE(854)] = 53622, + [SMALL_STATE(855)] = 53658, + [SMALL_STATE(856)] = 53694, + [SMALL_STATE(857)] = 53736, + [SMALL_STATE(858)] = 53772, + [SMALL_STATE(859)] = 53808, + [SMALL_STATE(860)] = 53848, + [SMALL_STATE(861)] = 53884, + [SMALL_STATE(862)] = 53920, + [SMALL_STATE(863)] = 53956, + [SMALL_STATE(864)] = 53992, + [SMALL_STATE(865)] = 54028, + [SMALL_STATE(866)] = 54064, + [SMALL_STATE(867)] = 54100, + [SMALL_STATE(868)] = 54140, + [SMALL_STATE(869)] = 54176, + [SMALL_STATE(870)] = 54212, + [SMALL_STATE(871)] = 54248, + [SMALL_STATE(872)] = 54284, + [SMALL_STATE(873)] = 54320, + [SMALL_STATE(874)] = 54356, + [SMALL_STATE(875)] = 54392, + [SMALL_STATE(876)] = 54434, + [SMALL_STATE(877)] = 54476, + [SMALL_STATE(878)] = 54512, + [SMALL_STATE(879)] = 54548, + [SMALL_STATE(880)] = 54584, + [SMALL_STATE(881)] = 54620, + [SMALL_STATE(882)] = 54656, + [SMALL_STATE(883)] = 54692, + [SMALL_STATE(884)] = 54746, + [SMALL_STATE(885)] = 54788, + [SMALL_STATE(886)] = 54824, + [SMALL_STATE(887)] = 54860, + [SMALL_STATE(888)] = 54896, + [SMALL_STATE(889)] = 54957, + [SMALL_STATE(890)] = 55018, + [SMALL_STATE(891)] = 55079, + [SMALL_STATE(892)] = 55140, + [SMALL_STATE(893)] = 55201, + [SMALL_STATE(894)] = 55242, + [SMALL_STATE(895)] = 55303, + [SMALL_STATE(896)] = 55364, + [SMALL_STATE(897)] = 55429, + [SMALL_STATE(898)] = 55490, + [SMALL_STATE(899)] = 55525, + [SMALL_STATE(900)] = 55560, + [SMALL_STATE(901)] = 55595, + [SMALL_STATE(902)] = 55630, + [SMALL_STATE(903)] = 55691, + [SMALL_STATE(904)] = 55726, + [SMALL_STATE(905)] = 55791, + [SMALL_STATE(906)] = 55856, + [SMALL_STATE(907)] = 55891, + [SMALL_STATE(908)] = 55952, + [SMALL_STATE(909)] = 55987, + [SMALL_STATE(910)] = 56048, + [SMALL_STATE(911)] = 56109, + [SMALL_STATE(912)] = 56170, + [SMALL_STATE(913)] = 56205, + [SMALL_STATE(914)] = 56266, + [SMALL_STATE(915)] = 56327, + [SMALL_STATE(916)] = 56388, + [SMALL_STATE(917)] = 56449, + [SMALL_STATE(918)] = 56484, + [SMALL_STATE(919)] = 56545, + [SMALL_STATE(920)] = 56606, + [SMALL_STATE(921)] = 56667, + [SMALL_STATE(922)] = 56702, + [SMALL_STATE(923)] = 56763, + [SMALL_STATE(924)] = 56798, + [SMALL_STATE(925)] = 56833, + [SMALL_STATE(926)] = 56898, + [SMALL_STATE(927)] = 56959, + [SMALL_STATE(928)] = 56998, + [SMALL_STATE(929)] = 57033, + [SMALL_STATE(930)] = 57072, + [SMALL_STATE(931)] = 57133, + [SMALL_STATE(932)] = 57194, + [SMALL_STATE(933)] = 57255, + [SMALL_STATE(934)] = 57316, + [SMALL_STATE(935)] = 57381, + [SMALL_STATE(936)] = 57442, + [SMALL_STATE(937)] = 57477, + [SMALL_STATE(938)] = 57542, + [SMALL_STATE(939)] = 57577, + [SMALL_STATE(940)] = 57638, + [SMALL_STATE(941)] = 57699, + [SMALL_STATE(942)] = 57733, + [SMALL_STATE(943)] = 57791, + [SMALL_STATE(944)] = 57849, + [SMALL_STATE(945)] = 57907, + [SMALL_STATE(946)] = 57965, + [SMALL_STATE(947)] = 57999, + [SMALL_STATE(948)] = 58039, + [SMALL_STATE(949)] = 58079, + [SMALL_STATE(950)] = 58113, + [SMALL_STATE(951)] = 58153, + [SMALL_STATE(952)] = 58211, + [SMALL_STATE(953)] = 58269, + [SMALL_STATE(954)] = 58303, + [SMALL_STATE(955)] = 58337, + [SMALL_STATE(956)] = 58395, + [SMALL_STATE(957)] = 58433, + [SMALL_STATE(958)] = 58491, + [SMALL_STATE(959)] = 58549, + [SMALL_STATE(960)] = 58607, + [SMALL_STATE(961)] = 58665, + [SMALL_STATE(962)] = 58705, + [SMALL_STATE(963)] = 58763, + [SMALL_STATE(964)] = 58797, + [SMALL_STATE(965)] = 58855, + [SMALL_STATE(966)] = 58889, + [SMALL_STATE(967)] = 58923, + [SMALL_STATE(968)] = 58981, + [SMALL_STATE(969)] = 59015, + [SMALL_STATE(970)] = 59073, + [SMALL_STATE(971)] = 59131, + [SMALL_STATE(972)] = 59189, + [SMALL_STATE(973)] = 59223, + [SMALL_STATE(974)] = 59281, + [SMALL_STATE(975)] = 59339, + [SMALL_STATE(976)] = 59373, + [SMALL_STATE(977)] = 59431, + [SMALL_STATE(978)] = 59489, + [SMALL_STATE(979)] = 59547, + [SMALL_STATE(980)] = 59605, + [SMALL_STATE(981)] = 59663, + [SMALL_STATE(982)] = 59697, + [SMALL_STATE(983)] = 59755, + [SMALL_STATE(984)] = 59813, + [SMALL_STATE(985)] = 59871, + [SMALL_STATE(986)] = 59911, + [SMALL_STATE(987)] = 59969, + [SMALL_STATE(988)] = 60003, + [SMALL_STATE(989)] = 60037, + [SMALL_STATE(990)] = 60071, + [SMALL_STATE(991)] = 60129, + [SMALL_STATE(992)] = 60187, + [SMALL_STATE(993)] = 60221, + [SMALL_STATE(994)] = 60279, + [SMALL_STATE(995)] = 60313, + [SMALL_STATE(996)] = 60347, + [SMALL_STATE(997)] = 60405, + [SMALL_STATE(998)] = 60463, + [SMALL_STATE(999)] = 60521, + [SMALL_STATE(1000)] = 60579, + [SMALL_STATE(1001)] = 60637, + [SMALL_STATE(1002)] = 60677, + [SMALL_STATE(1003)] = 60711, + [SMALL_STATE(1004)] = 60762, + [SMALL_STATE(1005)] = 60795, + [SMALL_STATE(1006)] = 60834, + [SMALL_STATE(1007)] = 60885, + [SMALL_STATE(1008)] = 60924, + [SMALL_STATE(1009)] = 60975, + [SMALL_STATE(1010)] = 61014, + [SMALL_STATE(1011)] = 61065, + [SMALL_STATE(1012)] = 61098, + [SMALL_STATE(1013)] = 61149, + [SMALL_STATE(1014)] = 61200, + [SMALL_STATE(1015)] = 61233, + [SMALL_STATE(1016)] = 61284, + [SMALL_STATE(1017)] = 61317, + [SMALL_STATE(1018)] = 61350, + [SMALL_STATE(1019)] = 61401, + [SMALL_STATE(1020)] = 61452, + [SMALL_STATE(1021)] = 61485, + [SMALL_STATE(1022)] = 61536, + [SMALL_STATE(1023)] = 61587, + [SMALL_STATE(1024)] = 61638, + [SMALL_STATE(1025)] = 61689, + [SMALL_STATE(1026)] = 61740, + [SMALL_STATE(1027)] = 61791, + [SMALL_STATE(1028)] = 61842, + [SMALL_STATE(1029)] = 61875, + [SMALL_STATE(1030)] = 61908, + [SMALL_STATE(1031)] = 61941, + [SMALL_STATE(1032)] = 61992, + [SMALL_STATE(1033)] = 62025, + [SMALL_STATE(1034)] = 62058, + [SMALL_STATE(1035)] = 62091, + [SMALL_STATE(1036)] = 62142, + [SMALL_STATE(1037)] = 62175, + [SMALL_STATE(1038)] = 62226, + [SMALL_STATE(1039)] = 62259, + [SMALL_STATE(1040)] = 62292, + [SMALL_STATE(1041)] = 62325, + [SMALL_STATE(1042)] = 62376, + [SMALL_STATE(1043)] = 62415, + [SMALL_STATE(1044)] = 62466, + [SMALL_STATE(1045)] = 62517, + [SMALL_STATE(1046)] = 62568, + [SMALL_STATE(1047)] = 62619, + [SMALL_STATE(1048)] = 62670, + [SMALL_STATE(1049)] = 62721, + [SMALL_STATE(1050)] = 62772, + [SMALL_STATE(1051)] = 62823, + [SMALL_STATE(1052)] = 62874, + [SMALL_STATE(1053)] = 62913, + [SMALL_STATE(1054)] = 62946, + [SMALL_STATE(1055)] = 62997, + [SMALL_STATE(1056)] = 63048, + [SMALL_STATE(1057)] = 63099, + [SMALL_STATE(1058)] = 63150, + [SMALL_STATE(1059)] = 63201, + [SMALL_STATE(1060)] = 63252, + [SMALL_STATE(1061)] = 63303, + [SMALL_STATE(1062)] = 63336, + [SMALL_STATE(1063)] = 63387, + [SMALL_STATE(1064)] = 63438, + [SMALL_STATE(1065)] = 63489, + [SMALL_STATE(1066)] = 63528, + [SMALL_STATE(1067)] = 63579, + [SMALL_STATE(1068)] = 63630, + [SMALL_STATE(1069)] = 63681, + [SMALL_STATE(1070)] = 63732, + [SMALL_STATE(1071)] = 63783, + [SMALL_STATE(1072)] = 63834, + [SMALL_STATE(1073)] = 63885, + [SMALL_STATE(1074)] = 63936, + [SMALL_STATE(1075)] = 63987, + [SMALL_STATE(1076)] = 64020, + [SMALL_STATE(1077)] = 64053, + [SMALL_STATE(1078)] = 64086, + [SMALL_STATE(1079)] = 64119, + [SMALL_STATE(1080)] = 64152, + [SMALL_STATE(1081)] = 64185, + [SMALL_STATE(1082)] = 64218, + [SMALL_STATE(1083)] = 64257, + [SMALL_STATE(1084)] = 64296, + [SMALL_STATE(1085)] = 64347, + [SMALL_STATE(1086)] = 64380, + [SMALL_STATE(1087)] = 64431, + [SMALL_STATE(1088)] = 64482, + [SMALL_STATE(1089)] = 64533, + [SMALL_STATE(1090)] = 64566, + [SMALL_STATE(1091)] = 64605, + [SMALL_STATE(1092)] = 64638, + [SMALL_STATE(1093)] = 64676, + [SMALL_STATE(1094)] = 64712, + [SMALL_STATE(1095)] = 64748, + [SMALL_STATE(1096)] = 64798, + [SMALL_STATE(1097)] = 64846, + [SMALL_STATE(1098)] = 64880, + [SMALL_STATE(1099)] = 64922, + [SMALL_STATE(1100)] = 64958, + [SMALL_STATE(1101)] = 65000, + [SMALL_STATE(1102)] = 65032, + [SMALL_STATE(1103)] = 65082, + [SMALL_STATE(1104)] = 65114, + [SMALL_STATE(1105)] = 65146, + [SMALL_STATE(1106)] = 65184, + [SMALL_STATE(1107)] = 65216, + [SMALL_STATE(1108)] = 65264, + [SMALL_STATE(1109)] = 65296, + [SMALL_STATE(1110)] = 65334, + [SMALL_STATE(1111)] = 65382, + [SMALL_STATE(1112)] = 65420, + [SMALL_STATE(1113)] = 65468, + [SMALL_STATE(1114)] = 65516, + [SMALL_STATE(1115)] = 65564, + [SMALL_STATE(1116)] = 65602, + [SMALL_STATE(1117)] = 65644, + [SMALL_STATE(1118)] = 65678, + [SMALL_STATE(1119)] = 65716, + [SMALL_STATE(1120)] = 65752, + [SMALL_STATE(1121)] = 65784, + [SMALL_STATE(1122)] = 65816, + [SMALL_STATE(1123)] = 65848, + [SMALL_STATE(1124)] = 65890, + [SMALL_STATE(1125)] = 65922, + [SMALL_STATE(1126)] = 65954, + [SMALL_STATE(1127)] = 65990, + [SMALL_STATE(1128)] = 66022, + [SMALL_STATE(1129)] = 66060, + [SMALL_STATE(1130)] = 66098, + [SMALL_STATE(1131)] = 66148, + [SMALL_STATE(1132)] = 66184, + [SMALL_STATE(1133)] = 66216, + [SMALL_STATE(1134)] = 66258, + [SMALL_STATE(1135)] = 66296, + [SMALL_STATE(1136)] = 66344, + [SMALL_STATE(1137)] = 66380, + [SMALL_STATE(1138)] = 66422, + [SMALL_STATE(1139)] = 66460, + [SMALL_STATE(1140)] = 66498, + [SMALL_STATE(1141)] = 66546, + [SMALL_STATE(1142)] = 66594, + [SMALL_STATE(1143)] = 66630, + [SMALL_STATE(1144)] = 66666, + [SMALL_STATE(1145)] = 66716, + [SMALL_STATE(1146)] = 66766, + [SMALL_STATE(1147)] = 66816, + [SMALL_STATE(1148)] = 66866, + [SMALL_STATE(1149)] = 66902, + [SMALL_STATE(1150)] = 66934, + [SMALL_STATE(1151)] = 66972, + [SMALL_STATE(1152)] = 67022, + [SMALL_STATE(1153)] = 67060, + [SMALL_STATE(1154)] = 67110, + [SMALL_STATE(1155)] = 67144, + [SMALL_STATE(1156)] = 67194, + [SMALL_STATE(1157)] = 67232, + [SMALL_STATE(1158)] = 67274, + [SMALL_STATE(1159)] = 67312, + [SMALL_STATE(1160)] = 67350, + [SMALL_STATE(1161)] = 67388, + [SMALL_STATE(1162)] = 67438, + [SMALL_STATE(1163)] = 67486, + [SMALL_STATE(1164)] = 67522, + [SMALL_STATE(1165)] = 67564, + [SMALL_STATE(1166)] = 67614, + [SMALL_STATE(1167)] = 67662, + [SMALL_STATE(1168)] = 67700, + [SMALL_STATE(1169)] = 67736, + [SMALL_STATE(1170)] = 67774, + [SMALL_STATE(1171)] = 67810, + [SMALL_STATE(1172)] = 67848, + [SMALL_STATE(1173)] = 67880, + [SMALL_STATE(1174)] = 67918, + [SMALL_STATE(1175)] = 67966, + [SMALL_STATE(1176)] = 68014, + [SMALL_STATE(1177)] = 68062, + [SMALL_STATE(1178)] = 68094, + [SMALL_STATE(1179)] = 68136, + [SMALL_STATE(1180)] = 68170, + [SMALL_STATE(1181)] = 68220, + [SMALL_STATE(1182)] = 68256, + [SMALL_STATE(1183)] = 68287, + [SMALL_STATE(1184)] = 68318, + [SMALL_STATE(1185)] = 68357, + [SMALL_STATE(1186)] = 68394, + [SMALL_STATE(1187)] = 68431, + [SMALL_STATE(1188)] = 68462, + [SMALL_STATE(1189)] = 68501, + [SMALL_STATE(1190)] = 68540, + [SMALL_STATE(1191)] = 68571, + [SMALL_STATE(1192)] = 68616, + [SMALL_STATE(1193)] = 68651, + [SMALL_STATE(1194)] = 68686, + [SMALL_STATE(1195)] = 68733, + [SMALL_STATE(1196)] = 68772, + [SMALL_STATE(1197)] = 68803, + [SMALL_STATE(1198)] = 68834, + [SMALL_STATE(1199)] = 68865, + [SMALL_STATE(1200)] = 68896, + [SMALL_STATE(1201)] = 68941, + [SMALL_STATE(1202)] = 68972, + [SMALL_STATE(1203)] = 69003, + [SMALL_STATE(1204)] = 69034, + [SMALL_STATE(1205)] = 69065, + [SMALL_STATE(1206)] = 69096, + [SMALL_STATE(1207)] = 69127, + [SMALL_STATE(1208)] = 69166, + [SMALL_STATE(1209)] = 69197, + [SMALL_STATE(1210)] = 69228, + [SMALL_STATE(1211)] = 69259, + [SMALL_STATE(1212)] = 69290, + [SMALL_STATE(1213)] = 69321, + [SMALL_STATE(1214)] = 69352, + [SMALL_STATE(1215)] = 69383, + [SMALL_STATE(1216)] = 69422, + [SMALL_STATE(1217)] = 69469, + [SMALL_STATE(1218)] = 69500, + [SMALL_STATE(1219)] = 69539, + [SMALL_STATE(1220)] = 69578, + [SMALL_STATE(1221)] = 69609, + [SMALL_STATE(1222)] = 69640, + [SMALL_STATE(1223)] = 69671, + [SMALL_STATE(1224)] = 69716, + [SMALL_STATE(1225)] = 69747, + [SMALL_STATE(1226)] = 69778, + [SMALL_STATE(1227)] = 69809, + [SMALL_STATE(1228)] = 69840, + [SMALL_STATE(1229)] = 69871, + [SMALL_STATE(1230)] = 69902, + [SMALL_STATE(1231)] = 69933, + [SMALL_STATE(1232)] = 69964, + [SMALL_STATE(1233)] = 69995, + [SMALL_STATE(1234)] = 70026, + [SMALL_STATE(1235)] = 70057, + [SMALL_STATE(1236)] = 70102, + [SMALL_STATE(1237)] = 70133, + [SMALL_STATE(1238)] = 70164, + [SMALL_STATE(1239)] = 70195, + [SMALL_STATE(1240)] = 70234, + [SMALL_STATE(1241)] = 70265, + [SMALL_STATE(1242)] = 70296, + [SMALL_STATE(1243)] = 70327, + [SMALL_STATE(1244)] = 70358, + [SMALL_STATE(1245)] = 70389, + [SMALL_STATE(1246)] = 70420, + [SMALL_STATE(1247)] = 70465, + [SMALL_STATE(1248)] = 70500, + [SMALL_STATE(1249)] = 70531, + [SMALL_STATE(1250)] = 70570, + [SMALL_STATE(1251)] = 70601, + [SMALL_STATE(1252)] = 70638, + [SMALL_STATE(1253)] = 70669, + [SMALL_STATE(1254)] = 70700, + [SMALL_STATE(1255)] = 70731, + [SMALL_STATE(1256)] = 70762, + [SMALL_STATE(1257)] = 70803, + [SMALL_STATE(1258)] = 70834, + [SMALL_STATE(1259)] = 70865, + [SMALL_STATE(1260)] = 70896, + [SMALL_STATE(1261)] = 70927, + [SMALL_STATE(1262)] = 70958, + [SMALL_STATE(1263)] = 70989, + [SMALL_STATE(1264)] = 71020, + [SMALL_STATE(1265)] = 71055, + [SMALL_STATE(1266)] = 71088, + [SMALL_STATE(1267)] = 71127, + [SMALL_STATE(1268)] = 71162, + [SMALL_STATE(1269)] = 71193, + [SMALL_STATE(1270)] = 71234, + [SMALL_STATE(1271)] = 71269, + [SMALL_STATE(1272)] = 71304, + [SMALL_STATE(1273)] = 71335, + [SMALL_STATE(1274)] = 71366, + [SMALL_STATE(1275)] = 71397, + [SMALL_STATE(1276)] = 71428, + [SMALL_STATE(1277)] = 71459, + [SMALL_STATE(1278)] = 71490, + [SMALL_STATE(1279)] = 71521, + [SMALL_STATE(1280)] = 71552, + [SMALL_STATE(1281)] = 71583, + [SMALL_STATE(1282)] = 71614, + [SMALL_STATE(1283)] = 71645, + [SMALL_STATE(1284)] = 71676, + [SMALL_STATE(1285)] = 71707, + [SMALL_STATE(1286)] = 71742, + [SMALL_STATE(1287)] = 71777, + [SMALL_STATE(1288)] = 71808, + [SMALL_STATE(1289)] = 71839, + [SMALL_STATE(1290)] = 71884, + [SMALL_STATE(1291)] = 71919, + [SMALL_STATE(1292)] = 71950, + [SMALL_STATE(1293)] = 71981, + [SMALL_STATE(1294)] = 72012, + [SMALL_STATE(1295)] = 72043, + [SMALL_STATE(1296)] = 72074, + [SMALL_STATE(1297)] = 72105, + [SMALL_STATE(1298)] = 72144, + [SMALL_STATE(1299)] = 72175, + [SMALL_STATE(1300)] = 72231, + [SMALL_STATE(1301)] = 72287, + [SMALL_STATE(1302)] = 72321, + [SMALL_STATE(1303)] = 72355, + [SMALL_STATE(1304)] = 72393, + [SMALL_STATE(1305)] = 72427, + [SMALL_STATE(1306)] = 72457, + [SMALL_STATE(1307)] = 72513, + [SMALL_STATE(1308)] = 72551, + [SMALL_STATE(1309)] = 72607, + [SMALL_STATE(1310)] = 72645, + [SMALL_STATE(1311)] = 72679, + [SMALL_STATE(1312)] = 72713, + [SMALL_STATE(1313)] = 72769, + [SMALL_STATE(1314)] = 72825, + [SMALL_STATE(1315)] = 72859, + [SMALL_STATE(1316)] = 72893, + [SMALL_STATE(1317)] = 72927, + [SMALL_STATE(1318)] = 72961, + [SMALL_STATE(1319)] = 73014, + [SMALL_STATE(1320)] = 73067, + [SMALL_STATE(1321)] = 73096, + [SMALL_STATE(1322)] = 73125, + [SMALL_STATE(1323)] = 73154, + [SMALL_STATE(1324)] = 73201, + [SMALL_STATE(1325)] = 73230, + [SMALL_STATE(1326)] = 73259, + [SMALL_STATE(1327)] = 73292, + [SMALL_STATE(1328)] = 73321, + [SMALL_STATE(1329)] = 73350, + [SMALL_STATE(1330)] = 73385, + [SMALL_STATE(1331)] = 73414, + [SMALL_STATE(1332)] = 73443, + [SMALL_STATE(1333)] = 73472, + [SMALL_STATE(1334)] = 73501, + [SMALL_STATE(1335)] = 73530, + [SMALL_STATE(1336)] = 73559, + [SMALL_STATE(1337)] = 73588, + [SMALL_STATE(1338)] = 73617, + [SMALL_STATE(1339)] = 73670, + [SMALL_STATE(1340)] = 73699, + [SMALL_STATE(1341)] = 73728, + [SMALL_STATE(1342)] = 73757, + [SMALL_STATE(1343)] = 73786, + [SMALL_STATE(1344)] = 73815, + [SMALL_STATE(1345)] = 73844, + [SMALL_STATE(1346)] = 73873, + [SMALL_STATE(1347)] = 73902, + [SMALL_STATE(1348)] = 73931, + [SMALL_STATE(1349)] = 73960, + [SMALL_STATE(1350)] = 73989, + [SMALL_STATE(1351)] = 74042, + [SMALL_STATE(1352)] = 74071, + [SMALL_STATE(1353)] = 74100, + [SMALL_STATE(1354)] = 74129, + [SMALL_STATE(1355)] = 74182, + [SMALL_STATE(1356)] = 74215, + [SMALL_STATE(1357)] = 74250, + [SMALL_STATE(1358)] = 74279, + [SMALL_STATE(1359)] = 74308, + [SMALL_STATE(1360)] = 74337, + [SMALL_STATE(1361)] = 74390, + [SMALL_STATE(1362)] = 74423, + [SMALL_STATE(1363)] = 74452, + [SMALL_STATE(1364)] = 74481, + [SMALL_STATE(1365)] = 74510, + [SMALL_STATE(1366)] = 74563, + [SMALL_STATE(1367)] = 74592, + [SMALL_STATE(1368)] = 74621, + [SMALL_STATE(1369)] = 74650, + [SMALL_STATE(1370)] = 74679, + [SMALL_STATE(1371)] = 74708, + [SMALL_STATE(1372)] = 74737, + [SMALL_STATE(1373)] = 74790, + [SMALL_STATE(1374)] = 74837, + [SMALL_STATE(1375)] = 74866, + [SMALL_STATE(1376)] = 74919, + [SMALL_STATE(1377)] = 74948, + [SMALL_STATE(1378)] = 74977, + [SMALL_STATE(1379)] = 75006, + [SMALL_STATE(1380)] = 75053, + [SMALL_STATE(1381)] = 75082, + [SMALL_STATE(1382)] = 75135, + [SMALL_STATE(1383)] = 75188, + [SMALL_STATE(1384)] = 75217, + [SMALL_STATE(1385)] = 75246, + [SMALL_STATE(1386)] = 75275, + [SMALL_STATE(1387)] = 75304, + [SMALL_STATE(1388)] = 75333, + [SMALL_STATE(1389)] = 75362, + [SMALL_STATE(1390)] = 75391, + [SMALL_STATE(1391)] = 75420, + [SMALL_STATE(1392)] = 75449, + [SMALL_STATE(1393)] = 75478, + [SMALL_STATE(1394)] = 75531, + [SMALL_STATE(1395)] = 75560, + [SMALL_STATE(1396)] = 75600, + [SMALL_STATE(1397)] = 75650, + [SMALL_STATE(1398)] = 75688, + [SMALL_STATE(1399)] = 75722, + [SMALL_STATE(1400)] = 75756, + [SMALL_STATE(1401)] = 75788, + [SMALL_STATE(1402)] = 75822, + [SMALL_STATE(1403)] = 75866, + [SMALL_STATE(1404)] = 75898, + [SMALL_STATE(1405)] = 75930, + [SMALL_STATE(1406)] = 75962, + [SMALL_STATE(1407)] = 76002, + [SMALL_STATE(1408)] = 76034, + [SMALL_STATE(1409)] = 76064, + [SMALL_STATE(1410)] = 76102, + [SMALL_STATE(1411)] = 76136, + [SMALL_STATE(1412)] = 76173, + [SMALL_STATE(1413)] = 76200, + [SMALL_STATE(1414)] = 76227, + [SMALL_STATE(1415)] = 76258, + [SMALL_STATE(1416)] = 76293, + [SMALL_STATE(1417)] = 76320, + [SMALL_STATE(1418)] = 76351, + [SMALL_STATE(1419)] = 76378, + [SMALL_STATE(1420)] = 76411, + [SMALL_STATE(1421)] = 76446, + [SMALL_STATE(1422)] = 76473, + [SMALL_STATE(1423)] = 76500, + [SMALL_STATE(1424)] = 76527, + [SMALL_STATE(1425)] = 76554, + [SMALL_STATE(1426)] = 76581, + [SMALL_STATE(1427)] = 76608, + [SMALL_STATE(1428)] = 76635, + [SMALL_STATE(1429)] = 76666, + [SMALL_STATE(1430)] = 76707, + [SMALL_STATE(1431)] = 76734, + [SMALL_STATE(1432)] = 76771, + [SMALL_STATE(1433)] = 76802, + [SMALL_STATE(1434)] = 76843, + [SMALL_STATE(1435)] = 76872, + [SMALL_STATE(1436)] = 76903, + [SMALL_STATE(1437)] = 76930, + [SMALL_STATE(1438)] = 76961, + [SMALL_STATE(1439)] = 76988, + [SMALL_STATE(1440)] = 77023, + [SMALL_STATE(1441)] = 77059, + [SMALL_STATE(1442)] = 77085, + [SMALL_STATE(1443)] = 77123, + [SMALL_STATE(1444)] = 77161, + [SMALL_STATE(1445)] = 77199, + [SMALL_STATE(1446)] = 77237, + [SMALL_STATE(1447)] = 77267, + [SMALL_STATE(1448)] = 77305, + [SMALL_STATE(1449)] = 77341, + [SMALL_STATE(1450)] = 77371, + [SMALL_STATE(1451)] = 77397, + [SMALL_STATE(1452)] = 77423, + [SMALL_STATE(1453)] = 77449, + [SMALL_STATE(1454)] = 77487, + [SMALL_STATE(1455)] = 77513, + [SMALL_STATE(1456)] = 77539, + [SMALL_STATE(1457)] = 77577, + [SMALL_STATE(1458)] = 77603, + [SMALL_STATE(1459)] = 77639, + [SMALL_STATE(1460)] = 77665, + [SMALL_STATE(1461)] = 77691, + [SMALL_STATE(1462)] = 77717, + [SMALL_STATE(1463)] = 77743, + [SMALL_STATE(1464)] = 77769, + [SMALL_STATE(1465)] = 77795, + [SMALL_STATE(1466)] = 77821, + [SMALL_STATE(1467)] = 77860, + [SMALL_STATE(1468)] = 77899, + [SMALL_STATE(1469)] = 77930, + [SMALL_STATE(1470)] = 77973, + [SMALL_STATE(1471)] = 78016, + [SMALL_STATE(1472)] = 78055, + [SMALL_STATE(1473)] = 78084, + [SMALL_STATE(1474)] = 78127, + [SMALL_STATE(1475)] = 78162, + [SMALL_STATE(1476)] = 78205, + [SMALL_STATE(1477)] = 78244, + [SMALL_STATE(1478)] = 78283, + [SMALL_STATE(1479)] = 78322, + [SMALL_STATE(1480)] = 78365, + [SMALL_STATE(1481)] = 78400, + [SMALL_STATE(1482)] = 78439, + [SMALL_STATE(1483)] = 78478, + [SMALL_STATE(1484)] = 78517, + [SMALL_STATE(1485)] = 78560, + [SMALL_STATE(1486)] = 78599, + [SMALL_STATE(1487)] = 78630, + [SMALL_STATE(1488)] = 78673, + [SMALL_STATE(1489)] = 78712, + [SMALL_STATE(1490)] = 78747, + [SMALL_STATE(1491)] = 78790, + [SMALL_STATE(1492)] = 78833, + [SMALL_STATE(1493)] = 78872, + [SMALL_STATE(1494)] = 78907, + [SMALL_STATE(1495)] = 78946, + [SMALL_STATE(1496)] = 78985, + [SMALL_STATE(1497)] = 79028, + [SMALL_STATE(1498)] = 79067, + [SMALL_STATE(1499)] = 79110, + [SMALL_STATE(1500)] = 79149, + [SMALL_STATE(1501)] = 79188, + [SMALL_STATE(1502)] = 79227, + [SMALL_STATE(1503)] = 79266, + [SMALL_STATE(1504)] = 79291, + [SMALL_STATE(1505)] = 79330, + [SMALL_STATE(1506)] = 79369, + [SMALL_STATE(1507)] = 79408, + [SMALL_STATE(1508)] = 79451, + [SMALL_STATE(1509)] = 79490, + [SMALL_STATE(1510)] = 79529, + [SMALL_STATE(1511)] = 79572, + [SMALL_STATE(1512)] = 79613, + [SMALL_STATE(1513)] = 79642, + [SMALL_STATE(1514)] = 79681, + [SMALL_STATE(1515)] = 79710, + [SMALL_STATE(1516)] = 79749, + [SMALL_STATE(1517)] = 79788, + [SMALL_STATE(1518)] = 79827, + [SMALL_STATE(1519)] = 79866, + [SMALL_STATE(1520)] = 79905, + [SMALL_STATE(1521)] = 79944, + [SMALL_STATE(1522)] = 79983, + [SMALL_STATE(1523)] = 80022, + [SMALL_STATE(1524)] = 80061, + [SMALL_STATE(1525)] = 80100, + [SMALL_STATE(1526)] = 80139, + [SMALL_STATE(1527)] = 80178, + [SMALL_STATE(1528)] = 80217, + [SMALL_STATE(1529)] = 80256, + [SMALL_STATE(1530)] = 80295, + [SMALL_STATE(1531)] = 80334, + [SMALL_STATE(1532)] = 80377, + [SMALL_STATE(1533)] = 80420, + [SMALL_STATE(1534)] = 80455, + [SMALL_STATE(1535)] = 80494, + [SMALL_STATE(1536)] = 80533, + [SMALL_STATE(1537)] = 80574, + [SMALL_STATE(1538)] = 80613, + [SMALL_STATE(1539)] = 80652, + [SMALL_STATE(1540)] = 80691, + [SMALL_STATE(1541)] = 80730, + [SMALL_STATE(1542)] = 80773, + [SMALL_STATE(1543)] = 80812, + [SMALL_STATE(1544)] = 80851, + [SMALL_STATE(1545)] = 80880, + [SMALL_STATE(1546)] = 80919, + [SMALL_STATE(1547)] = 80958, + [SMALL_STATE(1548)] = 80997, + [SMALL_STATE(1549)] = 81036, + [SMALL_STATE(1550)] = 81075, + [SMALL_STATE(1551)] = 81114, + [SMALL_STATE(1552)] = 81157, + [SMALL_STATE(1553)] = 81196, + [SMALL_STATE(1554)] = 81235, + [SMALL_STATE(1555)] = 81274, + [SMALL_STATE(1556)] = 81313, + [SMALL_STATE(1557)] = 81352, + [SMALL_STATE(1558)] = 81391, + [SMALL_STATE(1559)] = 81434, + [SMALL_STATE(1560)] = 81475, + [SMALL_STATE(1561)] = 81514, + [SMALL_STATE(1562)] = 81553, + [SMALL_STATE(1563)] = 81592, + [SMALL_STATE(1564)] = 81631, + [SMALL_STATE(1565)] = 81670, + [SMALL_STATE(1566)] = 81709, + [SMALL_STATE(1567)] = 81752, + [SMALL_STATE(1568)] = 81787, + [SMALL_STATE(1569)] = 81826, + [SMALL_STATE(1570)] = 81857, + [SMALL_STATE(1571)] = 81896, + [SMALL_STATE(1572)] = 81927, + [SMALL_STATE(1573)] = 81966, + [SMALL_STATE(1574)] = 82005, + [SMALL_STATE(1575)] = 82044, + [SMALL_STATE(1576)] = 82087, + [SMALL_STATE(1577)] = 82126, + [SMALL_STATE(1578)] = 82169, + [SMALL_STATE(1579)] = 82193, + [SMALL_STATE(1580)] = 82217, + [SMALL_STATE(1581)] = 82245, + [SMALL_STATE(1582)] = 82283, + [SMALL_STATE(1583)] = 82307, + [SMALL_STATE(1584)] = 82331, + [SMALL_STATE(1585)] = 82369, + [SMALL_STATE(1586)] = 82393, + [SMALL_STATE(1587)] = 82431, + [SMALL_STATE(1588)] = 82459, + [SMALL_STATE(1589)] = 82497, + [SMALL_STATE(1590)] = 82521, + [SMALL_STATE(1591)] = 82559, + [SMALL_STATE(1592)] = 82583, + [SMALL_STATE(1593)] = 82607, + [SMALL_STATE(1594)] = 82645, + [SMALL_STATE(1595)] = 82683, + [SMALL_STATE(1596)] = 82721, + [SMALL_STATE(1597)] = 82745, + [SMALL_STATE(1598)] = 82769, + [SMALL_STATE(1599)] = 82807, + [SMALL_STATE(1600)] = 82845, + [SMALL_STATE(1601)] = 82883, + [SMALL_STATE(1602)] = 82907, + [SMALL_STATE(1603)] = 82945, + [SMALL_STATE(1604)] = 82983, + [SMALL_STATE(1605)] = 83021, + [SMALL_STATE(1606)] = 83045, + [SMALL_STATE(1607)] = 83069, + [SMALL_STATE(1608)] = 83093, + [SMALL_STATE(1609)] = 83117, + [SMALL_STATE(1610)] = 83149, + [SMALL_STATE(1611)] = 83173, + [SMALL_STATE(1612)] = 83197, + [SMALL_STATE(1613)] = 83221, + [SMALL_STATE(1614)] = 83245, + [SMALL_STATE(1615)] = 83283, + [SMALL_STATE(1616)] = 83321, + [SMALL_STATE(1617)] = 83345, + [SMALL_STATE(1618)] = 83369, + [SMALL_STATE(1619)] = 83393, + [SMALL_STATE(1620)] = 83417, + [SMALL_STATE(1621)] = 83441, + [SMALL_STATE(1622)] = 83465, + [SMALL_STATE(1623)] = 83489, + [SMALL_STATE(1624)] = 83513, + [SMALL_STATE(1625)] = 83537, + [SMALL_STATE(1626)] = 83561, + [SMALL_STATE(1627)] = 83585, + [SMALL_STATE(1628)] = 83609, + [SMALL_STATE(1629)] = 83633, + [SMALL_STATE(1630)] = 83657, + [SMALL_STATE(1631)] = 83681, + [SMALL_STATE(1632)] = 83705, + [SMALL_STATE(1633)] = 83729, + [SMALL_STATE(1634)] = 83753, + [SMALL_STATE(1635)] = 83777, + [SMALL_STATE(1636)] = 83801, + [SMALL_STATE(1637)] = 83825, + [SMALL_STATE(1638)] = 83849, + [SMALL_STATE(1639)] = 83887, + [SMALL_STATE(1640)] = 83911, + [SMALL_STATE(1641)] = 83935, + [SMALL_STATE(1642)] = 83973, + [SMALL_STATE(1643)] = 83997, + [SMALL_STATE(1644)] = 84035, + [SMALL_STATE(1645)] = 84073, + [SMALL_STATE(1646)] = 84097, + [SMALL_STATE(1647)] = 84121, + [SMALL_STATE(1648)] = 84145, + [SMALL_STATE(1649)] = 84169, + [SMALL_STATE(1650)] = 84193, + [SMALL_STATE(1651)] = 84231, + [SMALL_STATE(1652)] = 84255, + [SMALL_STATE(1653)] = 84279, + [SMALL_STATE(1654)] = 84303, + [SMALL_STATE(1655)] = 84327, + [SMALL_STATE(1656)] = 84351, + [SMALL_STATE(1657)] = 84375, + [SMALL_STATE(1658)] = 84399, + [SMALL_STATE(1659)] = 84423, + [SMALL_STATE(1660)] = 84447, + [SMALL_STATE(1661)] = 84471, + [SMALL_STATE(1662)] = 84495, + [SMALL_STATE(1663)] = 84519, + [SMALL_STATE(1664)] = 84543, + [SMALL_STATE(1665)] = 84581, + [SMALL_STATE(1666)] = 84605, + [SMALL_STATE(1667)] = 84629, + [SMALL_STATE(1668)] = 84653, + [SMALL_STATE(1669)] = 84691, + [SMALL_STATE(1670)] = 84719, + [SMALL_STATE(1671)] = 84757, + [SMALL_STATE(1672)] = 84781, + [SMALL_STATE(1673)] = 84805, + [SMALL_STATE(1674)] = 84843, + [SMALL_STATE(1675)] = 84881, + [SMALL_STATE(1676)] = 84919, + [SMALL_STATE(1677)] = 84957, + [SMALL_STATE(1678)] = 84995, + [SMALL_STATE(1679)] = 85033, + [SMALL_STATE(1680)] = 85071, + [SMALL_STATE(1681)] = 85109, + [SMALL_STATE(1682)] = 85147, + [SMALL_STATE(1683)] = 85170, + [SMALL_STATE(1684)] = 85193, + [SMALL_STATE(1685)] = 85216, + [SMALL_STATE(1686)] = 85239, + [SMALL_STATE(1687)] = 85262, + [SMALL_STATE(1688)] = 85285, + [SMALL_STATE(1689)] = 85308, + [SMALL_STATE(1690)] = 85331, + [SMALL_STATE(1691)] = 85354, + [SMALL_STATE(1692)] = 85377, + [SMALL_STATE(1693)] = 85400, + [SMALL_STATE(1694)] = 85423, + [SMALL_STATE(1695)] = 85446, + [SMALL_STATE(1696)] = 85483, + [SMALL_STATE(1697)] = 85520, + [SMALL_STATE(1698)] = 85563, + [SMALL_STATE(1699)] = 85592, + [SMALL_STATE(1700)] = 85621, + [SMALL_STATE(1701)] = 85658, + [SMALL_STATE(1702)] = 85681, + [SMALL_STATE(1703)] = 85709, + [SMALL_STATE(1704)] = 85737, + [SMALL_STATE(1705)] = 85765, + [SMALL_STATE(1706)] = 85793, + [SMALL_STATE(1707)] = 85821, + [SMALL_STATE(1708)] = 85849, + [SMALL_STATE(1709)] = 85877, + [SMALL_STATE(1710)] = 85905, + [SMALL_STATE(1711)] = 85933, + [SMALL_STATE(1712)] = 85961, + [SMALL_STATE(1713)] = 85989, + [SMALL_STATE(1714)] = 86017, + [SMALL_STATE(1715)] = 86045, + [SMALL_STATE(1716)] = 86073, + [SMALL_STATE(1717)] = 86101, + [SMALL_STATE(1718)] = 86129, + [SMALL_STATE(1719)] = 86157, + [SMALL_STATE(1720)] = 86185, + [SMALL_STATE(1721)] = 86213, + [SMALL_STATE(1722)] = 86241, + [SMALL_STATE(1723)] = 86269, + [SMALL_STATE(1724)] = 86297, + [SMALL_STATE(1725)] = 86325, + [SMALL_STATE(1726)] = 86353, + [SMALL_STATE(1727)] = 86375, + [SMALL_STATE(1728)] = 86403, + [SMALL_STATE(1729)] = 86431, + [SMALL_STATE(1730)] = 86459, + [SMALL_STATE(1731)] = 86481, + [SMALL_STATE(1732)] = 86509, + [SMALL_STATE(1733)] = 86537, + [SMALL_STATE(1734)] = 86565, + [SMALL_STATE(1735)] = 86593, + [SMALL_STATE(1736)] = 86621, + [SMALL_STATE(1737)] = 86649, + [SMALL_STATE(1738)] = 86677, + [SMALL_STATE(1739)] = 86705, + [SMALL_STATE(1740)] = 86733, + [SMALL_STATE(1741)] = 86761, + [SMALL_STATE(1742)] = 86789, + [SMALL_STATE(1743)] = 86817, + [SMALL_STATE(1744)] = 86845, + [SMALL_STATE(1745)] = 86871, + [SMALL_STATE(1746)] = 86899, + [SMALL_STATE(1747)] = 86927, + [SMALL_STATE(1748)] = 86955, + [SMALL_STATE(1749)] = 86983, + [SMALL_STATE(1750)] = 87011, + [SMALL_STATE(1751)] = 87039, + [SMALL_STATE(1752)] = 87067, + [SMALL_STATE(1753)] = 87095, + [SMALL_STATE(1754)] = 87123, + [SMALL_STATE(1755)] = 87151, + [SMALL_STATE(1756)] = 87179, + [SMALL_STATE(1757)] = 87207, + [SMALL_STATE(1758)] = 87235, + [SMALL_STATE(1759)] = 87263, + [SMALL_STATE(1760)] = 87291, + [SMALL_STATE(1761)] = 87319, + [SMALL_STATE(1762)] = 87347, + [SMALL_STATE(1763)] = 87375, + [SMALL_STATE(1764)] = 87403, + [SMALL_STATE(1765)] = 87431, + [SMALL_STATE(1766)] = 87459, + [SMALL_STATE(1767)] = 87487, + [SMALL_STATE(1768)] = 87515, + [SMALL_STATE(1769)] = 87543, + [SMALL_STATE(1770)] = 87572, + [SMALL_STATE(1771)] = 87601, + [SMALL_STATE(1772)] = 87630, + [SMALL_STATE(1773)] = 87659, + [SMALL_STATE(1774)] = 87688, + [SMALL_STATE(1775)] = 87717, + [SMALL_STATE(1776)] = 87746, + [SMALL_STATE(1777)] = 87775, + [SMALL_STATE(1778)] = 87804, + [SMALL_STATE(1779)] = 87833, + [SMALL_STATE(1780)] = 87862, + [SMALL_STATE(1781)] = 87891, + [SMALL_STATE(1782)] = 87916, + [SMALL_STATE(1783)] = 87945, + [SMALL_STATE(1784)] = 87974, + [SMALL_STATE(1785)] = 88003, + [SMALL_STATE(1786)] = 88032, + [SMALL_STATE(1787)] = 88061, + [SMALL_STATE(1788)] = 88094, + [SMALL_STATE(1789)] = 88119, + [SMALL_STATE(1790)] = 88148, + [SMALL_STATE(1791)] = 88177, + [SMALL_STATE(1792)] = 88202, + [SMALL_STATE(1793)] = 88231, + [SMALL_STATE(1794)] = 88260, + [SMALL_STATE(1795)] = 88289, + [SMALL_STATE(1796)] = 88318, + [SMALL_STATE(1797)] = 88347, + [SMALL_STATE(1798)] = 88376, + [SMALL_STATE(1799)] = 88405, + [SMALL_STATE(1800)] = 88434, + [SMALL_STATE(1801)] = 88463, + [SMALL_STATE(1802)] = 88492, + [SMALL_STATE(1803)] = 88521, + [SMALL_STATE(1804)] = 88550, + [SMALL_STATE(1805)] = 88579, + [SMALL_STATE(1806)] = 88608, + [SMALL_STATE(1807)] = 88642, + [SMALL_STATE(1808)] = 88664, + [SMALL_STATE(1809)] = 88690, + [SMALL_STATE(1810)] = 88712, + [SMALL_STATE(1811)] = 88734, + [SMALL_STATE(1812)] = 88768, + [SMALL_STATE(1813)] = 88790, + [SMALL_STATE(1814)] = 88824, + [SMALL_STATE(1815)] = 88846, + [SMALL_STATE(1816)] = 88880, + [SMALL_STATE(1817)] = 88902, + [SMALL_STATE(1818)] = 88936, + [SMALL_STATE(1819)] = 88958, + [SMALL_STATE(1820)] = 88980, + [SMALL_STATE(1821)] = 89002, + [SMALL_STATE(1822)] = 89036, + [SMALL_STATE(1823)] = 89070, + [SMALL_STATE(1824)] = 89104, + [SMALL_STATE(1825)] = 89126, + [SMALL_STATE(1826)] = 89160, + [SMALL_STATE(1827)] = 89186, + [SMALL_STATE(1828)] = 89220, + [SMALL_STATE(1829)] = 89242, + [SMALL_STATE(1830)] = 89264, + [SMALL_STATE(1831)] = 89298, + [SMALL_STATE(1832)] = 89324, + [SMALL_STATE(1833)] = 89358, + [SMALL_STATE(1834)] = 89392, + [SMALL_STATE(1835)] = 89414, + [SMALL_STATE(1836)] = 89448, + [SMALL_STATE(1837)] = 89482, + [SMALL_STATE(1838)] = 89504, + [SMALL_STATE(1839)] = 89538, + [SMALL_STATE(1840)] = 89572, + [SMALL_STATE(1841)] = 89594, + [SMALL_STATE(1842)] = 89628, + [SMALL_STATE(1843)] = 89650, + [SMALL_STATE(1844)] = 89684, + [SMALL_STATE(1845)] = 89718, + [SMALL_STATE(1846)] = 89752, + [SMALL_STATE(1847)] = 89786, + [SMALL_STATE(1848)] = 89812, + [SMALL_STATE(1849)] = 89846, + [SMALL_STATE(1850)] = 89880, + [SMALL_STATE(1851)] = 89914, + [SMALL_STATE(1852)] = 89948, + [SMALL_STATE(1853)] = 89970, + [SMALL_STATE(1854)] = 89992, + [SMALL_STATE(1855)] = 90026, + [SMALL_STATE(1856)] = 90060, + [SMALL_STATE(1857)] = 90080, + [SMALL_STATE(1858)] = 90114, + [SMALL_STATE(1859)] = 90148, + [SMALL_STATE(1860)] = 90170, + [SMALL_STATE(1861)] = 90204, + [SMALL_STATE(1862)] = 90238, + [SMALL_STATE(1863)] = 90272, + [SMALL_STATE(1864)] = 90306, + [SMALL_STATE(1865)] = 90340, + [SMALL_STATE(1866)] = 90362, + [SMALL_STATE(1867)] = 90384, + [SMALL_STATE(1868)] = 90418, + [SMALL_STATE(1869)] = 90452, + [SMALL_STATE(1870)] = 90474, + [SMALL_STATE(1871)] = 90496, + [SMALL_STATE(1872)] = 90530, + [SMALL_STATE(1873)] = 90556, + [SMALL_STATE(1874)] = 90578, + [SMALL_STATE(1875)] = 90612, + [SMALL_STATE(1876)] = 90646, + [SMALL_STATE(1877)] = 90668, + [SMALL_STATE(1878)] = 90694, + [SMALL_STATE(1879)] = 90728, + [SMALL_STATE(1880)] = 90750, + [SMALL_STATE(1881)] = 90784, + [SMALL_STATE(1882)] = 90818, + [SMALL_STATE(1883)] = 90840, + [SMALL_STATE(1884)] = 90874, + [SMALL_STATE(1885)] = 90908, + [SMALL_STATE(1886)] = 90942, + [SMALL_STATE(1887)] = 90964, + [SMALL_STATE(1888)] = 90990, + [SMALL_STATE(1889)] = 91012, + [SMALL_STATE(1890)] = 91046, + [SMALL_STATE(1891)] = 91080, + [SMALL_STATE(1892)] = 91102, + [SMALL_STATE(1893)] = 91124, + [SMALL_STATE(1894)] = 91158, + [SMALL_STATE(1895)] = 91180, + [SMALL_STATE(1896)] = 91202, + [SMALL_STATE(1897)] = 91236, + [SMALL_STATE(1898)] = 91270, + [SMALL_STATE(1899)] = 91304, + [SMALL_STATE(1900)] = 91326, + [SMALL_STATE(1901)] = 91360, + [SMALL_STATE(1902)] = 91382, + [SMALL_STATE(1903)] = 91404, + [SMALL_STATE(1904)] = 91438, + [SMALL_STATE(1905)] = 91460, + [SMALL_STATE(1906)] = 91482, + [SMALL_STATE(1907)] = 91516, + [SMALL_STATE(1908)] = 91550, + [SMALL_STATE(1909)] = 91584, + [SMALL_STATE(1910)] = 91618, + [SMALL_STATE(1911)] = 91652, + [SMALL_STATE(1912)] = 91686, + [SMALL_STATE(1913)] = 91708, + [SMALL_STATE(1914)] = 91742, + [SMALL_STATE(1915)] = 91776, + [SMALL_STATE(1916)] = 91810, + [SMALL_STATE(1917)] = 91832, + [SMALL_STATE(1918)] = 91854, + [SMALL_STATE(1919)] = 91876, + [SMALL_STATE(1920)] = 91910, + [SMALL_STATE(1921)] = 91932, + [SMALL_STATE(1922)] = 91966, + [SMALL_STATE(1923)] = 91985, + [SMALL_STATE(1924)] = 92004, + [SMALL_STATE(1925)] = 92023, + [SMALL_STATE(1926)] = 92042, + [SMALL_STATE(1927)] = 92061, + [SMALL_STATE(1928)] = 92080, + [SMALL_STATE(1929)] = 92099, + [SMALL_STATE(1930)] = 92118, + [SMALL_STATE(1931)] = 92137, + [SMALL_STATE(1932)] = 92156, + [SMALL_STATE(1933)] = 92175, + [SMALL_STATE(1934)] = 92194, + [SMALL_STATE(1935)] = 92213, + [SMALL_STATE(1936)] = 92233, + [SMALL_STATE(1937)] = 92253, + [SMALL_STATE(1938)] = 92273, + [SMALL_STATE(1939)] = 92293, + [SMALL_STATE(1940)] = 92313, + [SMALL_STATE(1941)] = 92333, + [SMALL_STATE(1942)] = 92353, + [SMALL_STATE(1943)] = 92381, + [SMALL_STATE(1944)] = 92401, + [SMALL_STATE(1945)] = 92429, + [SMALL_STATE(1946)] = 92457, + [SMALL_STATE(1947)] = 92477, + [SMALL_STATE(1948)] = 92497, + [SMALL_STATE(1949)] = 92517, + [SMALL_STATE(1950)] = 92537, + [SMALL_STATE(1951)] = 92557, + [SMALL_STATE(1952)] = 92577, + [SMALL_STATE(1953)] = 92597, + [SMALL_STATE(1954)] = 92613, + [SMALL_STATE(1955)] = 92640, + [SMALL_STATE(1956)] = 92665, + [SMALL_STATE(1957)] = 92692, + [SMALL_STATE(1958)] = 92719, + [SMALL_STATE(1959)] = 92735, + [SMALL_STATE(1960)] = 92761, + [SMALL_STATE(1961)] = 92777, + [SMALL_STATE(1962)] = 92793, + [SMALL_STATE(1963)] = 92815, + [SMALL_STATE(1964)] = 92831, + [SMALL_STATE(1965)] = 92847, + [SMALL_STATE(1966)] = 92863, + [SMALL_STATE(1967)] = 92879, + [SMALL_STATE(1968)] = 92895, + [SMALL_STATE(1969)] = 92917, + [SMALL_STATE(1970)] = 92933, + [SMALL_STATE(1971)] = 92949, + [SMALL_STATE(1972)] = 92975, + [SMALL_STATE(1973)] = 93001, + [SMALL_STATE(1974)] = 93017, + [SMALL_STATE(1975)] = 93032, + [SMALL_STATE(1976)] = 93047, + [SMALL_STATE(1977)] = 93062, + [SMALL_STATE(1978)] = 93077, + [SMALL_STATE(1979)] = 93092, + [SMALL_STATE(1980)] = 93107, + [SMALL_STATE(1981)] = 93120, + [SMALL_STATE(1982)] = 93135, + [SMALL_STATE(1983)] = 93150, + [SMALL_STATE(1984)] = 93163, + [SMALL_STATE(1985)] = 93178, + [SMALL_STATE(1986)] = 93193, + [SMALL_STATE(1987)] = 93208, + [SMALL_STATE(1988)] = 93223, + [SMALL_STATE(1989)] = 93238, + [SMALL_STATE(1990)] = 93253, + [SMALL_STATE(1991)] = 93271, + [SMALL_STATE(1992)] = 93291, + [SMALL_STATE(1993)] = 93311, + [SMALL_STATE(1994)] = 93329, + [SMALL_STATE(1995)] = 93343, + [SMALL_STATE(1996)] = 93363, + [SMALL_STATE(1997)] = 93381, + [SMALL_STATE(1998)] = 93401, + [SMALL_STATE(1999)] = 93421, + [SMALL_STATE(2000)] = 93439, + [SMALL_STATE(2001)] = 93453, + [SMALL_STATE(2002)] = 93467, + [SMALL_STATE(2003)] = 93481, + [SMALL_STATE(2004)] = 93501, + [SMALL_STATE(2005)] = 93521, + [SMALL_STATE(2006)] = 93535, + [SMALL_STATE(2007)] = 93549, + [SMALL_STATE(2008)] = 93563, + [SMALL_STATE(2009)] = 93577, + [SMALL_STATE(2010)] = 93595, + [SMALL_STATE(2011)] = 93609, + [SMALL_STATE(2012)] = 93623, + [SMALL_STATE(2013)] = 93641, + [SMALL_STATE(2014)] = 93661, + [SMALL_STATE(2015)] = 93681, + [SMALL_STATE(2016)] = 93701, + [SMALL_STATE(2017)] = 93715, + [SMALL_STATE(2018)] = 93729, + [SMALL_STATE(2019)] = 93746, + [SMALL_STATE(2020)] = 93763, + [SMALL_STATE(2021)] = 93774, + [SMALL_STATE(2022)] = 93785, + [SMALL_STATE(2023)] = 93796, + [SMALL_STATE(2024)] = 93807, + [SMALL_STATE(2025)] = 93826, + [SMALL_STATE(2026)] = 93845, + [SMALL_STATE(2027)] = 93864, + [SMALL_STATE(2028)] = 93881, + [SMALL_STATE(2029)] = 93898, + [SMALL_STATE(2030)] = 93915, + [SMALL_STATE(2031)] = 93934, + [SMALL_STATE(2032)] = 93951, + [SMALL_STATE(2033)] = 93970, + [SMALL_STATE(2034)] = 93987, + [SMALL_STATE(2035)] = 94004, + [SMALL_STATE(2036)] = 94023, + [SMALL_STATE(2037)] = 94042, + [SMALL_STATE(2038)] = 94057, + [SMALL_STATE(2039)] = 94076, + [SMALL_STATE(2040)] = 94095, + [SMALL_STATE(2041)] = 94114, + [SMALL_STATE(2042)] = 94133, + [SMALL_STATE(2043)] = 94150, + [SMALL_STATE(2044)] = 94167, + [SMALL_STATE(2045)] = 94184, + [SMALL_STATE(2046)] = 94203, + [SMALL_STATE(2047)] = 94222, + [SMALL_STATE(2048)] = 94241, + [SMALL_STATE(2049)] = 94260, + [SMALL_STATE(2050)] = 94277, + [SMALL_STATE(2051)] = 94294, + [SMALL_STATE(2052)] = 94305, + [SMALL_STATE(2053)] = 94316, + [SMALL_STATE(2054)] = 94327, + [SMALL_STATE(2055)] = 94338, + [SMALL_STATE(2056)] = 94355, + [SMALL_STATE(2057)] = 94372, + [SMALL_STATE(2058)] = 94389, + [SMALL_STATE(2059)] = 94408, + [SMALL_STATE(2060)] = 94419, + [SMALL_STATE(2061)] = 94438, + [SMALL_STATE(2062)] = 94457, + [SMALL_STATE(2063)] = 94474, + [SMALL_STATE(2064)] = 94491, + [SMALL_STATE(2065)] = 94502, + [SMALL_STATE(2066)] = 94517, + [SMALL_STATE(2067)] = 94532, + [SMALL_STATE(2068)] = 94543, + [SMALL_STATE(2069)] = 94560, + [SMALL_STATE(2070)] = 94570, + [SMALL_STATE(2071)] = 94580, + [SMALL_STATE(2072)] = 94594, + [SMALL_STATE(2073)] = 94608, + [SMALL_STATE(2074)] = 94622, + [SMALL_STATE(2075)] = 94632, + [SMALL_STATE(2076)] = 94645, + [SMALL_STATE(2077)] = 94654, + [SMALL_STATE(2078)] = 94665, + [SMALL_STATE(2079)] = 94678, + [SMALL_STATE(2080)] = 94687, + [SMALL_STATE(2081)] = 94696, + [SMALL_STATE(2082)] = 94707, + [SMALL_STATE(2083)] = 94716, + [SMALL_STATE(2084)] = 94729, + [SMALL_STATE(2085)] = 94738, + [SMALL_STATE(2086)] = 94751, + [SMALL_STATE(2087)] = 94760, + [SMALL_STATE(2088)] = 94773, + [SMALL_STATE(2089)] = 94786, + [SMALL_STATE(2090)] = 94795, + [SMALL_STATE(2091)] = 94804, + [SMALL_STATE(2092)] = 94813, + [SMALL_STATE(2093)] = 94826, + [SMALL_STATE(2094)] = 94839, + [SMALL_STATE(2095)] = 94852, + [SMALL_STATE(2096)] = 94865, + [SMALL_STATE(2097)] = 94874, + [SMALL_STATE(2098)] = 94887, + [SMALL_STATE(2099)] = 94900, + [SMALL_STATE(2100)] = 94913, + [SMALL_STATE(2101)] = 94923, + [SMALL_STATE(2102)] = 94933, + [SMALL_STATE(2103)] = 94941, + [SMALL_STATE(2104)] = 94949, + [SMALL_STATE(2105)] = 94959, + [SMALL_STATE(2106)] = 94969, + [SMALL_STATE(2107)] = 94979, + [SMALL_STATE(2108)] = 94989, + [SMALL_STATE(2109)] = 94999, + [SMALL_STATE(2110)] = 95009, + [SMALL_STATE(2111)] = 95019, + [SMALL_STATE(2112)] = 95027, + [SMALL_STATE(2113)] = 95037, + [SMALL_STATE(2114)] = 95047, + [SMALL_STATE(2115)] = 95057, + [SMALL_STATE(2116)] = 95067, + [SMALL_STATE(2117)] = 95077, + [SMALL_STATE(2118)] = 95087, + [SMALL_STATE(2119)] = 95097, + [SMALL_STATE(2120)] = 95107, + [SMALL_STATE(2121)] = 95117, + [SMALL_STATE(2122)] = 95127, + [SMALL_STATE(2123)] = 95137, + [SMALL_STATE(2124)] = 95147, + [SMALL_STATE(2125)] = 95157, + [SMALL_STATE(2126)] = 95167, + [SMALL_STATE(2127)] = 95177, + [SMALL_STATE(2128)] = 95187, + [SMALL_STATE(2129)] = 95194, + [SMALL_STATE(2130)] = 95201, + [SMALL_STATE(2131)] = 95208, + [SMALL_STATE(2132)] = 95215, + [SMALL_STATE(2133)] = 95222, + [SMALL_STATE(2134)] = 95229, + [SMALL_STATE(2135)] = 95236, + [SMALL_STATE(2136)] = 95243, + [SMALL_STATE(2137)] = 95250, + [SMALL_STATE(2138)] = 95257, + [SMALL_STATE(2139)] = 95264, + [SMALL_STATE(2140)] = 95271, + [SMALL_STATE(2141)] = 95278, + [SMALL_STATE(2142)] = 95285, + [SMALL_STATE(2143)] = 95292, + [SMALL_STATE(2144)] = 95299, + [SMALL_STATE(2145)] = 95306, + [SMALL_STATE(2146)] = 95313, + [SMALL_STATE(2147)] = 95320, + [SMALL_STATE(2148)] = 95327, + [SMALL_STATE(2149)] = 95334, + [SMALL_STATE(2150)] = 95341, + [SMALL_STATE(2151)] = 95348, + [SMALL_STATE(2152)] = 95355, + [SMALL_STATE(2153)] = 95362, + [SMALL_STATE(2154)] = 95369, + [SMALL_STATE(2155)] = 95376, + [SMALL_STATE(2156)] = 95383, + [SMALL_STATE(2157)] = 95390, + [SMALL_STATE(2158)] = 95397, + [SMALL_STATE(2159)] = 95404, + [SMALL_STATE(2160)] = 95411, + [SMALL_STATE(2161)] = 95418, + [SMALL_STATE(2162)] = 95425, + [SMALL_STATE(2163)] = 95432, + [SMALL_STATE(2164)] = 95439, + [SMALL_STATE(2165)] = 95446, + [SMALL_STATE(2166)] = 95453, + [SMALL_STATE(2167)] = 95460, + [SMALL_STATE(2168)] = 95467, + [SMALL_STATE(2169)] = 95474, + [SMALL_STATE(2170)] = 95481, + [SMALL_STATE(2171)] = 95488, + [SMALL_STATE(2172)] = 95495, + [SMALL_STATE(2173)] = 95502, + [SMALL_STATE(2174)] = 95509, + [SMALL_STATE(2175)] = 95516, + [SMALL_STATE(2176)] = 95523, + [SMALL_STATE(2177)] = 95530, + [SMALL_STATE(2178)] = 95537, + [SMALL_STATE(2179)] = 95544, + [SMALL_STATE(2180)] = 95551, + [SMALL_STATE(2181)] = 95558, + [SMALL_STATE(2182)] = 95565, + [SMALL_STATE(2183)] = 95572, + [SMALL_STATE(2184)] = 95579, + [SMALL_STATE(2185)] = 95586, + [SMALL_STATE(2186)] = 95593, + [SMALL_STATE(2187)] = 95600, + [SMALL_STATE(2188)] = 95607, + [SMALL_STATE(2189)] = 95614, + [SMALL_STATE(2190)] = 95621, + [SMALL_STATE(2191)] = 95628, + [SMALL_STATE(2192)] = 95635, + [SMALL_STATE(2193)] = 95642, + [SMALL_STATE(2194)] = 95649, + [SMALL_STATE(2195)] = 95656, + [SMALL_STATE(2196)] = 95663, + [SMALL_STATE(2197)] = 95670, + [SMALL_STATE(2198)] = 95677, + [SMALL_STATE(2199)] = 95684, + [SMALL_STATE(2200)] = 95691, + [SMALL_STATE(2201)] = 95698, + [SMALL_STATE(2202)] = 95705, + [SMALL_STATE(2203)] = 95712, + [SMALL_STATE(2204)] = 95719, + [SMALL_STATE(2205)] = 95726, + [SMALL_STATE(2206)] = 95733, + [SMALL_STATE(2207)] = 95740, + [SMALL_STATE(2208)] = 95747, + [SMALL_STATE(2209)] = 95754, + [SMALL_STATE(2210)] = 95761, + [SMALL_STATE(2211)] = 95768, + [SMALL_STATE(2212)] = 95775, + [SMALL_STATE(2213)] = 95782, + [SMALL_STATE(2214)] = 95789, + [SMALL_STATE(2215)] = 95796, + [SMALL_STATE(2216)] = 95803, + [SMALL_STATE(2217)] = 95810, + [SMALL_STATE(2218)] = 95817, + [SMALL_STATE(2219)] = 95824, + [SMALL_STATE(2220)] = 95831, + [SMALL_STATE(2221)] = 95838, + [SMALL_STATE(2222)] = 95845, + [SMALL_STATE(2223)] = 95852, + [SMALL_STATE(2224)] = 95859, + [SMALL_STATE(2225)] = 95866, + [SMALL_STATE(2226)] = 95873, + [SMALL_STATE(2227)] = 95880, + [SMALL_STATE(2228)] = 95887, + [SMALL_STATE(2229)] = 95894, + [SMALL_STATE(2230)] = 95901, + [SMALL_STATE(2231)] = 95908, + [SMALL_STATE(2232)] = 95915, + [SMALL_STATE(2233)] = 95922, + [SMALL_STATE(2234)] = 95929, + [SMALL_STATE(2235)] = 95936, + [SMALL_STATE(2236)] = 95943, + [SMALL_STATE(2237)] = 95950, + [SMALL_STATE(2238)] = 95957, + [SMALL_STATE(2239)] = 95964, + [SMALL_STATE(2240)] = 95971, + [SMALL_STATE(2241)] = 95978, + [SMALL_STATE(2242)] = 95985, + [SMALL_STATE(2243)] = 95992, + [SMALL_STATE(2244)] = 95999, + [SMALL_STATE(2245)] = 96006, + [SMALL_STATE(2246)] = 96013, + [SMALL_STATE(2247)] = 96020, + [SMALL_STATE(2248)] = 96027, + [SMALL_STATE(2249)] = 96034, + [SMALL_STATE(2250)] = 96041, + [SMALL_STATE(2251)] = 96048, + [SMALL_STATE(2252)] = 96055, + [SMALL_STATE(2253)] = 96062, + [SMALL_STATE(2254)] = 96069, + [SMALL_STATE(2255)] = 96076, + [SMALL_STATE(2256)] = 96083, + [SMALL_STATE(2257)] = 96090, + [SMALL_STATE(2258)] = 96097, + [SMALL_STATE(2259)] = 96104, + [SMALL_STATE(2260)] = 96111, + [SMALL_STATE(2261)] = 96118, + [SMALL_STATE(2262)] = 96125, + [SMALL_STATE(2263)] = 96132, + [SMALL_STATE(2264)] = 96139, + [SMALL_STATE(2265)] = 96146, + [SMALL_STATE(2266)] = 96153, + [SMALL_STATE(2267)] = 96160, + [SMALL_STATE(2268)] = 96167, + [SMALL_STATE(2269)] = 96174, + [SMALL_STATE(2270)] = 96181, + [SMALL_STATE(2271)] = 96188, + [SMALL_STATE(2272)] = 96195, + [SMALL_STATE(2273)] = 96202, + [SMALL_STATE(2274)] = 96209, + [SMALL_STATE(2275)] = 96216, + [SMALL_STATE(2276)] = 96223, + [SMALL_STATE(2277)] = 96230, + [SMALL_STATE(2278)] = 96237, + [SMALL_STATE(2279)] = 96244, + [SMALL_STATE(2280)] = 96251, + [SMALL_STATE(2281)] = 96258, + [SMALL_STATE(2282)] = 96265, + [SMALL_STATE(2283)] = 96272, + [SMALL_STATE(2284)] = 96279, + [SMALL_STATE(2285)] = 96286, + [SMALL_STATE(2286)] = 96293, + [SMALL_STATE(2287)] = 96300, + [SMALL_STATE(2288)] = 96307, + [SMALL_STATE(2289)] = 96314, + [SMALL_STATE(2290)] = 96321, + [SMALL_STATE(2291)] = 96328, + [SMALL_STATE(2292)] = 96335, + [SMALL_STATE(2293)] = 96342, + [SMALL_STATE(2294)] = 96349, + [SMALL_STATE(2295)] = 96356, + [SMALL_STATE(2296)] = 96363, + [SMALL_STATE(2297)] = 96370, + [SMALL_STATE(2298)] = 96377, + [SMALL_STATE(2299)] = 96384, + [SMALL_STATE(2300)] = 96391, + [SMALL_STATE(2301)] = 96398, + [SMALL_STATE(2302)] = 96405, + [SMALL_STATE(2303)] = 96412, + [SMALL_STATE(2304)] = 96419, + [SMALL_STATE(2305)] = 96426, + [SMALL_STATE(2306)] = 96433, + [SMALL_STATE(2307)] = 96440, + [SMALL_STATE(2308)] = 96447, + [SMALL_STATE(2309)] = 96454, + [SMALL_STATE(2310)] = 96461, + [SMALL_STATE(2311)] = 96468, + [SMALL_STATE(2312)] = 96475, + [SMALL_STATE(2313)] = 96482, + [SMALL_STATE(2314)] = 96489, + [SMALL_STATE(2315)] = 96496, + [SMALL_STATE(2316)] = 96503, + [SMALL_STATE(2317)] = 96510, + [SMALL_STATE(2318)] = 96517, + [SMALL_STATE(2319)] = 96524, + [SMALL_STATE(2320)] = 96531, + [SMALL_STATE(2321)] = 96538, + [SMALL_STATE(2322)] = 96545, + [SMALL_STATE(2323)] = 96552, + [SMALL_STATE(2324)] = 96559, + [SMALL_STATE(2325)] = 96566, + [SMALL_STATE(2326)] = 96573, + [SMALL_STATE(2327)] = 96580, + [SMALL_STATE(2328)] = 96587, + [SMALL_STATE(2329)] = 96594, + [SMALL_STATE(2330)] = 96601, + [SMALL_STATE(2331)] = 96608, + [SMALL_STATE(2332)] = 96615, + [SMALL_STATE(2333)] = 96622, + [SMALL_STATE(2334)] = 96629, + [SMALL_STATE(2335)] = 96636, + [SMALL_STATE(2336)] = 96643, + [SMALL_STATE(2337)] = 96650, + [SMALL_STATE(2338)] = 96657, + [SMALL_STATE(2339)] = 96664, +}; + +static const TSParseActionEntry ts_parse_actions[] = { + [0] = {.entry = {.count = 0, .reusable = false}}, + [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), + [3] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(), + [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_program, 0, 0, 0), + [7] = {.entry = {.count = 1, .reusable = false}}, SHIFT(292), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2338), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(139), + [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(127), + [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1700), + [17] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(126), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(417), + [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1581), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(221), + [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(894), + [29] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1809), + [31] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1815), + [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(291), + [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1796), + [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(123), + [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(107), + [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1943), + [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2339), + [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(419), + [47] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1617), + [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(128), + [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(46), + [53] = {.entry = {.count = 1, .reusable = false}}, SHIFT(366), + [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1680), + [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(264), + [59] = {.entry = {.count = 1, .reusable = false}}, SHIFT(919), + [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1904), + [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1898), + [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(420), + [67] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1799), + [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(112), + [71] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), + [73] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1950), + [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2186), + [77] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1222), + [79] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1620), + [81] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1260), + [83] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1378), + [85] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1388), + [87] = {.entry = {.count = 1, .reusable = false}}, SHIFT(288), + [89] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2252), + [91] = {.entry = {.count = 1, .reusable = false}}, SHIFT(132), + [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), + [95] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1696), + [97] = {.entry = {.count = 1, .reusable = false}}, SHIFT(111), + [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(709), + [101] = {.entry = {.count = 1, .reusable = false}}, SHIFT(135), + [103] = {.entry = {.count = 1, .reusable = false}}, SHIFT(312), + [105] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1681), + [107] = {.entry = {.count = 1, .reusable = false}}, SHIFT(223), + [109] = {.entry = {.count = 1, .reusable = false}}, SHIFT(895), + [111] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1892), + [113] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1919), + [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(289), + [117] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1789), + [119] = {.entry = {.count = 1, .reusable = false}}, SHIFT(116), + [121] = {.entry = {.count = 1, .reusable = false}}, SHIFT(121), + [123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1946), + [125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2143), + [127] = {.entry = {.count = 1, .reusable = false}}, SHIFT(8), + [129] = {.entry = {.count = 1, .reusable = false}}, SHIFT(14), + [131] = {.entry = {.count = 1, .reusable = false}}, SHIFT(34), + [133] = {.entry = {.count = 1, .reusable = false}}, SHIFT(23), + [135] = {.entry = {.count = 1, .reusable = false}}, SHIFT(10), + [137] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), + [139] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), + [141] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(419), + [144] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(2338), + [147] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(139), + [150] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(127), + [153] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), + [155] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(1700), + [158] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(53), + [161] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(126), + [164] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(366), + [167] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(1680), + [170] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(264), + [173] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(919), + [176] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(1904), + [179] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(1898), + [182] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(420), + [185] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(1799), + [188] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(112), + [191] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(40), + [194] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(1950), + [197] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(2186), + [200] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), + [202] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elif_clause, 4, 0, 44), + [204] = {.entry = {.count = 1, .reusable = false}}, SHIFT(21), + [206] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22), + [208] = {.entry = {.count = 1, .reusable = false}}, SHIFT(26), + [210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elif_clause, 3, 0, 35), + [212] = {.entry = {.count = 1, .reusable = false}}, SHIFT(30), + [214] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), + [216] = {.entry = {.count = 1, .reusable = false}}, SHIFT(117), + [218] = {.entry = {.count = 1, .reusable = false}}, SHIFT(86), + [220] = {.entry = {.count = 1, .reusable = false}}, SHIFT(302), + [222] = {.entry = {.count = 1, .reusable = false}}, SHIFT(350), + [224] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1603), + [226] = {.entry = {.count = 1, .reusable = false}}, SHIFT(241), + [228] = {.entry = {.count = 1, .reusable = false}}, SHIFT(299), + [230] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1941), + [232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2250), + [234] = {.entry = {.count = 1, .reusable = false}}, SHIFT(348), + [236] = {.entry = {.count = 1, .reusable = false}}, SHIFT(355), + [238] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1390), + [240] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3), + [242] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_clause, 1, 0, 0), + [244] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1261), + [246] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1211), + [248] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_clause, 2, 0, 43), + [250] = {.entry = {.count = 1, .reusable = false}}, SHIFT(32), + [252] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1578), + [254] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1616), + [256] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1380), + [258] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1612), + [260] = {.entry = {.count = 1, .reusable = false}}, SHIFT(7), + [262] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1328), + [264] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2), + [266] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1210), + [268] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(419), + [271] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(2338), + [274] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(139), + [277] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(127), + [280] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(1700), + [283] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(53), + [286] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(126), + [289] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(366), + [292] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(1680), + [295] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(264), + [298] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(919), + [301] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(1904), + [304] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(1898), + [307] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(420), + [310] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(1799), + [313] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(112), + [316] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(40), + [319] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(1950), + [322] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(2186), + [325] = {.entry = {.count = 1, .reusable = false}}, SHIFT(771), + [327] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2202), + [329] = {.entry = {.count = 1, .reusable = false}}, SHIFT(141), + [331] = {.entry = {.count = 1, .reusable = false}}, SHIFT(136), + [333] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1695), + [335] = {.entry = {.count = 1, .reusable = false}}, SHIFT(92), + [337] = {.entry = {.count = 1, .reusable = false}}, SHIFT(140), + [339] = {.entry = {.count = 1, .reusable = false}}, SHIFT(421), + [341] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1676), + [343] = {.entry = {.count = 1, .reusable = false}}, SHIFT(639), + [345] = {.entry = {.count = 1, .reusable = false}}, SHIFT(889), + [347] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1853), + [349] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1880), + [351] = {.entry = {.count = 1, .reusable = false}}, SHIFT(777), + [353] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1771), + [355] = {.entry = {.count = 1, .reusable = false}}, SHIFT(95), + [357] = {.entry = {.count = 1, .reusable = false}}, SHIFT(97), + [359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1947), + [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2138), + [363] = {.entry = {.count = 1, .reusable = false}}, SHIFT(720), + [365] = {.entry = {.count = 1, .reusable = false}}, SHIFT(364), + [367] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1595), + [369] = {.entry = {.count = 1, .reusable = false}}, SHIFT(526), + [371] = {.entry = {.count = 1, .reusable = false}}, SHIFT(734), + [373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1938), + [375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2300), + [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2133), + [379] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_concatenation, 4, 0, 40), + [381] = {.entry = {.count = 1, .reusable = false}}, SHIFT(308), + [383] = {.entry = {.count = 1, .reusable = false}}, SHIFT(307), + [385] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_concatenation, 4, 0, 40), + [387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), + [389] = {.entry = {.count = 1, .reusable = false}}, SHIFT(314), + [391] = {.entry = {.count = 1, .reusable = false}}, SHIFT(313), + [393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(313), + [395] = {.entry = {.count = 1, .reusable = false}}, SHIFT(402), + [397] = {.entry = {.count = 1, .reusable = false}}, SHIFT(416), + [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(416), + [401] = {.entry = {.count = 1, .reusable = false}}, SHIFT(482), + [403] = {.entry = {.count = 1, .reusable = false}}, SHIFT(480), + [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(480), + [407] = {.entry = {.count = 1, .reusable = false}}, SHIFT(589), + [409] = {.entry = {.count = 1, .reusable = false}}, SHIFT(590), + [411] = {.entry = {.count = 1, .reusable = true}}, SHIFT(590), + [413] = {.entry = {.count = 1, .reusable = false}}, SHIFT(534), + [415] = {.entry = {.count = 1, .reusable = false}}, SHIFT(533), + [417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(533), + [419] = {.entry = {.count = 1, .reusable = false}}, SHIFT(655), + [421] = {.entry = {.count = 1, .reusable = false}}, SHIFT(650), + [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(650), + [425] = {.entry = {.count = 1, .reusable = false}}, SHIFT(629), + [427] = {.entry = {.count = 1, .reusable = false}}, SHIFT(630), + [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(630), + [431] = {.entry = {.count = 1, .reusable = false}}, SHIFT(616), + [433] = {.entry = {.count = 1, .reusable = false}}, SHIFT(617), + [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(617), + [437] = {.entry = {.count = 1, .reusable = false}}, SHIFT(440), + [439] = {.entry = {.count = 1, .reusable = false}}, SHIFT(441), + [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(441), + [443] = {.entry = {.count = 1, .reusable = false}}, SHIFT(562), + [445] = {.entry = {.count = 1, .reusable = false}}, SHIFT(561), + [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(561), + [449] = {.entry = {.count = 1, .reusable = false}}, SHIFT(426), + [451] = {.entry = {.count = 1, .reusable = false}}, SHIFT(425), + [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(425), + [455] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command, 2, 0, 17), + [457] = {.entry = {.count = 1, .reusable = false}}, SHIFT(333), + [459] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command, 2, 0, 17), + [461] = {.entry = {.count = 1, .reusable = false}}, SHIFT(888), + [463] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1834), + [465] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1835), + [467] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1802), + [469] = {.entry = {.count = 1, .reusable = false}}, SHIFT(61), + [471] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), + [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(715), + [475] = {.entry = {.count = 1, .reusable = false}}, SHIFT(334), + [477] = {.entry = {.count = 1, .reusable = false}}, SHIFT(918), + [479] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1902), + [481] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1903), + [483] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1783), + [485] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), + [487] = {.entry = {.count = 1, .reusable = false}}, SHIFT(56), + [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(717), + [491] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command, 1, 0, 4), + [493] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command, 1, 0, 4), + [495] = {.entry = {.count = 1, .reusable = false}}, SHIFT(385), + [497] = {.entry = {.count = 1, .reusable = false}}, SHIFT(920), + [499] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1886), + [501] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1868), + [503] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1801), + [505] = {.entry = {.count = 1, .reusable = false}}, SHIFT(102), + [507] = {.entry = {.count = 1, .reusable = false}}, SHIFT(100), + [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(687), + [511] = {.entry = {.count = 1, .reusable = false}}, SHIFT(479), + [513] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(339), + [516] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), + [518] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(911), + [521] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1895), + [524] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1875), + [527] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1794), + [530] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(59), + [533] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(58), + [536] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), + [538] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_file_redirect, 2, 0, 7), + [540] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_file_redirect, 2, 0, 7), + [542] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command, 3, 0, 33), + [544] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command, 3, 0, 33), + [546] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_file_redirect, 3, 0, 19), + [548] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_file_redirect, 3, 0, 19), + [550] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command, 2, 0, 14), + [552] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command, 2, 0, 14), + [554] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(385), + [557] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), + [559] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(920), + [562] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1886), + [565] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1868), + [568] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1801), + [571] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(102), + [574] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(100), + [577] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), + [579] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(687), + [582] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(334), + [585] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(918), + [588] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1902), + [591] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1903), + [594] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1783), + [597] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(57), + [600] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(56), + [603] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(717), + [606] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(377), + [609] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(897), + [612] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1882), + [615] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1883), + [618] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1784), + [621] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(88), + [624] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(76), + [627] = {.entry = {.count = 1, .reusable = false}}, SHIFT(807), + [629] = {.entry = {.count = 1, .reusable = false}}, SHIFT(826), + [631] = {.entry = {.count = 1, .reusable = true}}, SHIFT(826), + [633] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(333), + [636] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(888), + [639] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1834), + [642] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1835), + [645] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1802), + [648] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(61), + [651] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(60), + [654] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(715), + [657] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(361), + [660] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(915), + [663] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1901), + [666] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1806), + [669] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1800), + [672] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(109), + [675] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(104), + [678] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(458), + [681] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(506), + [684] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(932), + [687] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1837), + [690] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1827), + [693] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1782), + [696] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(78), + [699] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(77), + [702] = {.entry = {.count = 1, .reusable = false}}, SHIFT(447), + [704] = {.entry = {.count = 1, .reusable = false}}, SHIFT(939), + [706] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1859), + [708] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1857), + [710] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1790), + [712] = {.entry = {.count = 1, .reusable = false}}, SHIFT(47), + [714] = {.entry = {.count = 1, .reusable = false}}, SHIFT(44), + [716] = {.entry = {.count = 1, .reusable = false}}, SHIFT(600), + [718] = {.entry = {.count = 1, .reusable = false}}, SHIFT(935), + [720] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1820), + [722] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1821), + [724] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1778), + [726] = {.entry = {.count = 1, .reusable = false}}, SHIFT(99), + [728] = {.entry = {.count = 1, .reusable = false}}, SHIFT(65), + [730] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(479), + [733] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(447), + [736] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(939), + [739] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1859), + [742] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1857), + [745] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1790), + [748] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(47), + [751] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(44), + [754] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_file_redirect, 1, 0, 1), + [756] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_file_redirect, 1, 0, 1), + [758] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_file_redirect, 2, 0, 6), + [760] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_file_redirect, 2, 0, 6), + [762] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), + [764] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__statements, 2, 0, 15), + [766] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__statement_not_pipeline, 1, 0, 0), + [768] = {.entry = {.count = 1, .reusable = false}}, SHIFT(148), + [770] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2255), + [772] = {.entry = {.count = 1, .reusable = false}}, SHIFT(716), + [774] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), + [776] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), SHIFT(2149), + [779] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(600), + [782] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(935), + [785] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1820), + [788] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1821), + [791] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1778), + [794] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(99), + [797] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(65), + [800] = {.entry = {.count = 1, .reusable = false}}, SHIFT(437), + [802] = {.entry = {.count = 1, .reusable = false}}, SHIFT(142), + [804] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2312), + [806] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), SHIFT(2301), + [809] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__statements, 1, 0, 3), + [811] = {.entry = {.count = 1, .reusable = false}}, SHIFT(506), + [813] = {.entry = {.count = 1, .reusable = false}}, SHIFT(932), + [815] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1837), + [817] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1827), + [819] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1782), + [821] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), + [823] = {.entry = {.count = 1, .reusable = false}}, SHIFT(77), + [825] = {.entry = {.count = 1, .reusable = false}}, SHIFT(879), + [827] = {.entry = {.count = 1, .reusable = false}}, SHIFT(873), + [829] = {.entry = {.count = 1, .reusable = true}}, SHIFT(873), + [831] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__statements, 1, 0, 3), + [833] = {.entry = {.count = 1, .reusable = false}}, SHIFT(782), + [835] = {.entry = {.count = 1, .reusable = false}}, SHIFT(153), + [837] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), SHIFT(2148), + [840] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__statements, 2, 0, 15), + [842] = {.entry = {.count = 1, .reusable = false}}, SHIFT(144), + [844] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), SHIFT(2306), + [847] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1788), + [849] = {.entry = {.count = 1, .reusable = false}}, SHIFT(145), + [851] = {.entry = {.count = 1, .reusable = false}}, SHIFT(146), + [853] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1600), + [855] = {.entry = {.count = 1, .reusable = false}}, SHIFT(846), + [857] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2055), + [859] = {.entry = {.count = 1, .reusable = false}}, SHIFT(910), + [861] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1810), + [863] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1811), + [865] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1798), + [867] = {.entry = {.count = 1, .reusable = false}}, SHIFT(74), + [869] = {.entry = {.count = 1, .reusable = false}}, SHIFT(51), + [871] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1936), + [873] = {.entry = {.count = 1, .reusable = false}}, SHIFT(647), + [875] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__statement_not_pipeline, 1, 0, 0), + [877] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1173), + [879] = {.entry = {.count = 1, .reusable = false}}, SHIFT(922), + [881] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1828), + [883] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1822), + [885] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1779), + [887] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), + [889] = {.entry = {.count = 1, .reusable = false}}, SHIFT(71), + [891] = {.entry = {.count = 1, .reusable = false}}, SHIFT(796), + [893] = {.entry = {.count = 1, .reusable = false}}, SHIFT(155), + [895] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), SHIFT(2251), + [898] = {.entry = {.count = 1, .reusable = false}}, SHIFT(781), + [900] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 30), + [902] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1118), + [904] = {.entry = {.count = 1, .reusable = false}}, SHIFT(914), + [906] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1842), + [908] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1839), + [910] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1803), + [912] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), + [914] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), + [916] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1111), + [918] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(647), + [921] = {.entry = {.count = 1, .reusable = false}}, SHIFT(899), + [923] = {.entry = {.count = 1, .reusable = false}}, SHIFT(898), + [925] = {.entry = {.count = 1, .reusable = true}}, SHIFT(898), + [927] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 30), + [929] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1134), + [931] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2042), + [933] = {.entry = {.count = 1, .reusable = false}}, SHIFT(870), + [935] = {.entry = {.count = 1, .reusable = false}}, SHIFT(886), + [937] = {.entry = {.count = 1, .reusable = true}}, SHIFT(886), + [939] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1138), + [941] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2068), + [943] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2063), + [945] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2057), + [947] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2028), + [949] = {.entry = {.count = 1, .reusable = false}}, SHIFT(664), + [951] = {.entry = {.count = 1, .reusable = false}}, SHIFT(805), + [953] = {.entry = {.count = 1, .reusable = false}}, SHIFT(776), + [955] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1158), + [957] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_concatenation, 2, 0, 0), + [959] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1477), + [961] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_concatenation, 2, 0, 0), + [963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1542), + [965] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1156), + [967] = {.entry = {.count = 1, .reusable = false}}, SHIFT(830), + [969] = {.entry = {.count = 1, .reusable = false}}, SHIFT(909), + [971] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1918), + [973] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1900), + [975] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1797), + [977] = {.entry = {.count = 1, .reusable = false}}, SHIFT(122), + [979] = {.entry = {.count = 1, .reusable = false}}, SHIFT(120), + [981] = {.entry = {.count = 1, .reusable = true}}, SHIFT(954), + [983] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), + [985] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1560), + [988] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), + [990] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1560), + [993] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command_name, 1, 0, 0), + [995] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_command_name, 1, 0, 0), SHIFT(2210), + [998] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1560), + [1000] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command_name, 1, 0, 0), + [1002] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1560), + [1004] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1185), + [1006] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1495), + [1008] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1495), + [1010] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_command_name, 1, 0, 0), SHIFT(2314), + [1013] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1477), + [1016] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1477), + [1019] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1495), + [1022] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1495), + [1025] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1562), + [1027] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1477), + [1029] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1494), + [1031] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_command_name, 1, 0, 0), SHIFT(2240), + [1034] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1186), + [1036] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1152), + [1038] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1508), + [1040] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1547), + [1042] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_simple_expansion, 2, 0, 0), + [1044] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_simple_expansion, 2, 0, 0), + [1046] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_simple_expansion, 2, 0, 8), + [1048] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_simple_expansion, 2, 0, 8), + [1050] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1504), + [1053] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1504), + [1056] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arithmetic_expansion, 2, 0, 0), + [1058] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arithmetic_expansion, 2, 0, 0), + [1060] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1538), + [1062] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1534), + [1064] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1598), + [1066] = {.entry = {.count = 1, .reusable = false}}, SHIFT(927), + [1068] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1939), + [1070] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 2, 0, 0), + [1072] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 2, 0, 0), + [1074] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(), + [1076] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1538), + [1079] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1538), + [1082] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1488), + [1084] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1509), + [1086] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expansion, 2, 0, 0), + [1088] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expansion, 2, 0, 0), + [1090] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable_assignment, 3, 0, 20), + [1092] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1476), + [1094] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_assignment, 3, 0, 20), + [1096] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1476), + [1098] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 3, 0, 25), + [1100] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 3, 0, 25), + [1102] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 3, 0, 0), + [1104] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 3, 0, 0), + [1106] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1488), + [1109] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1488), + [1112] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expansion, 3, 0, 28), + [1114] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expansion, 3, 0, 28), + [1116] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command_substitution, 3, 0, 22), + [1118] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command_substitution, 3, 0, 22), + [1120] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command_substitution, 3, 0, 29), + [1122] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command_substitution, 3, 0, 29), + [1124] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 4, 0, 39), + [1126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 4, 0, 39), + [1128] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_command_repeat2, 1, 0, 13), + [1130] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 1, 0, 13), + [1132] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1488), + [1134] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1508), + [1136] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1000), + [1138] = {.entry = {.count = 1, .reusable = true}}, SHIFT(969), + [1140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(970), + [1142] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arithmetic_ternary_expression, 5, 0, 58), + [1144] = {.entry = {.count = 1, .reusable = false}}, SHIFT(973), + [1146] = {.entry = {.count = 1, .reusable = false}}, SHIFT(977), + [1148] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arithmetic_ternary_expression, 5, 0, 58), + [1150] = {.entry = {.count = 1, .reusable = false}}, SHIFT(979), + [1152] = {.entry = {.count = 1, .reusable = false}}, SHIFT(980), + [1154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(982), + [1156] = {.entry = {.count = 1, .reusable = true}}, SHIFT(973), + [1158] = {.entry = {.count = 1, .reusable = false}}, SHIFT(983), + [1160] = {.entry = {.count = 1, .reusable = false}}, SHIFT(984), + [1162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(360), + [1164] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1538), + [1166] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1476), + [1169] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1476), + [1172] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 1, 0, 0), + [1174] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_for_statement_repeat1, 1, 0, 0), + [1176] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1504), + [1178] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1504), + [1180] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1508), + [1183] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1508), + [1186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arithmetic_unary_expression, 2, 0, 23), + [1188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arithmetic_unary_expression, 2, 0, 23), + [1190] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_command_name, 1, 0, 0), SHIFT(2337), + [1193] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arithmetic_expansion, 3, 0, 0), + [1195] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arithmetic_expansion, 3, 0, 0), + [1197] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1546), + [1199] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1529), + [1201] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1526), + [1203] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1016), + [1205] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1011), + [1207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1011), + [1209] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arithmetic_postfix_expression, 2, 0, 24), + [1211] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arithmetic_postfix_expression, 2, 0, 24), + [1213] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arithmetic_literal, 1, 0, 0), + [1215] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arithmetic_literal, 1, 0, 0), + [1217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1563), + [1219] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1529), + [1222] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1529), + [1225] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(795), + [1228] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1529), + [1230] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(796), + [1233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1519), + [1235] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arithmetic_binary_expression, 3, 0, 38), + [1237] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arithmetic_binary_expression, 3, 0, 38), + [1239] = {.entry = {.count = 1, .reusable = false}}, SHIFT(971), + [1241] = {.entry = {.count = 1, .reusable = true}}, SHIFT(991), + [1243] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arithmetic_parenthesized_expression, 3, 0, 0), + [1245] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arithmetic_parenthesized_expression, 3, 0, 0), + [1247] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_command_name, 1, 0, 0), SHIFT(2221), + [1250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(349), + [1252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(978), + [1254] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1521), + [1256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1497), + [1258] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1004), + [1260] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1091), + [1262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1091), + [1264] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1521), + [1267] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1521), + [1270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1293), + [1272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(649), + [1274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_terminator, 1, 0, 0), + [1276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_terminator, 1, 0, 0), + [1278] = {.entry = {.count = 1, .reusable = false}}, SHIFT(827), + [1280] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1556), + [1283] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1556), + [1286] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1530), + [1288] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1530), + [1290] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2069), + [1292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(445), + [1294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(995), + [1296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1694), + [1298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(814), + [1300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(993), + [1302] = {.entry = {.count = 1, .reusable = false}}, SHIFT(963), + [1304] = {.entry = {.count = 1, .reusable = false}}, SHIFT(968), + [1306] = {.entry = {.count = 1, .reusable = true}}, SHIFT(968), + [1308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(354), + [1310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1014), + [1312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1418), + [1314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1582), + [1316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1061), + [1318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(936), + [1320] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1556), + [1322] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1543), + [1324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1965), + [1326] = {.entry = {.count = 1, .reusable = false}}, SHIFT(964), + [1328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(568), + [1330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(943), + [1332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(944), + [1334] = {.entry = {.count = 1, .reusable = false}}, SHIFT(945), + [1336] = {.entry = {.count = 1, .reusable = false}}, SHIFT(951), + [1338] = {.entry = {.count = 1, .reusable = false}}, SHIFT(952), + [1340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(955), + [1342] = {.entry = {.count = 1, .reusable = false}}, SHIFT(957), + [1344] = {.entry = {.count = 1, .reusable = false}}, SHIFT(958), + [1346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(962), + [1348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(951), + [1350] = {.entry = {.count = 1, .reusable = false}}, SHIFT(967), + [1352] = {.entry = {.count = 1, .reusable = false}}, SHIFT(974), + [1354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(960), + [1356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(527), + [1358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(654), + [1360] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(830), + [1363] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(909), + [1366] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1918), + [1369] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1900), + [1372] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1797), + [1375] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(122), + [1378] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(120), + [1381] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(954), + [1384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1287), + [1386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1505), + [1388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1149), + [1390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(519), + [1392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(392), + [1394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1521), + [1396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(548), + [1398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(990), + [1400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(659), + [1402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(592), + [1404] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1127), + [1406] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1132), + [1408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1132), + [1410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(509), + [1412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(581), + [1414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1467), + [1416] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1530), + [1419] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1530), + [1422] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1242), + [1424] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1243), + [1426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1243), + [1428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(415), + [1430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(880), + [1432] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(827), + [1435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1452), + [1437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1977), + [1439] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(828), + [1442] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(907), + [1445] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1905), + [1448] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1911), + [1451] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1792), + [1454] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(124), + [1457] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(125), + [1460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1499), + [1462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(881), + [1464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1556), + [1466] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 10), + [1468] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__terminated_statement, 2, 0, 10), + [1470] = {.entry = {.count = 1, .reusable = false}}, SHIFT(157), + [1472] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__heredoc_pipeline, 2, 0, 0), + [1474] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), SHIFT(2311), + [1477] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__heredoc_expression, 2, 0, 49), + [1479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1525), + [1481] = {.entry = {.count = 1, .reusable = false}}, SHIFT(856), + [1483] = {.entry = {.count = 1, .reusable = false}}, SHIFT(926), + [1485] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1869), + [1487] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1851), + [1489] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1795), + [1491] = {.entry = {.count = 1, .reusable = false}}, SHIFT(91), + [1493] = {.entry = {.count = 1, .reusable = false}}, SHIFT(85), + [1495] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(856), + [1498] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(926), + [1501] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1869), + [1504] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1851), + [1507] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1795), + [1510] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(91), + [1513] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(85), + [1516] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1398), + [1518] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1399), + [1520] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 10), + [1522] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__statements, 3, 0, 32), + [1524] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 10), + [1526] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_command_repeat1, 1, 0, 5), + [1528] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), + [1530] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(2096), + [1533] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), REDUCE(aux_sym_command_repeat1, 1, 0, 5), + [1536] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), REDUCE(aux_sym_command_repeat1, 1, 0, 5), + [1539] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 5), + [1541] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1978), + [1544] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(819), + [1547] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(604), + [1550] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1659), + [1553] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(634), + [1556] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(387), + [1559] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(866), + [1562] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), + [1564] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1437), + [1566] = {.entry = {.count = 1, .reusable = false}}, SHIFT(940), + [1568] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1852), + [1570] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1836), + [1572] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1786), + [1574] = {.entry = {.count = 1, .reusable = false}}, SHIFT(83), + [1576] = {.entry = {.count = 1, .reusable = false}}, SHIFT(82), + [1578] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 1, 0, 12), + [1580] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_command_repeat2, 1, 0, 12), + [1582] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__statements, 2, 0, 10), + [1584] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(2006), + [1587] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1417), + [1589] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(554), + [1592] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_negated_command, 2, 0, 0), + [1594] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_negated_command, 2, 0, 0), + [1596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1518), + [1598] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1973), + [1601] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(374), + [1604] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1104), + [1607] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(514), + [1610] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1412), + [1613] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1199), + [1616] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(623), + [1619] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1457), + [1622] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(330), + [1625] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), SHIFT(2146), + [1628] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__case_item_last_repeat2, 2, 0, 0), + [1630] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__case_item_last_repeat2, 2, 0, 0), SHIFT_REPEAT(709), + [1633] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__case_item_last_repeat2, 2, 0, 0), + [1635] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(855), + [1638] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1077), + [1641] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_command_name, 1, 0, 0), SHIFT(2290), + [1644] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1294), + [1647] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(582), + [1650] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1691), + [1653] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(396), + [1656] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1272), + [1658] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1257), + [1660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1257), + [1662] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(457), + [1665] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(641), + [1668] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(921), + [1671] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(484), + [1674] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(975), + [1677] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(541), + [1680] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1036), + [1683] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(2022), + [1686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1517), + [1688] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__statements, 2, 0, 10), + [1690] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_command_name, 1, 0, 0), SHIFT(2246), + [1693] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1466), + [1695] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1466), + [1697] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__statements, 3, 0, 32), + [1699] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1516), + [1701] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1466), + [1704] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1466), + [1707] = {.entry = {.count = 1, .reusable = false}}, SHIFT(950), + [1709] = {.entry = {.count = 1, .reusable = false}}, SHIFT(890), + [1711] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1866), + [1713] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1893), + [1715] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1777), + [1717] = {.entry = {.count = 1, .reusable = false}}, SHIFT(101), + [1719] = {.entry = {.count = 1, .reusable = false}}, SHIFT(103), + [1721] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1565), + [1723] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(950), + [1726] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(890), + [1729] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1866), + [1732] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1893), + [1735] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1777), + [1738] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(101), + [1741] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(103), + [1744] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1554), + [1746] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1548), + [1748] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1554), + [1751] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1554), + [1754] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1545), + [1756] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1539), + [1758] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1545), + [1761] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1545), + [1764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1554), + [1766] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1545), + [1768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1552), + [1770] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1486), + [1772] = {.entry = {.count = 1, .reusable = false}}, SHIFT(892), + [1774] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1879), + [1776] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1906), + [1778] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1780), + [1780] = {.entry = {.count = 1, .reusable = false}}, SHIFT(108), + [1782] = {.entry = {.count = 1, .reusable = false}}, SHIFT(115), + [1784] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1468), + [1786] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1423), + [1788] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1430), + [1790] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1430), + [1792] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1527), + [1794] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1527), + [1796] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1527), + [1799] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1527), + [1802] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1464), + [1804] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1454), + [1806] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1454), + [1808] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1109), + [1811] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(891), + [1814] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1916), + [1817] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1914), + [1820] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1774), + [1823] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(55), + [1826] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(54), + [1829] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1520), + [1831] = {.entry = {.count = 1, .reusable = true}}, SHIFT(999), + [1833] = {.entry = {.count = 1, .reusable = true}}, SHIFT(998), + [1835] = {.entry = {.count = 1, .reusable = true}}, SHIFT(488), + [1837] = {.entry = {.count = 1, .reusable = true}}, SHIFT(997), + [1839] = {.entry = {.count = 1, .reusable = false}}, SHIFT(996), + [1841] = {.entry = {.count = 1, .reusable = true}}, SHIFT(996), + [1843] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1807), + [1845] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1913), + [1847] = {.entry = {.count = 1, .reusable = false}}, SHIFT(370), + [1849] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1773), + [1851] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [1853] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [1855] = {.entry = {.count = 1, .reusable = true}}, SHIFT(370), + [1857] = {.entry = {.count = 1, .reusable = true}}, SHIFT(818), + [1859] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1020), + [1861] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1276), + [1863] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1591), + [1865] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1576), + [1868] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1576), + [1871] = {.entry = {.count = 1, .reusable = true}}, SHIFT(310), + [1873] = {.entry = {.count = 1, .reusable = true}}, SHIFT(398), + [1875] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2004), + [1877] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1366), + [1879] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1511), + [1881] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1856), + [1883] = {.entry = {.count = 1, .reusable = false}}, SHIFT(933), + [1885] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1829), + [1887] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1830), + [1889] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1785), + [1891] = {.entry = {.count = 1, .reusable = false}}, SHIFT(80), + [1893] = {.entry = {.count = 1, .reusable = false}}, SHIFT(84), + [1895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1955), + [1897] = {.entry = {.count = 1, .reusable = true}}, SHIFT(442), + [1899] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1961), + [1901] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1624), + [1903] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1618), + [1905] = {.entry = {.count = 1, .reusable = true}}, SHIFT(877), + [1907] = {.entry = {.count = 1, .reusable = true}}, SHIFT(874), + [1909] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1701), + [1911] = {.entry = {.count = 1, .reusable = true}}, SHIFT(532), + [1913] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1172), + [1915] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1053), + [1917] = {.entry = {.count = 1, .reusable = true}}, SHIFT(602), + [1919] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1438), + [1921] = {.entry = {.count = 1, .reusable = true}}, SHIFT(560), + [1923] = {.entry = {.count = 1, .reusable = true}}, SHIFT(418), + [1925] = {.entry = {.count = 1, .reusable = true}}, SHIFT(520), + [1927] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1250), + [1929] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1225), + [1931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(938), + [1933] = {.entry = {.count = 1, .reusable = true}}, SHIFT(994), + [1935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1987), + [1937] = {.entry = {.count = 1, .reusable = true}}, SHIFT(609), + [1939] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2070), + [1941] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1387), + [1943] = {.entry = {.count = 1, .reusable = true}}, SHIFT(652), + [1945] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1252), + [1947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(605), + [1949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1451), + [1951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(959), + [1953] = {.entry = {.count = 1, .reusable = true}}, SHIFT(986), + [1955] = {.entry = {.count = 1, .reusable = true}}, SHIFT(976), + [1957] = {.entry = {.count = 1, .reusable = false}}, SHIFT(942), + [1959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(942), + [1961] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1894), + [1963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1890), + [1965] = {.entry = {.count = 1, .reusable = false}}, SHIFT(462), + [1967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1776), + [1969] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), + [1971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [1973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(462), + [1975] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1568), + [1978] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1568), + [1981] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1537), + [1984] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1537), + [1987] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1568), + [1989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1568), + [1991] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1585), + [1993] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1583), + [1995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1583), + [1997] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1570), + [1999] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1668), + [2001] = {.entry = {.count = 1, .reusable = false}}, SHIFT(282), + [2003] = {.entry = {.count = 1, .reusable = true}}, SHIFT(716), + [2005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1826), + [2007] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1485), + [2010] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1485), + [2013] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1638), + [2015] = {.entry = {.count = 1, .reusable = false}}, SHIFT(268), + [2017] = {.entry = {.count = 1, .reusable = true}}, SHIFT(782), + [2019] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1847), + [2021] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1485), + [2023] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1485), + [2025] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1471), + [2027] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1677), + [2029] = {.entry = {.count = 1, .reusable = false}}, SHIFT(304), + [2031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(437), + [2033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1808), + [2035] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1576), + [2037] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1513), + [2039] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1643), + [2041] = {.entry = {.count = 1, .reusable = false}}, SHIFT(258), + [2043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1872), + [2045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1501), + [2047] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1555), + [2049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1576), + [2051] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1500), + [2053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1500), + [2055] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), + [2057] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), + [2059] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), SHIFT_REPEAT(2301), + [2062] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1664), + [2064] = {.entry = {.count = 1, .reusable = false}}, SHIFT(290), + [2066] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1831), + [2068] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), + [2070] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1668), + [2073] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(282), + [2076] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(2255), + [2079] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), + [2081] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1826), + [2084] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), SHIFT_REPEAT(2149), + [2087] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_command_repeat1, 2, 0, 18), + [2089] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat1, 2, 0, 18), SHIFT_REPEAT(1598), + [2092] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat1, 2, 0, 18), SHIFT_REPEAT(927), + [2095] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 2, 0, 18), SHIFT_REPEAT(1939), + [2098] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 2, 0, 18), SHIFT_REPEAT(2133), + [2101] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1537), + [2103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1537), + [2105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1502), + [2107] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1643), + [2110] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(258), + [2113] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(2312), + [2116] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1872), + [2119] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_redirected_statement, 2, -1, 11), + [2121] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_redirected_statement, 2, -1, 11), + [2123] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1682), + [2125] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1683), + [2127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1683), + [2129] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1522), + [2131] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_assignments, 2, 0, 0), + [2133] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__variable_assignments, 2, 0, 0), + [2135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2148), + [2137] = {.entry = {.count = 1, .reusable = true}}, SHIFT(781), + [2139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2149), + [2141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1478), + [2143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(664), + [2145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(776), + [2147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2306), + [2149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2301), + [2151] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), SHIFT_REPEAT(2306), + [2154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1553), + [2156] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1557), + [2158] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1557), + [2160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1492), + [2162] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), SHIFT_REPEAT(2148), + [2165] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1638), + [2168] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(268), + [2171] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1847), + [2174] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1500), + [2177] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1500), + [2180] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1557), + [2183] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1557), + [2186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), + [2188] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), SHIFT(143), + [2191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), + [2193] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1515), + [2195] = {.entry = {.count = 1, .reusable = true}}, SHIFT(805), + [2197] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1677), + [2200] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(304), + [2203] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1808), + [2206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, 0, 45), + [2208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, 0, 45), + [2210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), + [2212] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1677), + [2215] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(304), + [2218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), + [2220] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1940), + [2223] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 3, 0, 21), + [2225] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 3, 0, 21), + [2227] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_redirected_statement, 1, -1, 5), + [2229] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_redirected_statement, 1, -1, 5), + [2231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1951), + [2233] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1638), + [2236] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(268), + [2239] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1949), + [2242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 4, 0, 1), + [2244] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 4, 0, 1), + [2246] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1668), + [2249] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(282), + [2252] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1948), + [2255] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subshell, 3, 0, 22), + [2257] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subshell, 3, 0, 22), + [2259] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, 0, 51), + [2261] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, 0, 51), + [2263] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, 0, 52), + [2265] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, 0, 52), + [2267] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command, 3, 0, 17), + [2269] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command, 3, 0, 17), + [2271] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, 0, 53), + [2273] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, 0, 53), + [2275] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1940), + [2277] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_do_group, 2, 0, 0), + [2279] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_do_group, 2, 0, 0), + [2281] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_compound_statement, 3, 0, 22), + [2283] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_compound_statement, 3, 0, 22), + [2285] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 6, 0, 56), + [2287] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 6, 0, 56), + [2289] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 6, 0, 57), + [2291] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 6, 0, 57), + [2293] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1948), + [2295] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1643), + [2298] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(258), + [2301] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1951), + [2304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1949), + [2306] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 6, 0, 36), + [2308] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 6, 0, 36), + [2310] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 4, 0, 35), + [2312] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 4, 0, 35), + [2314] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 5, 0, 6), + [2316] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 5, 0, 6), + [2318] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 4, 0, 36), + [2320] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 4, 0, 36), + [2322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_heredoc_body, 2, 0, 0), + [2324] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_heredoc_body, 2, 0, 0), + [2326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__heredoc_body, 2, 0, 0), + [2328] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__heredoc_body, 2, 0, 0), + [2330] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 5, 0, 1), + [2332] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 5, 0, 1), + [2334] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 5, 0, 59), + [2336] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 5, 0, 59), + [2338] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 5, 0, 60), + [2340] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 5, 0, 60), + [2342] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 5, 0, 61), + [2344] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 5, 0, 61), + [2346] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 7, 0, 62), + [2348] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 7, 0, 62), + [2350] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 4, 0, 42), + [2352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 4, 0, 42), + [2354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 7, 0, 66), + [2356] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 7, 0, 66), + [2358] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 7, 0, 67), + [2360] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 7, 0, 67), + [2362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1549), + [2364] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 5, 0, 36), + [2366] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 5, 0, 36), + [2368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 5, 0, 47), + [2370] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 5, 0, 47), + [2372] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 6, 0, 6), + [2374] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 6, 0, 6), + [2376] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 6, 0, 68), + [2378] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 6, 0, 68), + [2380] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, 0, 46), + [2382] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, 0, 46), + [2384] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 4, 0, 34), + [2386] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 4, 0, 34), + [2388] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, 0, 44), + [2390] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, 0, 44), + [2392] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_do_group, 3, 0, 22), + [2394] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_do_group, 3, 0, 22), + [2396] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command, 2, 0, 4), + [2398] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command, 2, 0, 4), + [2400] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1664), + [2403] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(290), + [2406] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1831), + [2409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2251), + [2411] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 6, 0, 69), + [2413] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 6, 0, 69), + [2415] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 6, 0, 70), + [2417] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 6, 0, 70), + [2419] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 6, 0, 71), + [2421] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 6, 0, 71), + [2423] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 7, 0, 76), + [2425] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 7, 0, 76), + [2427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 6, 0, 50), + [2429] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 6, 0, 50), + [2431] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), SHIFT_REPEAT(2251), + [2434] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 8, 0, 75), + [2436] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 8, 0, 75), + [2438] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1337), + [2440] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pipeline, 2, 0, 0), + [2442] = {.entry = {.count = 1, .reusable = false}}, SHIFT(156), + [2444] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pipeline, 2, 0, 0), + [2446] = {.entry = {.count = 1, .reusable = false}}, SHIFT(147), + [2448] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1664), + [2451] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(290), + [2454] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1937), + [2457] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), SHIFT_REPEAT(156), + [2460] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1220), + [2462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1937), + [2464] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), SHIFT_REPEAT(147), + [2467] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), SHIFT_REPEAT(149), + [2470] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1633), + [2472] = {.entry = {.count = 1, .reusable = false}}, SHIFT(150), + [2474] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), SHIFT_REPEAT(150), + [2477] = {.entry = {.count = 1, .reusable = false}}, SHIFT(149), + [2479] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1669), + [2481] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2111), + [2483] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), SHIFT_REPEAT(154), + [2486] = {.entry = {.count = 1, .reusable = false}}, SHIFT(154), + [2488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1481), + [2490] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1615), + [2492] = {.entry = {.count = 1, .reusable = false}}, SHIFT(665), + [2494] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__heredoc_pipeline, 2, 0, 0), + [2496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1877), + [2498] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(1995), + [2501] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(1559), + [2504] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(933), + [2507] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(1829), + [2510] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(1830), + [2513] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(1785), + [2516] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(80), + [2519] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(84), + [2522] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(1955), + [2525] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1535), + [2528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1482), + [2530] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1669), + [2533] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(910), + [2536] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1810), + [2539] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1811), + [2542] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1798), + [2545] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(74), + [2548] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(51), + [2551] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), SHIFT_REPEAT(2311), + [2554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2311), + [2556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1535), + [2558] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__heredoc_expression, 2, 0, 49), + [2560] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1615), + [2563] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(665), + [2566] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1877), + [2569] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1483), + [2571] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1524), + [2574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1952), + [2576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1524), + [2578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1506), + [2580] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), SHIFT_REPEAT(2146), + [2583] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1674), + [2586] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1674), + [2589] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(686), + [2592] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(2205), + [2595] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(2205), + [2598] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1887), + [2601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2146), + [2603] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1674), + [2605] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1674), + [2607] = {.entry = {.count = 1, .reusable = true}}, SHIFT(686), + [2609] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2205), + [2611] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2205), + [2613] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1887), + [2615] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1615), + [2618] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(665), + [2621] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1952), + [2624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1935), + [2626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), + [2628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1643), + [2630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(258), + [2632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2312), + [2634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), + [2636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1668), + [2638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282), + [2640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2255), + [2642] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), + [2644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1677), + [2646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), + [2648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), + [2650] = {.entry = {.count = 1, .reusable = false}}, SHIFT(151), + [2652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [2654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1615), + [2656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(665), + [2658] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1674), + [2661] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1674), + [2664] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(686), + [2667] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1935), + [2670] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), SHIFT_REPEAT(151), + [2673] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [2675] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1664), + [2677] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), + [2679] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), + [2681] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1638), + [2683] = {.entry = {.count = 1, .reusable = true}}, SHIFT(268), + [2685] = {.entry = {.count = 1, .reusable = false}}, SHIFT(823), + [2687] = {.entry = {.count = 1, .reusable = true}}, SHIFT(823), + [2689] = {.entry = {.count = 1, .reusable = false}}, SHIFT(551), + [2691] = {.entry = {.count = 1, .reusable = false}}, SHIFT(174), + [2693] = {.entry = {.count = 1, .reusable = true}}, SHIFT(551), + [2695] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1564), + [2697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1564), + [2699] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1405), + [2701] = {.entry = {.count = 1, .reusable = false}}, SHIFT(916), + [2703] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1824), + [2705] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1844), + [2707] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1770), + [2709] = {.entry = {.count = 1, .reusable = false}}, SHIFT(70), + [2711] = {.entry = {.count = 1, .reusable = false}}, SHIFT(69), + [2713] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1503), + [2715] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1503), + [2717] = {.entry = {.count = 1, .reusable = false}}, SHIFT(504), + [2719] = {.entry = {.count = 1, .reusable = false}}, SHIFT(911), + [2721] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1895), + [2723] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1875), + [2725] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1794), + [2727] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), + [2729] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), + [2731] = {.entry = {.count = 1, .reusable = false}}, SHIFT(697), + [2733] = {.entry = {.count = 1, .reusable = true}}, SHIFT(697), + [2735] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1177), + [2737] = {.entry = {.count = 1, .reusable = false}}, SHIFT(913), + [2739] = {.entry = {.count = 1, .reusable = false}}, SHIFT(531), + [2741] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1860), + [2743] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1772), + [2745] = {.entry = {.count = 1, .reusable = false}}, SHIFT(68), + [2747] = {.entry = {.count = 1, .reusable = false}}, SHIFT(67), + [2749] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1177), + [2751] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1981), + [2753] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1976), + [2755] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1976), + [2757] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2060), + [2759] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2056), + [2761] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2047), + [2763] = {.entry = {.count = 1, .reusable = false}}, SHIFT(524), + [2765] = {.entry = {.count = 1, .reusable = true}}, SHIFT(524), + [2767] = {.entry = {.count = 1, .reusable = false}}, SHIFT(380), + [2769] = {.entry = {.count = 1, .reusable = true}}, SHIFT(380), + [2771] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1183), + [2773] = {.entry = {.count = 1, .reusable = false}}, SHIFT(891), + [2775] = {.entry = {.count = 1, .reusable = false}}, SHIFT(735), + [2777] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1914), + [2779] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1774), + [2781] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), + [2783] = {.entry = {.count = 1, .reusable = false}}, SHIFT(54), + [2785] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1183), + [2787] = {.entry = {.count = 1, .reusable = false}}, SHIFT(336), + [2789] = {.entry = {.count = 1, .reusable = false}}, SHIFT(915), + [2791] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1901), + [2793] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1806), + [2795] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1800), + [2797] = {.entry = {.count = 1, .reusable = false}}, SHIFT(109), + [2799] = {.entry = {.count = 1, .reusable = false}}, SHIFT(104), + [2801] = {.entry = {.count = 1, .reusable = false}}, SHIFT(695), + [2803] = {.entry = {.count = 1, .reusable = true}}, SHIFT(695), + [2805] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2043), + [2807] = {.entry = {.count = 1, .reusable = false}}, SHIFT(992), + [2809] = {.entry = {.count = 1, .reusable = false}}, SHIFT(930), + [2811] = {.entry = {.count = 1, .reusable = false}}, SHIFT(843), + [2813] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1854), + [2815] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1775), + [2817] = {.entry = {.count = 1, .reusable = false}}, SHIFT(87), + [2819] = {.entry = {.count = 1, .reusable = false}}, SHIFT(89), + [2821] = {.entry = {.count = 1, .reusable = true}}, SHIFT(992), + [2823] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1040), + [2825] = {.entry = {.count = 1, .reusable = false}}, SHIFT(841), + [2827] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1040), + [2829] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1436), + [2831] = {.entry = {.count = 1, .reusable = false}}, SHIFT(853), + [2833] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1436), + [2835] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2032), + [2837] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1912), + [2839] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1329), + [2841] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1840), + [2843] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1101), + [2845] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1101), + [2847] = {.entry = {.count = 1, .reusable = false}}, SHIFT(477), + [2849] = {.entry = {.count = 1, .reusable = true}}, SHIFT(477), + [2851] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2033), + [2853] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1090), + [2855] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2036), + [2857] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1227), + [2859] = {.entry = {.count = 1, .reusable = false}}, SHIFT(547), + [2861] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1227), + [2863] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2019), + [2865] = {.entry = {.count = 1, .reusable = false}}, SHIFT(369), + [2867] = {.entry = {.count = 1, .reusable = false}}, SHIFT(166), + [2869] = {.entry = {.count = 1, .reusable = true}}, SHIFT(369), + [2871] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1082), + [2873] = {.entry = {.count = 1, .reusable = false}}, SHIFT(607), + [2875] = {.entry = {.count = 1, .reusable = false}}, SHIFT(175), + [2877] = {.entry = {.count = 1, .reusable = true}}, SHIFT(607), + [2879] = {.entry = {.count = 1, .reusable = false}}, SHIFT(842), + [2881] = {.entry = {.count = 1, .reusable = false}}, SHIFT(907), + [2883] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1905), + [2885] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1911), + [2887] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1792), + [2889] = {.entry = {.count = 1, .reusable = false}}, SHIFT(124), + [2891] = {.entry = {.count = 1, .reusable = false}}, SHIFT(125), + [2893] = {.entry = {.count = 1, .reusable = false}}, SHIFT(989), + [2895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(989), + [2897] = {.entry = {.count = 1, .reusable = false}}, SHIFT(662), + [2899] = {.entry = {.count = 1, .reusable = false}}, SHIFT(173), + [2901] = {.entry = {.count = 1, .reusable = true}}, SHIFT(662), + [2903] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1916), + [2905] = {.entry = {.count = 1, .reusable = false}}, SHIFT(464), + [2907] = {.entry = {.count = 1, .reusable = false}}, SHIFT(525), + [2909] = {.entry = {.count = 1, .reusable = false}}, SHIFT(454), + [2911] = {.entry = {.count = 1, .reusable = false}}, SHIFT(897), + [2913] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1882), + [2915] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1883), + [2917] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1784), + [2919] = {.entry = {.count = 1, .reusable = false}}, SHIFT(88), + [2921] = {.entry = {.count = 1, .reusable = false}}, SHIFT(76), + [2923] = {.entry = {.count = 1, .reusable = true}}, SHIFT(454), + [2925] = {.entry = {.count = 1, .reusable = false}}, SHIFT(182), + [2927] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1450), + [2929] = {.entry = {.count = 1, .reusable = false}}, SHIFT(876), + [2931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1450), + [2933] = {.entry = {.count = 1, .reusable = false}}, SHIFT(799), + [2935] = {.entry = {.count = 1, .reusable = false}}, SHIFT(171), + [2937] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1092), + [2939] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1341), + [2941] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1341), + [2943] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1998), + [2945] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), + [2947] = {.entry = {.count = 1, .reusable = false}}, SHIFT(481), + [2949] = {.entry = {.count = 1, .reusable = false}}, SHIFT(431), + [2951] = {.entry = {.count = 1, .reusable = false}}, SHIFT(204), + [2953] = {.entry = {.count = 1, .reusable = false}}, SHIFT(232), + [2955] = {.entry = {.count = 1, .reusable = false}}, SHIFT(188), + [2957] = {.entry = {.count = 1, .reusable = false}}, SHIFT(168), + [2959] = {.entry = {.count = 1, .reusable = false}}, SHIFT(923), + [2961] = {.entry = {.count = 1, .reusable = false}}, SHIFT(265), + [2963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(923), + [2965] = {.entry = {.count = 1, .reusable = false}}, SHIFT(540), + [2967] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1693), + [2969] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1126), + [2971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1693), + [2973] = {.entry = {.count = 1, .reusable = false}}, SHIFT(625), + [2975] = {.entry = {.count = 1, .reusable = false}}, SHIFT(181), + [2977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(625), + [2979] = {.entry = {.count = 1, .reusable = false}}, SHIFT(546), + [2981] = {.entry = {.count = 1, .reusable = false}}, SHIFT(169), + [2983] = {.entry = {.count = 1, .reusable = true}}, SHIFT(546), + [2985] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2074), + [2987] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1744), + [2989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2074), + [2991] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1007), + [2993] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1305), + [2995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1305), + [2997] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2045), + [2999] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2044), + [3001] = {.entry = {.count = 1, .reusable = false}}, SHIFT(469), + [3003] = {.entry = {.count = 1, .reusable = false}}, SHIFT(178), + [3005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(469), + [3007] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2037), + [3009] = {.entry = {.count = 1, .reusable = false}}, SHIFT(869), + [3011] = {.entry = {.count = 1, .reusable = false}}, SHIFT(231), + [3013] = {.entry = {.count = 1, .reusable = true}}, SHIFT(869), + [3015] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1159), + [3017] = {.entry = {.count = 1, .reusable = false}}, SHIFT(167), + [3019] = {.entry = {.count = 1, .reusable = false}}, SHIFT(172), + [3021] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), SHIFT_REPEAT(143), + [3024] = {.entry = {.count = 1, .reusable = false}}, SHIFT(177), + [3026] = {.entry = {.count = 1, .reusable = false}}, SHIFT(170), + [3028] = {.entry = {.count = 1, .reusable = false}}, SHIFT(872), + [3030] = {.entry = {.count = 1, .reusable = false}}, SHIFT(270), + [3032] = {.entry = {.count = 1, .reusable = true}}, SHIFT(872), + [3034] = {.entry = {.count = 1, .reusable = false}}, SHIFT(637), + [3036] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1361), + [3038] = {.entry = {.count = 1, .reusable = false}}, SHIFT(343), + [3040] = {.entry = {.count = 1, .reusable = false}}, SHIFT(669), + [3042] = {.entry = {.count = 1, .reusable = true}}, SHIFT(669), + [3044] = {.entry = {.count = 1, .reusable = false}}, SHIFT(237), + [3046] = {.entry = {.count = 1, .reusable = false}}, SHIFT(663), + [3048] = {.entry = {.count = 1, .reusable = false}}, SHIFT(493), + [3050] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2025), + [3052] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1992), + [3054] = {.entry = {.count = 1, .reusable = false}}, SHIFT(352), + [3056] = {.entry = {.count = 1, .reusable = true}}, SHIFT(352), + [3058] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1982), + [3060] = {.entry = {.count = 1, .reusable = false}}, SHIFT(931), + [3062] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1472), + [3064] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1861), + [3066] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1793), + [3068] = {.entry = {.count = 1, .reusable = false}}, SHIFT(39), + [3070] = {.entry = {.count = 1, .reusable = false}}, SHIFT(106), + [3072] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1982), + [3074] = {.entry = {.count = 1, .reusable = false}}, SHIFT(165), + [3076] = {.entry = {.count = 1, .reusable = false}}, SHIFT(176), + [3078] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1596), + [3080] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1596), + [3082] = {.entry = {.count = 1, .reusable = false}}, SHIFT(209), + [3084] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1083), + [3086] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2050), + [3088] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1017), + [3090] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1017), + [3092] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1573), + [3094] = {.entry = {.count = 1, .reusable = false}}, SHIFT(358), + [3096] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1564), + [3099] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1564), + [3102] = {.entry = {.count = 1, .reusable = false}}, SHIFT(985), + [3104] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1873), + [3106] = {.entry = {.count = 1, .reusable = false}}, SHIFT(322), + [3108] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 2, 0, 31), SHIFT_REPEAT(1788), + [3111] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 2, 0, 31), + [3113] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 2, 0, 31), SHIFT_REPEAT(910), + [3116] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 2, 0, 31), SHIFT_REPEAT(1810), + [3119] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 2, 0, 31), SHIFT_REPEAT(1811), + [3122] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 2, 0, 31), SHIFT_REPEAT(1798), + [3125] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 2, 0, 31), SHIFT_REPEAT(74), + [3128] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 2, 0, 31), SHIFT_REPEAT(51), + [3131] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1540), + [3134] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1540), + [3137] = {.entry = {.count = 1, .reusable = false}}, SHIFT(377), + [3139] = {.entry = {.count = 1, .reusable = false}}, SHIFT(458), + [3141] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1540), + [3143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1523), + [3145] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1109), + [3147] = {.entry = {.count = 1, .reusable = false}}, SHIFT(795), + [3149] = {.entry = {.count = 1, .reusable = false}}, SHIFT(339), + [3151] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1600), + [3154] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(846), + [3157] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1936), + [3160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1540), + [3162] = {.entry = {.count = 1, .reusable = false}}, SHIFT(828), + [3164] = {.entry = {.count = 1, .reusable = false}}, SHIFT(361), + [3166] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1954), + [3168] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1956), + [3170] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2073), + [3172] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expansion_expression, 1, 0, 1), + [3174] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2077), + [3176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2073), + [3178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expansion_body, 1, 0, 9), + [3180] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1971), + [3182] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1971), + [3184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1697), + [3186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expansion_body, 1, 0, 4), + [3188] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1957), + [3190] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1966), + [3192] = {.entry = {.count = 1, .reusable = false}}, SHIFT(906), + [3194] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1960), + [3196] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1964), + [3198] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1964), + [3200] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1288), + [3202] = {.entry = {.count = 1, .reusable = false}}, SHIFT(530), + [3204] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1688), + [3206] = {.entry = {.count = 1, .reusable = false}}, SHIFT(901), + [3208] = {.entry = {.count = 1, .reusable = false}}, SHIFT(382), + [3210] = {.entry = {.count = 1, .reusable = false}}, SHIFT(429), + [3212] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1684), + [3214] = {.entry = {.count = 1, .reusable = false}}, SHIFT(613), + [3216] = {.entry = {.count = 1, .reusable = false}}, SHIFT(521), + [3218] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1975), + [3220] = {.entry = {.count = 1, .reusable = false}}, SHIFT(537), + [3222] = {.entry = {.count = 1, .reusable = false}}, SHIFT(549), + [3224] = {.entry = {.count = 1, .reusable = false}}, SHIFT(854), + [3226] = {.entry = {.count = 1, .reusable = false}}, SHIFT(497), + [3228] = {.entry = {.count = 1, .reusable = false}}, SHIFT(362), + [3230] = {.entry = {.count = 1, .reusable = false}}, SHIFT(861), + [3232] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1089), + [3234] = {.entry = {.count = 1, .reusable = false}}, SHIFT(435), + [3236] = {.entry = {.count = 1, .reusable = false}}, SHIFT(556), + [3238] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1974), + [3240] = {.entry = {.count = 1, .reusable = false}}, SHIFT(648), + [3242] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2064), + [3244] = {.entry = {.count = 1, .reusable = false}}, SHIFT(864), + [3246] = {.entry = {.count = 1, .reusable = false}}, SHIFT(394), + [3248] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1465), + [3250] = {.entry = {.count = 1, .reusable = false}}, SHIFT(852), + [3252] = {.entry = {.count = 1, .reusable = false}}, SHIFT(593), + [3254] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1463), + [3256] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1080), + [3258] = {.entry = {.count = 1, .reusable = false}}, SHIFT(389), + [3260] = {.entry = {.count = 1, .reusable = false}}, SHIFT(332), + [3262] = {.entry = {.count = 1, .reusable = false}}, SHIFT(367), + [3264] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2054), + [3266] = {.entry = {.count = 1, .reusable = false}}, SHIFT(597), + [3268] = {.entry = {.count = 1, .reusable = false}}, SHIFT(642), + [3270] = {.entry = {.count = 1, .reusable = false}}, SHIFT(611), + [3272] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1672), + [3274] = {.entry = {.count = 1, .reusable = false}}, SHIFT(656), + [3276] = {.entry = {.count = 1, .reusable = false}}, SHIFT(363), + [3278] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2052), + [3280] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2053), + [3282] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2053), + [3284] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2007), + [3286] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1597), + [3288] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1248), + [3290] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2002), + [3292] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1234), + [3294] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1039), + [3296] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1212), + [3298] = {.entry = {.count = 1, .reusable = false}}, SHIFT(661), + [3300] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1030), + [3302] = {.entry = {.count = 1, .reusable = false}}, SHIFT(448), + [3304] = {.entry = {.count = 1, .reusable = false}}, SHIFT(324), + [3306] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1426), + [3308] = {.entry = {.count = 1, .reusable = false}}, SHIFT(466), + [3310] = {.entry = {.count = 1, .reusable = false}}, SHIFT(821), + [3312] = {.entry = {.count = 1, .reusable = false}}, SHIFT(812), + [3314] = {.entry = {.count = 1, .reusable = false}}, SHIFT(941), + [3316] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1416), + [3318] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1121), + [3320] = {.entry = {.count = 1, .reusable = false}}, SHIFT(518), + [3322] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2084), + [3324] = {.entry = {.count = 1, .reusable = false}}, SHIFT(516), + [3326] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2086), + [3328] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1002), + [3330] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1124), + [3332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2076), + [3334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1698), + [3336] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1699), + [3338] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1698), + [3340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1699), + [3342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1421), + [3344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(811), + [3346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1120), + [3348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), + [3350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1281), + [3352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(972), + [3354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(492), + [3356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1029), + [3358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(645), + [3360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1209), + [3362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1592), + [3364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1550), + [3366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(606), + [3368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(586), + [3370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(438), + [3372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2051), + [3374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1441), + [3376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2090), + [3378] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2090), + [3380] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 1, 0, 13), + [3382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(359), + [3384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(627), + [3386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(885), + [3388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1989), + [3390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(566), + [3392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(908), + [3394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(323), + [3396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(862), + [3398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1686), + [3400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(399), + [3402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(491), + [3404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(490), + [3406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(544), + [3408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1085), + [3410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2011), + [3412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1967), + [3414] = {.entry = {.count = 1, .reusable = false}}, SHIFT(902), + [3416] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1708), + [3418] = {.entry = {.count = 1, .reusable = false}}, SHIFT(427), + [3420] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1963), + [3422] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1805), + [3424] = {.entry = {.count = 1, .reusable = false}}, SHIFT(63), + [3426] = {.entry = {.count = 1, .reusable = false}}, SHIFT(62), + [3428] = {.entry = {.count = 1, .reusable = false}}, SHIFT(317), + [3430] = {.entry = {.count = 1, .reusable = false}}, SHIFT(316), + [3432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(316), + [3434] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1675), + [3436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1675), + [3438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(284), + [3440] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2295), + [3442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2295), + [3444] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1705), + [3446] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1690), + [3448] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_item, 6, 0, 74), + [3450] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__case_item_last, 6, 0, 74), + [3452] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_item, 6, 0, 74), + [3454] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1709), + [3456] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1685), + [3458] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1717), + [3460] = {.entry = {.count = 1, .reusable = false}}, SHIFT(315), + [3462] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_item, 4, 0, 54), + [3464] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__case_item_last, 4, 0, 54), + [3466] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_item, 4, 0, 54), + [3468] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1751), + [3470] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1221), + [3472] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_item, 7, 0, 77), + [3474] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__case_item_last, 7, 0, 77), + [3476] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_item, 7, 0, 77), + [3478] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1710), + [3480] = {.entry = {.count = 1, .reusable = false}}, SHIFT(632), + [3482] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1749), + [3484] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1237), + [3486] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1723), + [3488] = {.entry = {.count = 1, .reusable = false}}, SHIFT(631), + [3490] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1742), + [3492] = {.entry = {.count = 1, .reusable = false}}, SHIFT(608), + [3494] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1650), + [3496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1650), + [3498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249), + [3500] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2257), + [3502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2257), + [3504] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1740), + [3506] = {.entry = {.count = 1, .reusable = false}}, SHIFT(612), + [3508] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1724), + [3510] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2067), + [3512] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1670), + [3514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1670), + [3516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303), + [3518] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1737), + [3520] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2059), + [3522] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1732), + [3524] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1462), + [3526] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1711), + [3528] = {.entry = {.count = 1, .reusable = false}}, SHIFT(496), + [3530] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1728), + [3532] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1459), + [3534] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1719), + [3536] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1081), + [3538] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1733), + [3540] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1076), + [3542] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1745), + [3544] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2010), + [3546] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1727), + [3548] = {.entry = {.count = 1, .reusable = false}}, SHIFT(365), + [3550] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1756), + [3552] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1422), + [3554] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1748), + [3556] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2017), + [3558] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1735), + [3560] = {.entry = {.count = 1, .reusable = false}}, SHIFT(326), + [3562] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1644), + [3564] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1644), + [3566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(272), + [3568] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1761), + [3570] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1413), + [3572] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1702), + [3574] = {.entry = {.count = 1, .reusable = false}}, SHIFT(903), + [3576] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1704), + [3578] = {.entry = {.count = 1, .reusable = false}}, SHIFT(522), + [3580] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1706), + [3582] = {.entry = {.count = 1, .reusable = false}}, SHIFT(900), + [3584] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1760), + [3586] = {.entry = {.count = 1, .reusable = false}}, SHIFT(953), + [3588] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1739), + [3590] = {.entry = {.count = 1, .reusable = false}}, SHIFT(657), + [3592] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1752), + [3594] = {.entry = {.count = 1, .reusable = false}}, SHIFT(660), + [3596] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1767), + [3598] = {.entry = {.count = 1, .reusable = false}}, SHIFT(946), + [3600] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1768), + [3602] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1125), + [3604] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1712), + [3606] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1984), + [3608] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1762), + [3610] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1122), + [3612] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, 0, 0), SHIFT_REPEAT(902), + [3615] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, 0, 0), SHIFT_REPEAT(1791), + [3618] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, 0, 0), + [3620] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, 0, 0), SHIFT_REPEAT(1963), + [3623] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, 0, 0), SHIFT_REPEAT(1805), + [3626] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, 0, 0), SHIFT_REPEAT(63), + [3629] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, 0, 0), SHIFT_REPEAT(62), + [3632] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1713), + [3634] = {.entry = {.count = 1, .reusable = false}}, SHIFT(498), + [3636] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_item, 5, 0, 63), + [3638] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__case_item_last, 5, 0, 63), + [3640] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_item, 5, 0, 63), + [3642] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1766), + [3644] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2091), + [3646] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1716), + [3648] = {.entry = {.count = 1, .reusable = false}}, SHIFT(424), + [3650] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_item, 5, 0, 64), + [3652] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__case_item_last, 5, 0, 64), + [3654] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_item, 5, 0, 64), + [3656] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1764), + [3658] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2082), + [3660] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1641), + [3662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1641), + [3664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), + [3666] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1720), + [3668] = {.entry = {.count = 1, .reusable = false}}, SHIFT(430), + [3670] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1714), + [3672] = {.entry = {.count = 1, .reusable = false}}, SHIFT(536), + [3674] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_item, 5, 0, 65), + [3676] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__case_item_last, 5, 0, 65), + [3678] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_item, 5, 0, 65), + [3680] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1614), + [3682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1614), + [3684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(658), + [3686] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1722), + [3688] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1988), + [3690] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1759), + [3692] = {.entry = {.count = 1, .reusable = false}}, SHIFT(809), + [3694] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1765), + [3696] = {.entry = {.count = 1, .reusable = false}}, SHIFT(517), + [3698] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1754), + [3700] = {.entry = {.count = 1, .reusable = false}}, SHIFT(439), + [3702] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1758), + [3704] = {.entry = {.count = 1, .reusable = false}}, SHIFT(813), + [3706] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1757), + [3708] = {.entry = {.count = 1, .reusable = false}}, SHIFT(450), + [3710] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1673), + [3712] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1673), + [3714] = {.entry = {.count = 1, .reusable = true}}, SHIFT(690), + [3716] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2207), + [3718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2207), + [3720] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_item, 6, 0, 73), + [3722] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__case_item_last, 6, 0, 73), + [3724] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_item, 6, 0, 73), + [3726] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1721), + [3728] = {.entry = {.count = 1, .reusable = false}}, SHIFT(550), + [3730] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1763), + [3732] = {.entry = {.count = 1, .reusable = false}}, SHIFT(523), + [3734] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1753), + [3736] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1028), + [3738] = {.entry = {.count = 1, .reusable = false}}, SHIFT(494), + [3740] = {.entry = {.count = 1, .reusable = false}}, SHIFT(495), + [3742] = {.entry = {.count = 1, .reusable = true}}, SHIFT(495), + [3744] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1715), + [3746] = {.entry = {.count = 1, .reusable = false}}, SHIFT(860), + [3748] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1750), + [3750] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1032), + [3752] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1707), + [3754] = {.entry = {.count = 1, .reusable = false}}, SHIFT(401), + [3756] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_item, 6, 0, 72), + [3758] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__case_item_last, 6, 0, 72), + [3760] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_item, 6, 0, 72), + [3762] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1718), + [3764] = {.entry = {.count = 1, .reusable = false}}, SHIFT(863), + [3766] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1731), + [3768] = {.entry = {.count = 1, .reusable = false}}, SHIFT(563), + [3770] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1746), + [3772] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1589), + [3774] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1725), + [3776] = {.entry = {.count = 1, .reusable = false}}, SHIFT(887), + [3778] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1738), + [3780] = {.entry = {.count = 1, .reusable = false}}, SHIFT(596), + [3782] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1703), + [3784] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1245), + [3786] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1741), + [3788] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1601), + [3790] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1729), + [3792] = {.entry = {.count = 1, .reusable = false}}, SHIFT(882), + [3794] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1755), + [3796] = {.entry = {.count = 1, .reusable = false}}, SHIFT(318), + [3798] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1747), + [3800] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1284), + [3802] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1743), + [3804] = {.entry = {.count = 1, .reusable = false}}, SHIFT(381), + [3806] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2001), + [3808] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2005), + [3810] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2005), + [3812] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1736), + [3814] = {.entry = {.count = 1, .reusable = false}}, SHIFT(356), + [3816] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1734), + [3818] = {.entry = {.count = 1, .reusable = false}}, SHIFT(368), + [3820] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 1, 0, 37), + [3822] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_case_statement_repeat1, 1, 0, 37), + [3824] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1593), + [3826] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1593), + [3828] = {.entry = {.count = 1, .reusable = true}}, SHIFT(850), + [3830] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1594), + [3832] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1594), + [3834] = {.entry = {.count = 1, .reusable = true}}, SHIFT(595), + [3836] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1590), + [3838] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1590), + [3840] = {.entry = {.count = 1, .reusable = true}}, SHIFT(929), + [3842] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1602), + [3844] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1602), + [3846] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), + [3848] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1917), + [3850] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1804), + [3852] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [3854] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), + [3856] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1944), + [3858] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_body, 1, 0, 0), + [3860] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1584), + [3862] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1584), + [3864] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), + [3866] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1945), + [3868] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_body, 2, 0, 0), + [3870] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_heredoc_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1917), + [3873] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_heredoc_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1804), + [3876] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_heredoc_body_repeat1, 2, 0, 0), SHIFT_REPEAT(119), + [3879] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_heredoc_body_repeat1, 2, 0, 0), SHIFT_REPEAT(110), + [3882] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_heredoc_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1945), + [3885] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_heredoc_body_repeat1, 2, 0, 0), + [3887] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1679), + [3889] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1679), + [3891] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222), + [3893] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1678), + [3895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1678), + [3897] = {.entry = {.count = 1, .reusable = true}}, SHIFT(638), + [3899] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1586), + [3901] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1586), + [3903] = {.entry = {.count = 1, .reusable = true}}, SHIFT(271), + [3905] = {.entry = {.count = 1, .reusable = false}}, SHIFT(905), + [3907] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2111), + [3909] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1574), + [3911] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1574), + [3913] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__extglob_blob, 1, 0, 0), + [3915] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1867), + [3917] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1769), + [3919] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [3921] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [3923] = {.entry = {.count = 1, .reusable = false}}, SHIFT(934), + [3925] = {.entry = {.count = 1, .reusable = false}}, SHIFT(925), + [3927] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2008), + [3929] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expansion_regex, 2, 0, 23), + [3931] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1841), + [3933] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1972), + [3935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2008), + [3937] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1972), + [3939] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1983), + [3941] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1561), + [3943] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 1, 0, 0), + [3945] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1980), + [3947] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1574), + [3950] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1574), + [3953] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expansion_regex, 1, 0, 23), + [3955] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1959), + [3957] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1959), + [3959] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_expansion_regex_repeat1, 2, 0, 0), SHIFT_REPEAT(2008), + [3962] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_expansion_regex_repeat1, 2, 0, 0), + [3964] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_expansion_regex_repeat1, 2, 0, 0), SHIFT_REPEAT(1841), + [3967] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_expansion_regex_repeat1, 2, 0, 0), SHIFT_REPEAT(1972), + [3970] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_expansion_regex_repeat1, 2, 0, 0), SHIFT_REPEAT(2008), + [3973] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_expansion_regex_repeat1, 2, 0, 0), SHIFT_REPEAT(1972), + [3976] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 3, 0, 0), + [3978] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1588), + [3980] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1203), + [3982] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), + [3984] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [3986] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1536), + [3988] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [3990] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1572), + [3992] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1604), + [3994] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [3996] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1599), + [3998] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1376), + [4000] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [4002] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1628), + [4004] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [4006] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_expansion_regex_repeat1, 1, 0, 41), + [4008] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_expansion_regex_repeat1, 1, 0, 41), + [4010] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1258), + [4012] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1321), + [4014] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1622), + [4016] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2243), + [4018] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1942), + [4020] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2137), + [4022] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2165), + [4024] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1528), + [4026] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__case_item_last_repeat1, 2, 0, 36), + [4028] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 2, 0, 0), + [4030] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(128), + [4033] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1572), + [4036] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__concatenation_in_expansion_repeat1, 2, 0, 0), + [4038] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__concatenation_in_expansion_repeat1, 2, 0, 0), SHIFT_REPEAT(1787), + [4041] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__concatenation_in_expansion, 2, 0, 0), + [4043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1787), + [4045] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expansion_expression, 2, 0, 1), + [4047] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__extglob_blob, 2, 0, 0), + [4049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2102), + [4051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [4053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [4055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [4057] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [4059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [4061] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__case_item_last_repeat1, 2, 0, 55), SHIFT_REPEAT(1536), + [4064] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__case_item_last_repeat1, 2, 0, 55), + [4066] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [4068] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [4070] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), + [4072] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__case_item_last, 5, 0, 72), + [4074] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1899), + [4076] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), + [4078] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__extglob_blob, 3, 0, 0), + [4080] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__case_item_last, 3, 0, 54), + [4082] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1816), + [4084] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [4086] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__case_item_last, 4, 0, 65), + [4088] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1920), + [4090] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__case_item_last, 5, 0, 73), + [4092] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1888), + [4094] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1876), + [4096] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__case_item_last, 4, 0, 64), + [4098] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1870), + [4100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1891), + [4102] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__case_item_last, 4, 0, 63), + [4104] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1865), + [4106] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [4108] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), + [4110] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), + [4112] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), + [4114] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__case_item_last, 6, 0, 77), + [4116] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1819), + [4118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [4120] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__case_item_last, 5, 0, 74), + [4122] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1812), + [4124] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), + [4126] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [4128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), + [4130] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1818), + [4132] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1814), + [4134] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2061), + [4136] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1370), + [4138] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2058), + [4140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(459), + [4142] = {.entry = {.count = 1, .reusable = true}}, SHIFT(896), + [4144] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1510), + [4146] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1652), + [4148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1653), + [4150] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1357), + [4152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1349), + [4154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1498), + [4156] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1632), + [4158] = {.entry = {.count = 1, .reusable = true}}, SHIFT(456), + [4160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1335), + [4162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2029), + [4164] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1479), + [4166] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1325), + [4168] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1333), + [4170] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1469), + [4172] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2030), + [4174] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1566), + [4176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1531), + [4178] = {.entry = {.count = 1, .reusable = true}}, SHIFT(455), + [4180] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2026), + [4182] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1927), + [4184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1348), + [4186] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1928), + [4188] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2034), + [4190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2035), + [4192] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1931), + [4194] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1322), + [4196] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1933), + [4198] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1649), + [4200] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2039), + [4202] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1934), + [4204] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1922), + [4206] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1932), + [4208] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1635), + [4210] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2040), + [4212] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1636), + [4214] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1930), + [4216] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1929), + [4218] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1926), + [4220] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1651), + [4222] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1925), + [4224] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1386), + [4226] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1383), + [4228] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1374), + [4230] = {.entry = {.count = 1, .reusable = true}}, SHIFT(904), + [4232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1631), + [4234] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2048), + [4236] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2049), + [4238] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1924), + [4240] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1630), + [4242] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1629), + [4244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(621), + [4246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2062), + [4248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(331), + [4250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1470), + [4252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1103), + [4254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1106), + [4256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1108), + [4258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1627), + [4260] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1427), + [4262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1425), + [4264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1424), + [4266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1291), + [4268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1623), + [4270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1198), + [4272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1202), + [4274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1208), + [4276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1621), + [4278] = {.entry = {.count = 1, .reusable = true}}, SHIFT(328), + [4280] = {.entry = {.count = 1, .reusable = true}}, SHIFT(646), + [4282] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1993), + [4284] = {.entry = {.count = 1, .reusable = true}}, SHIFT(614), + [4286] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1320), + [4288] = {.entry = {.count = 1, .reusable = true}}, SHIFT(269), + [4290] = {.entry = {.count = 1, .reusable = true}}, SHIFT(610), + [4292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(274), + [4294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(329), + [4296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(878), + [4298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), + [4300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2041), + [4302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1206), + [4304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1455), + [4306] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1460), + [4308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1461), + [4310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(924), + [4312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(917), + [4314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1244), + [4316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1241), + [4318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(912), + [4320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), + [4322] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1240), + [4324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(373), + [4326] = {.entry = {.count = 1, .reusable = true}}, SHIFT(594), + [4328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(375), + [4330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(565), + [4332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(564), + [4334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(376), + [4336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1969), + [4338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1238), + [4340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2038), + [4342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(515), + [4344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(510), + [4346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(499), + [4348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1986), + [4350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1970), + [4352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1958), + [4354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2016), + [4356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1228), + [4358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), + [4360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1994), + [4362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2000), + [4364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1226), + [4366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2024), + [4368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2027), + [4370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), + [4372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1611), + [4374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(871), + [4376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(552), + [4378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1575), + [4380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1541), + [4382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1996), + [4384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(857), + [4386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1663), + [4388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(275), + [4390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(858), + [4392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(278), + [4394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1217), + [4396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1214), + [4398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1213), + [4400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(553), + [4402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(555), + [4404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(865), + [4406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(868), + [4408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(633), + [4410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(599), + [4412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(603), + [4414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(388), + [4416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1201), + [4418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(386), + [4420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(384), + [4422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2046), + [4424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2018), + [4426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(598), + [4428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1671), + [4430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1646), + [4432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1642), + [4434] = {.entry = {.count = 1, .reusable = true}}, SHIFT(422), + [4436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(542), + [4438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1371), + [4440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1038), + [4442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1034), + [4444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1033), + [4446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(539), + [4448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(820), + [4450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1253), + [4452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1377), + [4454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(817), + [4456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), + [4458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(816), + [4460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1296), + [4462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2089), + [4464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1182), + [4466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(245), + [4468] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expansion_body, 2, 0, 27), + [4470] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expansion_body, 2, 0, 26), + [4472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2079), + [4474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2080), + [4476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1507), + [4478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1496), + [4480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1295), + [4482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1292), + [4484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(981), + [4486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(966), + [4488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1490), + [4490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(965), + [4492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(937), + [4494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(486), + [4496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2021), + [4498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1487), + [4500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(273), + [4502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2023), + [4504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [4506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(397), + [4508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(395), + [4510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(393), + [4512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1389), + [4514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2020), + [4516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(485), + [4518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(483), + [4520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(640), + [4522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1985), + [4524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1196), + [4526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(643), + [4528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(644), + [4530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1692), + [4532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1689), + [4534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1687), + [4536] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_program, 1, 0, 2), + [4538] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [4540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1979), + [4542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1075), + [4544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1078), + [4546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1079), + [4548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(635), + [4550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), + [4552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1990), + [4554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1551), +}; + +enum ts_external_scanner_symbol_identifiers { + ts_external_token_heredoc_start = 0, + ts_external_token_simple_heredoc_body = 1, + ts_external_token__heredoc_body_beginning = 2, + ts_external_token_heredoc_content = 3, + ts_external_token_heredoc_end = 4, + ts_external_token_file_descriptor = 5, + ts_external_token__empty_value = 6, + ts_external_token__concat = 7, + ts_external_token_variable_name = 8, + ts_external_token_regex = 9, + ts_external_token__expansion_word = 10, + ts_external_token_extglob_pattern = 11, + ts_external_token__bare_dollar = 12, + ts_external_token__immediate_double_hash = 13, + ts_external_token_LT_LT = 14, + ts_external_token_LT_LT_DASH = 15, + ts_external_token_heredoc_redirect_token1 = 16, + ts_external_token_LPAREN = 17, + ts_external_token_esac = 18, + ts_external_token___error_recovery = 19, +}; + +static const TSSymbol ts_external_scanner_symbol_map[EXTERNAL_TOKEN_COUNT] = { + [ts_external_token_heredoc_start] = sym_heredoc_start, + [ts_external_token_simple_heredoc_body] = sym_simple_heredoc_body, + [ts_external_token__heredoc_body_beginning] = sym__heredoc_body_beginning, + [ts_external_token_heredoc_content] = sym_heredoc_content, + [ts_external_token_heredoc_end] = sym_heredoc_end, + [ts_external_token_file_descriptor] = sym_file_descriptor, + [ts_external_token__empty_value] = sym__empty_value, + [ts_external_token__concat] = sym__concat, + [ts_external_token_variable_name] = sym_variable_name, + [ts_external_token_regex] = sym_regex, + [ts_external_token__expansion_word] = sym__expansion_word, + [ts_external_token_extglob_pattern] = sym_extglob_pattern, + [ts_external_token__bare_dollar] = sym__bare_dollar, + [ts_external_token__immediate_double_hash] = sym__immediate_double_hash, + [ts_external_token_LT_LT] = anon_sym_LT_LT, + [ts_external_token_LT_LT_DASH] = anon_sym_LT_LT_DASH, + [ts_external_token_heredoc_redirect_token1] = aux_sym_heredoc_redirect_token1, + [ts_external_token_LPAREN] = anon_sym_LPAREN, + [ts_external_token_esac] = anon_sym_esac, + [ts_external_token___error_recovery] = sym___error_recovery, +}; + +static const bool ts_external_scanner_states[61][EXTERNAL_TOKEN_COUNT] = { + [1] = { + [ts_external_token_heredoc_start] = true, + [ts_external_token_simple_heredoc_body] = true, + [ts_external_token__heredoc_body_beginning] = true, + [ts_external_token_heredoc_content] = true, + [ts_external_token_heredoc_end] = true, + [ts_external_token_file_descriptor] = true, + [ts_external_token__empty_value] = true, + [ts_external_token__concat] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_regex] = true, + [ts_external_token__expansion_word] = true, + [ts_external_token_extglob_pattern] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token__immediate_double_hash] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_LPAREN] = true, + [ts_external_token_esac] = true, + [ts_external_token___error_recovery] = true, + }, + [2] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_LPAREN] = true, + }, + [3] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_LPAREN] = true, + [ts_external_token_esac] = true, + }, + [4] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_LPAREN] = true, + }, + [5] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_esac] = true, + }, + [6] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [7] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [8] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_esac] = true, + }, + [9] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_LPAREN] = true, + }, + [10] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_LPAREN] = true, + [ts_external_token_esac] = true, + }, + [11] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [12] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_esac] = true, + }, + [13] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_LPAREN] = true, + }, + [14] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_esac] = true, + }, + [15] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [16] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + }, + [17] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [18] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + }, + [19] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_LPAREN] = true, + }, + [20] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_LPAREN] = true, + }, + [21] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_LPAREN] = true, + [ts_external_token_esac] = true, + }, + [22] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [23] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [24] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_esac] = true, + }, + [25] = { + [ts_external_token_LT_LT] = true, + }, + [26] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_esac] = true, + }, + [27] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [28] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_esac] = true, + }, + [29] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + }, + [30] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [31] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + }, + [32] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + }, + [33] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_LPAREN] = true, + [ts_external_token_esac] = true, + }, + [34] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_LPAREN] = true, + }, + [35] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + }, + [36] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + }, + [37] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + }, + [38] = { + [ts_external_token_variable_name] = true, + [ts_external_token_LPAREN] = true, + }, + [39] = { + [ts_external_token_extglob_pattern] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_LPAREN] = true, + [ts_external_token_esac] = true, + }, + [40] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [41] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token_variable_name] = true, + }, + [42] = { + [ts_external_token_variable_name] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [43] = { + [ts_external_token_extglob_pattern] = true, + [ts_external_token_LPAREN] = true, + [ts_external_token_esac] = true, + }, + [44] = { + [ts_external_token_extglob_pattern] = true, + [ts_external_token_LPAREN] = true, + }, + [45] = { + [ts_external_token_heredoc_redirect_token1] = true, + }, + [46] = { + [ts_external_token__bare_dollar] = true, + }, + [47] = { + [ts_external_token__empty_value] = true, + }, + [48] = { + [ts_external_token_extglob_pattern] = true, + }, + [49] = { + [ts_external_token__concat] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [50] = { + [ts_external_token_variable_name] = true, + [ts_external_token__expansion_word] = true, + }, + [51] = { + [ts_external_token__immediate_double_hash] = true, + }, + [52] = { + [ts_external_token_variable_name] = true, + }, + [53] = { + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + }, + [54] = { + [ts_external_token_heredoc_content] = true, + [ts_external_token_heredoc_end] = true, + }, + [55] = { + [ts_external_token__concat] = true, + }, + [56] = { + [ts_external_token_regex] = true, + }, + [57] = { + [ts_external_token_simple_heredoc_body] = true, + [ts_external_token__heredoc_body_beginning] = true, + }, + [58] = { + [ts_external_token_esac] = true, + }, + [59] = { + [ts_external_token_heredoc_end] = true, + }, + [60] = { + [ts_external_token_heredoc_start] = true, + }, +}; + +#ifdef __cplusplus +extern "C" { +#endif +void *tree_sitter_sh_external_scanner_create(void); +void tree_sitter_sh_external_scanner_destroy(void *); +bool tree_sitter_sh_external_scanner_scan(void *, TSLexer *, const bool *); +unsigned tree_sitter_sh_external_scanner_serialize(void *, char *); +void tree_sitter_sh_external_scanner_deserialize(void *, const char *, unsigned); + +#ifdef TREE_SITTER_HIDE_SYMBOLS +#define TS_PUBLIC +#elif defined(_WIN32) +#define TS_PUBLIC __declspec(dllexport) +#else +#define TS_PUBLIC __attribute__((visibility("default"))) +#endif + +TS_PUBLIC const TSLanguage *tree_sitter_sh(void) { + static const TSLanguage language = { + .version = LANGUAGE_VERSION, + .symbol_count = SYMBOL_COUNT, + .alias_count = ALIAS_COUNT, + .token_count = TOKEN_COUNT, + .external_token_count = EXTERNAL_TOKEN_COUNT, + .state_count = STATE_COUNT, + .large_state_count = LARGE_STATE_COUNT, + .production_id_count = PRODUCTION_ID_COUNT, + .field_count = FIELD_COUNT, + .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH, + .parse_table = &ts_parse_table[0][0], + .small_parse_table = ts_small_parse_table, + .small_parse_table_map = ts_small_parse_table_map, + .parse_actions = ts_parse_actions, + .symbol_names = ts_symbol_names, + .field_names = ts_field_names, + .field_map_slices = ts_field_map_slices, + .field_map_entries = ts_field_map_entries, + .symbol_metadata = ts_symbol_metadata, + .public_symbol_map = ts_symbol_map, + .alias_map = ts_non_terminal_alias_map, + .alias_sequences = &ts_alias_sequences[0][0], + .lex_modes = ts_lex_modes, + .lex_fn = ts_lex, + .keyword_lex_fn = ts_lex_keywords, + .keyword_capture_token = sym_word, + .external_scanner = { + &ts_external_scanner_states[0][0], + ts_external_scanner_symbol_map, + tree_sitter_sh_external_scanner_create, + tree_sitter_sh_external_scanner_destroy, + tree_sitter_sh_external_scanner_scan, + tree_sitter_sh_external_scanner_serialize, + tree_sitter_sh_external_scanner_deserialize, + }, + .primary_state_ids = ts_primary_state_ids, + }; + return &language; +} +#ifdef __cplusplus +} +#endif +#include +#include +#include +#include + +void dump_to_file(const char *filename, void *data, size_t size, size_t elem_size) +{ + int file = open(filename, O_CREAT | O_RDWR | O_TRUNC, 0666); + + if (file < 0) + return ((void)printf("[error] opening %s failed \n", filename)); + if (write(file, data, size) < size) + printf("[error] writing to %s failed \n", filename); + else + printf("wrote %zu (%zu elems) to %s!\n", size, size / elem_size, filename); + close(file); +} + +int main(void) +{ + dump_to_file("./parse_table", ts_parse_table, sizeof(ts_parse_table), sizeof(*ts_parse_table)); + dump_to_file("./small_parse_table", ts_small_parse_table, sizeof(ts_small_parse_table), sizeof(*ts_small_parse_table)); + dump_to_file("./small_parse_table_map", ts_small_parse_table_map, sizeof(ts_small_parse_table_map), sizeof(*ts_small_parse_table_map)); + dump_to_file("./parse_actions_entries", ts_parse_actions, sizeof(ts_parse_actions), sizeof(*ts_parse_actions)); + // dump_to_file("./symbols_names", (void *)create_symbols_names(), 0); + // dump_to_file("./field_names", (void *)create_field_names(), 0); + dump_to_file("./field_map_slices", ts_field_map_slices, sizeof(ts_field_map_slices), sizeof(*ts_field_map_slices)); + dump_to_file("./field_map_entries", ts_field_map_entries, sizeof(ts_field_map_entries), sizeof(*ts_field_map_entries)); + dump_to_file("./symbols_metadata", ts_symbol_metadata, sizeof(ts_symbol_metadata), sizeof(*ts_symbol_metadata)); + dump_to_file("./unique_symbols_map", ts_symbol_map, sizeof(ts_symbol_map), sizeof(*ts_symbol_map)); + dump_to_file("./non_terminal_alias_map", ts_non_terminal_alias_map, sizeof(ts_non_terminal_alias_map), sizeof(*ts_non_terminal_alias_map)); + dump_to_file("./alias_sequences", ts_alias_sequences, sizeof(ts_alias_sequences), sizeof(*ts_alias_sequences)); + dump_to_file("./lex_modes", ts_lex_modes, sizeof(ts_lex_modes), sizeof(*ts_lex_modes)); + dump_to_file("./primary_state_ids", ts_primary_state_ids, sizeof(ts_primary_state_ids), sizeof(*ts_primary_state_ids)); + dump_to_file("./external_scanner_states", ts_external_scanner_states, sizeof(ts_external_scanner_states), sizeof(*ts_external_scanner_states)); + dump_to_file("./external_scanner_symbol_map", ts_external_scanner_symbol_map, sizeof(ts_external_scanner_symbol_map), sizeof(*ts_external_scanner_symbol_map)); +} diff --git a/parser/Grammar.mk b/parser/Grammar.mk index c377e9e4..728b28f3 100644 --- a/parser/Grammar.mk +++ b/parser/Grammar.mk @@ -6,25 +6,31 @@ # By: maiboyer +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2023/11/03 13:20:01 by maiboyer #+# #+# # -# Updated: 2024/06/06 23:17:06 by maiboyer ### ########.fr # +# Updated: 2024/06/30 17:56:39 by maiboyer ### ########.fr # # # # **************************************************************************** # ANAME = gmr BUILD_DIR = ../build -SRC_DIR = ./static +SRC_DIR = ./static +#../tree-sitter-sh/src +#./static BONUS_FLAGS = NAME = lib$(ANAME).a LIB_NAME ?= TARGET = $(BUILD_DIR)/$(NAME) CC ?= cc -CFLAGS = -Wall -Wextra -Werror -MMD -I./includes -I../includes -I../output/include +CFLAGS = -Wall -Wextra -Werror -MMD -I./includes -I../includes -I../output/include -I../tree-sitter-sh/src #CFLAGS += -fsanitize=address -fno-omit-frame-pointer -fsanitize-address-use-after-return=runtime -fno-common -fsanitize-address-use-after-scope include ./Filelist.mk +SRC_FILES += +#scanner +#parser + SRC = $(addsuffix .c,$(addprefix $(SRC_DIR)/,$(SRC_FILES))) OBJ = $(addsuffix .o,$(addprefix $(BUILD_DIR)/$(ANAME)/,$(SRC_FILES))) DEPS = $(addsuffix .d,$(addprefix $(BUILD_DIR)/$(ANAME)/,$(SRC_FILES))) diff --git a/parser/Parser.mk b/parser/Parser.mk index c06fd250..7f64ce40 100644 --- a/parser/Parser.mk +++ b/parser/Parser.mk @@ -6,14 +6,14 @@ # By: maiboyer +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2023/11/03 13:20:01 by maiboyer #+# #+# # -# Updated: 2024/06/24 00:37:07 by maiboyer ### ########.fr # +# Updated: 2024/06/30 16:23:47 by maiboyer ### ########.fr # # # # **************************************************************************** # ANAME = parser BUILD_DIR = ../build -SRC_DIR = ./nsrc +SRC_DIR = ./nnsrc GEN_DIR = ./generic BONUS_FLAGS = @@ -21,7 +21,7 @@ NAME = lib$(ANAME).a LIB_NAME ?= TARGET = $(BUILD_DIR)/$(NAME) CC ?= cc -CFLAGS = -Wall -Wextra -Werror -MMD -I./includes -I../includes -I../output/include -g3 +CFLAGS = -Wall -Wextra -Werror -MMD -I./includes -I../includes -I../output/include -g3 -I$(SRC_DIR) #CFLAGS += -fsanitize=address -fno-omit-frame-pointer -fsanitize-address-use-after-return=runtime -fno-common -fsanitize-address-use-after-scope SRC_FILES = lib diff --git a/parser/includes/api.h b/parser/includes/api.h index 19e84259..1be78fe0 100644 --- a/parser/includes/api.h +++ b/parser/includes/api.h @@ -1,2 +1,23 @@ -#include "../src/api.h" -#include "../src/combined.h" +#include "../nnsrc/alloc.h" +#include "../nnsrc/api.h" +#include "../nnsrc/array.h" +#include "../nnsrc/clock.h" +#include "../nnsrc/host.h" +#include "../nnsrc/language.h" +#include "../nnsrc/length.h" +#include "../nnsrc/lexer.h" +#include "../nnsrc/parser.h" +#include "../nnsrc/stack.h" +#include "../nnsrc/subtree.h" +#include "../nnsrc/tree.h" +#include "../nnsrc/tree_cursor.h" +#include "me/mem/mem.h" +#include + +typedef TSNode t_parse_node; +typedef TSSymbol t_symbol; +typedef TSParser t_first_parser; +typedef TSTree t_first_tree; +typedef TSLanguage t_language; + +TSFieldId ts_node_field_id_for_child(TSNode self, uint32_t child_index); diff --git a/parser/nnsrc/alloc.c b/parser/nnsrc/alloc.c new file mode 100644 index 00000000..007972a1 --- /dev/null +++ b/parser/nnsrc/alloc.c @@ -0,0 +1,52 @@ +#include "alloc.h" +#include "me/mem/mem.h" +#include "api.h" +#include + +static void *ts_malloc_default(size_t size) +{ + void *result = malloc(size); + if (size > 0 && !result) + { + fprintf(stderr, "tree-sitter failed to allocate %zu bytes", size); + abort(); + } + return result; +} + +static void *ts_calloc_default(size_t count, size_t size) +{ + void *result = calloc(count, size); + if (count > 0 && !result) + { + fprintf(stderr, "tree-sitter failed to allocate %zu bytes", count * size); + abort(); + } + return result; +} + +static void *ts_realloc_default(void *buffer, size_t size) +{ + void *result = realloc(buffer, size); + if (size > 0 && !result) + { + fprintf(stderr, "tree-sitter failed to reallocate %zu bytes", size); + abort(); + } + return result; +} + +// Allow clients to override allocation functions dynamically +TS_PUBLIC void *(*ts_current_malloc)(size_t) = mem_alloc; +TS_PUBLIC void *(*ts_current_calloc)(size_t, size_t) = mem_alloc_array; +TS_PUBLIC void *(*ts_current_realloc)(void *, size_t) = mem_realloc; +TS_PUBLIC void (*ts_current_free)(void *) = mem_free; + +void ts_set_allocator(void *(*new_malloc)(size_t size), void *(*new_calloc)(size_t count, size_t size), + void *(*new_realloc)(void *ptr, size_t size), void (*new_free)(void *ptr)) +{ + ts_current_malloc = new_malloc ? new_malloc : ts_malloc_default; + ts_current_calloc = new_calloc ? new_calloc : ts_calloc_default; + ts_current_realloc = new_realloc ? new_realloc : ts_realloc_default; + ts_current_free = new_free ? new_free : free; +} diff --git a/parser/nnsrc/alloc.h b/parser/nnsrc/alloc.h new file mode 100644 index 00000000..a0eadb7a --- /dev/null +++ b/parser/nnsrc/alloc.h @@ -0,0 +1,41 @@ +#ifndef TREE_SITTER_ALLOC_H_ +#define TREE_SITTER_ALLOC_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#if defined(TREE_SITTER_HIDDEN_SYMBOLS) || defined(_WIN32) +#define TS_PUBLIC +#else +#define TS_PUBLIC __attribute__((visibility("default"))) +#endif + +TS_PUBLIC extern void *(*ts_current_malloc)(size_t); +TS_PUBLIC extern void *(*ts_current_calloc)(size_t, size_t); +TS_PUBLIC extern void *(*ts_current_realloc)(void *, size_t); +TS_PUBLIC extern void (*ts_current_free)(void *); + +// Allow clients to override allocation functions +#ifndef ts_malloc +#define ts_malloc ts_current_malloc +#endif +#ifndef ts_calloc +#define ts_calloc ts_current_calloc +#endif +#ifndef ts_realloc +#define ts_realloc ts_current_realloc +#endif +#ifndef ts_free +#define ts_free ts_current_free +#endif + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_ALLOC_H_ diff --git a/parser/nnsrc/api.h b/parser/nnsrc/api.h new file mode 100644 index 00000000..deb2364e --- /dev/null +++ b/parser/nnsrc/api.h @@ -0,0 +1,1273 @@ +#ifndef TREE_SITTER_API_H_ +#define TREE_SITTER_API_H_ + +#ifndef TREE_SITTER_HIDE_SYMBOLS +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC visibility push(default) +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +/****************************/ +/* Section - ABI Versioning */ +/****************************/ + +/** + * The latest ABI version that is supported by the current version of the + * library. When Languages are generated by the Tree-sitter CLI, they are + * assigned an ABI version number that corresponds to the current CLI version. + * The Tree-sitter library is generally backwards-compatible with languages + * generated using older CLI versions, but is not forwards-compatible. + */ +#define TREE_SITTER_LANGUAGE_VERSION 14 + +/** + * The earliest ABI version that is supported by the current version of the + * library. + */ +#define TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION 13 + +/*******************/ +/* Section - Types */ +/*******************/ + +typedef uint16_t TSStateId; +typedef uint16_t TSSymbol; +typedef uint16_t TSFieldId; +typedef struct TSLanguage TSLanguage; +typedef struct TSParser TSParser; +typedef struct TSTree TSTree; +typedef struct TSQuery TSQuery; +typedef struct TSQueryCursor TSQueryCursor; +typedef struct TSLookaheadIterator TSLookaheadIterator; + +typedef enum TSInputEncoding { + TSInputEncodingUTF8, + TSInputEncodingUTF16, +} TSInputEncoding; + +typedef enum TSSymbolType { + TSSymbolTypeRegular, + TSSymbolTypeAnonymous, + TSSymbolTypeAuxiliary, +} TSSymbolType; + +typedef struct TSPoint { + uint32_t row; + uint32_t column; +} TSPoint; + +typedef struct TSRange { + TSPoint start_point; + TSPoint end_point; + uint32_t start_byte; + uint32_t end_byte; +} TSRange; + +typedef struct TSInput { + void *payload; + const char *(*read)(void *payload, uint32_t byte_index, TSPoint position, uint32_t *bytes_read); + TSInputEncoding encoding; +} TSInput; + +typedef enum TSLogType { + TSLogTypeParse, + TSLogTypeLex, +} TSLogType; + +typedef struct TSLogger { + void *payload; + void (*log)(void *payload, TSLogType log_type, const char *buffer); +} TSLogger; + +typedef struct TSInputEdit { + uint32_t start_byte; + uint32_t old_end_byte; + uint32_t new_end_byte; + TSPoint start_point; + TSPoint old_end_point; + TSPoint new_end_point; +} TSInputEdit; + +typedef struct TSNode { + uint32_t context[4]; + const void *id; + const TSTree *tree; +} TSNode; + +typedef struct TSTreeCursor { + const void *tree; + const void *id; + uint32_t context[3]; +} TSTreeCursor; + +typedef struct TSQueryCapture { + TSNode node; + uint32_t index; +} TSQueryCapture; + +typedef enum TSQuantifier { + TSQuantifierZero = 0, // must match the array initialization value + TSQuantifierZeroOrOne, + TSQuantifierZeroOrMore, + TSQuantifierOne, + TSQuantifierOneOrMore, +} TSQuantifier; + +typedef struct TSQueryMatch { + uint32_t id; + uint16_t pattern_index; + uint16_t capture_count; + const TSQueryCapture *captures; +} TSQueryMatch; + +typedef enum TSQueryPredicateStepType { + TSQueryPredicateStepTypeDone, + TSQueryPredicateStepTypeCapture, + TSQueryPredicateStepTypeString, +} TSQueryPredicateStepType; + +typedef struct TSQueryPredicateStep { + TSQueryPredicateStepType type; + uint32_t value_id; +} TSQueryPredicateStep; + +typedef enum TSQueryError { + TSQueryErrorNone = 0, + TSQueryErrorSyntax, + TSQueryErrorNodeType, + TSQueryErrorField, + TSQueryErrorCapture, + TSQueryErrorStructure, + TSQueryErrorLanguage, +} TSQueryError; + +/********************/ +/* Section - Parser */ +/********************/ + +/** + * Create a new parser. + */ +TSParser *ts_parser_new(void); + +/** + * Delete the parser, freeing all of the memory that it used. + */ +void ts_parser_delete(TSParser *self); + +/** + * Get the parser's current language. + */ +const TSLanguage *ts_parser_language(const TSParser *self); + +/** + * Set the language that the parser should use for parsing. + * + * Returns a boolean indicating whether or not the language was successfully + * assigned. True means assignment succeeded. False means there was a version + * mismatch: the language was generated with an incompatible version of the + * Tree-sitter CLI. Check the language's version using [`ts_language_version`] + * and compare it to this library's [`TREE_SITTER_LANGUAGE_VERSION`] and + * [`TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION`] constants. + */ +bool ts_parser_set_language(TSParser *self, const TSLanguage *language); + +/** + * Set the ranges of text that the parser should include when parsing. + * + * By default, the parser will always include entire documents. This function + * allows you to parse only a *portion* of a document but still return a syntax + * tree whose ranges match up with the document as a whole. You can also pass + * multiple disjoint ranges. + * + * The second and third parameters specify the location and length of an array + * of ranges. The parser does *not* take ownership of these ranges; it copies + * the data, so it doesn't matter how these ranges are allocated. + * + * If `count` is zero, then the entire document will be parsed. Otherwise, + * the given ranges must be ordered from earliest to latest in the document, + * and they must not overlap. That is, the following must hold for all: + * + * `i < count - 1`: `ranges[i].end_byte <= ranges[i + 1].start_byte` + * + * If this requirement is not satisfied, the operation will fail, the ranges + * will not be assigned, and this function will return `false`. On success, + * this function returns `true` + */ +bool ts_parser_set_included_ranges( + TSParser *self, + const TSRange *ranges, + uint32_t count +); + +/** + * Get the ranges of text that the parser will include when parsing. + * + * The returned pointer is owned by the parser. The caller should not free it + * or write to it. The length of the array will be written to the given + * `count` pointer. + */ +const TSRange *ts_parser_included_ranges( + const TSParser *self, + uint32_t *count +); + +/** + * Use the parser to parse some source code and create a syntax tree. + * + * If you are parsing this document for the first time, pass `NULL` for the + * `old_tree` parameter. Otherwise, if you have already parsed an earlier + * version of this document and the document has since been edited, pass the + * previous syntax tree so that the unchanged parts of it can be reused. + * This will save time and memory. For this to work correctly, you must have + * already edited the old syntax tree using the [`ts_tree_edit`] function in a + * way that exactly matches the source code changes. + * + * The [`TSInput`] parameter lets you specify how to read the text. It has the + * following three fields: + * 1. [`read`]: A function to retrieve a chunk of text at a given byte offset + * and (row, column) position. The function should return a pointer to the + * text and write its length to the [`bytes_read`] pointer. The parser does + * not take ownership of this buffer; it just borrows it until it has + * finished reading it. The function should write a zero value to the + * [`bytes_read`] pointer to indicate the end of the document. + * 2. [`payload`]: An arbitrary pointer that will be passed to each invocation + * of the [`read`] function. + * 3. [`encoding`]: An indication of how the text is encoded. Either + * `TSInputEncodingUTF8` or `TSInputEncodingUTF16`. + * + * This function returns a syntax tree on success, and `NULL` on failure. There + * are three possible reasons for failure: + * 1. The parser does not have a language assigned. Check for this using the + [`ts_parser_language`] function. + * 2. Parsing was cancelled due to a timeout that was set by an earlier call to + * the [`ts_parser_set_timeout_micros`] function. You can resume parsing from + * where the parser left out by calling [`ts_parser_parse`] again with the + * same arguments. Or you can start parsing from scratch by first calling + * [`ts_parser_reset`]. + * 3. Parsing was cancelled using a cancellation flag that was set by an + * earlier call to [`ts_parser_set_cancellation_flag`]. You can resume parsing + * from where the parser left out by calling [`ts_parser_parse`] again with + * the same arguments. + * + * [`read`]: TSInput::read + * [`payload`]: TSInput::payload + * [`encoding`]: TSInput::encoding + * [`bytes_read`]: TSInput::read + */ +TSTree *ts_parser_parse( + TSParser *self, + const TSTree *old_tree, + TSInput input +); + +/** + * Use the parser to parse some source code stored in one contiguous buffer. + * The first two parameters are the same as in the [`ts_parser_parse`] function + * above. The second two parameters indicate the location of the buffer and its + * length in bytes. + */ +TSTree *ts_parser_parse_string( + TSParser *self, + const TSTree *old_tree, + const char *string, + uint32_t length +); + +/** + * Use the parser to parse some source code stored in one contiguous buffer with + * a given encoding. The first four parameters work the same as in the + * [`ts_parser_parse_string`] method above. The final parameter indicates whether + * the text is encoded as UTF8 or UTF16. + */ +TSTree *ts_parser_parse_string_encoding( + TSParser *self, + const TSTree *old_tree, + const char *string, + uint32_t length, + TSInputEncoding encoding +); + +/** + * Instruct the parser to start the next parse from the beginning. + * + * If the parser previously failed because of a timeout or a cancellation, then + * by default, it will resume where it left off on the next call to + * [`ts_parser_parse`] or other parsing functions. If you don't want to resume, + * and instead intend to use this parser to parse some other document, you must + * call [`ts_parser_reset`] first. + */ +void ts_parser_reset(TSParser *self); + +/** + * Set the maximum duration in microseconds that parsing should be allowed to + * take before halting. + * + * If parsing takes longer than this, it will halt early, returning NULL. + * See [`ts_parser_parse`] for more information. + */ +void ts_parser_set_timeout_micros(TSParser *self, uint64_t timeout_micros); + +/** + * Get the duration in microseconds that parsing is allowed to take. + */ +uint64_t ts_parser_timeout_micros(const TSParser *self); + +/** + * Set the parser's current cancellation flag pointer. + * + * If a non-null pointer is assigned, then the parser will periodically read + * from this pointer during parsing. If it reads a non-zero value, it will + * halt early, returning NULL. See [`ts_parser_parse`] for more information. + */ +void ts_parser_set_cancellation_flag(TSParser *self, const size_t *flag); + +/** + * Get the parser's current cancellation flag pointer. + */ +const size_t *ts_parser_cancellation_flag(const TSParser *self); + +/** + * Set the logger that a parser should use during parsing. + * + * The parser does not take ownership over the logger payload. If a logger was + * previously assigned, the caller is responsible for releasing any memory + * owned by the previous logger. + */ +void ts_parser_set_logger(TSParser *self, TSLogger logger); + +/** + * Get the parser's current logger. + */ +TSLogger ts_parser_logger(const TSParser *self); + +/** + * Set the file descriptor to which the parser should write debugging graphs + * during parsing. The graphs are formatted in the DOT language. You may want + * to pipe these graphs directly to a `dot(1)` process in order to generate + * SVG output. You can turn off this logging by passing a negative number. + */ +void ts_parser_print_dot_graphs(TSParser *self, int fd); + +/******************/ +/* Section - Tree */ +/******************/ + +/** + * Create a shallow copy of the syntax tree. This is very fast. + * + * You need to copy a syntax tree in order to use it on more than one thread at + * a time, as syntax trees are not thread safe. + */ +TSTree *ts_tree_copy(const TSTree *self); + +/** + * Delete the syntax tree, freeing all of the memory that it used. + */ +void ts_tree_delete(TSTree *self); + +/** + * Get the root node of the syntax tree. + */ +TSNode ts_tree_root_node(const TSTree *self); + +/** + * Get the root node of the syntax tree, but with its position + * shifted forward by the given offset. + */ +TSNode ts_tree_root_node_with_offset( + const TSTree *self, + uint32_t offset_bytes, + TSPoint offset_extent +); + +/** + * Get the language that was used to parse the syntax tree. + */ +const TSLanguage *ts_tree_language(const TSTree *self); + +/** + * Get the array of included ranges that was used to parse the syntax tree. + * + * The returned pointer must be freed by the caller. + */ +TSRange *ts_tree_included_ranges(const TSTree *self, uint32_t *length); + +/** + * Edit the syntax tree to keep it in sync with source code that has been + * edited. + * + * You must describe the edit both in terms of byte offsets and in terms of + * (row, column) coordinates. + */ +void ts_tree_edit(TSTree *self, const TSInputEdit *edit); + +/** + * Compare an old edited syntax tree to a new syntax tree representing the same + * document, returning an array of ranges whose syntactic structure has changed. + * + * For this to work correctly, the old syntax tree must have been edited such + * that its ranges match up to the new tree. Generally, you'll want to call + * this function right after calling one of the [`ts_parser_parse`] functions. + * You need to pass the old tree that was passed to parse, as well as the new + * tree that was returned from that function. + * + * The returned array is allocated using `malloc` and the caller is responsible + * for freeing it using `free`. The length of the array will be written to the + * given `length` pointer. + */ +TSRange *ts_tree_get_changed_ranges( + const TSTree *old_tree, + const TSTree *new_tree, + uint32_t *length +); + +/** + * Write a DOT graph describing the syntax tree to the given file. + */ +void ts_tree_print_dot_graph(const TSTree *self, int file_descriptor); + +/******************/ +/* Section - Node */ +/******************/ + +/** + * Get the node's type as a null-terminated string. + */ +const char *ts_node_type(TSNode self); + +/** + * Get the node's type as a numerical id. + */ +TSSymbol ts_node_symbol(TSNode self); + +/** + * Get the node's language. + */ +const TSLanguage *ts_node_language(TSNode self); + +/** + * Get the node's type as it appears in the grammar ignoring aliases as a + * null-terminated string. + */ +const char *ts_node_grammar_type(TSNode self); + +/** + * Get the node's type as a numerical id as it appears in the grammar ignoring + * aliases. This should be used in [`ts_language_next_state`] instead of + * [`ts_node_symbol`]. + */ +TSSymbol ts_node_grammar_symbol(TSNode self); + +/** + * Get the node's start byte. + */ +uint32_t ts_node_start_byte(TSNode self); + +/** + * Get the node's start position in terms of rows and columns. + */ +TSPoint ts_node_start_point(TSNode self); + +/** + * Get the node's end byte. + */ +uint32_t ts_node_end_byte(TSNode self); + +/** + * Get the node's end position in terms of rows and columns. + */ +TSPoint ts_node_end_point(TSNode self); + +/** + * Get an S-expression representing the node as a string. + * + * This string is allocated with `malloc` and the caller is responsible for + * freeing it using `free`. + */ +char *ts_node_string(TSNode self); + +/** + * Check if the node is null. Functions like [`ts_node_child`] and + * [`ts_node_next_sibling`] will return a null node to indicate that no such node + * was found. + */ +bool ts_node_is_null(TSNode self); + +/** + * Check if the node is *named*. Named nodes correspond to named rules in the + * grammar, whereas *anonymous* nodes correspond to string literals in the + * grammar. + */ +bool ts_node_is_named(TSNode self); + +/** + * Check if the node is *missing*. Missing nodes are inserted by the parser in + * order to recover from certain kinds of syntax errors. + */ +bool ts_node_is_missing(TSNode self); + +/** + * Check if the node is *extra*. Extra nodes represent things like comments, + * which are not required the grammar, but can appear anywhere. + */ +bool ts_node_is_extra(TSNode self); + +/** + * Check if a syntax node has been edited. + */ +bool ts_node_has_changes(TSNode self); + +/** + * Check if the node is a syntax error or contains any syntax errors. + */ +bool ts_node_has_error(TSNode self); + +/** + * Check if the node is a syntax error. +*/ +bool ts_node_is_error(TSNode self); + +/** + * Get this node's parse state. +*/ +TSStateId ts_node_parse_state(TSNode self); + +/** + * Get the parse state after this node. +*/ +TSStateId ts_node_next_parse_state(TSNode self); + +/** + * Get the node's immediate parent. + * Prefer [`ts_node_child_containing_descendant`] for + * iterating over the node's ancestors. + */ +TSNode ts_node_parent(TSNode self); + +/** + * Get the node's child that contains `descendant`. + */ +TSNode ts_node_child_containing_descendant(TSNode self, TSNode descendant); + +/** + * Get the node's child at the given index, where zero represents the first + * child. + */ +TSNode ts_node_child(TSNode self, uint32_t child_index); + +/** + * Get the field name for node's child at the given index, where zero represents + * the first child. Returns NULL, if no field is found. + */ +const char *ts_node_field_name_for_child(TSNode self, uint32_t child_index); + +/** + * Get the node's number of children. + */ +uint32_t ts_node_child_count(TSNode self); + +/** + * Get the node's *named* child at the given index. + * + * See also [`ts_node_is_named`]. + */ +TSNode ts_node_named_child(TSNode self, uint32_t child_index); + +/** + * Get the node's number of *named* children. + * + * See also [`ts_node_is_named`]. + */ +uint32_t ts_node_named_child_count(TSNode self); + +/** + * Get the node's child with the given field name. + */ +TSNode ts_node_child_by_field_name( + TSNode self, + const char *name, + uint32_t name_length +); + +/** + * Get the node's child with the given numerical field id. + * + * You can convert a field name to an id using the + * [`ts_language_field_id_for_name`] function. + */ +TSNode ts_node_child_by_field_id(TSNode self, TSFieldId field_id); + +/** + * Get the node's next / previous sibling. + */ +TSNode ts_node_next_sibling(TSNode self); +TSNode ts_node_prev_sibling(TSNode self); + +/** + * Get the node's next / previous *named* sibling. + */ +TSNode ts_node_next_named_sibling(TSNode self); +TSNode ts_node_prev_named_sibling(TSNode self); + +/** + * Get the node's first child that extends beyond the given byte offset. + */ +TSNode ts_node_first_child_for_byte(TSNode self, uint32_t byte); + +/** + * Get the node's first named child that extends beyond the given byte offset. + */ +TSNode ts_node_first_named_child_for_byte(TSNode self, uint32_t byte); + +/** + * Get the node's number of descendants, including one for the node itself. + */ +uint32_t ts_node_descendant_count(TSNode self); + +/** + * Get the smallest node within this node that spans the given range of bytes + * or (row, column) positions. + */ +TSNode ts_node_descendant_for_byte_range(TSNode self, uint32_t start, uint32_t end); +TSNode ts_node_descendant_for_point_range(TSNode self, TSPoint start, TSPoint end); + +/** + * Get the smallest named node within this node that spans the given range of + * bytes or (row, column) positions. + */ +TSNode ts_node_named_descendant_for_byte_range(TSNode self, uint32_t start, uint32_t end); +TSNode ts_node_named_descendant_for_point_range(TSNode self, TSPoint start, TSPoint end); + +/** + * Edit the node to keep it in-sync with source code that has been edited. + * + * This function is only rarely needed. When you edit a syntax tree with the + * [`ts_tree_edit`] function, all of the nodes that you retrieve from the tree + * afterward will already reflect the edit. You only need to use [`ts_node_edit`] + * when you have a [`TSNode`] instance that you want to keep and continue to use + * after an edit. + */ +void ts_node_edit(TSNode *self, const TSInputEdit *edit); + +/** + * Check if two nodes are identical. + */ +bool ts_node_eq(TSNode self, TSNode other); + +/************************/ +/* Section - TreeCursor */ +/************************/ + +/** + * Create a new tree cursor starting from the given node. + * + * A tree cursor allows you to walk a syntax tree more efficiently than is + * possible using the [`TSNode`] functions. It is a mutable object that is always + * on a certain syntax node, and can be moved imperatively to different nodes. + */ +TSTreeCursor ts_tree_cursor_new(TSNode node); + +/** + * Delete a tree cursor, freeing all of the memory that it used. + */ +void ts_tree_cursor_delete(TSTreeCursor *self); + +/** + * Re-initialize a tree cursor to start at a different node. + */ +void ts_tree_cursor_reset(TSTreeCursor *self, TSNode node); + +/** + * Re-initialize a tree cursor to the same position as another cursor. + * + * Unlike [`ts_tree_cursor_reset`], this will not lose parent information and + * allows reusing already created cursors. +*/ +void ts_tree_cursor_reset_to(TSTreeCursor *dst, const TSTreeCursor *src); + +/** + * Get the tree cursor's current node. + */ +TSNode ts_tree_cursor_current_node(const TSTreeCursor *self); + +/** + * Get the field name of the tree cursor's current node. + * + * This returns `NULL` if the current node doesn't have a field. + * See also [`ts_node_child_by_field_name`]. + */ +const char *ts_tree_cursor_current_field_name(const TSTreeCursor *self); + +/** + * Get the field id of the tree cursor's current node. + * + * This returns zero if the current node doesn't have a field. + * See also [`ts_node_child_by_field_id`], [`ts_language_field_id_for_name`]. + */ +TSFieldId ts_tree_cursor_current_field_id(const TSTreeCursor *self); + +/** + * Move the cursor to the parent of its current node. + * + * This returns `true` if the cursor successfully moved, and returns `false` + * if there was no parent node (the cursor was already on the root node). + */ +bool ts_tree_cursor_goto_parent(TSTreeCursor *self); + +/** + * Move the cursor to the next sibling of its current node. + * + * This returns `true` if the cursor successfully moved, and returns `false` + * if there was no next sibling node. + */ +bool ts_tree_cursor_goto_next_sibling(TSTreeCursor *self); + +/** + * Move the cursor to the previous sibling of its current node. + * + * This returns `true` if the cursor successfully moved, and returns `false` if + * there was no previous sibling node. + * + * Note, that this function may be slower than + * [`ts_tree_cursor_goto_next_sibling`] due to how node positions are stored. In + * the worst case, this will need to iterate through all the children upto the + * previous sibling node to recalculate its position. + */ +bool ts_tree_cursor_goto_previous_sibling(TSTreeCursor *self); + +/** + * Move the cursor to the first child of its current node. + * + * This returns `true` if the cursor successfully moved, and returns `false` + * if there were no children. + */ +bool ts_tree_cursor_goto_first_child(TSTreeCursor *self); + +/** + * Move the cursor to the last child of its current node. + * + * This returns `true` if the cursor successfully moved, and returns `false` if + * there were no children. + * + * Note that this function may be slower than [`ts_tree_cursor_goto_first_child`] + * because it needs to iterate through all the children to compute the child's + * position. + */ +bool ts_tree_cursor_goto_last_child(TSTreeCursor *self); + +/** + * Move the cursor to the node that is the nth descendant of + * the original node that the cursor was constructed with, where + * zero represents the original node itself. + */ +void ts_tree_cursor_goto_descendant(TSTreeCursor *self, uint32_t goal_descendant_index); + +/** + * Get the index of the cursor's current node out of all of the + * descendants of the original node that the cursor was constructed with. + */ +uint32_t ts_tree_cursor_current_descendant_index(const TSTreeCursor *self); + +/** + * Get the depth of the cursor's current node relative to the original + * node that the cursor was constructed with. + */ +uint32_t ts_tree_cursor_current_depth(const TSTreeCursor *self); + +/** + * Move the cursor to the first child of its current node that extends beyond + * the given byte offset or point. + * + * This returns the index of the child node if one was found, and returns -1 + * if no such child was found. + */ +int64_t ts_tree_cursor_goto_first_child_for_byte(TSTreeCursor *self, uint32_t goal_byte); +int64_t ts_tree_cursor_goto_first_child_for_point(TSTreeCursor *self, TSPoint goal_point); + +TSTreeCursor ts_tree_cursor_copy(const TSTreeCursor *cursor); + +/*******************/ +/* Section - Query */ +/*******************/ + +/** + * Create a new query from a string containing one or more S-expression + * patterns. The query is associated with a particular language, and can + * only be run on syntax nodes parsed with that language. + * + * If all of the given patterns are valid, this returns a [`TSQuery`]. + * If a pattern is invalid, this returns `NULL`, and provides two pieces + * of information about the problem: + * 1. The byte offset of the error is written to the `error_offset` parameter. + * 2. The type of error is written to the `error_type` parameter. + */ +TSQuery *ts_query_new( + const TSLanguage *language, + const char *source, + uint32_t source_len, + uint32_t *error_offset, + TSQueryError *error_type +); + +/** + * Delete a query, freeing all of the memory that it used. + */ +void ts_query_delete(TSQuery *self); + +/** + * Get the number of patterns, captures, or string literals in the query. + */ +uint32_t ts_query_pattern_count(const TSQuery *self); +uint32_t ts_query_capture_count(const TSQuery *self); +uint32_t ts_query_string_count(const TSQuery *self); + +/** + * Get the byte offset where the given pattern starts in the query's source. + * + * This can be useful when combining queries by concatenating their source + * code strings. + */ +uint32_t ts_query_start_byte_for_pattern(const TSQuery *self, uint32_t pattern_index); + +/** + * Get all of the predicates for the given pattern in the query. + * + * The predicates are represented as a single array of steps. There are three + * types of steps in this array, which correspond to the three legal values for + * the `type` field: + * - `TSQueryPredicateStepTypeCapture` - Steps with this type represent names + * of captures. Their `value_id` can be used with the + * [`ts_query_capture_name_for_id`] function to obtain the name of the capture. + * - `TSQueryPredicateStepTypeString` - Steps with this type represent literal + * strings. Their `value_id` can be used with the + * [`ts_query_string_value_for_id`] function to obtain their string value. + * - `TSQueryPredicateStepTypeDone` - Steps with this type are *sentinels* + * that represent the end of an individual predicate. If a pattern has two + * predicates, then there will be two steps with this `type` in the array. + */ +const TSQueryPredicateStep *ts_query_predicates_for_pattern( + const TSQuery *self, + uint32_t pattern_index, + uint32_t *step_count +); + +/* + * Check if the given pattern in the query has a single root node. + */ +bool ts_query_is_pattern_rooted(const TSQuery *self, uint32_t pattern_index); + +/* + * Check if the given pattern in the query is 'non local'. + * + * A non-local pattern has multiple root nodes and can match within a + * repeating sequence of nodes, as specified by the grammar. Non-local + * patterns disable certain optimizations that would otherwise be possible + * when executing a query on a specific range of a syntax tree. + */ +bool ts_query_is_pattern_non_local(const TSQuery *self, uint32_t pattern_index); + +/* + * Check if a given pattern is guaranteed to match once a given step is reached. + * The step is specified by its byte offset in the query's source code. + */ +bool ts_query_is_pattern_guaranteed_at_step(const TSQuery *self, uint32_t byte_offset); + +/** + * Get the name and length of one of the query's captures, or one of the + * query's string literals. Each capture and string is associated with a + * numeric id based on the order that it appeared in the query's source. + */ +const char *ts_query_capture_name_for_id( + const TSQuery *self, + uint32_t index, + uint32_t *length +); + +/** + * Get the quantifier of the query's captures. Each capture is * associated + * with a numeric id based on the order that it appeared in the query's source. + */ +TSQuantifier ts_query_capture_quantifier_for_id( + const TSQuery *self, + uint32_t pattern_index, + uint32_t capture_index +); + +const char *ts_query_string_value_for_id( + const TSQuery *self, + uint32_t index, + uint32_t *length +); + +/** + * Disable a certain capture within a query. + * + * This prevents the capture from being returned in matches, and also avoids + * any resource usage associated with recording the capture. Currently, there + * is no way to undo this. + */ +void ts_query_disable_capture(TSQuery *self, const char *name, uint32_t length); + +/** + * Disable a certain pattern within a query. + * + * This prevents the pattern from matching and removes most of the overhead + * associated with the pattern. Currently, there is no way to undo this. + */ +void ts_query_disable_pattern(TSQuery *self, uint32_t pattern_index); + +/** + * Create a new cursor for executing a given query. + * + * The cursor stores the state that is needed to iteratively search + * for matches. To use the query cursor, first call [`ts_query_cursor_exec`] + * to start running a given query on a given syntax node. Then, there are + * two options for consuming the results of the query: + * 1. Repeatedly call [`ts_query_cursor_next_match`] to iterate over all of the + * *matches* in the order that they were found. Each match contains the + * index of the pattern that matched, and an array of captures. Because + * multiple patterns can match the same set of nodes, one match may contain + * captures that appear *before* some of the captures from a previous match. + * 2. Repeatedly call [`ts_query_cursor_next_capture`] to iterate over all of the + * individual *captures* in the order that they appear. This is useful if + * don't care about which pattern matched, and just want a single ordered + * sequence of captures. + * + * If you don't care about consuming all of the results, you can stop calling + * [`ts_query_cursor_next_match`] or [`ts_query_cursor_next_capture`] at any point. + * You can then start executing another query on another node by calling + * [`ts_query_cursor_exec`] again. + */ +TSQueryCursor *ts_query_cursor_new(void); + +/** + * Delete a query cursor, freeing all of the memory that it used. + */ +void ts_query_cursor_delete(TSQueryCursor *self); + +/** + * Start running a given query on a given node. + */ +void ts_query_cursor_exec(TSQueryCursor *self, const TSQuery *query, TSNode node); + +/** + * Manage the maximum number of in-progress matches allowed by this query + * cursor. + * + * Query cursors have an optional maximum capacity for storing lists of + * in-progress captures. If this capacity is exceeded, then the + * earliest-starting match will silently be dropped to make room for further + * matches. This maximum capacity is optional — by default, query cursors allow + * any number of pending matches, dynamically allocating new space for them as + * needed as the query is executed. + */ +bool ts_query_cursor_did_exceed_match_limit(const TSQueryCursor *self); +uint32_t ts_query_cursor_match_limit(const TSQueryCursor *self); +void ts_query_cursor_set_match_limit(TSQueryCursor *self, uint32_t limit); + +/** + * Set the range of bytes or (row, column) positions in which the query + * will be executed. + */ +void ts_query_cursor_set_byte_range(TSQueryCursor *self, uint32_t start_byte, uint32_t end_byte); +void ts_query_cursor_set_point_range(TSQueryCursor *self, TSPoint start_point, TSPoint end_point); + +/** + * Advance to the next match of the currently running query. + * + * If there is a match, write it to `*match` and return `true`. + * Otherwise, return `false`. + */ +bool ts_query_cursor_next_match(TSQueryCursor *self, TSQueryMatch *match); +void ts_query_cursor_remove_match(TSQueryCursor *self, uint32_t match_id); + +/** + * Advance to the next capture of the currently running query. + * + * If there is a capture, write its match to `*match` and its index within + * the matche's capture list to `*capture_index`. Otherwise, return `false`. + */ +bool ts_query_cursor_next_capture( + TSQueryCursor *self, + TSQueryMatch *match, + uint32_t *capture_index +); + +/** + * Set the maximum start depth for a query cursor. + * + * This prevents cursors from exploring children nodes at a certain depth. + * Note if a pattern includes many children, then they will still be checked. + * + * The zero max start depth value can be used as a special behavior and + * it helps to destructure a subtree by staying on a node and using captures + * for interested parts. Note that the zero max start depth only limit a search + * depth for a pattern's root node but other nodes that are parts of the pattern + * may be searched at any depth what defined by the pattern structure. + * + * Set to `UINT32_MAX` to remove the maximum start depth. + */ +void ts_query_cursor_set_max_start_depth(TSQueryCursor *self, uint32_t max_start_depth); + +/**********************/ +/* Section - Language */ +/**********************/ + +/** + * Get another reference to the given language. + */ +const TSLanguage *ts_language_copy(const TSLanguage *self); + +/** + * Free any dynamically-allocated resources for this language, if + * this is the last reference. + */ +void ts_language_delete(const TSLanguage *self); + +/** + * Get the number of distinct node types in the language. + */ +uint32_t ts_language_symbol_count(const TSLanguage *self); + +/** + * Get the number of valid states in this language. +*/ +uint32_t ts_language_state_count(const TSLanguage *self); + +/** + * Get a node type string for the given numerical id. + */ +const char *ts_language_symbol_name(const TSLanguage *self, TSSymbol symbol); + +/** + * Get the numerical id for the given node type string. + */ +TSSymbol ts_language_symbol_for_name( + const TSLanguage *self, + const char *string, + uint32_t length, + bool is_named +); + +/** + * Get the number of distinct field names in the language. + */ +uint32_t ts_language_field_count(const TSLanguage *self); + +/** + * Get the field name string for the given numerical id. + */ +const char *ts_language_field_name_for_id(const TSLanguage *self, TSFieldId id); + +/** + * Get the numerical id for the given field name string. + */ +TSFieldId ts_language_field_id_for_name(const TSLanguage *self, const char *name, uint32_t name_length); + +/** + * Check whether the given node type id belongs to named nodes, anonymous nodes, + * or a hidden nodes. + * + * See also [`ts_node_is_named`]. Hidden nodes are never returned from the API. + */ +TSSymbolType ts_language_symbol_type(const TSLanguage *self, TSSymbol symbol); + +/** + * Get the ABI version number for this language. This version number is used + * to ensure that languages were generated by a compatible version of + * Tree-sitter. + * + * See also [`ts_parser_set_language`]. + */ +uint32_t ts_language_version(const TSLanguage *self); + +/** + * Get the next parse state. Combine this with lookahead iterators to generate + * completion suggestions or valid symbols in error nodes. Use + * [`ts_node_grammar_symbol`] for valid symbols. +*/ +TSStateId ts_language_next_state(const TSLanguage *self, TSStateId state, TSSymbol symbol); + +/********************************/ +/* Section - Lookahead Iterator */ +/********************************/ + +/** + * Create a new lookahead iterator for the given language and parse state. + * + * This returns `NULL` if state is invalid for the language. + * + * Repeatedly using [`ts_lookahead_iterator_next`] and + * [`ts_lookahead_iterator_current_symbol`] will generate valid symbols in the + * given parse state. Newly created lookahead iterators will contain the `ERROR` + * symbol. + * + * Lookahead iterators can be useful to generate suggestions and improve syntax + * error diagnostics. To get symbols valid in an ERROR node, use the lookahead + * iterator on its first leaf node state. For `MISSING` nodes, a lookahead + * iterator created on the previous non-extra leaf node may be appropriate. +*/ +TSLookaheadIterator *ts_lookahead_iterator_new(const TSLanguage *self, TSStateId state); + +/** + * Delete a lookahead iterator freeing all the memory used. +*/ +void ts_lookahead_iterator_delete(TSLookaheadIterator *self); + +/** + * Reset the lookahead iterator to another state. + * + * This returns `true` if the iterator was reset to the given state and `false` + * otherwise. +*/ +bool ts_lookahead_iterator_reset_state(TSLookaheadIterator *self, TSStateId state); + +/** + * Reset the lookahead iterator. + * + * This returns `true` if the language was set successfully and `false` + * otherwise. +*/ +bool ts_lookahead_iterator_reset(TSLookaheadIterator *self, const TSLanguage *language, TSStateId state); + +/** + * Get the current language of the lookahead iterator. +*/ +const TSLanguage *ts_lookahead_iterator_language(const TSLookaheadIterator *self); + +/** + * Advance the lookahead iterator to the next symbol. + * + * This returns `true` if there is a new symbol and `false` otherwise. +*/ +bool ts_lookahead_iterator_next(TSLookaheadIterator *self); + +/** + * Get the current symbol of the lookahead iterator; +*/ +TSSymbol ts_lookahead_iterator_current_symbol(const TSLookaheadIterator *self); + +/** + * Get the current symbol type of the lookahead iterator as a null terminated + * string. +*/ +const char *ts_lookahead_iterator_current_symbol_name(const TSLookaheadIterator *self); + +/*************************************/ +/* Section - WebAssembly Integration */ +/************************************/ + +typedef struct wasm_engine_t TSWasmEngine; +typedef struct TSWasmStore TSWasmStore; + +typedef enum { + TSWasmErrorKindNone = 0, + TSWasmErrorKindParse, + TSWasmErrorKindCompile, + TSWasmErrorKindInstantiate, + TSWasmErrorKindAllocate, +} TSWasmErrorKind; + +typedef struct { + TSWasmErrorKind kind; + char *message; +} TSWasmError; + +/** + * Create a Wasm store. + */ +TSWasmStore *ts_wasm_store_new( + TSWasmEngine *engine, + TSWasmError *error +); + +/** + * Free the memory associated with the given Wasm store. + */ +void ts_wasm_store_delete(TSWasmStore *); + +/** + * Create a language from a buffer of Wasm. The resulting language behaves + * like any other Tree-sitter language, except that in order to use it with + * a parser, that parser must have a Wasm store. Note that the language + * can be used with any Wasm store, it doesn't need to be the same store that + * was used to originally load it. + */ +const TSLanguage *ts_wasm_store_load_language( + TSWasmStore *, + const char *name, + const char *wasm, + uint32_t wasm_len, + TSWasmError *error +); + +/** + * Get the number of languages instantiated in the given wasm store. + */ +size_t ts_wasm_store_language_count(const TSWasmStore *); + +/** + * Check if the language came from a Wasm module. If so, then in order to use + * this language with a Parser, that parser must have a Wasm store assigned. + */ +bool ts_language_is_wasm(const TSLanguage *); + +/** + * Assign the given Wasm store to the parser. A parser must have a Wasm store + * in order to use Wasm languages. + */ +void ts_parser_set_wasm_store(TSParser *, TSWasmStore *); + +/** + * Remove the parser's current Wasm store and return it. This returns NULL if + * the parser doesn't have a Wasm store. + */ +TSWasmStore *ts_parser_take_wasm_store(TSParser *); + +/**********************************/ +/* Section - Global Configuration */ +/**********************************/ + +/** + * Set the allocation functions used by the library. + * + * By default, Tree-sitter uses the standard libc allocation functions, + * but aborts the process when an allocation fails. This function lets + * you supply alternative allocation functions at runtime. + * + * If you pass `NULL` for any parameter, Tree-sitter will switch back to + * its default implementation of that function. + * + * If you call this function after the library has already been used, then + * you must ensure that either: + * 1. All the existing objects have been freed. + * 2. The new allocator shares its state with the old one, so it is capable + * of freeing memory that was allocated by the old allocator. + */ +void ts_set_allocator( + void *(*new_malloc)(size_t), + void *(*new_calloc)(size_t, size_t), + void *(*new_realloc)(void *, size_t), + void (*new_free)(void *) +); + +#ifdef __cplusplus +} +#endif + +#ifndef TREE_SITTER_HIDE_SYMBOLS +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC visibility pop +#endif +#endif + +#endif // TREE_SITTER_API_H_ diff --git a/parser/nnsrc/array.h b/parser/nnsrc/array.h new file mode 100644 index 00000000..15a3b233 --- /dev/null +++ b/parser/nnsrc/array.h @@ -0,0 +1,290 @@ +#ifndef TREE_SITTER_ARRAY_H_ +#define TREE_SITTER_ARRAY_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "./alloc.h" + +#include +#include +#include +#include +#include + +#ifdef _MSC_VER +#pragma warning(disable : 4101) +#elif defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-variable" +#endif + +#define Array(T) \ + struct { \ + T *contents; \ + uint32_t size; \ + uint32_t capacity; \ + } + +/// Initialize an array. +#define array_init(self) \ + ((self)->size = 0, (self)->capacity = 0, (self)->contents = NULL) + +/// Create an empty array. +#define array_new() \ + { NULL, 0, 0 } + +/// Get a pointer to the element at a given `index` in the array. +#define array_get(self, _index) \ + (assert((uint32_t)(_index) < (self)->size), &(self)->contents[_index]) + +/// Get a pointer to the first element in the array. +#define array_front(self) array_get(self, 0) + +/// Get a pointer to the last element in the array. +#define array_back(self) array_get(self, (self)->size - 1) + +/// Clear the array, setting its size to zero. Note that this does not free any +/// memory allocated for the array's contents. +#define array_clear(self) ((self)->size = 0) + +/// Reserve `new_capacity` elements of space in the array. If `new_capacity` is +/// less than the array's current capacity, this function has no effect. +#define array_reserve(self, new_capacity) \ + _array__reserve((Array *)(self), array_elem_size(self), new_capacity) + +/// Free any memory allocated for this array. Note that this does not free any +/// memory allocated for the array's contents. +#define array_delete(self) _array__delete((Array *)(self)) + +/// Push a new `element` onto the end of the array. +#define array_push(self, element) \ + (_array__grow((Array *)(self), 1, array_elem_size(self)), \ + (self)->contents[(self)->size++] = (element)) + +/// Increase the array's size by `count` elements. +/// New elements are zero-initialized. +#define array_grow_by(self, count) \ + do { \ + if ((count) == 0) break; \ + _array__grow((Array *)(self), count, array_elem_size(self)); \ + memset((self)->contents + (self)->size, 0, (count) * array_elem_size(self)); \ + (self)->size += (count); \ + } while (0) + +/// Append all elements from one array to the end of another. +#define array_push_all(self, other) \ + array_extend((self), (other)->size, (other)->contents) + +/// Append `count` elements to the end of the array, reading their values from the +/// `contents` pointer. +#define array_extend(self, count, contents) \ + _array__splice( \ + (Array *)(self), array_elem_size(self), (self)->size, \ + 0, count, contents \ + ) + +/// Remove `old_count` elements from the array starting at the given `index`. At +/// the same index, insert `new_count` new elements, reading their values from the +/// `new_contents` pointer. +#define array_splice(self, _index, old_count, new_count, new_contents) \ + _array__splice( \ + (Array *)(self), array_elem_size(self), _index, \ + old_count, new_count, new_contents \ + ) + +/// Insert one `element` into the array at the given `index`. +#define array_insert(self, _index, element) \ + _array__splice((Array *)(self), array_elem_size(self), _index, 0, 1, &(element)) + +/// Remove one element from the array at the given `index`. +#define array_erase(self, _index) \ + _array__erase((Array *)(self), array_elem_size(self), _index) + +/// Pop the last element off the array, returning the element by value. +#define array_pop(self) ((self)->contents[--(self)->size]) + +/// Assign the contents of one array to another, reallocating if necessary. +#define array_assign(self, other) \ + _array__assign((Array *)(self), (const Array *)(other), array_elem_size(self)) + +/// Swap one array with another +#define array_swap(self, other) \ + _array__swap((Array *)(self), (Array *)(other)) + +/// Get the size of the array contents +#define array_elem_size(self) (sizeof *(self)->contents) + +/// Search a sorted array for a given `needle` value, using the given `compare` +/// callback to determine the order. +/// +/// If an existing element is found to be equal to `needle`, then the `index` +/// out-parameter is set to the existing value's index, and the `exists` +/// out-parameter is set to true. Otherwise, `index` is set to an index where +/// `needle` should be inserted in order to preserve the sorting, and `exists` +/// is set to false. +#define array_search_sorted_with(self, compare, needle, _index, _exists) \ + _array__search_sorted(self, 0, compare, , needle, _index, _exists) + +/// Search a sorted array for a given `needle` value, using integer comparisons +/// of a given struct field (specified with a leading dot) to determine the order. +/// +/// See also `array_search_sorted_with`. +#define array_search_sorted_by(self, field, needle, _index, _exists) \ + _array__search_sorted(self, 0, _compare_int, field, needle, _index, _exists) + +/// Insert a given `value` into a sorted array, using the given `compare` +/// callback to determine the order. +#define array_insert_sorted_with(self, compare, value) \ + do { \ + unsigned _index, _exists; \ + array_search_sorted_with(self, compare, &(value), &_index, &_exists); \ + if (!_exists) array_insert(self, _index, value); \ + } while (0) + +/// Insert a given `value` into a sorted array, using integer comparisons of +/// a given struct field (specified with a leading dot) to determine the order. +/// +/// See also `array_search_sorted_by`. +#define array_insert_sorted_by(self, field, value) \ + do { \ + unsigned _index, _exists; \ + array_search_sorted_by(self, field, (value) field, &_index, &_exists); \ + if (!_exists) array_insert(self, _index, value); \ + } while (0) + +// Private + +typedef Array(void) Array; + +/// This is not what you're looking for, see `array_delete`. +static inline void _array__delete(Array *self) { + if (self->contents) { + ts_free(self->contents); + self->contents = NULL; + self->size = 0; + self->capacity = 0; + } +} + +/// This is not what you're looking for, see `array_erase`. +static inline void _array__erase(Array *self, size_t element_size, + uint32_t index) { + assert(index < self->size); + char *contents = (char *)self->contents; + memmove(contents + index * element_size, contents + (index + 1) * element_size, + (self->size - index - 1) * element_size); + self->size--; +} + +/// This is not what you're looking for, see `array_reserve`. +static inline void _array__reserve(Array *self, size_t element_size, uint32_t new_capacity) { + if (new_capacity > self->capacity) { + if (self->contents) { + self->contents = ts_realloc(self->contents, new_capacity * element_size); + } else { + self->contents = ts_malloc(new_capacity * element_size); + } + self->capacity = new_capacity; + } +} + +/// This is not what you're looking for, see `array_assign`. +static inline void _array__assign(Array *self, const Array *other, size_t element_size) { + _array__reserve(self, element_size, other->size); + self->size = other->size; + memcpy(self->contents, other->contents, self->size * element_size); +} + +/// This is not what you're looking for, see `array_swap`. +static inline void _array__swap(Array *self, Array *other) { + Array swap = *other; + *other = *self; + *self = swap; +} + +/// This is not what you're looking for, see `array_push` or `array_grow_by`. +static inline void _array__grow(Array *self, uint32_t count, size_t element_size) { + uint32_t new_size = self->size + count; + if (new_size > self->capacity) { + uint32_t new_capacity = self->capacity * 2; + if (new_capacity < 8) new_capacity = 8; + if (new_capacity < new_size) new_capacity = new_size; + _array__reserve(self, element_size, new_capacity); + } +} + +/// This is not what you're looking for, see `array_splice`. +static inline void _array__splice(Array *self, size_t element_size, + uint32_t index, uint32_t old_count, + uint32_t new_count, const void *elements) { + uint32_t new_size = self->size + new_count - old_count; + uint32_t old_end = index + old_count; + uint32_t new_end = index + new_count; + assert(old_end <= self->size); + + _array__reserve(self, element_size, new_size); + + char *contents = (char *)self->contents; + if (self->size > old_end) { + memmove( + contents + new_end * element_size, + contents + old_end * element_size, + (self->size - old_end) * element_size + ); + } + if (new_count > 0) { + if (elements) { + memcpy( + (contents + index * element_size), + elements, + new_count * element_size + ); + } else { + memset( + (contents + index * element_size), + 0, + new_count * element_size + ); + } + } + self->size += new_count - old_count; +} + +/// A binary search routine, based on Rust's `std::slice::binary_search_by`. +/// This is not what you're looking for, see `array_search_sorted_with` or `array_search_sorted_by`. +#define _array__search_sorted(self, start, compare, suffix, needle, _index, _exists) \ + do { \ + *(_index) = start; \ + *(_exists) = false; \ + uint32_t size = (self)->size - *(_index); \ + if (size == 0) break; \ + int comparison; \ + while (size > 1) { \ + uint32_t half_size = size / 2; \ + uint32_t mid_index = *(_index) + half_size; \ + comparison = compare(&((self)->contents[mid_index] suffix), (needle)); \ + if (comparison <= 0) *(_index) = mid_index; \ + size -= half_size; \ + } \ + comparison = compare(&((self)->contents[*(_index)] suffix), (needle)); \ + if (comparison == 0) *(_exists) = true; \ + else if (comparison < 0) *(_index) += 1; \ + } while (0) + +/// Helper macro for the `_sorted_by` routines below. This takes the left (existing) +/// parameter by reference in order to work with the generic sorting function above. +#define _compare_int(a, b) ((int)*(a) - (int)(b)) + +#ifdef _MSC_VER +#pragma warning(default : 4101) +#elif defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_ARRAY_H_ diff --git a/parser/nnsrc/atomic.h b/parser/nnsrc/atomic.h new file mode 100644 index 00000000..e680b60e --- /dev/null +++ b/parser/nnsrc/atomic.h @@ -0,0 +1,68 @@ +#ifndef TREE_SITTER_ATOMIC_H_ +#define TREE_SITTER_ATOMIC_H_ + +#include +#include +#include + +#ifdef __TINYC__ + +static inline size_t atomic_load(const volatile size_t *p) { + return *p; +} + +static inline uint32_t atomic_inc(volatile uint32_t *p) { + *p += 1; + return *p; +} + +static inline uint32_t atomic_dec(volatile uint32_t *p) { + *p-= 1; + return *p; +} + +#elif defined(_WIN32) + +#include + +static inline size_t atomic_load(const volatile size_t *p) { + return *p; +} + +static inline uint32_t atomic_inc(volatile uint32_t *p) { + return InterlockedIncrement((long volatile *)p); +} + +static inline uint32_t atomic_dec(volatile uint32_t *p) { + return InterlockedDecrement((long volatile *)p); +} + +#else + +static inline size_t atomic_load(const volatile size_t *p) { +#ifdef __ATOMIC_RELAXED + return __atomic_load_n(p, __ATOMIC_RELAXED); +#else + return __sync_fetch_and_add((volatile size_t *)p, 0); +#endif +} + +static inline uint32_t atomic_inc(volatile uint32_t *p) { + #ifdef __ATOMIC_RELAXED + return __atomic_add_fetch(p, 1U, __ATOMIC_SEQ_CST); + #else + return __sync_add_and_fetch(p, 1U); + #endif +} + +static inline uint32_t atomic_dec(volatile uint32_t *p) { + #ifdef __ATOMIC_RELAXED + return __atomic_sub_fetch(p, 1U, __ATOMIC_SEQ_CST); + #else + return __sync_sub_and_fetch(p, 1U); + #endif +} + +#endif + +#endif // TREE_SITTER_ATOMIC_H_ diff --git a/parser/nnsrc/clock.h b/parser/nnsrc/clock.h new file mode 100644 index 00000000..5d246ca7 --- /dev/null +++ b/parser/nnsrc/clock.h @@ -0,0 +1,146 @@ +#ifndef TREE_SITTER_CLOCK_H_ +#define TREE_SITTER_CLOCK_H_ + +#include +#include + +typedef uint64_t TSDuration; + +#ifdef _WIN32 + +// Windows: +// * Represent a time as a performance counter value. +// * Represent a duration as a number of performance counter ticks. + +#include +typedef uint64_t TSClock; + +static inline TSDuration duration_from_micros(uint64_t micros) { + LARGE_INTEGER frequency; + QueryPerformanceFrequency(&frequency); + return micros * (uint64_t)frequency.QuadPart / 1000000; +} + +static inline uint64_t duration_to_micros(TSDuration self) { + LARGE_INTEGER frequency; + QueryPerformanceFrequency(&frequency); + return self * 1000000 / (uint64_t)frequency.QuadPart; +} + +static inline TSClock clock_null(void) { + return 0; +} + +static inline TSClock clock_now(void) { + LARGE_INTEGER result; + QueryPerformanceCounter(&result); + return (uint64_t)result.QuadPart; +} + +static inline TSClock clock_after(TSClock base, TSDuration duration) { + return base + duration; +} + +static inline bool clock_is_null(TSClock self) { + return !self; +} + +static inline bool clock_is_gt(TSClock self, TSClock other) { + return self > other; +} + +#elif defined(CLOCK_MONOTONIC) && !defined(__APPLE__) + +// POSIX with monotonic clock support (Linux) +// * Represent a time as a monotonic (seconds, nanoseconds) pair. +// * Represent a duration as a number of microseconds. +// +// On these platforms, parse timeouts will correspond accurately to +// real time, regardless of what other processes are running. + +#include +typedef struct timespec TSClock; + +static inline TSDuration duration_from_micros(uint64_t micros) { + return micros; +} + +static inline uint64_t duration_to_micros(TSDuration self) { + return self; +} + +static inline TSClock clock_now(void) { + TSClock result; + clock_gettime(CLOCK_MONOTONIC, &result); + return result; +} + +static inline TSClock clock_null(void) { + return (TSClock) {0, 0}; +} + +static inline TSClock clock_after(TSClock base, TSDuration duration) { + TSClock result = base; + result.tv_sec += duration / 1000000; + result.tv_nsec += (duration % 1000000) * 1000; + if (result.tv_nsec >= 1000000000) { + result.tv_nsec -= 1000000000; + ++(result.tv_sec); + } + return result; +} + +static inline bool clock_is_null(TSClock self) { + return !self.tv_sec && !self.tv_nsec; +} + +static inline bool clock_is_gt(TSClock self, TSClock other) { + if (self.tv_sec > other.tv_sec) return true; + if (self.tv_sec < other.tv_sec) return false; + return self.tv_nsec > other.tv_nsec; +} + +#else + +// macOS or POSIX without monotonic clock support +// * Represent a time as a process clock value. +// * Represent a duration as a number of process clock ticks. +// +// On these platforms, parse timeouts may be affected by other processes, +// which is not ideal, but is better than using a non-monotonic time API +// like `gettimeofday`. + +#include +typedef uint64_t TSClock; + +static inline TSDuration duration_from_micros(uint64_t micros) { + return micros * (uint64_t)CLOCKS_PER_SEC / 1000000; +} + +static inline uint64_t duration_to_micros(TSDuration self) { + return self * 1000000 / (uint64_t)CLOCKS_PER_SEC; +} + +static inline TSClock clock_null(void) { + return 0; +} + +static inline TSClock clock_now(void) { + return (uint64_t)clock(); +} + +static inline TSClock clock_after(TSClock base, TSDuration duration) { + return base + duration; +} + +static inline bool clock_is_null(TSClock self) { + return !self; +} + +static inline bool clock_is_gt(TSClock self, TSClock other) { + return self > other; +} + +#endif + +#endif // TREE_SITTER_CLOCK_H_ diff --git a/parser/nnsrc/create_language.c b/parser/nnsrc/create_language.c new file mode 100644 index 00000000..d21f0c0a --- /dev/null +++ b/parser/nnsrc/create_language.c @@ -0,0 +1,99 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* create_language.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: maiboyer +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/04/25 16:13:52 by maiboyer #+# #+# */ +/* Updated: 2024/06/30 16:44:49 by maiboyer ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../static/headers/constants.h" +#include "../static/headers/symbols.h" +#include "./parser.h" + +bool lex_keywords_main(TSLexer *lexer, TSStateId state); +bool lex_normal_main(TSLexer *lexer, TSStateId state); +bool tree_sitter_sh_external_scanner_scan(void *ctx, TSLexer *lexer, const bool *ret); +void *create_external_scanner_states(void); +void *create_field_names(void); +void *create_symbols_names(void); +void *create_field_map_entries(void); +void *create_field_map_slices(void); +void *create_lex_modes(void); +void *create_parse_actions_entries(void); +void *create_primary_state_ids(void); +void *create_alias_sequences(void); +void *create_external_scanner_symbol_map(void); +void *create_non_terminal_alias_map(void); +void *create_unique_symbols_map(void); +void *create_symbols_metadata(void); +void *create_parse_table(void); +void *create_small_parse_table(void); +void *create_small_parse_table_map(void); + +uint32_t tree_sitter_sh_external_scanner_serialize(void *ctx, char *s); +void tree_sitter_sh_external_scanner_deserialize(void *ctx, const char *s, uint32_t val); +void tree_sitter_sh_external_scanner_destroy(void *ctx); +void *tree_sitter_sh_external_scanner_create(void); + +static struct ExternalScannerDefinition init_scanner(void) +{ + return ((struct ExternalScannerDefinition){ + create_external_scanner_states(), + create_external_scanner_symbol_map(), + tree_sitter_sh_external_scanner_create, + tree_sitter_sh_external_scanner_destroy, + tree_sitter_sh_external_scanner_scan, + tree_sitter_sh_external_scanner_serialize, + tree_sitter_sh_external_scanner_deserialize, + }); +} + +static void init_language(TSLanguage *language) +{ + language->parse_table = create_parse_table(); + language->small_parse_table = create_small_parse_table(); + language->small_parse_table_map = create_small_parse_table_map(); + language->parse_actions = create_parse_actions_entries(); + language->symbol_names = create_symbols_names(); + language->field_names = create_field_names(); + language->field_map_slices = create_field_map_slices(); + language->field_map_entries = create_field_map_entries(); + language->symbol_metadata = create_symbols_metadata(); + language->public_symbol_map = create_unique_symbols_map(); + language->alias_map = create_non_terminal_alias_map(); + language->alias_sequences = create_alias_sequences(); + language->lex_modes = create_lex_modes(); + language->primary_state_ids = create_primary_state_ids(); + language->lex_fn = lex_normal_main; + language->keyword_lex_fn = lex_keywords_main; + language->keyword_capture_token = sym_word; + language->external_scanner = init_scanner(); +} + +const TSLanguage *tree_sitter_sh(void) +{ + static bool init = false; + static TSLanguage language = { + .version = LANGUAGE_VERSION, + .symbol_count = SYMBOL_COUNT, + .alias_count = ALIAS_COUNT, + .token_count = TOKEN_COUNT, + .external_token_count = EXTERNAL_TOKEN_COUNT, + .state_count = STATE_COUNT, + .large_state_count = LARGE_STATE_COUNT, + .production_id_count = PRODUCTION_ID_COUNT, + .field_count = FIELD_COUNT, + .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH, + }; + + if (!init) + { + init_language(&language); + init = true; + } + return ((TSLanguage *)&language); +} diff --git a/parser/nnsrc/error_costs.h b/parser/nnsrc/error_costs.h new file mode 100644 index 00000000..32d3666a --- /dev/null +++ b/parser/nnsrc/error_costs.h @@ -0,0 +1,11 @@ +#ifndef TREE_SITTER_ERROR_COSTS_H_ +#define TREE_SITTER_ERROR_COSTS_H_ + +#define ERROR_STATE 0 +#define ERROR_COST_PER_RECOVERY 500 +#define ERROR_COST_PER_MISSING_TREE 110 +#define ERROR_COST_PER_SKIPPED_TREE 100 +#define ERROR_COST_PER_SKIPPED_LINE 30 +#define ERROR_COST_PER_SKIPPED_CHAR 1 + +#endif diff --git a/parser/nnsrc/get_changed_ranges.c b/parser/nnsrc/get_changed_ranges.c new file mode 100644 index 00000000..bcf8da94 --- /dev/null +++ b/parser/nnsrc/get_changed_ranges.c @@ -0,0 +1,501 @@ +#include "./get_changed_ranges.h" +#include "./subtree.h" +#include "./language.h" +#include "./error_costs.h" +#include "./tree_cursor.h" +#include + +// #define DEBUG_GET_CHANGED_RANGES + +static void ts_range_array_add( + TSRangeArray *self, + Length start, + Length end +) { + if (self->size > 0) { + TSRange *last_range = array_back(self); + if (start.bytes <= last_range->end_byte) { + last_range->end_byte = end.bytes; + last_range->end_point = end.extent; + return; + } + } + + if (start.bytes < end.bytes) { + TSRange range = { start.extent, end.extent, start.bytes, end.bytes }; + array_push(self, range); + } +} + +bool ts_range_array_intersects( + const TSRangeArray *self, + unsigned start_index, + uint32_t start_byte, + uint32_t end_byte +) { + for (unsigned i = start_index; i < self->size; i++) { + TSRange *range = &self->contents[i]; + if (range->end_byte > start_byte) { + if (range->start_byte >= end_byte) break; + return true; + } + } + return false; +} + +void ts_range_array_get_changed_ranges( + const TSRange *old_ranges, unsigned old_range_count, + const TSRange *new_ranges, unsigned new_range_count, + TSRangeArray *differences +) { + unsigned new_index = 0; + unsigned old_index = 0; + Length current_position = length_zero(); + bool in_old_range = false; + bool in_new_range = false; + + while (old_index < old_range_count || new_index < new_range_count) { + const TSRange *old_range = &old_ranges[old_index]; + const TSRange *new_range = &new_ranges[new_index]; + + Length next_old_position; + if (in_old_range) { + next_old_position = (Length) {old_range->end_byte, old_range->end_point}; + } else if (old_index < old_range_count) { + next_old_position = (Length) {old_range->start_byte, old_range->start_point}; + } else { + next_old_position = LENGTH_MAX; + } + + Length next_new_position; + if (in_new_range) { + next_new_position = (Length) {new_range->end_byte, new_range->end_point}; + } else if (new_index < new_range_count) { + next_new_position = (Length) {new_range->start_byte, new_range->start_point}; + } else { + next_new_position = LENGTH_MAX; + } + + if (next_old_position.bytes < next_new_position.bytes) { + if (in_old_range != in_new_range) { + ts_range_array_add(differences, current_position, next_old_position); + } + if (in_old_range) old_index++; + current_position = next_old_position; + in_old_range = !in_old_range; + } else if (next_new_position.bytes < next_old_position.bytes) { + if (in_old_range != in_new_range) { + ts_range_array_add(differences, current_position, next_new_position); + } + if (in_new_range) new_index++; + current_position = next_new_position; + in_new_range = !in_new_range; + } else { + if (in_old_range != in_new_range) { + ts_range_array_add(differences, current_position, next_new_position); + } + if (in_old_range) old_index++; + if (in_new_range) new_index++; + in_old_range = !in_old_range; + in_new_range = !in_new_range; + current_position = next_new_position; + } + } +} + +typedef struct { + TreeCursor cursor; + const TSLanguage *language; + unsigned visible_depth; + bool in_padding; +} Iterator; + +static Iterator iterator_new( + TreeCursor *cursor, + const Subtree *tree, + const TSLanguage *language +) { + array_clear(&cursor->stack); + array_push(&cursor->stack, ((TreeCursorEntry) { + .subtree = tree, + .position = length_zero(), + .child_index = 0, + .structural_child_index = 0, + })); + return (Iterator) { + .cursor = *cursor, + .language = language, + .visible_depth = 1, + .in_padding = false, + }; +} + +static bool iterator_done(Iterator *self) { + return self->cursor.stack.size == 0; +} + +static Length iterator_start_position(Iterator *self) { + TreeCursorEntry entry = *array_back(&self->cursor.stack); + if (self->in_padding) { + return entry.position; + } else { + return length_add(entry.position, ts_subtree_padding(*entry.subtree)); + } +} + +static Length iterator_end_position(Iterator *self) { + TreeCursorEntry entry = *array_back(&self->cursor.stack); + Length result = length_add(entry.position, ts_subtree_padding(*entry.subtree)); + if (self->in_padding) { + return result; + } else { + return length_add(result, ts_subtree_size(*entry.subtree)); + } +} + +static bool iterator_tree_is_visible(const Iterator *self) { + TreeCursorEntry entry = *array_back(&self->cursor.stack); + if (ts_subtree_visible(*entry.subtree)) return true; + if (self->cursor.stack.size > 1) { + Subtree parent = *self->cursor.stack.contents[self->cursor.stack.size - 2].subtree; + return ts_language_alias_at( + self->language, + parent.ptr->production_id, + entry.structural_child_index + ) != 0; + } + return false; +} + +static void iterator_get_visible_state( + const Iterator *self, + Subtree *tree, + TSSymbol *alias_symbol, + uint32_t *start_byte +) { + uint32_t i = self->cursor.stack.size - 1; + + if (self->in_padding) { + if (i == 0) return; + i--; + } + + for (; i + 1 > 0; i--) { + TreeCursorEntry entry = self->cursor.stack.contents[i]; + + if (i > 0) { + const Subtree *parent = self->cursor.stack.contents[i - 1].subtree; + *alias_symbol = ts_language_alias_at( + self->language, + parent->ptr->production_id, + entry.structural_child_index + ); + } + + if (ts_subtree_visible(*entry.subtree) || *alias_symbol) { + *tree = *entry.subtree; + *start_byte = entry.position.bytes; + break; + } + } +} + +static void iterator_ascend(Iterator *self) { + if (iterator_done(self)) return; + if (iterator_tree_is_visible(self) && !self->in_padding) self->visible_depth--; + if (array_back(&self->cursor.stack)->child_index > 0) self->in_padding = false; + self->cursor.stack.size--; +} + +static bool iterator_descend(Iterator *self, uint32_t goal_position) { + if (self->in_padding) return false; + + bool did_descend = false; + do { + did_descend = false; + TreeCursorEntry entry = *array_back(&self->cursor.stack); + Length position = entry.position; + uint32_t structural_child_index = 0; + for (uint32_t i = 0, n = ts_subtree_child_count(*entry.subtree); i < n; i++) { + const Subtree *child = &ts_subtree_children(*entry.subtree)[i]; + Length child_left = length_add(position, ts_subtree_padding(*child)); + Length child_right = length_add(child_left, ts_subtree_size(*child)); + + if (child_right.bytes > goal_position) { + array_push(&self->cursor.stack, ((TreeCursorEntry) { + .subtree = child, + .position = position, + .child_index = i, + .structural_child_index = structural_child_index, + })); + + if (iterator_tree_is_visible(self)) { + if (child_left.bytes > goal_position) { + self->in_padding = true; + } else { + self->visible_depth++; + } + return true; + } + + did_descend = true; + break; + } + + position = child_right; + if (!ts_subtree_extra(*child)) structural_child_index++; + } + } while (did_descend); + + return false; +} + +static void iterator_advance(Iterator *self) { + if (self->in_padding) { + self->in_padding = false; + if (iterator_tree_is_visible(self)) { + self->visible_depth++; + } else { + iterator_descend(self, 0); + } + return; + } + + for (;;) { + if (iterator_tree_is_visible(self)) self->visible_depth--; + TreeCursorEntry entry = array_pop(&self->cursor.stack); + if (iterator_done(self)) return; + + const Subtree *parent = array_back(&self->cursor.stack)->subtree; + uint32_t child_index = entry.child_index + 1; + if (ts_subtree_child_count(*parent) > child_index) { + Length position = length_add(entry.position, ts_subtree_total_size(*entry.subtree)); + uint32_t structural_child_index = entry.structural_child_index; + if (!ts_subtree_extra(*entry.subtree)) structural_child_index++; + const Subtree *next_child = &ts_subtree_children(*parent)[child_index]; + + array_push(&self->cursor.stack, ((TreeCursorEntry) { + .subtree = next_child, + .position = position, + .child_index = child_index, + .structural_child_index = structural_child_index, + })); + + if (iterator_tree_is_visible(self)) { + if (ts_subtree_padding(*next_child).bytes > 0) { + self->in_padding = true; + } else { + self->visible_depth++; + } + } else { + iterator_descend(self, 0); + } + break; + } + } +} + +typedef enum { + IteratorDiffers, + IteratorMayDiffer, + IteratorMatches, +} IteratorComparison; + +static IteratorComparison iterator_compare( + const Iterator *old_iter, + const Iterator *new_iter +) { + Subtree old_tree = NULL_SUBTREE; + Subtree new_tree = NULL_SUBTREE; + uint32_t old_start = 0; + uint32_t new_start = 0; + TSSymbol old_alias_symbol = 0; + TSSymbol new_alias_symbol = 0; + iterator_get_visible_state(old_iter, &old_tree, &old_alias_symbol, &old_start); + iterator_get_visible_state(new_iter, &new_tree, &new_alias_symbol, &new_start); + + if (!old_tree.ptr && !new_tree.ptr) return IteratorMatches; + if (!old_tree.ptr || !new_tree.ptr) return IteratorDiffers; + + if ( + old_alias_symbol == new_alias_symbol && + ts_subtree_symbol(old_tree) == ts_subtree_symbol(new_tree) + ) { + if (old_start == new_start && + !ts_subtree_has_changes(old_tree) && + ts_subtree_symbol(old_tree) != ts_builtin_sym_error && + ts_subtree_size(old_tree).bytes == ts_subtree_size(new_tree).bytes && + ts_subtree_parse_state(old_tree) != TS_TREE_STATE_NONE && + ts_subtree_parse_state(new_tree) != TS_TREE_STATE_NONE && + (ts_subtree_parse_state(old_tree) == ERROR_STATE) == + (ts_subtree_parse_state(new_tree) == ERROR_STATE)) { + return IteratorMatches; + } else { + return IteratorMayDiffer; + } + } + + return IteratorDiffers; +} + +#ifdef DEBUG_GET_CHANGED_RANGES +static inline void iterator_print_state(Iterator *self) { + TreeCursorEntry entry = *array_back(&self->cursor.stack); + TSPoint start = iterator_start_position(self).extent; + TSPoint end = iterator_end_position(self).extent; + const char *name = ts_language_symbol_name(self->language, ts_subtree_symbol(*entry.subtree)); + printf( + "(%-25s %s\t depth:%u [%u, %u] - [%u, %u])", + name, self->in_padding ? "(p)" : " ", + self->visible_depth, + start.row + 1, start.column, + end.row + 1, end.column + ); +} +#endif + +unsigned ts_subtree_get_changed_ranges( + const Subtree *old_tree, const Subtree *new_tree, + TreeCursor *cursor1, TreeCursor *cursor2, + const TSLanguage *language, + const TSRangeArray *included_range_differences, + TSRange **ranges +) { + TSRangeArray results = array_new(); + + Iterator old_iter = iterator_new(cursor1, old_tree, language); + Iterator new_iter = iterator_new(cursor2, new_tree, language); + + unsigned included_range_difference_index = 0; + + Length position = iterator_start_position(&old_iter); + Length next_position = iterator_start_position(&new_iter); + if (position.bytes < next_position.bytes) { + ts_range_array_add(&results, position, next_position); + position = next_position; + } else if (position.bytes > next_position.bytes) { + ts_range_array_add(&results, next_position, position); + next_position = position; + } + + do { + #ifdef DEBUG_GET_CHANGED_RANGES + printf("At [%-2u, %-2u] Compare ", position.extent.row + 1, position.extent.column); + iterator_print_state(&old_iter); + printf("\tvs\t"); + iterator_print_state(&new_iter); + puts(""); + #endif + + // Compare the old and new subtrees. + IteratorComparison comparison = iterator_compare(&old_iter, &new_iter); + + // Even if the two subtrees appear to be identical, they could differ + // internally if they contain a range of text that was previously + // excluded from the parse, and is now included, or vice-versa. + if (comparison == IteratorMatches && ts_range_array_intersects( + included_range_differences, + included_range_difference_index, + position.bytes, + iterator_end_position(&old_iter).bytes + )) { + comparison = IteratorMayDiffer; + } + + bool is_changed = false; + switch (comparison) { + // If the subtrees are definitely identical, move to the end + // of both subtrees. + case IteratorMatches: + next_position = iterator_end_position(&old_iter); + break; + + // If the subtrees might differ internally, descend into both + // subtrees, finding the first child that spans the current position. + case IteratorMayDiffer: + if (iterator_descend(&old_iter, position.bytes)) { + if (!iterator_descend(&new_iter, position.bytes)) { + is_changed = true; + next_position = iterator_end_position(&old_iter); + } + } else if (iterator_descend(&new_iter, position.bytes)) { + is_changed = true; + next_position = iterator_end_position(&new_iter); + } else { + next_position = length_min( + iterator_end_position(&old_iter), + iterator_end_position(&new_iter) + ); + } + break; + + // If the subtrees are different, record a change and then move + // to the end of both subtrees. + case IteratorDiffers: + is_changed = true; + next_position = length_min( + iterator_end_position(&old_iter), + iterator_end_position(&new_iter) + ); + break; + } + + // Ensure that both iterators are caught up to the current position. + while ( + !iterator_done(&old_iter) && + iterator_end_position(&old_iter).bytes <= next_position.bytes + ) iterator_advance(&old_iter); + while ( + !iterator_done(&new_iter) && + iterator_end_position(&new_iter).bytes <= next_position.bytes + ) iterator_advance(&new_iter); + + // Ensure that both iterators are at the same depth in the tree. + while (old_iter.visible_depth > new_iter.visible_depth) { + iterator_ascend(&old_iter); + } + while (new_iter.visible_depth > old_iter.visible_depth) { + iterator_ascend(&new_iter); + } + + if (is_changed) { + #ifdef DEBUG_GET_CHANGED_RANGES + printf( + " change: [[%u, %u] - [%u, %u]]\n", + position.extent.row + 1, position.extent.column, + next_position.extent.row + 1, next_position.extent.column + ); + #endif + + ts_range_array_add(&results, position, next_position); + } + + position = next_position; + + // Keep track of the current position in the included range differences + // array in order to avoid scanning the entire array on each iteration. + while (included_range_difference_index < included_range_differences->size) { + const TSRange *range = &included_range_differences->contents[ + included_range_difference_index + ]; + if (range->end_byte <= position.bytes) { + included_range_difference_index++; + } else { + break; + } + } + } while (!iterator_done(&old_iter) && !iterator_done(&new_iter)); + + Length old_size = ts_subtree_total_size(*old_tree); + Length new_size = ts_subtree_total_size(*new_tree); + if (old_size.bytes < new_size.bytes) { + ts_range_array_add(&results, old_size, new_size); + } else if (new_size.bytes < old_size.bytes) { + ts_range_array_add(&results, new_size, old_size); + } + + *cursor1 = old_iter.cursor; + *cursor2 = new_iter.cursor; + *ranges = results.contents; + return results.size; +} diff --git a/parser/nnsrc/get_changed_ranges.h b/parser/nnsrc/get_changed_ranges.h new file mode 100644 index 00000000..a1f1dbb4 --- /dev/null +++ b/parser/nnsrc/get_changed_ranges.h @@ -0,0 +1,36 @@ +#ifndef TREE_SITTER_GET_CHANGED_RANGES_H_ +#define TREE_SITTER_GET_CHANGED_RANGES_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "./tree_cursor.h" +#include "./subtree.h" + +typedef Array(TSRange) TSRangeArray; + +void ts_range_array_get_changed_ranges( + const TSRange *old_ranges, unsigned old_range_count, + const TSRange *new_ranges, unsigned new_range_count, + TSRangeArray *differences +); + +bool ts_range_array_intersects( + const TSRangeArray *self, unsigned start_index, + uint32_t start_byte, uint32_t end_byte +); + +unsigned ts_subtree_get_changed_ranges( + const Subtree *old_tree, const Subtree *new_tree, + TreeCursor *cursor1, TreeCursor *cursor2, + const TSLanguage *language, + const TSRangeArray *included_range_differences, + TSRange **ranges +); + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_GET_CHANGED_RANGES_H_ diff --git a/parser/nnsrc/host.h b/parser/nnsrc/host.h new file mode 100644 index 00000000..a07e9f89 --- /dev/null +++ b/parser/nnsrc/host.h @@ -0,0 +1,21 @@ + +// Determine endian and pointer size based on known defines. +// TS_BIG_ENDIAN and TS_PTR_SIZE can be set as -D compiler arguments +// to override this. + +#if !defined(TS_BIG_ENDIAN) +#if (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) \ + || (defined( __APPLE_CC__) && (defined(__ppc__) || defined(__ppc64__))) +#define TS_BIG_ENDIAN 1 +#else +#define TS_BIG_ENDIAN 0 +#endif +#endif + +#if !defined(TS_PTR_SIZE) +#if UINTPTR_MAX == 0xFFFFFFFF +#define TS_PTR_SIZE 32 +#else +#define TS_PTR_SIZE 64 +#endif +#endif diff --git a/parser/nnsrc/language.c b/parser/nnsrc/language.c new file mode 100644 index 00000000..84b15c01 --- /dev/null +++ b/parser/nnsrc/language.c @@ -0,0 +1,221 @@ +#include "./language.h" +#include "./wasm_store.h" +#include "api.h" +#include + +const TSLanguage *ts_language_copy(const TSLanguage *self) { + if (self && ts_language_is_wasm(self)) { + ts_wasm_language_retain(self); + } + return self; +} + +void ts_language_delete(const TSLanguage *self) { + if (self && ts_language_is_wasm(self)) { + ts_wasm_language_release(self); + } +} + +uint32_t ts_language_symbol_count(const TSLanguage *self) { + return self->symbol_count + self->alias_count; +} + +uint32_t ts_language_state_count(const TSLanguage *self) { + return self->state_count; +} + +uint32_t ts_language_version(const TSLanguage *self) { + return self->version; +} + +uint32_t ts_language_field_count(const TSLanguage *self) { + return self->field_count; +} + +void ts_language_table_entry( + const TSLanguage *self, + TSStateId state, + TSSymbol symbol, + TableEntry *result +) { + if (symbol == ts_builtin_sym_error || symbol == ts_builtin_sym_error_repeat) { + result->action_count = 0; + result->is_reusable = false; + result->actions = NULL; + } else { + assert(symbol < self->token_count); + uint32_t action_index = ts_language_lookup(self, state, symbol); + const TSParseActionEntry *entry = &self->parse_actions[action_index]; + result->action_count = entry->entry.count; + result->is_reusable = entry->entry.reusable; + result->actions = (const TSParseAction *)(entry + 1); + } +} + +TSSymbolMetadata ts_language_symbol_metadata( + const TSLanguage *self, + TSSymbol symbol +) { + if (symbol == ts_builtin_sym_error) { + return (TSSymbolMetadata) {.visible = true, .named = true}; + } else if (symbol == ts_builtin_sym_error_repeat) { + return (TSSymbolMetadata) {.visible = false, .named = false}; + } else { + return self->symbol_metadata[symbol]; + } +} + +TSSymbol ts_language_public_symbol( + const TSLanguage *self, + TSSymbol symbol +) { + if (symbol == ts_builtin_sym_error) return symbol; + return self->public_symbol_map[symbol]; +} + +TSStateId ts_language_next_state( + const TSLanguage *self, + TSStateId state, + TSSymbol symbol +) { + if (symbol == ts_builtin_sym_error || symbol == ts_builtin_sym_error_repeat) { + return 0; + } else if (symbol < self->token_count) { + uint32_t count; + const TSParseAction *actions = ts_language_actions(self, state, symbol, &count); + if (count > 0) { + TSParseAction action = actions[count - 1]; + if (action.type == TSParseActionTypeShift) { + return action.shift.extra ? state : action.shift.state; + } + } + return 0; + } else { + return ts_language_lookup(self, state, symbol); + } +} + +const char *ts_language_symbol_name( + const TSLanguage *self, + TSSymbol symbol +) { + if (symbol == ts_builtin_sym_error) { + return "ERROR"; + } else if (symbol == ts_builtin_sym_error_repeat) { + return "_ERROR"; + } else if (symbol < ts_language_symbol_count(self)) { + return self->symbol_names[symbol]; + } else { + return NULL; + } +} + +TSSymbol ts_language_symbol_for_name( + const TSLanguage *self, + const char *string, + uint32_t length, + bool is_named +) { + if (!strncmp(string, "ERROR", length)) return ts_builtin_sym_error; + uint16_t count = (uint16_t)ts_language_symbol_count(self); + for (TSSymbol i = 0; i < count; i++) { + TSSymbolMetadata metadata = ts_language_symbol_metadata(self, i); + if ((!metadata.visible && !metadata.supertype) || metadata.named != is_named) continue; + const char *symbol_name = self->symbol_names[i]; + if (!strncmp(symbol_name, string, length) && !symbol_name[length]) { + return self->public_symbol_map[i]; + } + } + return 0; +} + +TSSymbolType ts_language_symbol_type( + const TSLanguage *self, + TSSymbol symbol +) { + TSSymbolMetadata metadata = ts_language_symbol_metadata(self, symbol); + if (metadata.named && metadata.visible) { + return TSSymbolTypeRegular; + } else if (metadata.visible) { + return TSSymbolTypeAnonymous; + } else { + return TSSymbolTypeAuxiliary; + } +} + +const char *ts_language_field_name_for_id( + const TSLanguage *self, + TSFieldId id +) { + uint32_t count = ts_language_field_count(self); + if (count && id <= count) { + return self->field_names[id]; + } else { + return NULL; + } +} + +TSFieldId ts_language_field_id_for_name( + const TSLanguage *self, + const char *name, + uint32_t name_length +) { + uint16_t count = (uint16_t)ts_language_field_count(self); + for (TSSymbol i = 1; i < count + 1; i++) { + switch (strncmp(name, self->field_names[i], name_length)) { + case 0: + if (self->field_names[i][name_length] == 0) return i; + break; + case -1: + return 0; + default: + break; + } + } + return 0; +} + +TSLookaheadIterator *ts_lookahead_iterator_new(const TSLanguage *self, TSStateId state) { + if (state >= self->state_count) return NULL; + LookaheadIterator *iterator = ts_malloc(sizeof(LookaheadIterator)); + *iterator = ts_language_lookaheads(self, state); + return (TSLookaheadIterator *)iterator; +} + +void ts_lookahead_iterator_delete(TSLookaheadIterator *self) { + ts_free(self); +} + +bool ts_lookahead_iterator_reset_state(TSLookaheadIterator * self, TSStateId state) { + LookaheadIterator *iterator = (LookaheadIterator *)self; + if (state >= iterator->language->state_count) return false; + *iterator = ts_language_lookaheads(iterator->language, state); + return true; +} + +const TSLanguage *ts_lookahead_iterator_language(const TSLookaheadIterator *self) { + const LookaheadIterator *iterator = (const LookaheadIterator *)self; + return iterator->language; +} + +bool ts_lookahead_iterator_reset(TSLookaheadIterator *self, const TSLanguage *language, TSStateId state) { + if (state >= language->state_count) return false; + LookaheadIterator *iterator = (LookaheadIterator *)self; + *iterator = ts_language_lookaheads(language, state); + return true; +} + +bool ts_lookahead_iterator_next(TSLookaheadIterator *self) { + LookaheadIterator *iterator = (LookaheadIterator *)self; + return ts_lookahead_iterator__next(iterator); +} + +TSSymbol ts_lookahead_iterator_current_symbol(const TSLookaheadIterator *self) { + const LookaheadIterator *iterator = (const LookaheadIterator *)self; + return iterator->symbol; +} + +const char *ts_lookahead_iterator_current_symbol_name(const TSLookaheadIterator *self) { + const LookaheadIterator *iterator = (const LookaheadIterator *)self; + return ts_language_symbol_name(iterator->language, iterator->symbol); +} diff --git a/parser/nnsrc/language.h b/parser/nnsrc/language.h new file mode 100644 index 00000000..4e2769b4 --- /dev/null +++ b/parser/nnsrc/language.h @@ -0,0 +1,299 @@ +#ifndef TREE_SITTER_LANGUAGE_H_ +#define TREE_SITTER_LANGUAGE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "./subtree.h" +#include "./parser.h" + +#define ts_builtin_sym_error_repeat (ts_builtin_sym_error - 1) + +#define LANGUAGE_VERSION_WITH_PRIMARY_STATES 14 +#define LANGUAGE_VERSION_USABLE_VIA_WASM 13 + +typedef struct { + const TSParseAction *actions; + uint32_t action_count; + bool is_reusable; +} TableEntry; + +typedef struct { + const TSLanguage *language; + const uint16_t *data; + const uint16_t *group_end; + TSStateId state; + uint16_t table_value; + uint16_t section_index; + uint16_t group_count; + bool is_small_state; + + const TSParseAction *actions; + TSSymbol symbol; + TSStateId next_state; + uint16_t action_count; +} LookaheadIterator; + +void ts_language_table_entry(const TSLanguage *, TSStateId, TSSymbol, TableEntry *); + +TSSymbolMetadata ts_language_symbol_metadata(const TSLanguage *, TSSymbol); + +TSSymbol ts_language_public_symbol(const TSLanguage *, TSSymbol); + +TSStateId ts_language_next_state(const TSLanguage *self, TSStateId state, TSSymbol symbol); + +static inline bool ts_language_is_symbol_external(const TSLanguage *self, TSSymbol symbol) { + return 0 < symbol && symbol < self->external_token_count + 1; +} + +static inline const TSParseAction *ts_language_actions( + const TSLanguage *self, + TSStateId state, + TSSymbol symbol, + uint32_t *count +) { + TableEntry entry; + ts_language_table_entry(self, state, symbol, &entry); + *count = entry.action_count; + return entry.actions; +} + +static inline bool ts_language_has_reduce_action( + const TSLanguage *self, + TSStateId state, + TSSymbol symbol +) { + TableEntry entry; + ts_language_table_entry(self, state, symbol, &entry); + return entry.action_count > 0 && entry.actions[0].type == TSParseActionTypeReduce; +} + +// Lookup the table value for a given symbol and state. +// +// For non-terminal symbols, the table value represents a successor state. +// For terminal symbols, it represents an index in the actions table. +// For 'large' parse states, this is a direct lookup. For 'small' parse +// states, this requires searching through the symbol groups to find +// the given symbol. +static inline uint16_t ts_language_lookup( + const TSLanguage *self, + TSStateId state, + TSSymbol symbol +) { + if (state >= self->large_state_count) { + uint32_t index = self->small_parse_table_map[state - self->large_state_count]; + const uint16_t *data = &self->small_parse_table[index]; + uint16_t group_count = *(data++); + for (unsigned i = 0; i < group_count; i++) { + uint16_t section_value = *(data++); + uint16_t symbol_count = *(data++); + for (unsigned j = 0; j < symbol_count; j++) { + if (*(data++) == symbol) return section_value; + } + } + return 0; + } else { + return self->parse_table[state * self->symbol_count + symbol]; + } +} + +static inline bool ts_language_has_actions( + const TSLanguage *self, + TSStateId state, + TSSymbol symbol +) { + return ts_language_lookup(self, state, symbol) != 0; +} + +// Iterate over all of the symbols that are valid in the given state. +// +// For 'large' parse states, this just requires iterating through +// all possible symbols and checking the parse table for each one. +// For 'small' parse states, this exploits the structure of the +// table to only visit the valid symbols. +static inline LookaheadIterator ts_language_lookaheads( + const TSLanguage *self, + TSStateId state +) { + bool is_small_state = state >= self->large_state_count; + const uint16_t *data; + const uint16_t *group_end = NULL; + uint16_t group_count = 0; + if (is_small_state) { + uint32_t index = self->small_parse_table_map[state - self->large_state_count]; + data = &self->small_parse_table[index]; + group_end = data + 1; + group_count = *data; + } else { + data = &self->parse_table[state * self->symbol_count] - 1; + } + return (LookaheadIterator) { + .language = self, + .data = data, + .group_end = group_end, + .group_count = group_count, + .is_small_state = is_small_state, + .symbol = UINT16_MAX, + .next_state = 0, + }; +} + +static inline bool ts_lookahead_iterator__next(LookaheadIterator *self) { + // For small parse states, valid symbols are listed explicitly, + // grouped by their value. There's no need to look up the actions + // again until moving to the next group. + if (self->is_small_state) { + self->data++; + if (self->data == self->group_end) { + if (self->group_count == 0) return false; + self->group_count--; + self->table_value = *(self->data++); + unsigned symbol_count = *(self->data++); + self->group_end = self->data + symbol_count; + self->symbol = *self->data; + } else { + self->symbol = *self->data; + return true; + } + } + + // For large parse states, iterate through every symbol until one + // is found that has valid actions. + else { + do { + self->data++; + self->symbol++; + if (self->symbol >= self->language->symbol_count) return false; + self->table_value = *self->data; + } while (!self->table_value); + } + + // Depending on if the symbols is terminal or non-terminal, the table value either + // represents a list of actions or a successor state. + if (self->symbol < self->language->token_count) { + const TSParseActionEntry *entry = &self->language->parse_actions[self->table_value]; + self->action_count = entry->entry.count; + self->actions = (const TSParseAction *)(entry + 1); + self->next_state = 0; + } else { + self->action_count = 0; + self->next_state = self->table_value; + } + return true; +} + +// Whether the state is a "primary state". If this returns false, it indicates that there exists +// another state that behaves identically to this one with respect to query analysis. +static inline bool ts_language_state_is_primary( + const TSLanguage *self, + TSStateId state +) { + if (self->version >= LANGUAGE_VERSION_WITH_PRIMARY_STATES) { + return state == self->primary_state_ids[state]; + } else { + return true; + } +} + +static inline const bool *ts_language_enabled_external_tokens( + const TSLanguage *self, + unsigned external_scanner_state +) { + if (external_scanner_state == 0) { + return NULL; + } else { + return self->external_scanner.states + self->external_token_count * external_scanner_state; + } +} + +static inline const TSSymbol *ts_language_alias_sequence( + const TSLanguage *self, + uint32_t production_id +) { + return production_id ? + &self->alias_sequences[production_id * self->max_alias_sequence_length] : + NULL; +} + +static inline TSSymbol ts_language_alias_at( + const TSLanguage *self, + uint32_t production_id, + uint32_t child_index +) { + return production_id ? + self->alias_sequences[production_id * self->max_alias_sequence_length + child_index] : + 0; +} + +static inline void ts_language_field_map( + const TSLanguage *self, + uint32_t production_id, + const TSFieldMapEntry **start, + const TSFieldMapEntry **end +) { + if (self->field_count == 0) { + *start = NULL; + *end = NULL; + return; + } + + TSFieldMapSlice slice = self->field_map_slices[production_id]; + *start = &self->field_map_entries[slice.index]; + *end = &self->field_map_entries[slice.index] + slice.length; +} + +static inline void ts_language_aliases_for_symbol( + const TSLanguage *self, + TSSymbol original_symbol, + const TSSymbol **start, + const TSSymbol **end +) { + *start = &self->public_symbol_map[original_symbol]; + *end = *start + 1; + + unsigned idx = 0; + for (;;) { + TSSymbol symbol = self->alias_map[idx++]; + if (symbol == 0 || symbol > original_symbol) break; + uint16_t count = self->alias_map[idx++]; + if (symbol == original_symbol) { + *start = &self->alias_map[idx]; + *end = &self->alias_map[idx + count]; + break; + } + idx += count; + } +} + +static inline void ts_language_write_symbol_as_dot_string( + const TSLanguage *self, + FILE *f, + TSSymbol symbol +) { + const char *name = ts_language_symbol_name(self, symbol); + for (const char *chr = name; *chr; chr++) { + switch (*chr) { + case '"': + case '\\': + fputc('\\', f); + fputc(*chr, f); + break; + case '\n': + fputs("\\n", f); + break; + case '\t': + fputs("\\t", f); + break; + default: + fputc(*chr, f); + break; + } + } +} + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_LANGUAGE_H_ diff --git a/parser/nnsrc/length.h b/parser/nnsrc/length.h new file mode 100644 index 00000000..dbae5ced --- /dev/null +++ b/parser/nnsrc/length.h @@ -0,0 +1,52 @@ +#ifndef TREE_SITTER_LENGTH_H_ +#define TREE_SITTER_LENGTH_H_ + +#include +#include +#include "./point.h" +#include "api.h" + +typedef struct { + uint32_t bytes; + TSPoint extent; +} Length; + +static const Length LENGTH_UNDEFINED = {0, {0, 1}}; +static const Length LENGTH_MAX = {UINT32_MAX, {UINT32_MAX, UINT32_MAX}}; + +static inline bool length_is_undefined(Length length) { + return length.bytes == 0 && length.extent.column != 0; +} + +static inline Length length_min(Length len1, Length len2) { + return (len1.bytes < len2.bytes) ? len1 : len2; +} + +static inline Length length_add(Length len1, Length len2) { + Length result; + result.bytes = len1.bytes + len2.bytes; + result.extent = point_add(len1.extent, len2.extent); + return result; +} + +static inline Length length_sub(Length len1, Length len2) { + Length result; + result.bytes = len1.bytes - len2.bytes; + result.extent = point_sub(len1.extent, len2.extent); + return result; +} + +static inline Length length_zero(void) { + Length result = {0, {0, 0}}; + return result; +} + +static inline Length length_saturating_sub(Length len1, Length len2) { + if (len1.bytes > len2.bytes) { + return length_sub(len1, len2); + } else { + return length_zero(); + } +} + +#endif diff --git a/parser/nnsrc/lexer.c b/parser/nnsrc/lexer.c new file mode 100644 index 00000000..b32a9201 --- /dev/null +++ b/parser/nnsrc/lexer.c @@ -0,0 +1,419 @@ +#include +#include "./lexer.h" +#include "./subtree.h" +#include "./length.h" +#include "./unicode.h" + +#define LOG(message, character) \ + if (self->logger.log) { \ + snprintf( \ + self->debug_buffer, \ + TREE_SITTER_SERIALIZATION_BUFFER_SIZE, \ + 32 <= character && character < 127 ? \ + message " character:'%c'" : \ + message " character:%d", \ + character \ + ); \ + self->logger.log( \ + self->logger.payload, \ + TSLogTypeLex, \ + self->debug_buffer \ + ); \ + } + +static const int32_t BYTE_ORDER_MARK = 0xFEFF; + +static const TSRange DEFAULT_RANGE = { + .start_point = { + .row = 0, + .column = 0, + }, + .end_point = { + .row = UINT32_MAX, + .column = UINT32_MAX, + }, + .start_byte = 0, + .end_byte = UINT32_MAX +}; + +// Check if the lexer has reached EOF. This state is stored +// by setting the lexer's `current_included_range_index` such that +// it has consumed all of its available ranges. +static bool ts_lexer__eof(const TSLexer *_self) { + Lexer *self = (Lexer *)_self; + return self->current_included_range_index == self->included_range_count; +} + +// Clear the currently stored chunk of source code, because the lexer's +// position has changed. +static void ts_lexer__clear_chunk(Lexer *self) { + self->chunk = NULL; + self->chunk_size = 0; + self->chunk_start = 0; +} + +// Call the lexer's input callback to obtain a new chunk of source code +// for the current position. +static void ts_lexer__get_chunk(Lexer *self) { + self->chunk_start = self->current_position.bytes; + self->chunk = self->input.read( + self->input.payload, + self->current_position.bytes, + self->current_position.extent, + &self->chunk_size + ); + if (!self->chunk_size) { + self->current_included_range_index = self->included_range_count; + self->chunk = NULL; + } +} + +// Decode the next unicode character in the current chunk of source code. +// This assumes that the lexer has already retrieved a chunk of source +// code that spans the current position. +static void ts_lexer__get_lookahead(Lexer *self) { + uint32_t position_in_chunk = self->current_position.bytes - self->chunk_start; + uint32_t size = self->chunk_size - position_in_chunk; + + if (size == 0) { + self->lookahead_size = 1; + self->data.lookahead = '\0'; + return; + } + + const uint8_t *chunk = (const uint8_t *)self->chunk + position_in_chunk; + UnicodeDecodeFunction decode = self->input.encoding == TSInputEncodingUTF8 + ? ts_decode_utf8 + : ts_decode_utf16; + + self->lookahead_size = decode(chunk, size, &self->data.lookahead); + + // If this chunk ended in the middle of a multi-byte character, + // try again with a fresh chunk. + if (self->data.lookahead == TS_DECODE_ERROR && size < 4) { + ts_lexer__get_chunk(self); + chunk = (const uint8_t *)self->chunk; + size = self->chunk_size; + self->lookahead_size = decode(chunk, size, &self->data.lookahead); + } + + if (self->data.lookahead == TS_DECODE_ERROR) { + self->lookahead_size = 1; + } +} + +static void ts_lexer_goto(Lexer *self, Length position) { + self->current_position = position; + + // Move to the first valid position at or after the given position. + bool found_included_range = false; + for (unsigned i = 0; i < self->included_range_count; i++) { + TSRange *included_range = &self->included_ranges[i]; + if ( + included_range->end_byte > self->current_position.bytes && + included_range->end_byte > included_range->start_byte + ) { + if (included_range->start_byte >= self->current_position.bytes) { + self->current_position = (Length) { + .bytes = included_range->start_byte, + .extent = included_range->start_point, + }; + } + + self->current_included_range_index = i; + found_included_range = true; + break; + } + } + + if (found_included_range) { + // If the current position is outside of the current chunk of text, + // then clear out the current chunk of text. + if (self->chunk && ( + self->current_position.bytes < self->chunk_start || + self->current_position.bytes >= self->chunk_start + self->chunk_size + )) { + ts_lexer__clear_chunk(self); + } + + self->lookahead_size = 0; + self->data.lookahead = '\0'; + } + + // If the given position is beyond any of included ranges, move to the EOF + // state - past the end of the included ranges. + else { + self->current_included_range_index = self->included_range_count; + TSRange *last_included_range = &self->included_ranges[self->included_range_count - 1]; + self->current_position = (Length) { + .bytes = last_included_range->end_byte, + .extent = last_included_range->end_point, + }; + ts_lexer__clear_chunk(self); + self->lookahead_size = 1; + self->data.lookahead = '\0'; + } +} + +// Intended to be called only from functions that control logging. +static void ts_lexer__do_advance(Lexer *self, bool skip) { + if (self->lookahead_size) { + self->current_position.bytes += self->lookahead_size; + if (self->data.lookahead == '\n') { + self->current_position.extent.row++; + self->current_position.extent.column = 0; + } else { + self->current_position.extent.column += self->lookahead_size; + } + } + + const TSRange *current_range = &self->included_ranges[self->current_included_range_index]; + while ( + self->current_position.bytes >= current_range->end_byte || + current_range->end_byte == current_range->start_byte + ) { + if (self->current_included_range_index < self->included_range_count) { + self->current_included_range_index++; + } + if (self->current_included_range_index < self->included_range_count) { + current_range++; + self->current_position = (Length) { + current_range->start_byte, + current_range->start_point, + }; + } else { + current_range = NULL; + break; + } + } + + if (skip) self->token_start_position = self->current_position; + + if (current_range) { + if ( + self->current_position.bytes < self->chunk_start || + self->current_position.bytes >= self->chunk_start + self->chunk_size + ) { + ts_lexer__get_chunk(self); + } + ts_lexer__get_lookahead(self); + } else { + ts_lexer__clear_chunk(self); + self->data.lookahead = '\0'; + self->lookahead_size = 1; + } +} + +// Advance to the next character in the source code, retrieving a new +// chunk of source code if needed. +static void ts_lexer__advance(TSLexer *_self, bool skip) { + Lexer *self = (Lexer *)_self; + if (!self->chunk) return; + + if (skip) { + LOG("skip", self->data.lookahead) + } else { + LOG("consume", self->data.lookahead) + } + + ts_lexer__do_advance(self, skip); +} + +// Mark that a token match has completed. This can be called multiple +// times if a longer match is found later. +static void ts_lexer__mark_end(TSLexer *_self) { + Lexer *self = (Lexer *)_self; + if (!ts_lexer__eof(&self->data)) { + // If the lexer is right at the beginning of included range, + // then the token should be considered to end at the *end* of the + // previous included range, rather than here. + TSRange *current_included_range = &self->included_ranges[ + self->current_included_range_index + ]; + if ( + self->current_included_range_index > 0 && + self->current_position.bytes == current_included_range->start_byte + ) { + TSRange *previous_included_range = current_included_range - 1; + self->token_end_position = (Length) { + previous_included_range->end_byte, + previous_included_range->end_point, + }; + return; + } + } + self->token_end_position = self->current_position; +} + +static uint32_t ts_lexer__get_column(TSLexer *_self) { + Lexer *self = (Lexer *)_self; + + uint32_t goal_byte = self->current_position.bytes; + + self->did_get_column = true; + self->current_position.bytes -= self->current_position.extent.column; + self->current_position.extent.column = 0; + + if (self->current_position.bytes < self->chunk_start) { + ts_lexer__get_chunk(self); + } + + uint32_t result = 0; + if (!ts_lexer__eof(_self)) { + ts_lexer__get_lookahead(self); + while (self->current_position.bytes < goal_byte && self->chunk) { + result++; + ts_lexer__do_advance(self, false); + if (ts_lexer__eof(_self)) break; + } + } + + return result; +} + +// Is the lexer at a boundary between two disjoint included ranges of +// source code? This is exposed as an API because some languages' external +// scanners need to perform custom actions at these boundaries. +static bool ts_lexer__is_at_included_range_start(const TSLexer *_self) { + const Lexer *self = (const Lexer *)_self; + if (self->current_included_range_index < self->included_range_count) { + TSRange *current_range = &self->included_ranges[self->current_included_range_index]; + return self->current_position.bytes == current_range->start_byte; + } else { + return false; + } +} + +void ts_lexer_init(Lexer *self) { + *self = (Lexer) { + .data = { + // The lexer's methods are stored as struct fields so that generated + // parsers can call them without needing to be linked against this + // library. + .advance = ts_lexer__advance, + .mark_end = ts_lexer__mark_end, + .get_column = ts_lexer__get_column, + .is_at_included_range_start = ts_lexer__is_at_included_range_start, + .eof = ts_lexer__eof, + .lookahead = 0, + .result_symbol = 0, + }, + .chunk = NULL, + .chunk_size = 0, + .chunk_start = 0, + .current_position = {0, {0, 0}}, + .logger = { + .payload = NULL, + .log = NULL + }, + .included_ranges = NULL, + .included_range_count = 0, + .current_included_range_index = 0, + }; + ts_lexer_set_included_ranges(self, NULL, 0); +} + +void ts_lexer_delete(Lexer *self) { + ts_free(self->included_ranges); +} + +void ts_lexer_set_input(Lexer *self, TSInput input) { + self->input = input; + ts_lexer__clear_chunk(self); + ts_lexer_goto(self, self->current_position); +} + +// Move the lexer to the given position. This doesn't do any work +// if the parser is already at the given position. +void ts_lexer_reset(Lexer *self, Length position) { + if (position.bytes != self->current_position.bytes) { + ts_lexer_goto(self, position); + } +} + +void ts_lexer_start(Lexer *self) { + self->token_start_position = self->current_position; + self->token_end_position = LENGTH_UNDEFINED; + self->data.result_symbol = 0; + self->did_get_column = false; + if (!ts_lexer__eof(&self->data)) { + if (!self->chunk_size) ts_lexer__get_chunk(self); + if (!self->lookahead_size) ts_lexer__get_lookahead(self); + if ( + self->current_position.bytes == 0 && + self->data.lookahead == BYTE_ORDER_MARK + ) ts_lexer__advance(&self->data, true); + } +} + +void ts_lexer_finish(Lexer *self, uint32_t *lookahead_end_byte) { + if (length_is_undefined(self->token_end_position)) { + ts_lexer__mark_end(&self->data); + } + + // If the token ended at an included range boundary, then its end position + // will have been reset to the end of the preceding range. Reset the start + // position to match. + if (self->token_end_position.bytes < self->token_start_position.bytes) { + self->token_start_position = self->token_end_position; + } + + uint32_t current_lookahead_end_byte = self->current_position.bytes + 1; + + // In order to determine that a byte sequence is invalid UTF8 or UTF16, + // the character decoding algorithm may have looked at the following byte. + // Therefore, the next byte *after* the current (invalid) character + // affects the interpretation of the current character. + if (self->data.lookahead == TS_DECODE_ERROR) { + current_lookahead_end_byte += 4; // the maximum number of bytes read to identify an invalid code point + } + + if (current_lookahead_end_byte > *lookahead_end_byte) { + *lookahead_end_byte = current_lookahead_end_byte; + } +} + +void ts_lexer_advance_to_end(Lexer *self) { + while (self->chunk) { + ts_lexer__advance(&self->data, false); + } +} + +void ts_lexer_mark_end(Lexer *self) { + ts_lexer__mark_end(&self->data); +} + +bool ts_lexer_set_included_ranges( + Lexer *self, + const TSRange *ranges, + uint32_t count +) { + if (count == 0 || !ranges) { + ranges = &DEFAULT_RANGE; + count = 1; + } else { + uint32_t previous_byte = 0; + for (unsigned i = 0; i < count; i++) { + const TSRange *range = &ranges[i]; + if ( + range->start_byte < previous_byte || + range->end_byte < range->start_byte + ) return false; + previous_byte = range->end_byte; + } + } + + size_t size = count * sizeof(TSRange); + self->included_ranges = ts_realloc(self->included_ranges, size); + memcpy(self->included_ranges, ranges, size); + self->included_range_count = count; + ts_lexer_goto(self, self->current_position); + return true; +} + +TSRange *ts_lexer_included_ranges(const Lexer *self, uint32_t *count) { + *count = self->included_range_count; + return self->included_ranges; +} + +#undef LOG diff --git a/parser/nnsrc/lexer.h b/parser/nnsrc/lexer.h new file mode 100644 index 00000000..a8cc38f1 --- /dev/null +++ b/parser/nnsrc/lexer.h @@ -0,0 +1,49 @@ +#ifndef TREE_SITTER_LEXER_H_ +#define TREE_SITTER_LEXER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "./length.h" +#include "./subtree.h" +#include "api.h" +#include "./parser.h" + +typedef struct { + TSLexer data; + Length current_position; + Length token_start_position; + Length token_end_position; + + TSRange *included_ranges; + const char *chunk; + TSInput input; + TSLogger logger; + + uint32_t included_range_count; + uint32_t current_included_range_index; + uint32_t chunk_start; + uint32_t chunk_size; + uint32_t lookahead_size; + bool did_get_column; + + char debug_buffer[TREE_SITTER_SERIALIZATION_BUFFER_SIZE]; +} Lexer; + +void ts_lexer_init(Lexer *); +void ts_lexer_delete(Lexer *); +void ts_lexer_set_input(Lexer *, TSInput); +void ts_lexer_reset(Lexer *, Length); +void ts_lexer_start(Lexer *); +void ts_lexer_finish(Lexer *, uint32_t *); +void ts_lexer_advance_to_end(Lexer *); +void ts_lexer_mark_end(Lexer *); +bool ts_lexer_set_included_ranges(Lexer *self, const TSRange *ranges, uint32_t count); +TSRange *ts_lexer_included_ranges(const Lexer *self, uint32_t *count); + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_LEXER_H_ diff --git a/parser/nnsrc/lib.c b/parser/nnsrc/lib.c new file mode 100644 index 00000000..f79f1ca0 --- /dev/null +++ b/parser/nnsrc/lib.c @@ -0,0 +1,17 @@ +#define _POSIX_C_SOURCE 200112L + +#include "./alloc.c" +#include "./get_changed_ranges.c" +#include "./language.c" +#include "./lexer.c" +#include "./node.c" +#include "./parser.c" +#include "./query.c" +#include "./stack.c" +#include "./subtree.c" +#include "./tree.c" +#include "./tree_cursor.c" +#include "./wasm_store.c" + +#include "./create_language.c" +#include "./scanner.c" diff --git a/parser/nnsrc/node.c b/parser/nnsrc/node.c new file mode 100644 index 00000000..0e7dffa3 --- /dev/null +++ b/parser/nnsrc/node.c @@ -0,0 +1,891 @@ +#include "./language.h" +#include "./subtree.h" +#include "./tree.h" +#include "api.h" +#include + +typedef struct +{ + Subtree parent; + const TSTree *tree; + Length position; + uint32_t child_index; + uint32_t structural_child_index; + const TSSymbol *alias_sequence; +} NodeChildIterator; + +// TSNode - constructors + +TSNode ts_node_new(const TSTree *tree, const Subtree *subtree, Length position, TSSymbol alias) +{ + return (TSNode){ + {position.bytes, position.extent.row, position.extent.column, alias}, + subtree, + tree, + }; +} + +static inline TSNode ts_node__null(void) +{ + return ts_node_new(NULL, NULL, length_zero(), 0); +} + +// TSNode - accessors + +uint32_t ts_node_start_byte(TSNode self) +{ + return self.context[0]; +} + +TSPoint ts_node_start_point(TSNode self) +{ + return (TSPoint){self.context[1], self.context[2]}; +} + +static inline uint32_t ts_node__alias(const TSNode *self) +{ + return self->context[3]; +} + +static inline Subtree ts_node__subtree(TSNode self) +{ + return *(const Subtree *)self.id; +} + +// NodeChildIterator + +static inline NodeChildIterator ts_node_iterate_children(const TSNode *node) +{ + Subtree subtree = ts_node__subtree(*node); + if (ts_subtree_child_count(subtree) == 0) + { + return (NodeChildIterator){NULL_SUBTREE, node->tree, length_zero(), 0, 0, NULL}; + } + const TSSymbol *alias_sequence = ts_language_alias_sequence(node->tree->language, subtree.ptr->production_id); + return (NodeChildIterator){ + .tree = node->tree, + .parent = subtree, + .position = {ts_node_start_byte(*node), ts_node_start_point(*node)}, + .child_index = 0, + .structural_child_index = 0, + .alias_sequence = alias_sequence, + }; +} + +static inline bool ts_node_child_iterator_done(NodeChildIterator *self) +{ + return self->child_index == self->parent.ptr->child_count; +} + +static inline bool ts_node_child_iterator_next(NodeChildIterator *self, TSNode *result) +{ + if (!self->parent.ptr || ts_node_child_iterator_done(self)) + return false; + const Subtree *child = &ts_subtree_children(self->parent)[self->child_index]; + TSSymbol alias_symbol = 0; + if (!ts_subtree_extra(*child)) + { + if (self->alias_sequence) + { + alias_symbol = self->alias_sequence[self->structural_child_index]; + } + self->structural_child_index++; + } + if (self->child_index > 0) + { + self->position = length_add(self->position, ts_subtree_padding(*child)); + } + *result = ts_node_new(self->tree, child, self->position, alias_symbol); + self->position = length_add(self->position, ts_subtree_size(*child)); + self->child_index++; + return true; +} + +// TSNode - private + +static inline bool ts_node__is_relevant(TSNode self, bool include_anonymous) +{ + Subtree tree = ts_node__subtree(self); + if (include_anonymous) + { + return ts_subtree_visible(tree) || ts_node__alias(&self); + } + else + { + TSSymbol alias = ts_node__alias(&self); + if (alias) + { + return ts_language_symbol_metadata(self.tree->language, alias).named; + } + else + { + return ts_subtree_visible(tree) && ts_subtree_named(tree); + } + } +} + +static inline uint32_t ts_node__relevant_child_count(TSNode self, bool include_anonymous) +{ + Subtree tree = ts_node__subtree(self); + if (ts_subtree_child_count(tree) > 0) + { + if (include_anonymous) + { + return tree.ptr->visible_child_count; + } + else + { + return tree.ptr->named_child_count; + } + } + else + { + return 0; + } +} + +static inline TSNode ts_node__child(TSNode self, uint32_t child_index, bool include_anonymous) +{ + TSNode result = self; + bool did_descend = true; + + while (did_descend) + { + did_descend = false; + + TSNode child; + uint32_t index = 0; + NodeChildIterator iterator = ts_node_iterate_children(&result); + while (ts_node_child_iterator_next(&iterator, &child)) + { + if (ts_node__is_relevant(child, include_anonymous)) + { + if (index == child_index) + { + return child; + } + index++; + } + else + { + uint32_t grandchild_index = child_index - index; + uint32_t grandchild_count = ts_node__relevant_child_count(child, include_anonymous); + if (grandchild_index < grandchild_count) + { + did_descend = true; + result = child; + child_index = grandchild_index; + break; + } + index += grandchild_count; + } + } + } + + return ts_node__null(); +} + +static bool ts_subtree_has_trailing_empty_descendant(Subtree self, Subtree other) +{ + for (unsigned i = ts_subtree_child_count(self) - 1; i + 1 > 0; i--) + { + Subtree child = ts_subtree_children(self)[i]; + if (ts_subtree_total_bytes(child) > 0) + break; + if (child.ptr == other.ptr || ts_subtree_has_trailing_empty_descendant(child, other)) + { + return true; + } + } + return false; +} + +static inline TSNode ts_node__prev_sibling(TSNode self, bool include_anonymous) +{ + Subtree self_subtree = ts_node__subtree(self); + bool self_is_empty = ts_subtree_total_bytes(self_subtree) == 0; + uint32_t target_end_byte = ts_node_end_byte(self); + + TSNode node = ts_node_parent(self); + TSNode earlier_node = ts_node__null(); + bool earlier_node_is_relevant = false; + + while (!ts_node_is_null(node)) + { + TSNode earlier_child = ts_node__null(); + bool earlier_child_is_relevant = false; + bool found_child_containing_target = false; + + TSNode child; + NodeChildIterator iterator = ts_node_iterate_children(&node); + while (ts_node_child_iterator_next(&iterator, &child)) + { + if (child.id == self.id) + break; + if (iterator.position.bytes > target_end_byte) + { + found_child_containing_target = true; + break; + } + + if (iterator.position.bytes == target_end_byte && + (!self_is_empty || ts_subtree_has_trailing_empty_descendant(ts_node__subtree(child), self_subtree))) + { + found_child_containing_target = true; + break; + } + + if (ts_node__is_relevant(child, include_anonymous)) + { + earlier_child = child; + earlier_child_is_relevant = true; + } + else if (ts_node__relevant_child_count(child, include_anonymous) > 0) + { + earlier_child = child; + earlier_child_is_relevant = false; + } + } + + if (found_child_containing_target) + { + if (!ts_node_is_null(earlier_child)) + { + earlier_node = earlier_child; + earlier_node_is_relevant = earlier_child_is_relevant; + } + node = child; + } + else if (earlier_child_is_relevant) + { + return earlier_child; + } + else if (!ts_node_is_null(earlier_child)) + { + node = earlier_child; + } + else if (earlier_node_is_relevant) + { + return earlier_node; + } + else + { + node = earlier_node; + earlier_node = ts_node__null(); + earlier_node_is_relevant = false; + } + } + + return ts_node__null(); +} + +static inline TSNode ts_node__next_sibling(TSNode self, bool include_anonymous) +{ + uint32_t target_end_byte = ts_node_end_byte(self); + + TSNode node = ts_node_parent(self); + TSNode later_node = ts_node__null(); + bool later_node_is_relevant = false; + + while (!ts_node_is_null(node)) + { + TSNode later_child = ts_node__null(); + bool later_child_is_relevant = false; + TSNode child_containing_target = ts_node__null(); + + TSNode child; + NodeChildIterator iterator = ts_node_iterate_children(&node); + while (ts_node_child_iterator_next(&iterator, &child)) + { + if (iterator.position.bytes < target_end_byte) + continue; + if (ts_node_start_byte(child) <= ts_node_start_byte(self)) + { + if (ts_node__subtree(child).ptr != ts_node__subtree(self).ptr) + { + child_containing_target = child; + } + } + else if (ts_node__is_relevant(child, include_anonymous)) + { + later_child = child; + later_child_is_relevant = true; + break; + } + else if (ts_node__relevant_child_count(child, include_anonymous) > 0) + { + later_child = child; + later_child_is_relevant = false; + break; + } + } + + if (!ts_node_is_null(child_containing_target)) + { + if (!ts_node_is_null(later_child)) + { + later_node = later_child; + later_node_is_relevant = later_child_is_relevant; + } + node = child_containing_target; + } + else if (later_child_is_relevant) + { + return later_child; + } + else if (!ts_node_is_null(later_child)) + { + node = later_child; + } + else if (later_node_is_relevant) + { + return later_node; + } + else + { + node = later_node; + } + } + + return ts_node__null(); +} + +static inline TSNode ts_node__first_child_for_byte(TSNode self, uint32_t goal, bool include_anonymous) +{ + TSNode node = self; + bool did_descend = true; + + while (did_descend) + { + did_descend = false; + + TSNode child; + NodeChildIterator iterator = ts_node_iterate_children(&node); + while (ts_node_child_iterator_next(&iterator, &child)) + { + if (ts_node_end_byte(child) > goal) + { + if (ts_node__is_relevant(child, include_anonymous)) + { + return child; + } + else if (ts_node_child_count(child) > 0) + { + did_descend = true; + node = child; + break; + } + } + } + } + + return ts_node__null(); +} + +static inline TSNode ts_node__descendant_for_byte_range(TSNode self, uint32_t range_start, uint32_t range_end, bool include_anonymous) +{ + TSNode node = self; + TSNode last_visible_node = self; + + bool did_descend = true; + while (did_descend) + { + did_descend = false; + + TSNode child; + NodeChildIterator iterator = ts_node_iterate_children(&node); + while (ts_node_child_iterator_next(&iterator, &child)) + { + uint32_t node_end = iterator.position.bytes; + + // The end of this node must extend far enough forward to touch + // the end of the range and exceed the start of the range. + if (node_end < range_end) + continue; + if (node_end <= range_start) + continue; + + // The start of this node must extend far enough backward to + // touch the start of the range. + if (range_start < ts_node_start_byte(child)) + break; + + node = child; + if (ts_node__is_relevant(node, include_anonymous)) + { + last_visible_node = node; + } + did_descend = true; + break; + } + } + + return last_visible_node; +} + +static inline TSNode ts_node__descendant_for_point_range(TSNode self, TSPoint range_start, TSPoint range_end, bool include_anonymous) +{ + TSNode node = self; + TSNode last_visible_node = self; + + bool did_descend = true; + while (did_descend) + { + did_descend = false; + + TSNode child; + NodeChildIterator iterator = ts_node_iterate_children(&node); + while (ts_node_child_iterator_next(&iterator, &child)) + { + TSPoint node_end = iterator.position.extent; + + // The end of this node must extend far enough forward to touch + // the end of the range and exceed the start of the range. + if (point_lt(node_end, range_end)) + continue; + if (point_lte(node_end, range_start)) + continue; + + // The start of this node must extend far enough backward to + // touch the start of the range. + if (point_lt(range_start, ts_node_start_point(child))) + break; + + node = child; + if (ts_node__is_relevant(node, include_anonymous)) + { + last_visible_node = node; + } + did_descend = true; + break; + } + } + + return last_visible_node; +} + +// TSNode - public + +uint32_t ts_node_end_byte(TSNode self) +{ + return ts_node_start_byte(self) + ts_subtree_size(ts_node__subtree(self)).bytes; +} + +TSPoint ts_node_end_point(TSNode self) +{ + return point_add(ts_node_start_point(self), ts_subtree_size(ts_node__subtree(self)).extent); +} + +TSSymbol ts_node_symbol(TSNode self) +{ + TSSymbol symbol = ts_node__alias(&self); + if (!symbol) + symbol = ts_subtree_symbol(ts_node__subtree(self)); + return ts_language_public_symbol(self.tree->language, symbol); +} + +const char *ts_node_type(TSNode self) +{ + TSSymbol symbol = ts_node__alias(&self); + if (!symbol) + symbol = ts_subtree_symbol(ts_node__subtree(self)); + return ts_language_symbol_name(self.tree->language, symbol); +} + +const TSLanguage *ts_node_language(TSNode self) +{ + return self.tree->language; +} + +TSSymbol ts_node_grammar_symbol(TSNode self) +{ + return ts_subtree_symbol(ts_node__subtree(self)); +} + +const char *ts_node_grammar_type(TSNode self) +{ + TSSymbol symbol = ts_subtree_symbol(ts_node__subtree(self)); + return ts_language_symbol_name(self.tree->language, symbol); +} + +char *ts_node_string(TSNode self) +{ + TSSymbol alias_symbol = ts_node__alias(&self); + return ts_subtree_string(ts_node__subtree(self), alias_symbol, ts_language_symbol_metadata(self.tree->language, alias_symbol).visible, + self.tree->language, false); +} + +bool ts_node_eq(TSNode self, TSNode other) +{ + return self.tree == other.tree && self.id == other.id; +} + +bool ts_node_is_null(TSNode self) +{ + return self.id == 0; +} + +bool ts_node_is_extra(TSNode self) +{ + return ts_subtree_extra(ts_node__subtree(self)); +} + +bool ts_node_is_named(TSNode self) +{ + TSSymbol alias = ts_node__alias(&self); + return alias ? ts_language_symbol_metadata(self.tree->language, alias).named : ts_subtree_named(ts_node__subtree(self)); +} + +bool ts_node_is_missing(TSNode self) +{ + return ts_subtree_missing(ts_node__subtree(self)); +} + +bool ts_node_has_changes(TSNode self) +{ + return ts_subtree_has_changes(ts_node__subtree(self)); +} + +bool ts_node_has_error(TSNode self) +{ + return ts_subtree_error_cost(ts_node__subtree(self)) > 0; +} + +bool ts_node_is_error(TSNode self) +{ + TSSymbol symbol = ts_node_symbol(self); + return symbol == ts_builtin_sym_error; +} + +uint32_t ts_node_descendant_count(TSNode self) +{ + return ts_subtree_visible_descendant_count(ts_node__subtree(self)) + 1; +} + +TSStateId ts_node_parse_state(TSNode self) +{ + return ts_subtree_parse_state(ts_node__subtree(self)); +} + +TSStateId ts_node_next_parse_state(TSNode self) +{ + const TSLanguage *language = self.tree->language; + uint16_t state = ts_node_parse_state(self); + if (state == TS_TREE_STATE_NONE) + { + return TS_TREE_STATE_NONE; + } + uint16_t symbol = ts_node_grammar_symbol(self); + return ts_language_next_state(language, state, symbol); +} + +TSNode ts_node_parent(TSNode self) +{ + TSNode node = ts_tree_root_node(self.tree); + if (node.id == self.id) + return ts_node__null(); + + while (true) + { + TSNode next_node = ts_node_child_containing_descendant(node, self); + if (ts_node_is_null(next_node)) + break; + node = next_node; + } + + return node; +} + +TSNode ts_node_child_containing_descendant(TSNode self, TSNode subnode) +{ + uint32_t start_byte = ts_node_start_byte(subnode); + uint32_t end_byte = ts_node_end_byte(subnode); + + do + { + NodeChildIterator iter = ts_node_iterate_children(&self); + do + { + if (!ts_node_child_iterator_next(&iter, &self) || ts_node_start_byte(self) > start_byte || self.id == subnode.id) + { + return ts_node__null(); + } + } while (iter.position.bytes < end_byte || ts_node_child_count(self) == 0); + } while (!ts_node__is_relevant(self, true)); + + return self; +} + +TSNode ts_node_child(TSNode self, uint32_t child_index) +{ + return ts_node__child(self, child_index, true); +} + +TSNode ts_node_named_child(TSNode self, uint32_t child_index) +{ + return ts_node__child(self, child_index, false); +} + +TSNode ts_node_child_by_field_id(TSNode self, TSFieldId field_id) +{ +recur: + if (!field_id || ts_node_child_count(self) == 0) + return ts_node__null(); + + const TSFieldMapEntry *field_map, *field_map_end; + ts_language_field_map(self.tree->language, ts_node__subtree(self).ptr->production_id, &field_map, &field_map_end); + if (field_map == field_map_end) + return ts_node__null(); + + // The field mappings are sorted by their field id. Scan all + // the mappings to find the ones for the given field id. + while (field_map->field_id < field_id) + { + field_map++; + if (field_map == field_map_end) + return ts_node__null(); + } + while (field_map_end[-1].field_id > field_id) + { + field_map_end--; + if (field_map == field_map_end) + return ts_node__null(); + } + + TSNode child; + NodeChildIterator iterator = ts_node_iterate_children(&self); + while (ts_node_child_iterator_next(&iterator, &child)) + { + if (!ts_subtree_extra(ts_node__subtree(child))) + { + uint32_t index = iterator.structural_child_index - 1; + if (index < field_map->child_index) + continue; + + // Hidden nodes' fields are "inherited" by their visible parent. + if (field_map->inherited) + { + + // If this is the *last* possible child node for this field, + // then perform a tail call to avoid recursion. + if (field_map + 1 == field_map_end) + { + self = child; + goto recur; + } + + // Otherwise, descend into this child, but if it doesn't contain + // the field, continue searching subsequent children. + else + { + TSNode result = ts_node_child_by_field_id(child, field_id); + if (result.id) + return result; + field_map++; + if (field_map == field_map_end) + return ts_node__null(); + } + } + + else if (ts_node__is_relevant(child, true)) + { + return child; + } + + // If the field refers to a hidden node with visible children, + // return the first visible child. + else if (ts_node_child_count(child) > 0) + { + return ts_node_child(child, 0); + } + + // Otherwise, continue searching subsequent children. + else + { + field_map++; + if (field_map == field_map_end) + return ts_node__null(); + } + } + } + + return ts_node__null(); +} + +static inline const char *ts_node__field_name_from_language(TSNode self, uint32_t structural_child_index) +{ + const TSFieldMapEntry *field_map, *field_map_end; + ts_language_field_map(self.tree->language, ts_node__subtree(self).ptr->production_id, &field_map, &field_map_end); + for (; field_map != field_map_end; field_map++) + { + if (!field_map->inherited && field_map->child_index == structural_child_index) + { + return self.tree->language->field_names[field_map->field_id]; + } + } + return NULL; +} + +const char *ts_node_field_name_for_child(TSNode self, uint32_t child_index) +{ + TSNode result = self; + bool did_descend = true; + const char *inherited_field_name = NULL; + + while (did_descend) + { + did_descend = false; + + TSNode child; + uint32_t index = 0; + NodeChildIterator iterator = ts_node_iterate_children(&result); + while (ts_node_child_iterator_next(&iterator, &child)) + { + if (ts_node__is_relevant(child, true)) + { + if (index == child_index) + { + if (ts_node_is_extra(child)) + { + return NULL; + } + const char *field_name = ts_node__field_name_from_language(result, iterator.structural_child_index - 1); + if (field_name) + return field_name; + return inherited_field_name; + } + index++; + } + else + { + uint32_t grandchild_index = child_index - index; + uint32_t grandchild_count = ts_node__relevant_child_count(child, true); + if (grandchild_index < grandchild_count) + { + const char *field_name = ts_node__field_name_from_language(result, iterator.structural_child_index - 1); + if (field_name) + inherited_field_name = field_name; + + did_descend = true; + result = child; + child_index = grandchild_index; + break; + } + index += grandchild_count; + } + } + } + + return NULL; +} + +TSNode ts_node_child_by_field_name(TSNode self, const char *name, uint32_t name_length) +{ + TSFieldId field_id = ts_language_field_id_for_name(self.tree->language, name, name_length); + return ts_node_child_by_field_id(self, field_id); +} + +uint32_t ts_node_child_count(TSNode self) +{ + Subtree tree = ts_node__subtree(self); + if (ts_subtree_child_count(tree) > 0) + { + return tree.ptr->visible_child_count; + } + else + { + return 0; + } +} + +uint32_t ts_node_named_child_count(TSNode self) +{ + Subtree tree = ts_node__subtree(self); + if (ts_subtree_child_count(tree) > 0) + { + return tree.ptr->named_child_count; + } + else + { + return 0; + } +} + +TSNode ts_node_next_sibling(TSNode self) +{ + return ts_node__next_sibling(self, true); +} + +TSNode ts_node_next_named_sibling(TSNode self) +{ + return ts_node__next_sibling(self, false); +} + +TSNode ts_node_prev_sibling(TSNode self) +{ + return ts_node__prev_sibling(self, true); +} + +TSNode ts_node_prev_named_sibling(TSNode self) +{ + return ts_node__prev_sibling(self, false); +} + +TSNode ts_node_first_child_for_byte(TSNode self, uint32_t byte) +{ + return ts_node__first_child_for_byte(self, byte, true); +} + +TSNode ts_node_first_named_child_for_byte(TSNode self, uint32_t byte) +{ + return ts_node__first_child_for_byte(self, byte, false); +} + +TSNode ts_node_descendant_for_byte_range(TSNode self, uint32_t start, uint32_t end) +{ + return ts_node__descendant_for_byte_range(self, start, end, true); +} + +TSNode ts_node_named_descendant_for_byte_range(TSNode self, uint32_t start, uint32_t end) +{ + return ts_node__descendant_for_byte_range(self, start, end, false); +} + +TSNode ts_node_descendant_for_point_range(TSNode self, TSPoint start, TSPoint end) +{ + return ts_node__descendant_for_point_range(self, start, end, true); +} + +TSNode ts_node_named_descendant_for_point_range(TSNode self, TSPoint start, TSPoint end) +{ + return ts_node__descendant_for_point_range(self, start, end, false); +} + +void ts_node_edit(TSNode *self, const TSInputEdit *edit) +{ + uint32_t start_byte = ts_node_start_byte(*self); + TSPoint start_point = ts_node_start_point(*self); + + if (start_byte >= edit->old_end_byte) + { + start_byte = edit->new_end_byte + (start_byte - edit->old_end_byte); + start_point = point_add(edit->new_end_point, point_sub(start_point, edit->old_end_point)); + } + else if (start_byte > edit->start_byte) + { + start_byte = edit->new_end_byte; + start_point = edit->new_end_point; + } + + self->context[0] = start_byte; + self->context[1] = start_point.row; + self->context[2] = start_point.column; +} + +TSSymbol ts_node_field_id_for_child(TSNode self, uint32_t child_index) +{ + const char *name = ts_node_field_name_for_child(self, child_index); + if (name == NULL) + return (0); + return (ts_language_field_id_for_name(ts_node_language(self), name, strlen(name))); +} diff --git a/parser/nnsrc/parser.c b/parser/nnsrc/parser.c new file mode 100644 index 00000000..5dbf93d2 --- /dev/null +++ b/parser/nnsrc/parser.c @@ -0,0 +1,2172 @@ +#define _POSIX_C_SOURCE 200112L + +#include "./alloc.h" +#include "./array.h" +#include "./atomic.h" +#include "./clock.h" +#include "./error_costs.h" +#include "./get_changed_ranges.h" +#include "./language.h" +#include "./length.h" +#include "./lexer.h" +#include "./reduce_action.h" +#include "./reusable_node.h" +#include "./stack.h" +#include "./subtree.h" +#include "./tree.h" +#include "./wasm_store.h" +#include "api.h" +#include +#include +#include +#include +#include +#include + +#define LOG(...) \ + if (self->lexer.logger.log || self->dot_graph_file) \ + { \ + snprintf(self->lexer.debug_buffer, TREE_SITTER_SERIALIZATION_BUFFER_SIZE, __VA_ARGS__); \ + ts_parser__log(self); \ + } + +#define LOG_LOOKAHEAD(symbol_name, size) \ + if (self->lexer.logger.log || self->dot_graph_file) \ + { \ + char *buf = self->lexer.debug_buffer; \ + const char *symbol = symbol_name; \ + int off = snprintf(buf, TREE_SITTER_SERIALIZATION_BUFFER_SIZE, "lexed_lookahead sym:"); \ + for (int i = 0; symbol[i] != '\0' && off < TREE_SITTER_SERIALIZATION_BUFFER_SIZE; i++) \ + { \ + switch (symbol[i]) \ + { \ + case '\t': \ + buf[off++] = '\\'; \ + buf[off++] = 't'; \ + break; \ + case '\n': \ + buf[off++] = '\\'; \ + buf[off++] = 'n'; \ + break; \ + case '\v': \ + buf[off++] = '\\'; \ + buf[off++] = 'v'; \ + break; \ + case '\f': \ + buf[off++] = '\\'; \ + buf[off++] = 'f'; \ + break; \ + case '\r': \ + buf[off++] = '\\'; \ + buf[off++] = 'r'; \ + break; \ + case '\\': \ + buf[off++] = '\\'; \ + buf[off++] = '\\'; \ + break; \ + default: \ + buf[off++] = symbol[i]; \ + break; \ + } \ + } \ + snprintf(buf + off, TREE_SITTER_SERIALIZATION_BUFFER_SIZE - off, ", size:%u", size); \ + ts_parser__log(self); \ + } + +#define LOG_STACK() \ + if (self->dot_graph_file) \ + { \ + ts_stack_print_dot_graph(self->stack, self->language, self->dot_graph_file); \ + fputs("\n\n", self->dot_graph_file); \ + } + +#define LOG_TREE(tree) \ + if (self->dot_graph_file) \ + { \ + ts_subtree_print_dot_graph(tree, self->language, self->dot_graph_file); \ + fputs("\n", self->dot_graph_file); \ + } + +#define SYM_NAME(symbol) ts_language_symbol_name(self->language, symbol) + +#define TREE_NAME(tree) SYM_NAME(ts_subtree_symbol(tree)) + +static const unsigned MAX_VERSION_COUNT = 6; +static const unsigned MAX_VERSION_COUNT_OVERFLOW = 4; +static const unsigned MAX_SUMMARY_DEPTH = 16; +static const unsigned MAX_COST_DIFFERENCE = 16 * ERROR_COST_PER_SKIPPED_TREE; +static const unsigned OP_COUNT_PER_TIMEOUT_CHECK = 100; + +typedef struct +{ + Subtree token; + Subtree last_external_token; + uint32_t byte_index; +} TokenCache; + +struct TSParser +{ + Lexer lexer; + Stack *stack; + SubtreePool tree_pool; + const TSLanguage *language; + TSWasmStore *wasm_store; + ReduceActionSet reduce_actions; + Subtree finished_tree; + SubtreeArray trailing_extras; + SubtreeArray trailing_extras2; + SubtreeArray scratch_trees; + TokenCache token_cache; + ReusableNode reusable_node; + void *external_scanner_payload; + FILE *dot_graph_file; + TSClock end_clock; + TSDuration timeout_duration; + unsigned accept_count; + unsigned operation_count; + const volatile size_t *cancellation_flag; + Subtree old_tree; + TSRangeArray included_range_differences; + unsigned included_range_difference_index; + bool has_scanner_error; +}; + +typedef struct +{ + unsigned cost; + unsigned node_count; + int dynamic_precedence; + bool is_in_error; +} ErrorStatus; + +typedef enum +{ + ErrorComparisonTakeLeft, + ErrorComparisonPreferLeft, + ErrorComparisonNone, + ErrorComparisonPreferRight, + ErrorComparisonTakeRight, +} ErrorComparison; + +typedef struct +{ + const char *string; + uint32_t length; +} TSStringInput; + +// StringInput + +static const char *ts_string_input_read(void *_self, uint32_t byte, TSPoint point, uint32_t *length) +{ + (void)point; + TSStringInput *self = (TSStringInput *)_self; + if (byte >= self->length) + { + *length = 0; + return ""; + } + else + { + *length = self->length - byte; + return self->string + byte; + } +} + +// Parser - Private + +static void ts_parser__log(TSParser *self) +{ + if (self->lexer.logger.log) + { + self->lexer.logger.log(self->lexer.logger.payload, TSLogTypeParse, self->lexer.debug_buffer); + } + + if (self->dot_graph_file) + { + fprintf(self->dot_graph_file, "graph {\nlabel=\""); + for (char *chr = &self->lexer.debug_buffer[0]; *chr != 0; chr++) + { + if (*chr == '"' || *chr == '\\') + fputc('\\', self->dot_graph_file); + fputc(*chr, self->dot_graph_file); + } + fprintf(self->dot_graph_file, "\"\n}\n\n"); + } +} + +static bool ts_parser__breakdown_top_of_stack(TSParser *self, StackVersion version) +{ + bool did_break_down = false; + bool pending = false; + + do + { + StackSliceArray pop = ts_stack_pop_pending(self->stack, version); + if (!pop.size) + break; + + did_break_down = true; + pending = false; + for (uint32_t i = 0; i < pop.size; i++) + { + StackSlice slice = pop.contents[i]; + TSStateId state = ts_stack_state(self->stack, slice.version); + Subtree parent = *array_front(&slice.subtrees); + + for (uint32_t j = 0, n = ts_subtree_child_count(parent); j < n; j++) + { + Subtree child = ts_subtree_children(parent)[j]; + pending = ts_subtree_child_count(child) > 0; + + if (ts_subtree_is_error(child)) + { + state = ERROR_STATE; + } + else if (!ts_subtree_extra(child)) + { + state = ts_language_next_state(self->language, state, ts_subtree_symbol(child)); + } + + ts_subtree_retain(child); + ts_stack_push(self->stack, slice.version, child, pending, state); + } + + for (uint32_t j = 1; j < slice.subtrees.size; j++) + { + Subtree tree = slice.subtrees.contents[j]; + ts_stack_push(self->stack, slice.version, tree, false, state); + } + + ts_subtree_release(&self->tree_pool, parent); + array_delete(&slice.subtrees); + + LOG("breakdown_top_of_stack tree:%s", TREE_NAME(parent)); + LOG_STACK(); + } + } while (pending); + + return did_break_down; +} + +static void ts_parser__breakdown_lookahead(TSParser *self, Subtree *lookahead, TSStateId state, ReusableNode *reusable_node) +{ + bool did_descend = false; + Subtree tree = reusable_node_tree(reusable_node); + while (ts_subtree_child_count(tree) > 0 && ts_subtree_parse_state(tree) != state) + { + LOG("state_mismatch sym:%s", TREE_NAME(tree)); + reusable_node_descend(reusable_node); + tree = reusable_node_tree(reusable_node); + did_descend = true; + } + + if (did_descend) + { + ts_subtree_release(&self->tree_pool, *lookahead); + *lookahead = tree; + ts_subtree_retain(*lookahead); + } +} + +static ErrorComparison ts_parser__compare_versions(TSParser *self, ErrorStatus a, ErrorStatus b) +{ + (void)self; + if (!a.is_in_error && b.is_in_error) + { + if (a.cost < b.cost) + { + return ErrorComparisonTakeLeft; + } + else + { + return ErrorComparisonPreferLeft; + } + } + + if (a.is_in_error && !b.is_in_error) + { + if (b.cost < a.cost) + { + return ErrorComparisonTakeRight; + } + else + { + return ErrorComparisonPreferRight; + } + } + + if (a.cost < b.cost) + { + if ((b.cost - a.cost) * (1 + a.node_count) > MAX_COST_DIFFERENCE) + { + return ErrorComparisonTakeLeft; + } + else + { + return ErrorComparisonPreferLeft; + } + } + + if (b.cost < a.cost) + { + if ((a.cost - b.cost) * (1 + b.node_count) > MAX_COST_DIFFERENCE) + { + return ErrorComparisonTakeRight; + } + else + { + return ErrorComparisonPreferRight; + } + } + + if (a.dynamic_precedence > b.dynamic_precedence) + return ErrorComparisonPreferLeft; + if (b.dynamic_precedence > a.dynamic_precedence) + return ErrorComparisonPreferRight; + return ErrorComparisonNone; +} + +static ErrorStatus ts_parser__version_status(TSParser *self, StackVersion version) +{ + unsigned cost = ts_stack_error_cost(self->stack, version); + bool is_paused = ts_stack_is_paused(self->stack, version); + if (is_paused) + cost += ERROR_COST_PER_SKIPPED_TREE; + return (ErrorStatus){.cost = cost, + .node_count = ts_stack_node_count_since_error(self->stack, version), + .dynamic_precedence = ts_stack_dynamic_precedence(self->stack, version), + .is_in_error = is_paused || ts_stack_state(self->stack, version) == ERROR_STATE}; +} + +static bool ts_parser__better_version_exists(TSParser *self, StackVersion version, bool is_in_error, unsigned cost) +{ + if (self->finished_tree.ptr && ts_subtree_error_cost(self->finished_tree) <= cost) + { + return true; + } + + Length position = ts_stack_position(self->stack, version); + ErrorStatus status = { + .cost = cost, + .is_in_error = is_in_error, + .dynamic_precedence = ts_stack_dynamic_precedence(self->stack, version), + .node_count = ts_stack_node_count_since_error(self->stack, version), + }; + + for (StackVersion i = 0, n = ts_stack_version_count(self->stack); i < n; i++) + { + if (i == version || !ts_stack_is_active(self->stack, i) || ts_stack_position(self->stack, i).bytes < position.bytes) + continue; + ErrorStatus status_i = ts_parser__version_status(self, i); + switch (ts_parser__compare_versions(self, status, status_i)) + { + case ErrorComparisonTakeRight: + return true; + case ErrorComparisonPreferRight: + if (ts_stack_can_merge(self->stack, i, version)) + return true; + break; + default: + break; + } + } + + return false; +} + +static bool ts_parser__call_main_lex_fn(TSParser *self, TSLexMode lex_mode) +{ + if (ts_language_is_wasm(self->language)) + { + return ts_wasm_store_call_lex_main(self->wasm_store, lex_mode.lex_state); + } + else + { + return self->language->lex_fn(&self->lexer.data, lex_mode.lex_state); + } +} + +static bool ts_parser__call_keyword_lex_fn(TSParser *self, TSLexMode lex_mode) +{ + (void)(lex_mode); + if (ts_language_is_wasm(self->language)) + { + return ts_wasm_store_call_lex_keyword(self->wasm_store, 0); + } + else + { + return self->language->keyword_lex_fn(&self->lexer.data, 0); + } +} + +static void ts_parser__external_scanner_create(TSParser *self) +{ + if (self->language && self->language->external_scanner.states) + { + if (ts_language_is_wasm(self->language)) + { + self->external_scanner_payload = (void *)(uintptr_t)ts_wasm_store_call_scanner_create(self->wasm_store); + if (ts_wasm_store_has_error(self->wasm_store)) + { + self->has_scanner_error = true; + } + } + else if (self->language->external_scanner.create) + { + self->external_scanner_payload = self->language->external_scanner.create(); + } + } +} + +static void ts_parser__external_scanner_destroy(TSParser *self) +{ + if (self->language && self->external_scanner_payload && self->language->external_scanner.destroy && + !ts_language_is_wasm(self->language)) + { + self->language->external_scanner.destroy(self->external_scanner_payload); + } + self->external_scanner_payload = NULL; +} + +static unsigned ts_parser__external_scanner_serialize(TSParser *self) +{ + if (ts_language_is_wasm(self->language)) + { + return ts_wasm_store_call_scanner_serialize(self->wasm_store, (uintptr_t)self->external_scanner_payload, self->lexer.debug_buffer); + } + else + { + uint32_t length = self->language->external_scanner.serialize(self->external_scanner_payload, self->lexer.debug_buffer); + assert(length <= TREE_SITTER_SERIALIZATION_BUFFER_SIZE); + return length; + } +} + +static void ts_parser__external_scanner_deserialize(TSParser *self, Subtree external_token) +{ + const char *data = NULL; + uint32_t length = 0; + if (external_token.ptr) + { + data = ts_external_scanner_state_data(&external_token.ptr->external_scanner_state); + length = external_token.ptr->external_scanner_state.length; + } + + if (ts_language_is_wasm(self->language)) + { + ts_wasm_store_call_scanner_deserialize(self->wasm_store, (uintptr_t)self->external_scanner_payload, data, length); + if (ts_wasm_store_has_error(self->wasm_store)) + { + self->has_scanner_error = true; + } + } + else + { + self->language->external_scanner.deserialize(self->external_scanner_payload, data, length); + } +} + +static bool ts_parser__external_scanner_scan(TSParser *self, TSStateId external_lex_state) +{ + if (ts_language_is_wasm(self->language)) + { + bool result = ts_wasm_store_call_scanner_scan(self->wasm_store, (uintptr_t)self->external_scanner_payload, + external_lex_state * self->language->external_token_count); + if (ts_wasm_store_has_error(self->wasm_store)) + { + self->has_scanner_error = true; + } + return result; + } + else + { + const bool *valid_external_tokens = ts_language_enabled_external_tokens(self->language, external_lex_state); + return self->language->external_scanner.scan(self->external_scanner_payload, &self->lexer.data, valid_external_tokens); + } +} + +static bool ts_parser__can_reuse_first_leaf(TSParser *self, TSStateId state, Subtree tree, TableEntry *table_entry) +{ + TSLexMode current_lex_mode = self->language->lex_modes[state]; + TSSymbol leaf_symbol = ts_subtree_leaf_symbol(tree); + TSStateId leaf_state = ts_subtree_leaf_parse_state(tree); + TSLexMode leaf_lex_mode = self->language->lex_modes[leaf_state]; + + // At the end of a non-terminal extra node, the lexer normally returns + // NULL, which indicates that the parser should look for a reduce action + // at symbol `0`. Avoid reusing tokens in this situation to ensure that + // the same thing happens when incrementally reparsing. + if (current_lex_mode.lex_state == (uint16_t)(-1)) + return false; + + // If the token was created in a state with the same set of lookaheads, it is reusable. + if (table_entry->action_count > 0 && memcmp(&leaf_lex_mode, ¤t_lex_mode, sizeof(TSLexMode)) == 0 && + (leaf_symbol != self->language->keyword_capture_token || (!ts_subtree_is_keyword(tree) && ts_subtree_parse_state(tree) == state))) + return true; + + // Empty tokens are not reusable in states with different lookaheads. + if (ts_subtree_size(tree).bytes == 0 && leaf_symbol != ts_builtin_sym_end) + return false; + + // If the current state allows external tokens or other tokens that conflict with this + // token, this token is not reusable. + return current_lex_mode.external_lex_state == 0 && table_entry->is_reusable; +} + +static Subtree ts_parser__lex(TSParser *self, StackVersion version, TSStateId parse_state) +{ + TSLexMode lex_mode = self->language->lex_modes[parse_state]; + if (lex_mode.lex_state == (uint16_t)-1) + { + LOG("no_lookahead_after_non_terminal_extra"); + return NULL_SUBTREE; + } + + const Length start_position = ts_stack_position(self->stack, version); + const Subtree external_token = ts_stack_last_external_token(self->stack, version); + + bool found_external_token = false; + bool error_mode = parse_state == ERROR_STATE; + bool skipped_error = false; + bool called_get_column = false; + int32_t first_error_character = 0; + Length error_start_position = length_zero(); + Length error_end_position = length_zero(); + uint32_t lookahead_end_byte = 0; + uint32_t external_scanner_state_len = 0; + bool external_scanner_state_changed = false; + ts_lexer_reset(&self->lexer, start_position); + + for (;;) + { + bool found_token = false; + Length current_position = self->lexer.current_position; + + if (lex_mode.external_lex_state != 0) + { + LOG("lex_external state:%d, row:%u, column:%u", lex_mode.external_lex_state, current_position.extent.row, + current_position.extent.column); + ts_lexer_start(&self->lexer); + ts_parser__external_scanner_deserialize(self, external_token); + found_token = ts_parser__external_scanner_scan(self, lex_mode.external_lex_state); + if (self->has_scanner_error) + return NULL_SUBTREE; + ts_lexer_finish(&self->lexer, &lookahead_end_byte); + + if (found_token) + { + external_scanner_state_len = ts_parser__external_scanner_serialize(self); + external_scanner_state_changed = !ts_external_scanner_state_eq(ts_subtree_external_scanner_state(external_token), + self->lexer.debug_buffer, external_scanner_state_len); + + // When recovering from an error, ignore any zero-length external tokens + // unless they have changed the external scanner's state. This helps to + // avoid infinite loops which could otherwise occur, because the lexer is + // looking for any possible token, instead of looking for the specific set of + // tokens that are valid in some parse state. + // + // Note that it's possible that the token end position may be *before* the + // original position of the lexer because of the way that tokens are positioned + // at included range boundaries: when a token is terminated at the start of + // an included range, it is marked as ending at the *end* of the preceding + // included range. + if (self->lexer.token_end_position.bytes <= current_position.bytes && + (error_mode || !ts_stack_has_advanced_since_error(self->stack, version)) && !external_scanner_state_changed) + { + LOG("ignore_empty_external_token symbol:%s", + SYM_NAME(self->language->external_scanner.symbol_map[self->lexer.data.result_symbol])) + found_token = false; + } + } + + if (found_token) + { + found_external_token = true; + called_get_column = self->lexer.did_get_column; + break; + } + + ts_lexer_reset(&self->lexer, current_position); + } + + LOG("lex_internal state:%d, row:%u, column:%u", lex_mode.lex_state, current_position.extent.row, current_position.extent.column); + ts_lexer_start(&self->lexer); + found_token = ts_parser__call_main_lex_fn(self, lex_mode); + ts_lexer_finish(&self->lexer, &lookahead_end_byte); + if (found_token) + break; + + if (!error_mode) + { + error_mode = true; + lex_mode = self->language->lex_modes[ERROR_STATE]; + ts_lexer_reset(&self->lexer, start_position); + continue; + } + + if (!skipped_error) + { + LOG("skip_unrecognized_character"); + skipped_error = true; + error_start_position = self->lexer.token_start_position; + error_end_position = self->lexer.token_start_position; + first_error_character = self->lexer.data.lookahead; + } + + if (self->lexer.current_position.bytes == error_end_position.bytes) + { + if (self->lexer.data.eof(&self->lexer.data)) + { + self->lexer.data.result_symbol = ts_builtin_sym_error; + break; + } + self->lexer.data.advance(&self->lexer.data, false); + } + + error_end_position = self->lexer.current_position; + } + + Subtree result; + if (skipped_error) + { + Length padding = length_sub(error_start_position, start_position); + Length size = length_sub(error_end_position, error_start_position); + uint32_t lookahead_bytes = lookahead_end_byte - error_end_position.bytes; + result = ts_subtree_new_error(&self->tree_pool, first_error_character, padding, size, lookahead_bytes, parse_state, self->language); + } + else + { + bool is_keyword = false; + TSSymbol symbol = self->lexer.data.result_symbol; + Length padding = length_sub(self->lexer.token_start_position, start_position); + Length size = length_sub(self->lexer.token_end_position, self->lexer.token_start_position); + uint32_t lookahead_bytes = lookahead_end_byte - self->lexer.token_end_position.bytes; + + if (found_external_token) + { + symbol = self->language->external_scanner.symbol_map[symbol]; + } + else if (symbol == self->language->keyword_capture_token && symbol != 0) + { + uint32_t end_byte = self->lexer.token_end_position.bytes; + ts_lexer_reset(&self->lexer, self->lexer.token_start_position); + ts_lexer_start(&self->lexer); + + is_keyword = ts_parser__call_keyword_lex_fn(self, lex_mode); + + if (is_keyword && self->lexer.token_end_position.bytes == end_byte && + ts_language_has_actions(self->language, parse_state, self->lexer.data.result_symbol)) + { + symbol = self->lexer.data.result_symbol; + } + } + + result = ts_subtree_new_leaf(&self->tree_pool, symbol, padding, size, lookahead_bytes, parse_state, found_external_token, + called_get_column, is_keyword, self->language); + + if (found_external_token) + { + MutableSubtree mut_result = ts_subtree_to_mut_unsafe(result); + ts_external_scanner_state_init(&mut_result.ptr->external_scanner_state, self->lexer.debug_buffer, external_scanner_state_len); + mut_result.ptr->has_external_scanner_state_change = external_scanner_state_changed; + } + } + + LOG_LOOKAHEAD(SYM_NAME(ts_subtree_symbol(result)), ts_subtree_total_size(result).bytes); + return result; +} + +static Subtree ts_parser__get_cached_token(TSParser *self, TSStateId state, size_t position, Subtree last_external_token, + TableEntry *table_entry) +{ + TokenCache *cache = &self->token_cache; + if (cache->token.ptr && cache->byte_index == position && + ts_subtree_external_scanner_state_eq(cache->last_external_token, last_external_token)) + { + ts_language_table_entry(self->language, state, ts_subtree_symbol(cache->token), table_entry); + if (ts_parser__can_reuse_first_leaf(self, state, cache->token, table_entry)) + { + ts_subtree_retain(cache->token); + return cache->token; + } + } + return NULL_SUBTREE; +} + +static void ts_parser__set_cached_token(TSParser *self, uint32_t byte_index, Subtree last_external_token, Subtree token) +{ + TokenCache *cache = &self->token_cache; + if (token.ptr) + ts_subtree_retain(token); + if (last_external_token.ptr) + ts_subtree_retain(last_external_token); + if (cache->token.ptr) + ts_subtree_release(&self->tree_pool, cache->token); + if (cache->last_external_token.ptr) + ts_subtree_release(&self->tree_pool, cache->last_external_token); + cache->token = token; + cache->byte_index = byte_index; + cache->last_external_token = last_external_token; +} + +static bool ts_parser__has_included_range_difference(const TSParser *self, uint32_t start_position, uint32_t end_position) +{ + return ts_range_array_intersects(&self->included_range_differences, self->included_range_difference_index, start_position, + end_position); +} + +static Subtree ts_parser__reuse_node(TSParser *self, StackVersion version, TSStateId *state, uint32_t position, Subtree last_external_token, + TableEntry *table_entry) +{ + Subtree result; + while ((result = reusable_node_tree(&self->reusable_node)).ptr) + { + uint32_t byte_offset = reusable_node_byte_offset(&self->reusable_node); + uint32_t end_byte_offset = byte_offset + ts_subtree_total_bytes(result); + + // Do not reuse an EOF node if the included ranges array has changes + // later on in the file. + if (ts_subtree_is_eof(result)) + end_byte_offset = UINT32_MAX; + + if (byte_offset > position) + { + LOG("before_reusable_node symbol:%s", TREE_NAME(result)); + break; + } + + if (byte_offset < position) + { + LOG("past_reusable_node symbol:%s", TREE_NAME(result)); + if (end_byte_offset <= position || !reusable_node_descend(&self->reusable_node)) + { + reusable_node_advance(&self->reusable_node); + } + continue; + } + + if (!ts_subtree_external_scanner_state_eq(self->reusable_node.last_external_token, last_external_token)) + { + LOG("reusable_node_has_different_external_scanner_state symbol:%s", TREE_NAME(result)); + reusable_node_advance(&self->reusable_node); + continue; + } + + const char *reason = NULL; + if (ts_subtree_has_changes(result)) + { + reason = "has_changes"; + } + else if (ts_subtree_is_error(result)) + { + reason = "is_error"; + } + else if (ts_subtree_missing(result)) + { + reason = "is_missing"; + } + else if (ts_subtree_is_fragile(result)) + { + reason = "is_fragile"; + } + else if (ts_parser__has_included_range_difference(self, byte_offset, end_byte_offset)) + { + reason = "contains_different_included_range"; + } + + if (reason) + { + LOG("cant_reuse_node_%s tree:%s", reason, TREE_NAME(result)); + if (!reusable_node_descend(&self->reusable_node)) + { + reusable_node_advance(&self->reusable_node); + ts_parser__breakdown_top_of_stack(self, version); + *state = ts_stack_state(self->stack, version); + } + continue; + } + + TSSymbol leaf_symbol = ts_subtree_leaf_symbol(result); + ts_language_table_entry(self->language, *state, leaf_symbol, table_entry); + if (!ts_parser__can_reuse_first_leaf(self, *state, result, table_entry)) + { + LOG("cant_reuse_node symbol:%s, first_leaf_symbol:%s", TREE_NAME(result), SYM_NAME(leaf_symbol)); + reusable_node_advance_past_leaf(&self->reusable_node); + break; + } + + LOG("reuse_node symbol:%s", TREE_NAME(result)); + ts_subtree_retain(result); + return result; + } + + return NULL_SUBTREE; +} + +// Determine if a given tree should be replaced by an alternative tree. +// +// The decision is based on the trees' error costs (if any), their dynamic precedence, +// and finally, as a default, by a recursive comparison of the trees' symbols. +static bool ts_parser__select_tree(TSParser *self, Subtree left, Subtree right) +{ + if (!left.ptr) + return true; + if (!right.ptr) + return false; + + if (ts_subtree_error_cost(right) < ts_subtree_error_cost(left)) + { + LOG("select_smaller_error symbol:%s, over_symbol:%s", TREE_NAME(right), TREE_NAME(left)); + return true; + } + + if (ts_subtree_error_cost(left) < ts_subtree_error_cost(right)) + { + LOG("select_smaller_error symbol:%s, over_symbol:%s", TREE_NAME(left), TREE_NAME(right)); + return false; + } + + if (ts_subtree_dynamic_precedence(right) > ts_subtree_dynamic_precedence(left)) + { + LOG("select_higher_precedence symbol:%s, prec:%" PRId32 ", over_symbol:%s, other_prec:%" PRId32, TREE_NAME(right), + ts_subtree_dynamic_precedence(right), TREE_NAME(left), ts_subtree_dynamic_precedence(left)); + return true; + } + + if (ts_subtree_dynamic_precedence(left) > ts_subtree_dynamic_precedence(right)) + { + LOG("select_higher_precedence symbol:%s, prec:%" PRId32 ", over_symbol:%s, other_prec:%" PRId32, TREE_NAME(left), + ts_subtree_dynamic_precedence(left), TREE_NAME(right), ts_subtree_dynamic_precedence(right)); + return false; + } + + if (ts_subtree_error_cost(left) > 0) + return true; + + int comparison = ts_subtree_compare(left, right, &self->tree_pool); + switch (comparison) + { + case -1: + LOG("select_earlier symbol:%s, over_symbol:%s", TREE_NAME(left), TREE_NAME(right)); + return false; + break; + case 1: + LOG("select_earlier symbol:%s, over_symbol:%s", TREE_NAME(right), TREE_NAME(left)); + return true; + default: + LOG("select_existing symbol:%s, over_symbol:%s", TREE_NAME(left), TREE_NAME(right)); + return false; + } +} + +// Determine if a given tree's children should be replaced by an alternative +// array of children. +static bool ts_parser__select_children(TSParser *self, Subtree left, const SubtreeArray *children) +{ + array_assign(&self->scratch_trees, children); + + // Create a temporary subtree using the scratch trees array. This node does + // not perform any allocation except for possibly growing the array to make + // room for its own heap data. The scratch tree is never explicitly released, + // so the same 'scratch trees' array can be reused again later. + MutableSubtree scratch_tree = ts_subtree_new_node(ts_subtree_symbol(left), &self->scratch_trees, 0, self->language); + + return ts_parser__select_tree(self, left, ts_subtree_from_mut(scratch_tree)); +} + +static void ts_parser__shift(TSParser *self, StackVersion version, TSStateId state, Subtree lookahead, bool extra) +{ + bool is_leaf = ts_subtree_child_count(lookahead) == 0; + Subtree subtree_to_push = lookahead; + if (extra != ts_subtree_extra(lookahead) && is_leaf) + { + MutableSubtree result = ts_subtree_make_mut(&self->tree_pool, lookahead); + ts_subtree_set_extra(&result, extra); + subtree_to_push = ts_subtree_from_mut(result); + } + + ts_stack_push(self->stack, version, subtree_to_push, !is_leaf, state); + if (ts_subtree_has_external_tokens(subtree_to_push)) + { + ts_stack_set_last_external_token(self->stack, version, ts_subtree_last_external_token(subtree_to_push)); + } +} + +static StackVersion ts_parser__reduce(TSParser *self, StackVersion version, TSSymbol symbol, uint32_t count, int dynamic_precedence, + uint16_t production_id, bool is_fragile, bool end_of_non_terminal_extra) +{ + uint32_t initial_version_count = ts_stack_version_count(self->stack); + + // Pop the given number of nodes from the given version of the parse stack. + // If stack versions have previously merged, then there may be more than one + // path back through the stack. For each path, create a new parent node to + // contain the popped children, and push it onto the stack in place of the + // children. + StackSliceArray pop = ts_stack_pop_count(self->stack, version, count); + uint32_t removed_version_count = 0; + for (uint32_t i = 0; i < pop.size; i++) + { + StackSlice slice = pop.contents[i]; + StackVersion slice_version = slice.version - removed_version_count; + + // This is where new versions are added to the parse stack. The versions + // will all be sorted and truncated at the end of the outer parsing loop. + // Allow the maximum version count to be temporarily exceeded, but only + // by a limited threshold. + if (slice_version > MAX_VERSION_COUNT + MAX_VERSION_COUNT_OVERFLOW) + { + ts_stack_remove_version(self->stack, slice_version); + ts_subtree_array_delete(&self->tree_pool, &slice.subtrees); + removed_version_count++; + while (i + 1 < pop.size) + { + StackSlice next_slice = pop.contents[i + 1]; + if (next_slice.version != slice.version) + break; + ts_subtree_array_delete(&self->tree_pool, &next_slice.subtrees); + i++; + } + continue; + } + + // Extra tokens on top of the stack should not be included in this new parent + // node. They will be re-pushed onto the stack after the parent node is + // created and pushed. + SubtreeArray children = slice.subtrees; + ts_subtree_array_remove_trailing_extras(&children, &self->trailing_extras); + + MutableSubtree parent = ts_subtree_new_node(symbol, &children, production_id, self->language); + + // This pop operation may have caused multiple stack versions to collapse + // into one, because they all diverged from a common state. In that case, + // choose one of the arrays of trees to be the parent node's children, and + // delete the rest of the tree arrays. + while (i + 1 < pop.size) + { + StackSlice next_slice = pop.contents[i + 1]; + if (next_slice.version != slice.version) + break; + i++; + + SubtreeArray next_slice_children = next_slice.subtrees; + ts_subtree_array_remove_trailing_extras(&next_slice_children, &self->trailing_extras2); + + if (ts_parser__select_children(self, ts_subtree_from_mut(parent), &next_slice_children)) + { + ts_subtree_array_clear(&self->tree_pool, &self->trailing_extras); + ts_subtree_release(&self->tree_pool, ts_subtree_from_mut(parent)); + array_swap(&self->trailing_extras, &self->trailing_extras2); + parent = ts_subtree_new_node(symbol, &next_slice_children, production_id, self->language); + } + else + { + array_clear(&self->trailing_extras2); + ts_subtree_array_delete(&self->tree_pool, &next_slice.subtrees); + } + } + + TSStateId state = ts_stack_state(self->stack, slice_version); + TSStateId next_state = ts_language_next_state(self->language, state, symbol); + if (end_of_non_terminal_extra && next_state == state) + { + parent.ptr->extra = true; + } + if (is_fragile || pop.size > 1 || initial_version_count > 1) + { + parent.ptr->fragile_left = true; + parent.ptr->fragile_right = true; + parent.ptr->parse_state = TS_TREE_STATE_NONE; + } + else + { + parent.ptr->parse_state = state; + } + parent.ptr->dynamic_precedence += dynamic_precedence; + + // Push the parent node onto the stack, along with any extra tokens that + // were previously on top of the stack. + ts_stack_push(self->stack, slice_version, ts_subtree_from_mut(parent), false, next_state); + for (uint32_t j = 0; j < self->trailing_extras.size; j++) + { + ts_stack_push(self->stack, slice_version, self->trailing_extras.contents[j], false, next_state); + } + + for (StackVersion j = 0; j < slice_version; j++) + { + if (j == version) + continue; + if (ts_stack_merge(self->stack, j, slice_version)) + { + removed_version_count++; + break; + } + } + } + + // Return the first new stack version that was created. + return ts_stack_version_count(self->stack) > initial_version_count ? initial_version_count : STACK_VERSION_NONE; +} + +static void ts_parser__accept(TSParser *self, StackVersion version, Subtree lookahead) +{ + assert(ts_subtree_is_eof(lookahead)); + ts_stack_push(self->stack, version, lookahead, false, 1); + + StackSliceArray pop = ts_stack_pop_all(self->stack, version); + for (uint32_t i = 0; i < pop.size; i++) + { + SubtreeArray trees = pop.contents[i].subtrees; + + Subtree root = NULL_SUBTREE; + for (uint32_t j = trees.size - 1; j + 1 > 0; j--) + { + Subtree tree = trees.contents[j]; + if (!ts_subtree_extra(tree)) + { + assert(!tree.data.is_inline); + uint32_t child_count = ts_subtree_child_count(tree); + const Subtree *children = ts_subtree_children(tree); + for (uint32_t k = 0; k < child_count; k++) + { + ts_subtree_retain(children[k]); + } + array_splice(&trees, j, 1, child_count, children); + root = ts_subtree_from_mut(ts_subtree_new_node(ts_subtree_symbol(tree), &trees, tree.ptr->production_id, self->language)); + ts_subtree_release(&self->tree_pool, tree); + break; + } + } + + assert(root.ptr); + self->accept_count++; + + if (self->finished_tree.ptr) + { + if (ts_parser__select_tree(self, self->finished_tree, root)) + { + ts_subtree_release(&self->tree_pool, self->finished_tree); + self->finished_tree = root; + } + else + { + ts_subtree_release(&self->tree_pool, root); + } + } + else + { + self->finished_tree = root; + } + } + + ts_stack_remove_version(self->stack, pop.contents[0].version); + ts_stack_halt(self->stack, version); +} + +static bool ts_parser__do_all_potential_reductions(TSParser *self, StackVersion starting_version, TSSymbol lookahead_symbol) +{ + uint32_t initial_version_count = ts_stack_version_count(self->stack); + + bool can_shift_lookahead_symbol = false; + StackVersion version = starting_version; + for (unsigned i = 0; true; i++) + { + uint32_t version_count = ts_stack_version_count(self->stack); + if (version >= version_count) + break; + + bool merged = false; + for (StackVersion j = initial_version_count; j < version; j++) + { + if (ts_stack_merge(self->stack, j, version)) + { + merged = true; + break; + } + } + if (merged) + continue; + + TSStateId state = ts_stack_state(self->stack, version); + bool has_shift_action = false; + array_clear(&self->reduce_actions); + + TSSymbol first_symbol, end_symbol; + if (lookahead_symbol != 0) + { + first_symbol = lookahead_symbol; + end_symbol = lookahead_symbol + 1; + } + else + { + first_symbol = 1; + end_symbol = self->language->token_count; + } + + for (TSSymbol symbol = first_symbol; symbol < end_symbol; symbol++) + { + TableEntry entry; + ts_language_table_entry(self->language, state, symbol, &entry); + for (uint32_t j = 0; j < entry.action_count; j++) + { + TSParseAction action = entry.actions[j]; + switch (action.type) + { + case TSParseActionTypeShift: + case TSParseActionTypeRecover: + if (!action.shift.extra && !action.shift.repetition) + has_shift_action = true; + break; + case TSParseActionTypeReduce: + if (action.reduce.child_count > 0) + ts_reduce_action_set_add(&self->reduce_actions, (ReduceAction){ + .symbol = action.reduce.symbol, + .count = action.reduce.child_count, + .dynamic_precedence = action.reduce.dynamic_precedence, + .production_id = action.reduce.production_id, + }); + break; + default: + break; + } + } + } + + StackVersion reduction_version = STACK_VERSION_NONE; + for (uint32_t j = 0; j < self->reduce_actions.size; j++) + { + ReduceAction action = self->reduce_actions.contents[j]; + + reduction_version = + ts_parser__reduce(self, version, action.symbol, action.count, action.dynamic_precedence, action.production_id, true, false); + } + + if (has_shift_action) + { + can_shift_lookahead_symbol = true; + } + else if (reduction_version != STACK_VERSION_NONE && i < MAX_VERSION_COUNT) + { + ts_stack_renumber_version(self->stack, reduction_version, version); + continue; + } + else if (lookahead_symbol != 0) + { + ts_stack_remove_version(self->stack, version); + } + + if (version == starting_version) + { + version = version_count; + } + else + { + version++; + } + } + + return can_shift_lookahead_symbol; +} + +static bool ts_parser__recover_to_state(TSParser *self, StackVersion version, unsigned depth, TSStateId goal_state) +{ + StackSliceArray pop = ts_stack_pop_count(self->stack, version, depth); + StackVersion previous_version = STACK_VERSION_NONE; + + for (unsigned i = 0; i < pop.size; i++) + { + StackSlice slice = pop.contents[i]; + + if (slice.version == previous_version) + { + ts_subtree_array_delete(&self->tree_pool, &slice.subtrees); + array_erase(&pop, i--); + continue; + } + + if (ts_stack_state(self->stack, slice.version) != goal_state) + { + ts_stack_halt(self->stack, slice.version); + ts_subtree_array_delete(&self->tree_pool, &slice.subtrees); + array_erase(&pop, i--); + continue; + } + + SubtreeArray error_trees = ts_stack_pop_error(self->stack, slice.version); + if (error_trees.size > 0) + { + assert(error_trees.size == 1); + Subtree error_tree = error_trees.contents[0]; + uint32_t error_child_count = ts_subtree_child_count(error_tree); + if (error_child_count > 0) + { + array_splice(&slice.subtrees, 0, 0, error_child_count, ts_subtree_children(error_tree)); + for (unsigned j = 0; j < error_child_count; j++) + { + ts_subtree_retain(slice.subtrees.contents[j]); + } + } + ts_subtree_array_delete(&self->tree_pool, &error_trees); + } + + ts_subtree_array_remove_trailing_extras(&slice.subtrees, &self->trailing_extras); + + if (slice.subtrees.size > 0) + { + Subtree error = ts_subtree_new_error_node(&slice.subtrees, true, self->language); + ts_stack_push(self->stack, slice.version, error, false, goal_state); + } + else + { + array_delete(&slice.subtrees); + } + + for (unsigned j = 0; j < self->trailing_extras.size; j++) + { + Subtree tree = self->trailing_extras.contents[j]; + ts_stack_push(self->stack, slice.version, tree, false, goal_state); + } + + previous_version = slice.version; + } + + return previous_version != STACK_VERSION_NONE; +} + +static void ts_parser__recover(TSParser *self, StackVersion version, Subtree lookahead) +{ + bool did_recover = false; + unsigned previous_version_count = ts_stack_version_count(self->stack); + Length position = ts_stack_position(self->stack, version); + StackSummary *summary = ts_stack_get_summary(self->stack, version); + unsigned node_count_since_error = ts_stack_node_count_since_error(self->stack, version); + unsigned current_error_cost = ts_stack_error_cost(self->stack, version); + + // When the parser is in the error state, there are two strategies for recovering with a + // given lookahead token: + // 1. Find a previous state on the stack in which that lookahead token would be valid. Then, + // create a new stack version that is in that state again. This entails popping all of the + // subtrees that have been pushed onto the stack since that previous state, and wrapping + // them in an ERROR node. + // 2. Wrap the lookahead token in an ERROR node, push that ERROR node onto the stack, and + // move on to the next lookahead token, remaining in the error state. + // + // First, try the strategy 1. Upon entering the error state, the parser recorded a summary + // of the previous parse states and their depths. Look at each state in the summary, to see + // if the current lookahead token would be valid in that state. + if (summary && !ts_subtree_is_error(lookahead)) + { + for (unsigned i = 0; i < summary->size; i++) + { + StackSummaryEntry entry = summary->contents[i]; + + if (entry.state == ERROR_STATE) + continue; + if (entry.position.bytes == position.bytes) + continue; + unsigned depth = entry.depth; + if (node_count_since_error > 0) + depth++; + + // Do not recover in ways that create redundant stack versions. + bool would_merge = false; + for (unsigned j = 0; j < previous_version_count; j++) + { + if (ts_stack_state(self->stack, j) == entry.state && ts_stack_position(self->stack, j).bytes == position.bytes) + { + would_merge = true; + break; + } + } + if (would_merge) + continue; + + // Do not recover if the result would clearly be worse than some existing stack version. + unsigned new_cost = current_error_cost + entry.depth * ERROR_COST_PER_SKIPPED_TREE + + (position.bytes - entry.position.bytes) * ERROR_COST_PER_SKIPPED_CHAR + + (position.extent.row - entry.position.extent.row) * ERROR_COST_PER_SKIPPED_LINE; + if (ts_parser__better_version_exists(self, version, false, new_cost)) + break; + + // If the current lookahead token is valid in some previous state, recover to that state. + // Then stop looking for further recoveries. + if (ts_language_has_actions(self->language, entry.state, ts_subtree_symbol(lookahead))) + { + if (ts_parser__recover_to_state(self, version, depth, entry.state)) + { + did_recover = true; + LOG("recover_to_previous state:%u, depth:%u", entry.state, depth); + LOG_STACK(); + break; + } + } + } + } + + // In the process of attempting to recover, some stack versions may have been created + // and subsequently halted. Remove those versions. + for (unsigned i = previous_version_count; i < ts_stack_version_count(self->stack); i++) + { + if (!ts_stack_is_active(self->stack, i)) + { + ts_stack_remove_version(self->stack, i--); + } + } + + // If strategy 1 succeeded, a new stack version will have been created which is able to handle + // the current lookahead token. Now, in addition, try strategy 2 described above: skip the + // current lookahead token by wrapping it in an ERROR node. + + // Don't pursue this additional strategy if there are already too many stack versions. + if (did_recover && ts_stack_version_count(self->stack) > MAX_VERSION_COUNT) + { + ts_stack_halt(self->stack, version); + ts_subtree_release(&self->tree_pool, lookahead); + return; + } + + if (did_recover && ts_subtree_has_external_scanner_state_change(lookahead)) + { + ts_stack_halt(self->stack, version); + ts_subtree_release(&self->tree_pool, lookahead); + return; + } + + // If the parser is still in the error state at the end of the file, just wrap everything + // in an ERROR node and terminate. + if (ts_subtree_is_eof(lookahead)) + { + LOG("recover_eof"); + SubtreeArray children = array_new(); + Subtree parent = ts_subtree_new_error_node(&children, false, self->language); + ts_stack_push(self->stack, version, parent, false, 1); + ts_parser__accept(self, version, lookahead); + return; + } + + // Do not recover if the result would clearly be worse than some existing stack version. + unsigned new_cost = current_error_cost + ERROR_COST_PER_SKIPPED_TREE + ts_subtree_total_bytes(lookahead) * ERROR_COST_PER_SKIPPED_CHAR + + ts_subtree_total_size(lookahead).extent.row * ERROR_COST_PER_SKIPPED_LINE; + if (ts_parser__better_version_exists(self, version, false, new_cost)) + { + ts_stack_halt(self->stack, version); + ts_subtree_release(&self->tree_pool, lookahead); + return; + } + + // If the current lookahead token is an extra token, mark it as extra. This means it won't + // be counted in error cost calculations. + unsigned n; + const TSParseAction *actions = ts_language_actions(self->language, 1, ts_subtree_symbol(lookahead), &n); + if (n > 0 && actions[n - 1].type == TSParseActionTypeShift && actions[n - 1].shift.extra) + { + MutableSubtree mutable_lookahead = ts_subtree_make_mut(&self->tree_pool, lookahead); + ts_subtree_set_extra(&mutable_lookahead, true); + lookahead = ts_subtree_from_mut(mutable_lookahead); + } + + // Wrap the lookahead token in an ERROR. + LOG("skip_token symbol:%s", TREE_NAME(lookahead)); + SubtreeArray children = array_new(); + array_reserve(&children, 1); + array_push(&children, lookahead); + MutableSubtree error_repeat = ts_subtree_new_node(ts_builtin_sym_error_repeat, &children, 0, self->language); + + // If other tokens have already been skipped, so there is already an ERROR at the top of the + // stack, then pop that ERROR off the stack and wrap the two ERRORs together into one larger + // ERROR. + if (node_count_since_error > 0) + { + StackSliceArray pop = ts_stack_pop_count(self->stack, version, 1); + + // TODO: Figure out how to make this condition occur. + // See https://github.com/atom/atom/issues/18450#issuecomment-439579778 + // If multiple stack versions have merged at this point, just pick one of the errors + // arbitrarily and discard the rest. + if (pop.size > 1) + { + for (unsigned i = 1; i < pop.size; i++) + { + ts_subtree_array_delete(&self->tree_pool, &pop.contents[i].subtrees); + } + while (ts_stack_version_count(self->stack) > pop.contents[0].version + 1) + { + ts_stack_remove_version(self->stack, pop.contents[0].version + 1); + } + } + + ts_stack_renumber_version(self->stack, pop.contents[0].version, version); + array_push(&pop.contents[0].subtrees, ts_subtree_from_mut(error_repeat)); + error_repeat = ts_subtree_new_node(ts_builtin_sym_error_repeat, &pop.contents[0].subtrees, 0, self->language); + } + + // Push the new ERROR onto the stack. + ts_stack_push(self->stack, version, ts_subtree_from_mut(error_repeat), false, ERROR_STATE); + if (ts_subtree_has_external_tokens(lookahead)) + { + ts_stack_set_last_external_token(self->stack, version, ts_subtree_last_external_token(lookahead)); + } +} + +static void ts_parser__handle_error(TSParser *self, StackVersion version, Subtree lookahead) +{ + uint32_t previous_version_count = ts_stack_version_count(self->stack); + + // Perform any reductions that can happen in this state, regardless of the lookahead. After + // skipping one or more invalid tokens, the parser might find a token that would have allowed + // a reduction to take place. + ts_parser__do_all_potential_reductions(self, version, 0); + uint32_t version_count = ts_stack_version_count(self->stack); + Length position = ts_stack_position(self->stack, version); + + // Push a discontinuity onto the stack. Merge all of the stack versions that + // were created in the previous step. + bool did_insert_missing_token = false; + for (StackVersion v = version; v < version_count;) + { + if (!did_insert_missing_token) + { + TSStateId state = ts_stack_state(self->stack, v); + for (TSSymbol missing_symbol = 1; missing_symbol < (uint16_t)self->language->token_count; missing_symbol++) + { + TSStateId state_after_missing_symbol = ts_language_next_state(self->language, state, missing_symbol); + if (state_after_missing_symbol == 0 || state_after_missing_symbol == state) + { + continue; + } + + if (ts_language_has_reduce_action(self->language, state_after_missing_symbol, ts_subtree_leaf_symbol(lookahead))) + { + // In case the parser is currently outside of any included range, the lexer will + // snap to the beginning of the next included range. The missing token's padding + // must be assigned to position it within the next included range. + ts_lexer_reset(&self->lexer, position); + ts_lexer_mark_end(&self->lexer); + Length padding = length_sub(self->lexer.token_end_position, position); + uint32_t lookahead_bytes = ts_subtree_total_bytes(lookahead) + ts_subtree_lookahead_bytes(lookahead); + + StackVersion version_with_missing_tree = ts_stack_copy_version(self->stack, v); + Subtree missing_tree = + ts_subtree_new_missing_leaf(&self->tree_pool, missing_symbol, padding, lookahead_bytes, self->language); + ts_stack_push(self->stack, version_with_missing_tree, missing_tree, false, state_after_missing_symbol); + + if (ts_parser__do_all_potential_reductions(self, version_with_missing_tree, ts_subtree_leaf_symbol(lookahead))) + { + LOG("recover_with_missing symbol:%s, state:%u", SYM_NAME(missing_symbol), + ts_stack_state(self->stack, version_with_missing_tree)); + did_insert_missing_token = true; + break; + } + } + } + } + + ts_stack_push(self->stack, v, NULL_SUBTREE, false, ERROR_STATE); + v = (v == version) ? previous_version_count : v + 1; + } + + for (unsigned i = previous_version_count; i < version_count; i++) + { + bool did_merge = ts_stack_merge(self->stack, version, previous_version_count); + assert(did_merge); + (void)did_merge; // fix warning/error with clang -Os + } + + ts_stack_record_summary(self->stack, version, MAX_SUMMARY_DEPTH); + + // Begin recovery with the current lookahead node, rather than waiting for the + // next turn of the parse loop. This ensures that the tree accounts for the + // current lookahead token's "lookahead bytes" value, which describes how far + // the lexer needed to look ahead beyond the content of the token in order to + // recognize it. + if (ts_subtree_child_count(lookahead) > 0) + { + ts_parser__breakdown_lookahead(self, &lookahead, ERROR_STATE, &self->reusable_node); + } + ts_parser__recover(self, version, lookahead); + + LOG_STACK(); +} + +static bool ts_parser__advance(TSParser *self, StackVersion version, bool allow_node_reuse) +{ + TSStateId state = ts_stack_state(self->stack, version); + uint32_t position = ts_stack_position(self->stack, version).bytes; + Subtree last_external_token = ts_stack_last_external_token(self->stack, version); + + bool did_reuse = true; + Subtree lookahead = NULL_SUBTREE; + TableEntry table_entry = {.action_count = 0}; + + // If possible, reuse a node from the previous syntax tree. + if (allow_node_reuse) + { + lookahead = ts_parser__reuse_node(self, version, &state, position, last_external_token, &table_entry); + } + + // If no node from the previous syntax tree could be reused, then try to + // reuse the token previously returned by the lexer. + if (!lookahead.ptr) + { + did_reuse = false; + lookahead = ts_parser__get_cached_token(self, state, position, last_external_token, &table_entry); + } + + bool needs_lex = !lookahead.ptr; + for (;;) + { + // Otherwise, re-run the lexer. + if (needs_lex) + { + needs_lex = false; + lookahead = ts_parser__lex(self, version, state); + if (self->has_scanner_error) + return false; + + if (lookahead.ptr) + { + ts_parser__set_cached_token(self, position, last_external_token, lookahead); + ts_language_table_entry(self->language, state, ts_subtree_symbol(lookahead), &table_entry); + } + + // When parsing a non-terminal extra, a null lookahead indicates the + // end of the rule. The reduction is stored in the EOF table entry. + // After the reduction, the lexer needs to be run again. + else + { + ts_language_table_entry(self->language, state, ts_builtin_sym_end, &table_entry); + } + } + + // If a cancellation flag or a timeout was provided, then check every + // time a fixed number of parse actions has been processed. + if (++self->operation_count == OP_COUNT_PER_TIMEOUT_CHECK) + { + self->operation_count = 0; + } + if (self->operation_count == 0 && ((self->cancellation_flag && atomic_load(self->cancellation_flag)) || + (!clock_is_null(self->end_clock) && clock_is_gt(clock_now(), self->end_clock)))) + { + if (lookahead.ptr) + { + ts_subtree_release(&self->tree_pool, lookahead); + } + return false; + } + + // Process each parse action for the current lookahead token in + // the current state. If there are multiple actions, then this is + // an ambiguous state. REDUCE actions always create a new stack + // version, whereas SHIFT actions update the existing stack version + // and terminate this loop. + StackVersion last_reduction_version = STACK_VERSION_NONE; + for (uint32_t i = 0; i < table_entry.action_count; i++) + { + TSParseAction action = table_entry.actions[i]; + + switch (action.type) + { + case TSParseActionTypeShift: { + if (action.shift.repetition) + break; + TSStateId next_state; + if (action.shift.extra) + { + next_state = state; + LOG("shift_extra"); + } + else + { + next_state = action.shift.state; + LOG("shift state:%u", next_state); + } + + if (ts_subtree_child_count(lookahead) > 0) + { + ts_parser__breakdown_lookahead(self, &lookahead, state, &self->reusable_node); + next_state = ts_language_next_state(self->language, state, ts_subtree_symbol(lookahead)); + } + + ts_parser__shift(self, version, next_state, lookahead, action.shift.extra); + if (did_reuse) + reusable_node_advance(&self->reusable_node); + return true; + } + + case TSParseActionTypeReduce: { + bool is_fragile = table_entry.action_count > 1; + bool end_of_non_terminal_extra = lookahead.ptr == NULL; + LOG("reduce sym:%s, child_count:%u", SYM_NAME(action.reduce.symbol), action.reduce.child_count); + StackVersion reduction_version = + ts_parser__reduce(self, version, action.reduce.symbol, action.reduce.child_count, action.reduce.dynamic_precedence, + action.reduce.production_id, is_fragile, end_of_non_terminal_extra); + if (reduction_version != STACK_VERSION_NONE) + { + last_reduction_version = reduction_version; + } + break; + } + + case TSParseActionTypeAccept: { + LOG("accept"); + ts_parser__accept(self, version, lookahead); + return true; + } + + case TSParseActionTypeRecover: { + if (ts_subtree_child_count(lookahead) > 0) + { + ts_parser__breakdown_lookahead(self, &lookahead, ERROR_STATE, &self->reusable_node); + } + + ts_parser__recover(self, version, lookahead); + if (did_reuse) + reusable_node_advance(&self->reusable_node); + return true; + } + } + } + + // If a reduction was performed, then replace the current stack version + // with one of the stack versions created by a reduction, and continue + // processing this version of the stack with the same lookahead symbol. + if (last_reduction_version != STACK_VERSION_NONE) + { + ts_stack_renumber_version(self->stack, last_reduction_version, version); + LOG_STACK(); + state = ts_stack_state(self->stack, version); + + // At the end of a non-terminal extra rule, the lexer will return a + // null subtree, because the parser needs to perform a fixed reduction + // regardless of the lookahead node. After performing that reduction, + // (and completing the non-terminal extra rule) run the lexer again based + // on the current parse state. + if (!lookahead.ptr) + { + needs_lex = true; + } + else + { + ts_language_table_entry(self->language, state, ts_subtree_leaf_symbol(lookahead), &table_entry); + } + + continue; + } + + // A non-terminal extra rule was reduced and merged into an existing + // stack version. This version can be discarded. + if (!lookahead.ptr) + { + ts_stack_halt(self->stack, version); + return true; + } + + // If there were no parse actions for the current lookahead token, then + // it is not valid in this state. If the current lookahead token is a + // keyword, then switch to treating it as the normal word token if that + // token is valid in this state. + if (ts_subtree_is_keyword(lookahead) && ts_subtree_symbol(lookahead) != self->language->keyword_capture_token) + { + ts_language_table_entry(self->language, state, self->language->keyword_capture_token, &table_entry); + if (table_entry.action_count > 0) + { + LOG("switch from_keyword:%s, to_word_token:%s", TREE_NAME(lookahead), SYM_NAME(self->language->keyword_capture_token)); + + MutableSubtree mutable_lookahead = ts_subtree_make_mut(&self->tree_pool, lookahead); + ts_subtree_set_symbol(&mutable_lookahead, self->language->keyword_capture_token, self->language); + lookahead = ts_subtree_from_mut(mutable_lookahead); + continue; + } + } + + // If the current lookahead token is not valid and the parser is + // already in the error state, restart the error recovery process. + // TODO - can this be unified with the other `RECOVER` case above? + if (state == ERROR_STATE) + { + ts_parser__recover(self, version, lookahead); + return true; + } + + // If the current lookahead token is not valid and the previous + // subtree on the stack was reused from an old tree, it isn't actually + // valid to reuse it. Remove it from the stack, and in its place, + // push each of its children. Then try again to process the current + // lookahead. + if (ts_parser__breakdown_top_of_stack(self, version)) + { + state = ts_stack_state(self->stack, version); + ts_subtree_release(&self->tree_pool, lookahead); + needs_lex = true; + continue; + } + + // At this point, the current lookahead token is definitely not valid + // for this parse stack version. Mark this version as paused and continue + // processing any other stack versions that might exist. If some other + // version advances successfully, then this version can simply be removed. + // But if all versions end up paused, then error recovery is needed. + LOG("detect_error"); + ts_stack_pause(self->stack, version, lookahead); + return true; + } +} + +static unsigned ts_parser__condense_stack(TSParser *self) +{ + bool made_changes = false; + unsigned min_error_cost = UINT_MAX; + for (StackVersion i = 0; i < ts_stack_version_count(self->stack); i++) + { + // Prune any versions that have been marked for removal. + if (ts_stack_is_halted(self->stack, i)) + { + ts_stack_remove_version(self->stack, i); + i--; + continue; + } + + // Keep track of the minimum error cost of any stack version so + // that it can be returned. + ErrorStatus status_i = ts_parser__version_status(self, i); + if (!status_i.is_in_error && status_i.cost < min_error_cost) + { + min_error_cost = status_i.cost; + } + + // Examine each pair of stack versions, removing any versions that + // are clearly worse than another version. Ensure that the versions + // are ordered from most promising to least promising. + for (StackVersion j = 0; j < i; j++) + { + ErrorStatus status_j = ts_parser__version_status(self, j); + + switch (ts_parser__compare_versions(self, status_j, status_i)) + { + case ErrorComparisonTakeLeft: + made_changes = true; + ts_stack_remove_version(self->stack, i); + i--; + j = i; + break; + + case ErrorComparisonPreferLeft: + case ErrorComparisonNone: + if (ts_stack_merge(self->stack, j, i)) + { + made_changes = true; + i--; + j = i; + } + break; + + case ErrorComparisonPreferRight: + made_changes = true; + if (ts_stack_merge(self->stack, j, i)) + { + i--; + j = i; + } + else + { + ts_stack_swap_versions(self->stack, i, j); + } + break; + + case ErrorComparisonTakeRight: + made_changes = true; + ts_stack_remove_version(self->stack, j); + i--; + j--; + break; + } + } + } + + // Enforce a hard upper bound on the number of stack versions by + // discarding the least promising versions. + while (ts_stack_version_count(self->stack) > MAX_VERSION_COUNT) + { + ts_stack_remove_version(self->stack, MAX_VERSION_COUNT); + made_changes = true; + } + + // If the best-performing stack version is currently paused, or all + // versions are paused, then resume the best paused version and begin + // the error recovery process. Otherwise, remove the paused versions. + if (ts_stack_version_count(self->stack) > 0) + { + bool has_unpaused_version = false; + for (StackVersion i = 0, n = ts_stack_version_count(self->stack); i < n; i++) + { + if (ts_stack_is_paused(self->stack, i)) + { + if (!has_unpaused_version && self->accept_count < MAX_VERSION_COUNT) + { + LOG("resume version:%u", i); + min_error_cost = ts_stack_error_cost(self->stack, i); + Subtree lookahead = ts_stack_resume(self->stack, i); + ts_parser__handle_error(self, i, lookahead); + has_unpaused_version = true; + } + else + { + ts_stack_remove_version(self->stack, i); + i--; + n--; + } + } + else + { + has_unpaused_version = true; + } + } + } + + if (made_changes) + { + LOG("condense"); + LOG_STACK(); + } + + return min_error_cost; +} + +static bool ts_parser_has_outstanding_parse(TSParser *self) +{ + return (self->external_scanner_payload || ts_stack_state(self->stack, 0) != 1 || ts_stack_node_count_since_error(self->stack, 0) != 0); +} + +// Parser - Public + +TSParser *ts_parser_new(void) +{ + TSParser *self = ts_calloc(1, sizeof(TSParser)); + ts_lexer_init(&self->lexer); + array_init(&self->reduce_actions); + array_reserve(&self->reduce_actions, 4); + self->tree_pool = ts_subtree_pool_new(32); + self->stack = ts_stack_new(&self->tree_pool); + self->finished_tree = NULL_SUBTREE; + self->reusable_node = reusable_node_new(); + self->dot_graph_file = NULL; + self->cancellation_flag = NULL; + self->timeout_duration = 0; + self->language = NULL; + self->has_scanner_error = false; + self->external_scanner_payload = NULL; + self->end_clock = clock_null(); + self->operation_count = 0; + self->old_tree = NULL_SUBTREE; + self->included_range_differences = (TSRangeArray)array_new(); + self->included_range_difference_index = 0; + ts_parser__set_cached_token(self, 0, NULL_SUBTREE, NULL_SUBTREE); + return self; +} + +void ts_parser_delete(TSParser *self) +{ + if (!self) + return; + + ts_parser_set_language(self, NULL); + ts_stack_delete(self->stack); + if (self->reduce_actions.contents) + { + array_delete(&self->reduce_actions); + } + if (self->included_range_differences.contents) + { + array_delete(&self->included_range_differences); + } + if (self->old_tree.ptr) + { + ts_subtree_release(&self->tree_pool, self->old_tree); + self->old_tree = NULL_SUBTREE; + } + ts_wasm_store_delete(self->wasm_store); + ts_lexer_delete(&self->lexer); + ts_parser__set_cached_token(self, 0, NULL_SUBTREE, NULL_SUBTREE); + ts_subtree_pool_delete(&self->tree_pool); + reusable_node_delete(&self->reusable_node); + array_delete(&self->trailing_extras); + array_delete(&self->trailing_extras2); + array_delete(&self->scratch_trees); + ts_free(self); +} + +const TSLanguage *ts_parser_language(const TSParser *self) +{ + return self->language; +} + +bool ts_parser_set_language(TSParser *self, const TSLanguage *language) +{ + ts_parser_reset(self); + ts_language_delete(self->language); + self->language = NULL; + + if (language) + { + if (language->version > TREE_SITTER_LANGUAGE_VERSION || language->version < TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION) + return false; + + if (ts_language_is_wasm(language)) + { + if (!self->wasm_store || !ts_wasm_store_start(self->wasm_store, &self->lexer.data, language)) + return false; + } + } + + self->language = ts_language_copy(language); + return true; +} + +TSLogger ts_parser_logger(const TSParser *self) +{ + return self->lexer.logger; +} + +void ts_parser_set_logger(TSParser *self, TSLogger logger) +{ + self->lexer.logger = logger; +} + +void ts_parser_print_dot_graphs(TSParser *self, int fd) +{ + if (self->dot_graph_file) + { + fclose(self->dot_graph_file); + } + + if (fd >= 0) + { +#ifdef _WIN32 + self->dot_graph_file = _fdopen(fd, "a"); +#else + self->dot_graph_file = fdopen(fd, "a"); +#endif + } + else + { + self->dot_graph_file = NULL; + } +} + +const size_t *ts_parser_cancellation_flag(const TSParser *self) +{ + return (const size_t *)self->cancellation_flag; +} + +void ts_parser_set_cancellation_flag(TSParser *self, const size_t *flag) +{ + self->cancellation_flag = (const volatile size_t *)flag; +} + +uint64_t ts_parser_timeout_micros(const TSParser *self) +{ + return duration_to_micros(self->timeout_duration); +} + +void ts_parser_set_timeout_micros(TSParser *self, uint64_t timeout_micros) +{ + self->timeout_duration = duration_from_micros(timeout_micros); +} + +bool ts_parser_set_included_ranges(TSParser *self, const TSRange *ranges, uint32_t count) +{ + return ts_lexer_set_included_ranges(&self->lexer, ranges, count); +} + +const TSRange *ts_parser_included_ranges(const TSParser *self, uint32_t *count) +{ + return ts_lexer_included_ranges(&self->lexer, count); +} + +void ts_parser_reset(TSParser *self) +{ + ts_parser__external_scanner_destroy(self); + if (self->wasm_store) + { + ts_wasm_store_reset(self->wasm_store); + } + + if (self->old_tree.ptr) + { + ts_subtree_release(&self->tree_pool, self->old_tree); + self->old_tree = NULL_SUBTREE; + } + + reusable_node_clear(&self->reusable_node); + ts_lexer_reset(&self->lexer, length_zero()); + ts_stack_clear(self->stack); + ts_parser__set_cached_token(self, 0, NULL_SUBTREE, NULL_SUBTREE); + if (self->finished_tree.ptr) + { + ts_subtree_release(&self->tree_pool, self->finished_tree); + self->finished_tree = NULL_SUBTREE; + } + self->accept_count = 0; + self->has_scanner_error = false; +} + +TSTree *ts_parser_parse(TSParser *self, const TSTree *old_tree, TSInput input) +{ + TSTree *result = NULL; + if (!self->language || !input.read) + return NULL; + + if (ts_language_is_wasm(self->language)) + { + if (!self->wasm_store) + return NULL; + ts_wasm_store_start(self->wasm_store, &self->lexer.data, self->language); + } + + ts_lexer_set_input(&self->lexer, input); + array_clear(&self->included_range_differences); + self->included_range_difference_index = 0; + + if (ts_parser_has_outstanding_parse(self)) + { + LOG("resume_parsing"); + } + else + { + ts_parser__external_scanner_create(self); + if (self->has_scanner_error) + goto exit; + + if (old_tree) + { + ts_subtree_retain(old_tree->root); + self->old_tree = old_tree->root; + ts_range_array_get_changed_ranges(old_tree->included_ranges, old_tree->included_range_count, self->lexer.included_ranges, + self->lexer.included_range_count, &self->included_range_differences); + reusable_node_reset(&self->reusable_node, old_tree->root); + LOG("parse_after_edit"); + LOG_TREE(self->old_tree); + for (unsigned i = 0; i < self->included_range_differences.size; i++) + { + TSRange *range = &self->included_range_differences.contents[i]; + LOG("different_included_range %u - %u", range->start_byte, range->end_byte); + } + } + else + { + reusable_node_clear(&self->reusable_node); + LOG("new_parse"); + } + } + + self->operation_count = 0; + if (self->timeout_duration) + { + self->end_clock = clock_after(clock_now(), self->timeout_duration); + } + else + { + self->end_clock = clock_null(); + } + + uint32_t position = 0, last_position = 0, version_count = 0; + do + { + for (StackVersion version = 0; version_count = ts_stack_version_count(self->stack), version < version_count; version++) + { + bool allow_node_reuse = version_count == 1; + while (ts_stack_is_active(self->stack, version)) + { + LOG("process version:%u, version_count:%u, state:%d, row:%u, col:%u", version, ts_stack_version_count(self->stack), + ts_stack_state(self->stack, version), ts_stack_position(self->stack, version).extent.row, + ts_stack_position(self->stack, version).extent.column); + + if (!ts_parser__advance(self, version, allow_node_reuse)) + { + if (self->has_scanner_error) + goto exit; + return NULL; + } + + LOG_STACK(); + + position = ts_stack_position(self->stack, version).bytes; + if (position > last_position || (version > 0 && position == last_position)) + { + last_position = position; + break; + } + } + } + + // After advancing each version of the stack, re-sort the versions by their cost, + // removing any versions that are no longer worth pursuing. + unsigned min_error_cost = ts_parser__condense_stack(self); + + // If there's already a finished parse tree that's better than any in-progress version, + // then terminate parsing. Clear the parse stack to remove any extra references to subtrees + // within the finished tree, ensuring that these subtrees can be safely mutated in-place + // for rebalancing. + if (self->finished_tree.ptr && ts_subtree_error_cost(self->finished_tree) < min_error_cost) + { + ts_stack_clear(self->stack); + break; + } + + while (self->included_range_difference_index < self->included_range_differences.size) + { + TSRange *range = &self->included_range_differences.contents[self->included_range_difference_index]; + if (range->end_byte <= position) + { + self->included_range_difference_index++; + } + else + { + break; + } + } + } while (version_count != 0); + + assert(self->finished_tree.ptr); + ts_subtree_balance(self->finished_tree, &self->tree_pool, self->language); + LOG("done"); + LOG_TREE(self->finished_tree); + + result = ts_tree_new(self->finished_tree, self->language, self->lexer.included_ranges, self->lexer.included_range_count); + self->finished_tree = NULL_SUBTREE; + +exit: + ts_parser_reset(self); + return result; +} + +TSTree *ts_parser_parse_string(TSParser *self, const TSTree *old_tree, const char *string, uint32_t length) +{ + return ts_parser_parse_string_encoding(self, old_tree, string, length, TSInputEncodingUTF8); +} + +TSTree *ts_parser_parse_string_encoding(TSParser *self, const TSTree *old_tree, const char *string, uint32_t length, + TSInputEncoding encoding) +{ + TSStringInput input = {string, length}; + return ts_parser_parse(self, old_tree, + (TSInput){ + &input, + ts_string_input_read, + encoding, + }); +} + +void ts_parser_set_wasm_store(TSParser *self, TSWasmStore *store) +{ + ts_wasm_store_delete(self->wasm_store); + self->wasm_store = store; +} + +TSWasmStore *ts_parser_take_wasm_store(TSParser *self) +{ + TSWasmStore *result = self->wasm_store; + self->wasm_store = NULL; + return result; +} + +#undef LOG diff --git a/parser/nnsrc/parser.h b/parser/nnsrc/parser.h new file mode 100644 index 00000000..20f8474a --- /dev/null +++ b/parser/nnsrc/parser.h @@ -0,0 +1,265 @@ +#ifndef TREE_SITTER_PARSER_H_ +#define TREE_SITTER_PARSER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#define ts_builtin_sym_error ((TSSymbol)-1) +#define ts_builtin_sym_end 0 +#define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024 + +#ifndef TREE_SITTER_API_H_ +typedef uint16_t TSStateId; +typedef uint16_t TSSymbol; +typedef uint16_t TSFieldId; +typedef struct TSLanguage TSLanguage; +#endif + +typedef struct { + TSFieldId field_id; + uint8_t child_index; + bool inherited; +} TSFieldMapEntry; + +typedef struct { + uint16_t index; + uint16_t length; +} TSFieldMapSlice; + +typedef struct { + bool visible; + bool named; + bool supertype; +} TSSymbolMetadata; + +typedef struct TSLexer TSLexer; + +struct TSLexer { + int32_t lookahead; + TSSymbol result_symbol; + void (*advance)(TSLexer *, bool); + void (*mark_end)(TSLexer *); + uint32_t (*get_column)(TSLexer *); + bool (*is_at_included_range_start)(const TSLexer *); + bool (*eof)(const TSLexer *); +}; + +typedef enum { + TSParseActionTypeShift, + TSParseActionTypeReduce, + TSParseActionTypeAccept, + TSParseActionTypeRecover, +} TSParseActionType; + +typedef union { + struct { + uint8_t type; + TSStateId state; + bool extra; + bool repetition; + } shift; + struct { + uint8_t type; + uint8_t child_count; + TSSymbol symbol; + int16_t dynamic_precedence; + uint16_t production_id; + } reduce; + uint8_t type; +} TSParseAction; + +typedef struct { + uint16_t lex_state; + uint16_t external_lex_state; +} TSLexMode; + +typedef union { + TSParseAction action; + struct { + uint8_t count; + bool reusable; + } entry; +} TSParseActionEntry; + +typedef struct { + int32_t start; + int32_t end; +} TSCharacterRange; + +struct TSLanguage { + uint32_t version; + uint32_t symbol_count; + uint32_t alias_count; + uint32_t token_count; + uint32_t external_token_count; + uint32_t state_count; + uint32_t large_state_count; + uint32_t production_id_count; + uint32_t field_count; + uint16_t max_alias_sequence_length; + const uint16_t *parse_table; + const uint16_t *small_parse_table; + const uint32_t *small_parse_table_map; + const TSParseActionEntry *parse_actions; + const char * const *symbol_names; + const char * const *field_names; + const TSFieldMapSlice *field_map_slices; + const TSFieldMapEntry *field_map_entries; + const TSSymbolMetadata *symbol_metadata; + const TSSymbol *public_symbol_map; + const uint16_t *alias_map; + const TSSymbol *alias_sequences; + const TSLexMode *lex_modes; + bool (*lex_fn)(TSLexer *, TSStateId); + bool (*keyword_lex_fn)(TSLexer *, TSStateId); + TSSymbol keyword_capture_token; + struct ExternalScannerDefinition { + const bool *states; + const TSSymbol *symbol_map; + void *(*create)(void); + void (*destroy)(void *); + bool (*scan)(void *, TSLexer *, const bool *symbol_whitelist); + unsigned (*serialize)(void *, char *); + void (*deserialize)(void *, const char *, unsigned); + } external_scanner; + const TSStateId *primary_state_ids; +}; + +static inline bool set_contains(TSCharacterRange *ranges, uint32_t len, int32_t lookahead) { + uint32_t index = 0; + uint32_t size = len - index; + while (size > 1) { + uint32_t half_size = size / 2; + uint32_t mid_index = index + half_size; + TSCharacterRange *range = &ranges[mid_index]; + if (lookahead >= range->start && lookahead <= range->end) { + return true; + } else if (lookahead > range->end) { + index = mid_index; + } + size -= half_size; + } + TSCharacterRange *range = &ranges[index]; + return (lookahead >= range->start && lookahead <= range->end); +} + +/* + * Lexer Macros + */ + +#ifdef _MSC_VER +#define UNUSED __pragma(warning(suppress : 4101)) +#else +#define UNUSED __attribute__((unused)) +#endif + +#define START_LEXER() \ + bool result = false; \ + bool skip = false; \ + UNUSED \ + bool eof = false; \ + int32_t lookahead; \ + goto start; \ + next_state: \ + lexer->advance(lexer, skip); \ + start: \ + skip = false; \ + lookahead = lexer->lookahead; + +#define ADVANCE(state_value) \ + { \ + state = state_value; \ + goto next_state; \ + } + +#define ADVANCE_MAP(...) \ + { \ + static const uint16_t map[] = { __VA_ARGS__ }; \ + for (uint32_t i = 0; i < sizeof(map) / sizeof(map[0]); i += 2) { \ + if (map[i] == lookahead) { \ + state = map[i + 1]; \ + goto next_state; \ + } \ + } \ + } + +#define SKIP(state_value) \ + { \ + skip = true; \ + state = state_value; \ + goto next_state; \ + } + +#define ACCEPT_TOKEN(symbol_value) \ + result = true; \ + lexer->result_symbol = symbol_value; \ + lexer->mark_end(lexer); + +#define END_STATE() return result; + +/* + * Parse Table Macros + */ + +#define SMALL_STATE(id) ((id) - LARGE_STATE_COUNT) + +#define STATE(id) id + +#define ACTIONS(id) id + +#define SHIFT(state_value) \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .state = (state_value) \ + } \ + }} + +#define SHIFT_REPEAT(state_value) \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .state = (state_value), \ + .repetition = true \ + } \ + }} + +#define SHIFT_EXTRA() \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .extra = true \ + } \ + }} + +#define REDUCE(symbol_name, children, precedence, prod_id) \ + {{ \ + .reduce = { \ + .type = TSParseActionTypeReduce, \ + .symbol = symbol_name, \ + .child_count = children, \ + .dynamic_precedence = precedence, \ + .production_id = prod_id \ + }, \ + }} + +#define RECOVER() \ + {{ \ + .type = TSParseActionTypeRecover \ + }} + +#define ACCEPT_INPUT() \ + {{ \ + .type = TSParseActionTypeAccept \ + }} + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_PARSER_H_ diff --git a/parser/nnsrc/point.h b/parser/nnsrc/point.h new file mode 100644 index 00000000..942a86e1 --- /dev/null +++ b/parser/nnsrc/point.h @@ -0,0 +1,62 @@ +#ifndef TREE_SITTER_POINT_H_ +#define TREE_SITTER_POINT_H_ + +#include "api.h" + +#define POINT_ZERO ((TSPoint) {0, 0}) +#define POINT_MAX ((TSPoint) {UINT32_MAX, UINT32_MAX}) + +static inline TSPoint point__new(unsigned row, unsigned column) { + TSPoint result = {row, column}; + return result; +} + +static inline TSPoint point_add(TSPoint a, TSPoint b) { + if (b.row > 0) + return point__new(a.row + b.row, b.column); + else + return point__new(a.row, a.column + b.column); +} + +static inline TSPoint point_sub(TSPoint a, TSPoint b) { + if (a.row > b.row) + return point__new(a.row - b.row, a.column); + else + return point__new(0, a.column - b.column); +} + +static inline bool point_lte(TSPoint a, TSPoint b) { + return (a.row < b.row) || (a.row == b.row && a.column <= b.column); +} + +static inline bool point_lt(TSPoint a, TSPoint b) { + return (a.row < b.row) || (a.row == b.row && a.column < b.column); +} + +static inline bool point_gt(TSPoint a, TSPoint b) { + return (a.row > b.row) || (a.row == b.row && a.column > b.column); +} + +static inline bool point_gte(TSPoint a, TSPoint b) { + return (a.row > b.row) || (a.row == b.row && a.column >= b.column); +} + +static inline bool point_eq(TSPoint a, TSPoint b) { + return a.row == b.row && a.column == b.column; +} + +static inline TSPoint point_min(TSPoint a, TSPoint b) { + if (a.row < b.row || (a.row == b.row && a.column < b.column)) + return a; + else + return b; +} + +static inline TSPoint point_max(TSPoint a, TSPoint b) { + if (a.row > b.row || (a.row == b.row && a.column > b.column)) + return a; + else + return b; +} + +#endif diff --git a/parser/nnsrc/query.c b/parser/nnsrc/query.c new file mode 100644 index 00000000..1b6e04b6 --- /dev/null +++ b/parser/nnsrc/query.c @@ -0,0 +1,4134 @@ +#include "api.h" +#include "./alloc.h" +#include "./array.h" +#include "./language.h" +#include "./point.h" +#include "./tree_cursor.h" +#include "./unicode.h" +#include + +// #define DEBUG_ANALYZE_QUERY +// #define DEBUG_EXECUTE_QUERY + +#define MAX_STEP_CAPTURE_COUNT 3 +#define MAX_NEGATED_FIELD_COUNT 8 +#define MAX_STATE_PREDECESSOR_COUNT 256 +#define MAX_ANALYSIS_STATE_DEPTH 8 +#define MAX_ANALYSIS_ITERATION_COUNT 256 + +/* + * Stream - A sequence of unicode characters derived from a UTF8 string. + * This struct is used in parsing queries from S-expressions. + */ +typedef struct { + const char *input; + const char *start; + const char *end; + int32_t next; + uint8_t next_size; +} Stream; + +/* + * QueryStep - A step in the process of matching a query. Each node within + * a query S-expression corresponds to one of these steps. An entire pattern + * is represented as a sequence of these steps. The basic properties of a + * node are represented by these fields: + * - `symbol` - The grammar symbol to match. A zero value represents the + * wildcard symbol, '_'. + * - `field` - The field name to match. A zero value means that a field name + * was not specified. + * - `capture_ids` - An array of integers representing the names of captures + * associated with this node in the pattern, terminated by a `NONE` value. + * - `depth` - The depth where this node occurs in the pattern. The root node + * of the pattern has depth zero. + * - `negated_field_list_id` - An id representing a set of fields that must + * not be present on a node matching this step. + * + * Steps have some additional fields in order to handle the `.` (or "anchor") operator, + * which forbids additional child nodes: + * - `is_immediate` - Indicates that the node matching this step cannot be preceded + * by other sibling nodes that weren't specified in the pattern. + * - `is_last_child` - Indicates that the node matching this step cannot have any + * subsequent named siblings. + * + * For simple patterns, steps are matched in sequential order. But in order to + * handle alternative/repeated/optional sub-patterns, query steps are not always + * structured as a linear sequence; they sometimes need to split and merge. This + * is done using the following fields: + * - `alternative_index` - The index of a different query step that serves as + * an alternative to this step. A `NONE` value represents no alternative. + * When a query state reaches a step with an alternative index, the state + * is duplicated, with one copy remaining at the original step, and one copy + * moving to the alternative step. The alternative may have its own alternative + * step, so this splitting is an iterative process. + * - `is_dead_end` - Indicates that this state cannot be passed directly, and + * exists only in order to redirect to an alternative index, with no splitting. + * - `is_pass_through` - Indicates that state has no matching logic of its own, + * and exists only to split a state. One copy of the state advances immediately + * to the next step, and one moves to the alternative step. + * - `alternative_is_immediate` - Indicates that this step's alternative step + * should be treated as if `is_immediate` is true. + * + * Steps also store some derived state that summarizes how they relate to other + * steps within the same pattern. This is used to optimize the matching process: + * - `contains_captures` - Indicates that this step or one of its child steps + * has a non-empty `capture_ids` list. + * - `parent_pattern_guaranteed` - Indicates that if this step is reached, then + * it and all of its subsequent sibling steps within the same parent pattern + * are guaranteed to match. + * - `root_pattern_guaranteed` - Similar to `parent_pattern_guaranteed`, but + * for the entire top-level pattern. When iterating through a query's + * captures using `ts_query_cursor_next_capture`, this field is used to + * detect that a capture can safely be returned from a match that has not + * even completed yet. + */ +typedef struct { + TSSymbol symbol; + TSSymbol supertype_symbol; + TSFieldId field; + uint16_t capture_ids[MAX_STEP_CAPTURE_COUNT]; + uint16_t depth; + uint16_t alternative_index; + uint16_t negated_field_list_id; + bool is_named: 1; + bool is_immediate: 1; + bool is_last_child: 1; + bool is_pass_through: 1; + bool is_dead_end: 1; + bool alternative_is_immediate: 1; + bool contains_captures: 1; + bool root_pattern_guaranteed: 1; + bool parent_pattern_guaranteed: 1; +} QueryStep; + +/* + * Slice - A slice of an external array. Within a query, capture names, + * literal string values, and predicate step information are stored in three + * contiguous arrays. Individual captures, string values, and predicates are + * represented as slices of these three arrays. + */ +typedef struct { + uint32_t offset; + uint32_t length; +} Slice; + +/* + * SymbolTable - a two-way mapping of strings to ids. + */ +typedef struct { + Array(char) characters; + Array(Slice) slices; +} SymbolTable; + +/** + * CaptureQuantififers - a data structure holding the quantifiers of pattern captures. + */ +typedef Array(uint8_t) CaptureQuantifiers; + +/* + * PatternEntry - Information about the starting point for matching a particular + * pattern. These entries are stored in a 'pattern map' - a sorted array that + * makes it possible to efficiently lookup patterns based on the symbol for their + * first step. The entry consists of the following fields: + * - `pattern_index` - the index of the pattern within the query + * - `step_index` - the index of the pattern's first step in the shared `steps` array + * - `is_rooted` - whether or not the pattern has a single root node. This property + * affects decisions about whether or not to start the pattern for nodes outside + * of a QueryCursor's range restriction. + */ +typedef struct { + uint16_t step_index; + uint16_t pattern_index; + bool is_rooted; +} PatternEntry; + +typedef struct { + Slice steps; + Slice predicate_steps; + uint32_t start_byte; + bool is_non_local; +} QueryPattern; + +typedef struct { + uint32_t byte_offset; + uint16_t step_index; +} StepOffset; + +/* + * QueryState - The state of an in-progress match of a particular pattern + * in a query. While executing, a `TSQueryCursor` must keep track of a number + * of possible in-progress matches. Each of those possible matches is + * represented as one of these states. Fields: + * - `id` - A numeric id that is exposed to the public API. This allows the + * caller to remove a given match, preventing any more of its captures + * from being returned. + * - `start_depth` - The depth in the tree where the first step of the state's + * pattern was matched. + * - `pattern_index` - The pattern that the state is matching. + * - `consumed_capture_count` - The number of captures from this match that + * have already been returned. + * - `capture_list_id` - A numeric id that can be used to retrieve the state's + * list of captures from the `CaptureListPool`. + * - `seeking_immediate_match` - A flag that indicates that the state's next + * step must be matched by the very next sibling. This is used when + * processing repetitions. + * - `has_in_progress_alternatives` - A flag that indicates that there is are + * other states that have the same captures as this state, but are at + * different steps in their pattern. This means that in order to obey the + * 'longest-match' rule, this state should not be returned as a match until + * it is clear that there can be no other alternative match with more captures. + */ +typedef struct { + uint32_t id; + uint32_t capture_list_id; + uint16_t start_depth; + uint16_t step_index; + uint16_t pattern_index; + uint16_t consumed_capture_count: 12; + bool seeking_immediate_match: 1; + bool has_in_progress_alternatives: 1; + bool dead: 1; + bool needs_parent: 1; +} QueryState; + +typedef Array(TSQueryCapture) CaptureList; + +/* + * CaptureListPool - A collection of *lists* of captures. Each query state needs + * to maintain its own list of captures. To avoid repeated allocations, this struct + * maintains a fixed set of capture lists, and keeps track of which ones are + * currently in use by a query state. + */ +typedef struct { + Array(CaptureList) list; + CaptureList empty_list; + // The maximum number of capture lists that we are allowed to allocate. We + // never allow `list` to allocate more entries than this, dropping pending + // matches if needed to stay under the limit. + uint32_t max_capture_list_count; + // The number of capture lists allocated in `list` that are not currently in + // use. We reuse those existing-but-unused capture lists before trying to + // allocate any new ones. We use an invalid value (UINT32_MAX) for a capture + // list's length to indicate that it's not in use. + uint32_t free_capture_list_count; +} CaptureListPool; + +/* + * AnalysisState - The state needed for walking the parse table when analyzing + * a query pattern, to determine at which steps the pattern might fail to match. + */ +typedef struct { + TSStateId parse_state; + TSSymbol parent_symbol; + uint16_t child_index; + TSFieldId field_id: 15; + bool done: 1; +} AnalysisStateEntry; + +typedef struct { + AnalysisStateEntry stack[MAX_ANALYSIS_STATE_DEPTH]; + uint16_t depth; + uint16_t step_index; + TSSymbol root_symbol; +} AnalysisState; + +typedef Array(AnalysisState *) AnalysisStateSet; + +typedef struct { + AnalysisStateSet states; + AnalysisStateSet next_states; + AnalysisStateSet deeper_states; + AnalysisStateSet state_pool; + Array(uint16_t) final_step_indices; + Array(TSSymbol) finished_parent_symbols; + bool did_abort; +} QueryAnalysis; + +/* + * AnalysisSubgraph - A subset of the states in the parse table that are used + * in constructing nodes with a certain symbol. Each state is accompanied by + * some information about the possible node that could be produced in + * downstream states. + */ +typedef struct { + TSStateId state; + uint16_t production_id; + uint8_t child_index: 7; + bool done: 1; +} AnalysisSubgraphNode; + +typedef struct { + TSSymbol symbol; + Array(TSStateId) start_states; + Array(AnalysisSubgraphNode) nodes; +} AnalysisSubgraph; + +typedef Array(AnalysisSubgraph) AnalysisSubgraphArray; + +/* + * StatePredecessorMap - A map that stores the predecessors of each parse state. + * This is used during query analysis to determine which parse states can lead + * to which reduce actions. + */ +typedef struct { + TSStateId *contents; +} StatePredecessorMap; + +/* + * TSQuery - A tree query, compiled from a string of S-expressions. The query + * itself is immutable. The mutable state used in the process of executing the + * query is stored in a `TSQueryCursor`. + */ +struct TSQuery { + SymbolTable captures; + SymbolTable predicate_values; + Array(CaptureQuantifiers) capture_quantifiers; + Array(QueryStep) steps; + Array(PatternEntry) pattern_map; + Array(TSQueryPredicateStep) predicate_steps; + Array(QueryPattern) patterns; + Array(StepOffset) step_offsets; + Array(TSFieldId) negated_fields; + Array(char) string_buffer; + Array(TSSymbol) repeat_symbols_with_rootless_patterns; + const TSLanguage *language; + uint16_t wildcard_root_pattern_count; +}; + +/* + * TSQueryCursor - A stateful struct used to execute a query on a tree. + */ +struct TSQueryCursor { + const TSQuery *query; + TSTreeCursor cursor; + Array(QueryState) states; + Array(QueryState) finished_states; + CaptureListPool capture_list_pool; + uint32_t depth; + uint32_t max_start_depth; + uint32_t start_byte; + uint32_t end_byte; + TSPoint start_point; + TSPoint end_point; + uint32_t next_state_id; + bool on_visible_node; + bool ascending; + bool halted; + bool did_exceed_match_limit; +}; + +static const TSQueryError PARENT_DONE = -1; +static const uint16_t PATTERN_DONE_MARKER = UINT16_MAX; +static const uint16_t NONE = UINT16_MAX; +static const TSSymbol WILDCARD_SYMBOL = 0; + +/********** + * Stream + **********/ + +// Advance to the next unicode code point in the stream. +static bool stream_advance(Stream *self) { + self->input += self->next_size; + if (self->input < self->end) { + uint32_t size = ts_decode_utf8( + (const uint8_t *)self->input, + (uint32_t)(self->end - self->input), + &self->next + ); + if (size > 0) { + self->next_size = size; + return true; + } + } else { + self->next_size = 0; + self->next = '\0'; + } + return false; +} + +// Reset the stream to the given input position, represented as a pointer +// into the input string. +static void stream_reset(Stream *self, const char *input) { + self->input = input; + self->next_size = 0; + stream_advance(self); +} + +static Stream stream_new(const char *string, uint32_t length) { + Stream self = { + .next = 0, + .input = string, + .start = string, + .end = string + length, + }; + stream_advance(&self); + return self; +} + +static void stream_skip_whitespace(Stream *self) { + for (;;) { + if (iswspace(self->next)) { + stream_advance(self); + } else if (self->next == ';') { + // skip over comments + stream_advance(self); + while (self->next && self->next != '\n') { + if (!stream_advance(self)) break; + } + } else { + break; + } + } +} + +static bool stream_is_ident_start(Stream *self) { + return iswalnum(self->next) || self->next == '_' || self->next == '-'; +} + +static void stream_scan_identifier(Stream *stream) { + do { + stream_advance(stream); + } while ( + iswalnum(stream->next) || + stream->next == '_' || + stream->next == '-' || + stream->next == '.' || + stream->next == '?' || + stream->next == '!' + ); +} + +static uint32_t stream_offset(Stream *self) { + return (uint32_t)(self->input - self->start); +} + +/****************** + * CaptureListPool + ******************/ + +static CaptureListPool capture_list_pool_new(void) { + return (CaptureListPool) { + .list = array_new(), + .empty_list = array_new(), + .max_capture_list_count = UINT32_MAX, + .free_capture_list_count = 0, + }; +} + +static void capture_list_pool_reset(CaptureListPool *self) { + for (uint16_t i = 0; i < (uint16_t)self->list.size; i++) { + // This invalid size means that the list is not in use. + self->list.contents[i].size = UINT32_MAX; + } + self->free_capture_list_count = self->list.size; +} + +static void capture_list_pool_delete(CaptureListPool *self) { + for (uint16_t i = 0; i < (uint16_t)self->list.size; i++) { + array_delete(&self->list.contents[i]); + } + array_delete(&self->list); +} + +static const CaptureList *capture_list_pool_get(const CaptureListPool *self, uint16_t id) { + if (id >= self->list.size) return &self->empty_list; + return &self->list.contents[id]; +} + +static CaptureList *capture_list_pool_get_mut(CaptureListPool *self, uint16_t id) { + assert(id < self->list.size); + return &self->list.contents[id]; +} + +static bool capture_list_pool_is_empty(const CaptureListPool *self) { + // The capture list pool is empty if all allocated lists are in use, and we + // have reached the maximum allowed number of allocated lists. + return self->free_capture_list_count == 0 && self->list.size >= self->max_capture_list_count; +} + +static uint16_t capture_list_pool_acquire(CaptureListPool *self) { + // First see if any already allocated capture list is currently unused. + if (self->free_capture_list_count > 0) { + for (uint16_t i = 0; i < (uint16_t)self->list.size; i++) { + if (self->list.contents[i].size == UINT32_MAX) { + array_clear(&self->list.contents[i]); + self->free_capture_list_count--; + return i; + } + } + } + + // Otherwise allocate and initialize a new capture list, as long as that + // doesn't put us over the requested maximum. + uint32_t i = self->list.size; + if (i >= self->max_capture_list_count) { + return NONE; + } + CaptureList list; + array_init(&list); + array_push(&self->list, list); + return i; +} + +static void capture_list_pool_release(CaptureListPool *self, uint16_t id) { + if (id >= self->list.size) return; + self->list.contents[id].size = UINT32_MAX; + self->free_capture_list_count++; +} + +/************** + * Quantifiers + **************/ + +static TSQuantifier quantifier_mul( + TSQuantifier left, + TSQuantifier right +) { + switch (left) + { + case TSQuantifierZero: + return TSQuantifierZero; + case TSQuantifierZeroOrOne: + switch (right) { + case TSQuantifierZero: + return TSQuantifierZero; + case TSQuantifierZeroOrOne: + case TSQuantifierOne: + return TSQuantifierZeroOrOne; + case TSQuantifierZeroOrMore: + case TSQuantifierOneOrMore: + return TSQuantifierZeroOrMore; + }; + break; + case TSQuantifierZeroOrMore: + switch (right) { + case TSQuantifierZero: + return TSQuantifierZero; + case TSQuantifierZeroOrOne: + case TSQuantifierZeroOrMore: + case TSQuantifierOne: + case TSQuantifierOneOrMore: + return TSQuantifierZeroOrMore; + }; + break; + case TSQuantifierOne: + return right; + case TSQuantifierOneOrMore: + switch (right) { + case TSQuantifierZero: + return TSQuantifierZero; + case TSQuantifierZeroOrOne: + case TSQuantifierZeroOrMore: + return TSQuantifierZeroOrMore; + case TSQuantifierOne: + case TSQuantifierOneOrMore: + return TSQuantifierOneOrMore; + }; + break; + } + return TSQuantifierZero; // to make compiler happy, but all cases should be covered above! +} + +static TSQuantifier quantifier_join( + TSQuantifier left, + TSQuantifier right +) { + switch (left) + { + case TSQuantifierZero: + switch (right) { + case TSQuantifierZero: + return TSQuantifierZero; + case TSQuantifierZeroOrOne: + case TSQuantifierOne: + return TSQuantifierZeroOrOne; + case TSQuantifierZeroOrMore: + case TSQuantifierOneOrMore: + return TSQuantifierZeroOrMore; + }; + break; + case TSQuantifierZeroOrOne: + switch (right) { + case TSQuantifierZero: + case TSQuantifierZeroOrOne: + case TSQuantifierOne: + return TSQuantifierZeroOrOne; + break; + case TSQuantifierZeroOrMore: + case TSQuantifierOneOrMore: + return TSQuantifierZeroOrMore; + break; + }; + break; + case TSQuantifierZeroOrMore: + return TSQuantifierZeroOrMore; + case TSQuantifierOne: + switch (right) { + case TSQuantifierZero: + case TSQuantifierZeroOrOne: + return TSQuantifierZeroOrOne; + case TSQuantifierZeroOrMore: + return TSQuantifierZeroOrMore; + case TSQuantifierOne: + return TSQuantifierOne; + case TSQuantifierOneOrMore: + return TSQuantifierOneOrMore; + }; + break; + case TSQuantifierOneOrMore: + switch (right) { + case TSQuantifierZero: + case TSQuantifierZeroOrOne: + case TSQuantifierZeroOrMore: + return TSQuantifierZeroOrMore; + case TSQuantifierOne: + case TSQuantifierOneOrMore: + return TSQuantifierOneOrMore; + }; + break; + } + return TSQuantifierZero; // to make compiler happy, but all cases should be covered above! +} + +static TSQuantifier quantifier_add( + TSQuantifier left, + TSQuantifier right +) { + switch (left) + { + case TSQuantifierZero: + return right; + case TSQuantifierZeroOrOne: + switch (right) { + case TSQuantifierZero: + return TSQuantifierZeroOrOne; + case TSQuantifierZeroOrOne: + case TSQuantifierZeroOrMore: + return TSQuantifierZeroOrMore; + case TSQuantifierOne: + case TSQuantifierOneOrMore: + return TSQuantifierOneOrMore; + }; + break; + case TSQuantifierZeroOrMore: + switch (right) { + case TSQuantifierZero: + return TSQuantifierZeroOrMore; + case TSQuantifierZeroOrOne: + case TSQuantifierZeroOrMore: + return TSQuantifierZeroOrMore; + case TSQuantifierOne: + case TSQuantifierOneOrMore: + return TSQuantifierOneOrMore; + }; + break; + case TSQuantifierOne: + switch (right) { + case TSQuantifierZero: + return TSQuantifierOne; + case TSQuantifierZeroOrOne: + case TSQuantifierZeroOrMore: + case TSQuantifierOne: + case TSQuantifierOneOrMore: + return TSQuantifierOneOrMore; + }; + break; + case TSQuantifierOneOrMore: + return TSQuantifierOneOrMore; + } + return TSQuantifierZero; // to make compiler happy, but all cases should be covered above! +} + +// Create new capture quantifiers structure +static CaptureQuantifiers capture_quantifiers_new(void) { + return (CaptureQuantifiers) array_new(); +} + +// Delete capture quantifiers structure +static void capture_quantifiers_delete( + CaptureQuantifiers *self +) { + array_delete(self); +} + +// Clear capture quantifiers structure +static void capture_quantifiers_clear( + CaptureQuantifiers *self +) { + array_clear(self); +} + +// Replace capture quantifiers with the given quantifiers +static void capture_quantifiers_replace( + CaptureQuantifiers *self, + CaptureQuantifiers *quantifiers +) { + array_clear(self); + array_push_all(self, quantifiers); +} + +// Return capture quantifier for the given capture id +static TSQuantifier capture_quantifier_for_id( + const CaptureQuantifiers *self, + uint16_t id +) { + return (self->size <= id) ? TSQuantifierZero : (TSQuantifier) *array_get(self, id); +} + +// Add the given quantifier to the current value for id +static void capture_quantifiers_add_for_id( + CaptureQuantifiers *self, + uint16_t id, + TSQuantifier quantifier +) { + if (self->size <= id) { + array_grow_by(self, id + 1 - self->size); + } + uint8_t *own_quantifier = array_get(self, id); + *own_quantifier = (uint8_t) quantifier_add((TSQuantifier) *own_quantifier, quantifier); +} + +// Point-wise add the given quantifiers to the current values +static void capture_quantifiers_add_all( + CaptureQuantifiers *self, + CaptureQuantifiers *quantifiers +) { + if (self->size < quantifiers->size) { + array_grow_by(self, quantifiers->size - self->size); + } + for (uint16_t id = 0; id < (uint16_t)quantifiers->size; id++) { + uint8_t *quantifier = array_get(quantifiers, id); + uint8_t *own_quantifier = array_get(self, id); + *own_quantifier = (uint8_t) quantifier_add((TSQuantifier) *own_quantifier, (TSQuantifier) *quantifier); + } +} + +// Join the given quantifier with the current values +static void capture_quantifiers_mul( + CaptureQuantifiers *self, + TSQuantifier quantifier +) { + for (uint16_t id = 0; id < (uint16_t)self->size; id++) { + uint8_t *own_quantifier = array_get(self, id); + *own_quantifier = (uint8_t) quantifier_mul((TSQuantifier) *own_quantifier, quantifier); + } +} + +// Point-wise join the quantifiers from a list of alternatives with the current values +static void capture_quantifiers_join_all( + CaptureQuantifiers *self, + CaptureQuantifiers *quantifiers +) { + if (self->size < quantifiers->size) { + array_grow_by(self, quantifiers->size - self->size); + } + for (uint32_t id = 0; id < quantifiers->size; id++) { + uint8_t *quantifier = array_get(quantifiers, id); + uint8_t *own_quantifier = array_get(self, id); + *own_quantifier = (uint8_t) quantifier_join((TSQuantifier) *own_quantifier, (TSQuantifier) *quantifier); + } + for (uint32_t id = quantifiers->size; id < self->size; id++) { + uint8_t *own_quantifier = array_get(self, id); + *own_quantifier = (uint8_t) quantifier_join((TSQuantifier) *own_quantifier, TSQuantifierZero); + } +} + +/************** + * SymbolTable + **************/ + +static SymbolTable symbol_table_new(void) { + return (SymbolTable) { + .characters = array_new(), + .slices = array_new(), + }; +} + +static void symbol_table_delete(SymbolTable *self) { + array_delete(&self->characters); + array_delete(&self->slices); +} + +static int symbol_table_id_for_name( + const SymbolTable *self, + const char *name, + uint32_t length +) { + for (unsigned i = 0; i < self->slices.size; i++) { + Slice slice = self->slices.contents[i]; + if ( + slice.length == length && + !strncmp(&self->characters.contents[slice.offset], name, length) + ) return i; + } + return -1; +} + +static const char *symbol_table_name_for_id( + const SymbolTable *self, + uint16_t id, + uint32_t *length +) { + Slice slice = self->slices.contents[id]; + *length = slice.length; + return &self->characters.contents[slice.offset]; +} + +static uint16_t symbol_table_insert_name( + SymbolTable *self, + const char *name, + uint32_t length +) { + int id = symbol_table_id_for_name(self, name, length); + if (id >= 0) return (uint16_t)id; + Slice slice = { + .offset = self->characters.size, + .length = length, + }; + array_grow_by(&self->characters, length + 1); + memcpy(&self->characters.contents[slice.offset], name, length); + self->characters.contents[self->characters.size - 1] = 0; + array_push(&self->slices, slice); + return self->slices.size - 1; +} + +/************ + * QueryStep + ************/ + +static QueryStep query_step__new( + TSSymbol symbol, + uint16_t depth, + bool is_immediate +) { + QueryStep step = { + .symbol = symbol, + .depth = depth, + .field = 0, + .alternative_index = NONE, + .negated_field_list_id = 0, + .contains_captures = false, + .is_last_child = false, + .is_named = false, + .is_pass_through = false, + .is_dead_end = false, + .root_pattern_guaranteed = false, + .is_immediate = is_immediate, + .alternative_is_immediate = false, + }; + for (unsigned i = 0; i < MAX_STEP_CAPTURE_COUNT; i++) { + step.capture_ids[i] = NONE; + } + return step; +} + +static void query_step__add_capture(QueryStep *self, uint16_t capture_id) { + for (unsigned i = 0; i < MAX_STEP_CAPTURE_COUNT; i++) { + if (self->capture_ids[i] == NONE) { + self->capture_ids[i] = capture_id; + break; + } + } +} + +static void query_step__remove_capture(QueryStep *self, uint16_t capture_id) { + for (unsigned i = 0; i < MAX_STEP_CAPTURE_COUNT; i++) { + if (self->capture_ids[i] == capture_id) { + self->capture_ids[i] = NONE; + while (i + 1 < MAX_STEP_CAPTURE_COUNT) { + if (self->capture_ids[i + 1] == NONE) break; + self->capture_ids[i] = self->capture_ids[i + 1]; + self->capture_ids[i + 1] = NONE; + i++; + } + break; + } + } +} + +/********************** + * StatePredecessorMap + **********************/ + +static inline StatePredecessorMap state_predecessor_map_new( + const TSLanguage *language +) { + return (StatePredecessorMap) { + .contents = ts_calloc( + (size_t)language->state_count * (MAX_STATE_PREDECESSOR_COUNT + 1), + sizeof(TSStateId) + ), + }; +} + +static inline void state_predecessor_map_delete(StatePredecessorMap *self) { + ts_free(self->contents); +} + +static inline void state_predecessor_map_add( + StatePredecessorMap *self, + TSStateId state, + TSStateId predecessor +) { + size_t index = (size_t)state * (MAX_STATE_PREDECESSOR_COUNT + 1); + TSStateId *count = &self->contents[index]; + if ( + *count == 0 || + (*count < MAX_STATE_PREDECESSOR_COUNT && self->contents[index + *count] != predecessor) + ) { + (*count)++; + self->contents[index + *count] = predecessor; + } +} + +static inline const TSStateId *state_predecessor_map_get( + const StatePredecessorMap *self, + TSStateId state, + unsigned *count +) { + size_t index = (size_t)state * (MAX_STATE_PREDECESSOR_COUNT + 1); + *count = self->contents[index]; + return &self->contents[index + 1]; +} + +/**************** + * AnalysisState + ****************/ + +static unsigned analysis_state__recursion_depth(const AnalysisState *self) { + unsigned result = 0; + for (unsigned i = 0; i < self->depth; i++) { + TSSymbol symbol = self->stack[i].parent_symbol; + for (unsigned j = 0; j < i; j++) { + if (self->stack[j].parent_symbol == symbol) { + result++; + break; + } + } + } + return result; +} + +static inline int analysis_state__compare_position( + AnalysisState *const *self, + AnalysisState *const *other +) { + for (unsigned i = 0; i < (*self)->depth; i++) { + if (i >= (*other)->depth) return -1; + if ((*self)->stack[i].child_index < (*other)->stack[i].child_index) return -1; + if ((*self)->stack[i].child_index > (*other)->stack[i].child_index) return 1; + } + if ((*self)->depth < (*other)->depth) return 1; + if ((*self)->step_index < (*other)->step_index) return -1; + if ((*self)->step_index > (*other)->step_index) return 1; + return 0; +} + +static inline int analysis_state__compare( + AnalysisState *const *self, + AnalysisState *const *other +) { + int result = analysis_state__compare_position(self, other); + if (result != 0) return result; + for (unsigned i = 0; i < (*self)->depth; i++) { + if ((*self)->stack[i].parent_symbol < (*other)->stack[i].parent_symbol) return -1; + if ((*self)->stack[i].parent_symbol > (*other)->stack[i].parent_symbol) return 1; + if ((*self)->stack[i].parse_state < (*other)->stack[i].parse_state) return -1; + if ((*self)->stack[i].parse_state > (*other)->stack[i].parse_state) return 1; + if ((*self)->stack[i].field_id < (*other)->stack[i].field_id) return -1; + if ((*self)->stack[i].field_id > (*other)->stack[i].field_id) return 1; + } + return 0; +} + +static inline AnalysisStateEntry *analysis_state__top(AnalysisState *self) { + if (self->depth == 0) { + return &self->stack[0]; + } + return &self->stack[self->depth - 1]; +} + +static inline bool analysis_state__has_supertype(AnalysisState *self, TSSymbol symbol) { + for (unsigned i = 0; i < self->depth; i++) { + if (self->stack[i].parent_symbol == symbol) return true; + } + return false; +} + +/****************** + * AnalysisStateSet + ******************/ + +// Obtains an `AnalysisState` instance, either by consuming one from this set's object pool, or by +// cloning one from scratch. +static inline AnalysisState *analysis_state_pool__clone_or_reuse( + AnalysisStateSet *self, + AnalysisState *borrowed_item +) { + AnalysisState *new_item; + if (self->size) { + new_item = array_pop(self); + } else { + new_item = ts_malloc(sizeof(AnalysisState)); + } + *new_item = *borrowed_item; + return new_item; +} + +// Inserts a clone of the passed-in item at the appropriate position to maintain ordering in this +// set. The set does not contain duplicates, so if the item is already present, it will not be +// inserted, and no clone will be made. +// +// The caller retains ownership of the passed-in memory. However, the clone that is created by this +// function will be managed by the state set. +static inline void analysis_state_set__insert_sorted( + AnalysisStateSet *self, + AnalysisStateSet *pool, + AnalysisState *borrowed_item +) { + unsigned index, exists; + array_search_sorted_with(self, analysis_state__compare, &borrowed_item, &index, &exists); + if (!exists) { + AnalysisState *new_item = analysis_state_pool__clone_or_reuse(pool, borrowed_item); + array_insert(self, index, new_item); + } +} + +// Inserts a clone of the passed-in item at the end position of this list. +// +// IMPORTANT: The caller MUST ENSURE that this item is larger (by the comparison function +// `analysis_state__compare`) than largest item already in this set. If items are inserted in the +// wrong order, the set will not function properly for future use. +// +// The caller retains ownership of the passed-in memory. However, the clone that is created by this +// function will be managed by the state set. +static inline void analysis_state_set__push( + AnalysisStateSet *self, + AnalysisStateSet *pool, + AnalysisState *borrowed_item +) { + AnalysisState *new_item = analysis_state_pool__clone_or_reuse(pool, borrowed_item); + array_push(self, new_item); +} + +// Removes all items from this set, returning it to an empty state. +static inline void analysis_state_set__clear(AnalysisStateSet *self, AnalysisStateSet *pool) { + array_push_all(pool, self); + array_clear(self); +} + +// Releases all memory that is managed with this state set, including any items currently present. +// After calling this function, the set is no longer suitable for use. +static inline void analysis_state_set__delete(AnalysisStateSet *self) { + for (unsigned i = 0; i < self->size; i++) { + ts_free(self->contents[i]); + } + array_delete(self); +} + +/**************** + * QueryAnalyzer + ****************/ + +static inline QueryAnalysis query_analysis__new(void) { + return (QueryAnalysis) { + .states = array_new(), + .next_states = array_new(), + .deeper_states = array_new(), + .state_pool = array_new(), + .final_step_indices = array_new(), + .finished_parent_symbols = array_new(), + .did_abort = false, + }; +} + +static inline void query_analysis__delete(QueryAnalysis *self) { + analysis_state_set__delete(&self->states); + analysis_state_set__delete(&self->next_states); + analysis_state_set__delete(&self->deeper_states); + analysis_state_set__delete(&self->state_pool); + array_delete(&self->final_step_indices); + array_delete(&self->finished_parent_symbols); +} + +/*********************** + * AnalysisSubgraphNode + ***********************/ + +static inline int analysis_subgraph_node__compare(const AnalysisSubgraphNode *self, const AnalysisSubgraphNode *other) { + if (self->state < other->state) return -1; + if (self->state > other->state) return 1; + if (self->child_index < other->child_index) return -1; + if (self->child_index > other->child_index) return 1; + if (self->done < other->done) return -1; + if (self->done > other->done) return 1; + if (self->production_id < other->production_id) return -1; + if (self->production_id > other->production_id) return 1; + return 0; +} + +/********* + * Query + *********/ + +// The `pattern_map` contains a mapping from TSSymbol values to indices in the +// `steps` array. For a given syntax node, the `pattern_map` makes it possible +// to quickly find the starting steps of all of the patterns whose root matches +// that node. Each entry has two fields: a `pattern_index`, which identifies one +// of the patterns in the query, and a `step_index`, which indicates the start +// offset of that pattern's steps within the `steps` array. +// +// The entries are sorted by the patterns' root symbols, and lookups use a +// binary search. This ensures that the cost of this initial lookup step +// scales logarithmically with the number of patterns in the query. +// +// This returns `true` if the symbol is present and `false` otherwise. +// If the symbol is not present `*result` is set to the index where the +// symbol should be inserted. +static inline bool ts_query__pattern_map_search( + const TSQuery *self, + TSSymbol needle, + uint32_t *result +) { + uint32_t base_index = self->wildcard_root_pattern_count; + uint32_t size = self->pattern_map.size - base_index; + if (size == 0) { + *result = base_index; + return false; + } + while (size > 1) { + uint32_t half_size = size / 2; + uint32_t mid_index = base_index + half_size; + TSSymbol mid_symbol = self->steps.contents[ + self->pattern_map.contents[mid_index].step_index + ].symbol; + if (needle > mid_symbol) base_index = mid_index; + size -= half_size; + } + + TSSymbol symbol = self->steps.contents[ + self->pattern_map.contents[base_index].step_index + ].symbol; + + if (needle > symbol) { + base_index++; + if (base_index < self->pattern_map.size) { + symbol = self->steps.contents[ + self->pattern_map.contents[base_index].step_index + ].symbol; + } + } + + *result = base_index; + return needle == symbol; +} + +// Insert a new pattern's start index into the pattern map, maintaining +// the pattern map's ordering invariant. +static inline void ts_query__pattern_map_insert( + TSQuery *self, + TSSymbol symbol, + PatternEntry new_entry +) { + uint32_t index; + ts_query__pattern_map_search(self, symbol, &index); + + // Ensure that the entries are sorted not only by symbol, but also + // by pattern_index. This way, states for earlier patterns will be + // initiated first, which allows the ordering of the states array + // to be maintained more efficiently. + while (index < self->pattern_map.size) { + PatternEntry *entry = &self->pattern_map.contents[index]; + if ( + self->steps.contents[entry->step_index].symbol == symbol && + entry->pattern_index < new_entry.pattern_index + ) { + index++; + } else { + break; + } + } + + array_insert(&self->pattern_map, index, new_entry); +} + +// Walk the subgraph for this non-terminal, tracking all of the possible +// sequences of progress within the pattern. +static void ts_query__perform_analysis( + TSQuery *self, + const AnalysisSubgraphArray *subgraphs, + QueryAnalysis *analysis +) { + unsigned recursion_depth_limit = 0; + unsigned prev_final_step_count = 0; + array_clear(&analysis->final_step_indices); + array_clear(&analysis->finished_parent_symbols); + + for (unsigned iteration = 0;; iteration++) { + if (iteration == MAX_ANALYSIS_ITERATION_COUNT) { + analysis->did_abort = true; + break; + } + + #ifdef DEBUG_ANALYZE_QUERY + printf("Iteration: %u. Final step indices:", iteration); + for (unsigned j = 0; j < analysis->final_step_indices.size; j++) { + printf(" %4u", analysis->final_step_indices.contents[j]); + } + printf("\n"); + for (unsigned j = 0; j < analysis->states.size; j++) { + AnalysisState *state = analysis->states.contents[j]; + printf(" %3u: step: %u, stack: [", j, state->step_index); + for (unsigned k = 0; k < state->depth; k++) { + printf( + " {%s, child: %u, state: %4u", + self->language->symbol_names[state->stack[k].parent_symbol], + state->stack[k].child_index, + state->stack[k].parse_state + ); + if (state->stack[k].field_id) printf(", field: %s", self->language->field_names[state->stack[k].field_id]); + if (state->stack[k].done) printf(", DONE"); + printf("}"); + } + printf(" ]\n"); + } + #endif + + // If no further progress can be made within the current recursion depth limit, then + // bump the depth limit by one, and continue to process the states the exceeded the + // limit. But only allow this if progress has been made since the last time the depth + // limit was increased. + if (analysis->states.size == 0) { + if ( + analysis->deeper_states.size > 0 && + analysis->final_step_indices.size > prev_final_step_count + ) { + #ifdef DEBUG_ANALYZE_QUERY + printf("Increase recursion depth limit to %u\n", recursion_depth_limit + 1); + #endif + + prev_final_step_count = analysis->final_step_indices.size; + recursion_depth_limit++; + AnalysisStateSet _states = analysis->states; + analysis->states = analysis->deeper_states; + analysis->deeper_states = _states; + continue; + } + + break; + } + + analysis_state_set__clear(&analysis->next_states, &analysis->state_pool); + for (unsigned j = 0; j < analysis->states.size; j++) { + AnalysisState * const state = analysis->states.contents[j]; + + // For efficiency, it's important to avoid processing the same analysis state more + // than once. To achieve this, keep the states in order of ascending position within + // their hypothetical syntax trees. In each iteration of this loop, start by advancing + // the states that have made the least progress. Avoid advancing states that have already + // made more progress. + if (analysis->next_states.size > 0) { + int comparison = analysis_state__compare_position( + &state, + array_back(&analysis->next_states) + ); + if (comparison == 0) { + analysis_state_set__insert_sorted(&analysis->next_states, &analysis->state_pool, state); + continue; + } else if (comparison > 0) { + #ifdef DEBUG_ANALYZE_QUERY + printf("Terminate iteration at state %u\n", j); + #endif + while (j < analysis->states.size) { + analysis_state_set__push( + &analysis->next_states, + &analysis->state_pool, + analysis->states.contents[j] + ); + j++; + } + break; + } + } + + const TSStateId parse_state = analysis_state__top(state)->parse_state; + const TSSymbol parent_symbol = analysis_state__top(state)->parent_symbol; + const TSFieldId parent_field_id = analysis_state__top(state)->field_id; + const unsigned child_index = analysis_state__top(state)->child_index; + const QueryStep * const step = &self->steps.contents[state->step_index]; + + unsigned subgraph_index, exists; + array_search_sorted_by(subgraphs, .symbol, parent_symbol, &subgraph_index, &exists); + if (!exists) continue; + const AnalysisSubgraph *subgraph = &subgraphs->contents[subgraph_index]; + + // Follow every possible path in the parse table, but only visit states that + // are part of the subgraph for the current symbol. + LookaheadIterator lookahead_iterator = ts_language_lookaheads(self->language, parse_state); + while (ts_lookahead_iterator__next(&lookahead_iterator)) { + TSSymbol sym = lookahead_iterator.symbol; + + AnalysisSubgraphNode successor = { + .state = parse_state, + .child_index = child_index, + }; + if (lookahead_iterator.action_count) { + const TSParseAction *action = &lookahead_iterator.actions[lookahead_iterator.action_count - 1]; + if (action->type == TSParseActionTypeShift) { + if (!action->shift.extra) { + successor.state = action->shift.state; + successor.child_index++; + } + } else { + continue; + } + } else if (lookahead_iterator.next_state != 0) { + successor.state = lookahead_iterator.next_state; + successor.child_index++; + } else { + continue; + } + + unsigned node_index; + array_search_sorted_with( + &subgraph->nodes, + analysis_subgraph_node__compare, &successor, + &node_index, &exists + ); + while (node_index < subgraph->nodes.size) { + AnalysisSubgraphNode *node = &subgraph->nodes.contents[node_index++]; + if (node->state != successor.state || node->child_index != successor.child_index) break; + + // Use the subgraph to determine what alias and field will eventually be applied + // to this child node. + TSSymbol alias = ts_language_alias_at(self->language, node->production_id, child_index); + TSSymbol visible_symbol = alias + ? alias + : self->language->symbol_metadata[sym].visible + ? self->language->public_symbol_map[sym] + : 0; + TSFieldId field_id = parent_field_id; + if (!field_id) { + const TSFieldMapEntry *field_map, *field_map_end; + ts_language_field_map(self->language, node->production_id, &field_map, &field_map_end); + for (; field_map != field_map_end; field_map++) { + if (!field_map->inherited && field_map->child_index == child_index) { + field_id = field_map->field_id; + break; + } + } + } + + // Create a new state that has advanced past this hypothetical subtree. + AnalysisState next_state = *state; + AnalysisStateEntry *next_state_top = analysis_state__top(&next_state); + next_state_top->child_index = successor.child_index; + next_state_top->parse_state = successor.state; + if (node->done) next_state_top->done = true; + + // Determine if this hypothetical child node would match the current step + // of the query pattern. + bool does_match = false; + if (visible_symbol) { + does_match = true; + if (step->symbol == WILDCARD_SYMBOL) { + if ( + step->is_named && + !self->language->symbol_metadata[visible_symbol].named + ) does_match = false; + } else if (step->symbol != visible_symbol) { + does_match = false; + } + if (step->field && step->field != field_id) { + does_match = false; + } + if ( + step->supertype_symbol && + !analysis_state__has_supertype(state, step->supertype_symbol) + ) does_match = false; + } + + // If this child is hidden, then descend into it and walk through its children. + // If the top entry of the stack is at the end of its rule, then that entry can + // be replaced. Otherwise, push a new entry onto the stack. + else if (sym >= self->language->token_count) { + if (!next_state_top->done) { + if (next_state.depth + 1 >= MAX_ANALYSIS_STATE_DEPTH) { + #ifdef DEBUG_ANALYZE_QUERY + printf("Exceeded depth limit for state %u\n", j); + #endif + + analysis->did_abort = true; + continue; + } + + next_state.depth++; + next_state_top = analysis_state__top(&next_state); + } + + *next_state_top = (AnalysisStateEntry) { + .parse_state = parse_state, + .parent_symbol = sym, + .child_index = 0, + .field_id = field_id, + .done = false, + }; + + if (analysis_state__recursion_depth(&next_state) > recursion_depth_limit) { + analysis_state_set__insert_sorted( + &analysis->deeper_states, + &analysis->state_pool, + &next_state + ); + continue; + } + } + + // Pop from the stack when this state reached the end of its current syntax node. + while (next_state.depth > 0 && next_state_top->done) { + next_state.depth--; + next_state_top = analysis_state__top(&next_state); + } + + // If this hypothetical child did match the current step of the query pattern, + // then advance to the next step at the current depth. This involves skipping + // over any descendant steps of the current child. + const QueryStep *next_step = step; + if (does_match) { + for (;;) { + next_state.step_index++; + next_step = &self->steps.contents[next_state.step_index]; + if ( + next_step->depth == PATTERN_DONE_MARKER || + next_step->depth <= step->depth + ) break; + } + } else if (successor.state == parse_state) { + continue; + } + + for (;;) { + // Skip pass-through states. Although these states have alternatives, they are only + // used to implement repetitions, and query analysis does not need to process + // repetitions in order to determine whether steps are possible and definite. + if (next_step->is_pass_through) { + next_state.step_index++; + next_step++; + continue; + } + + // If the pattern is finished or hypothetical parent node is complete, then + // record that matching can terminate at this step of the pattern. Otherwise, + // add this state to the list of states to process on the next iteration. + if (!next_step->is_dead_end) { + bool did_finish_pattern = self->steps.contents[next_state.step_index].depth != step->depth; + if (did_finish_pattern) { + array_insert_sorted_by(&analysis->finished_parent_symbols, , state->root_symbol); + } else if (next_state.depth == 0) { + array_insert_sorted_by(&analysis->final_step_indices, , next_state.step_index); + } else { + analysis_state_set__insert_sorted(&analysis->next_states, &analysis->state_pool, &next_state); + } + } + + // If the state has advanced to a step with an alternative step, then add another state + // at that alternative step. This process is simpler than the process of actually matching a + // pattern during query execution, because for the purposes of query analysis, there is no + // need to process repetitions. + if ( + does_match && + next_step->alternative_index != NONE && + next_step->alternative_index > next_state.step_index + ) { + next_state.step_index = next_step->alternative_index; + next_step = &self->steps.contents[next_state.step_index]; + } else { + break; + } + } + } + } + } + + AnalysisStateSet _states = analysis->states; + analysis->states = analysis->next_states; + analysis->next_states = _states; + } +} + +static bool ts_query__analyze_patterns(TSQuery *self, unsigned *error_offset) { + Array(uint16_t) non_rooted_pattern_start_steps = array_new(); + for (unsigned i = 0; i < self->pattern_map.size; i++) { + PatternEntry *pattern = &self->pattern_map.contents[i]; + if (!pattern->is_rooted) { + QueryStep *step = &self->steps.contents[pattern->step_index]; + if (step->symbol != WILDCARD_SYMBOL) { + array_push(&non_rooted_pattern_start_steps, i); + } + } + } + + // Walk forward through all of the steps in the query, computing some + // basic information about each step. Mark all of the steps that contain + // captures, and record the indices of all of the steps that have child steps. + Array(uint32_t) parent_step_indices = array_new(); + for (unsigned i = 0; i < self->steps.size; i++) { + QueryStep *step = &self->steps.contents[i]; + if (step->depth == PATTERN_DONE_MARKER) { + step->parent_pattern_guaranteed = true; + step->root_pattern_guaranteed = true; + continue; + } + + bool has_children = false; + bool is_wildcard = step->symbol == WILDCARD_SYMBOL; + step->contains_captures = step->capture_ids[0] != NONE; + for (unsigned j = i + 1; j < self->steps.size; j++) { + QueryStep *next_step = &self->steps.contents[j]; + if ( + next_step->depth == PATTERN_DONE_MARKER || + next_step->depth <= step->depth + ) break; + if (next_step->capture_ids[0] != NONE) { + step->contains_captures = true; + } + if (!is_wildcard) { + next_step->root_pattern_guaranteed = true; + next_step->parent_pattern_guaranteed = true; + } + has_children = true; + } + + if (has_children && !is_wildcard) { + array_push(&parent_step_indices, i); + } + } + + // For every parent symbol in the query, initialize an 'analysis subgraph'. + // This subgraph lists all of the states in the parse table that are directly + // involved in building subtrees for this symbol. + // + // In addition to the parent symbols in the query, construct subgraphs for all + // of the hidden symbols in the grammar, because these might occur within + // one of the parent nodes, such that their children appear to belong to the + // parent. + AnalysisSubgraphArray subgraphs = array_new(); + for (unsigned i = 0; i < parent_step_indices.size; i++) { + uint32_t parent_step_index = parent_step_indices.contents[i]; + TSSymbol parent_symbol = self->steps.contents[parent_step_index].symbol; + AnalysisSubgraph subgraph = { .symbol = parent_symbol }; + array_insert_sorted_by(&subgraphs, .symbol, subgraph); + } + for (TSSymbol sym = (uint16_t)self->language->token_count; sym < (uint16_t)self->language->symbol_count; sym++) { + if (!ts_language_symbol_metadata(self->language, sym).visible) { + AnalysisSubgraph subgraph = { .symbol = sym }; + array_insert_sorted_by(&subgraphs, .symbol, subgraph); + } + } + + // Scan the parse table to find the data needed to populate these subgraphs. + // Collect three things during this scan: + // 1) All of the parse states where one of these symbols can start. + // 2) All of the parse states where one of these symbols can end, along + // with information about the node that would be created. + // 3) A list of predecessor states for each state. + StatePredecessorMap predecessor_map = state_predecessor_map_new(self->language); + for (TSStateId state = 1; state < (uint16_t)self->language->state_count; state++) { + unsigned subgraph_index, exists; + LookaheadIterator lookahead_iterator = ts_language_lookaheads(self->language, state); + while (ts_lookahead_iterator__next(&lookahead_iterator)) { + if (lookahead_iterator.action_count) { + for (unsigned i = 0; i < lookahead_iterator.action_count; i++) { + const TSParseAction *action = &lookahead_iterator.actions[i]; + if (action->type == TSParseActionTypeReduce) { + const TSSymbol *aliases, *aliases_end; + ts_language_aliases_for_symbol( + self->language, + action->reduce.symbol, + &aliases, + &aliases_end + ); + for (const TSSymbol *symbol = aliases; symbol < aliases_end; symbol++) { + array_search_sorted_by( + &subgraphs, + .symbol, + *symbol, + &subgraph_index, + &exists + ); + if (exists) { + AnalysisSubgraph *subgraph = &subgraphs.contents[subgraph_index]; + if (subgraph->nodes.size == 0 || array_back(&subgraph->nodes)->state != state) { + array_push(&subgraph->nodes, ((AnalysisSubgraphNode) { + .state = state, + .production_id = action->reduce.production_id, + .child_index = action->reduce.child_count, + .done = true, + })); + } + } + } + } else if (action->type == TSParseActionTypeShift && !action->shift.extra) { + TSStateId next_state = action->shift.state; + state_predecessor_map_add(&predecessor_map, next_state, state); + } + } + } else if (lookahead_iterator.next_state != 0) { + if (lookahead_iterator.next_state != state) { + state_predecessor_map_add(&predecessor_map, lookahead_iterator.next_state, state); + } + if (ts_language_state_is_primary(self->language, state)) { + const TSSymbol *aliases, *aliases_end; + ts_language_aliases_for_symbol( + self->language, + lookahead_iterator.symbol, + &aliases, + &aliases_end + ); + for (const TSSymbol *symbol = aliases; symbol < aliases_end; symbol++) { + array_search_sorted_by( + &subgraphs, + .symbol, + *symbol, + &subgraph_index, + &exists + ); + if (exists) { + AnalysisSubgraph *subgraph = &subgraphs.contents[subgraph_index]; + if ( + subgraph->start_states.size == 0 || + *array_back(&subgraph->start_states) != state + ) + array_push(&subgraph->start_states, state); + } + } + } + } + } + } + + // For each subgraph, compute the preceding states by walking backward + // from the end states using the predecessor map. + Array(AnalysisSubgraphNode) next_nodes = array_new(); + for (unsigned i = 0; i < subgraphs.size; i++) { + AnalysisSubgraph *subgraph = &subgraphs.contents[i]; + if (subgraph->nodes.size == 0) { + array_delete(&subgraph->start_states); + array_erase(&subgraphs, i); + i--; + continue; + } + array_assign(&next_nodes, &subgraph->nodes); + while (next_nodes.size > 0) { + AnalysisSubgraphNode node = array_pop(&next_nodes); + if (node.child_index > 1) { + unsigned predecessor_count; + const TSStateId *predecessors = state_predecessor_map_get( + &predecessor_map, + node.state, + &predecessor_count + ); + for (unsigned j = 0; j < predecessor_count; j++) { + AnalysisSubgraphNode predecessor_node = { + .state = predecessors[j], + .child_index = node.child_index - 1, + .production_id = node.production_id, + .done = false, + }; + unsigned index, exists; + array_search_sorted_with( + &subgraph->nodes, analysis_subgraph_node__compare, &predecessor_node, + &index, &exists + ); + if (!exists) { + array_insert(&subgraph->nodes, index, predecessor_node); + array_push(&next_nodes, predecessor_node); + } + } + } + } + } + + #ifdef DEBUG_ANALYZE_QUERY + printf("\nSubgraphs:\n"); + for (unsigned i = 0; i < subgraphs.size; i++) { + AnalysisSubgraph *subgraph = &subgraphs.contents[i]; + printf(" %u, %s:\n", subgraph->symbol, ts_language_symbol_name(self->language, subgraph->symbol)); + for (unsigned j = 0; j < subgraph->start_states.size; j++) { + printf( + " {state: %u}\n", + subgraph->start_states.contents[j] + ); + } + for (unsigned j = 0; j < subgraph->nodes.size; j++) { + AnalysisSubgraphNode *node = &subgraph->nodes.contents[j]; + printf( + " {state: %u, child_index: %u, production_id: %u, done: %d}\n", + node->state, node->child_index, node->production_id, node->done + ); + } + printf("\n"); + } + #endif + + // For each non-terminal pattern, determine if the pattern can successfully match, + // and identify all of the possible children within the pattern where matching could fail. + bool all_patterns_are_valid = true; + QueryAnalysis analysis = query_analysis__new(); + for (unsigned i = 0; i < parent_step_indices.size; i++) { + uint16_t parent_step_index = parent_step_indices.contents[i]; + uint16_t parent_depth = self->steps.contents[parent_step_index].depth; + TSSymbol parent_symbol = self->steps.contents[parent_step_index].symbol; + if (parent_symbol == ts_builtin_sym_error) continue; + + // Find the subgraph that corresponds to this pattern's root symbol. If the pattern's + // root symbol is a terminal, then return an error. + unsigned subgraph_index, exists; + array_search_sorted_by(&subgraphs, .symbol, parent_symbol, &subgraph_index, &exists); + if (!exists) { + unsigned first_child_step_index = parent_step_index + 1; + uint32_t j, child_exists; + array_search_sorted_by(&self->step_offsets, .step_index, first_child_step_index, &j, &child_exists); + assert(child_exists); + *error_offset = self->step_offsets.contents[j].byte_offset; + all_patterns_are_valid = false; + break; + } + + // Initialize an analysis state at every parse state in the table where + // this parent symbol can occur. + AnalysisSubgraph *subgraph = &subgraphs.contents[subgraph_index]; + analysis_state_set__clear(&analysis.states, &analysis.state_pool); + analysis_state_set__clear(&analysis.deeper_states, &analysis.state_pool); + for (unsigned j = 0; j < subgraph->start_states.size; j++) { + TSStateId parse_state = subgraph->start_states.contents[j]; + analysis_state_set__push(&analysis.states, &analysis.state_pool, &((AnalysisState) { + .step_index = parent_step_index + 1, + .stack = { + [0] = { + .parse_state = parse_state, + .parent_symbol = parent_symbol, + .child_index = 0, + .field_id = 0, + .done = false, + }, + }, + .depth = 1, + .root_symbol = parent_symbol, + })); + } + + #ifdef DEBUG_ANALYZE_QUERY + printf( + "\nWalk states for %s:\n", + ts_language_symbol_name(self->language, analysis.states.contents[0]->stack[0].parent_symbol) + ); + #endif + + analysis.did_abort = false; + ts_query__perform_analysis(self, &subgraphs, &analysis); + + // If this pattern could not be fully analyzed, then every step should + // be considered fallible. + if (analysis.did_abort) { + for (unsigned j = parent_step_index + 1; j < self->steps.size; j++) { + QueryStep *step = &self->steps.contents[j]; + if ( + step->depth <= parent_depth || + step->depth == PATTERN_DONE_MARKER + ) break; + if (!step->is_dead_end) { + step->parent_pattern_guaranteed = false; + step->root_pattern_guaranteed = false; + } + } + continue; + } + + // If this pattern cannot match, store the pattern index so that it can be + // returned to the caller. + if (analysis.finished_parent_symbols.size == 0) { + assert(analysis.final_step_indices.size > 0); + uint16_t impossible_step_index = *array_back(&analysis.final_step_indices); + uint32_t j, impossible_exists; + array_search_sorted_by(&self->step_offsets, .step_index, impossible_step_index, &j, &impossible_exists); + if (j >= self->step_offsets.size) j = self->step_offsets.size - 1; + *error_offset = self->step_offsets.contents[j].byte_offset; + all_patterns_are_valid = false; + break; + } + + // Mark as fallible any step where a match terminated. + // Later, this property will be propagated to all of the step's predecessors. + for (unsigned j = 0; j < analysis.final_step_indices.size; j++) { + uint32_t final_step_index = analysis.final_step_indices.contents[j]; + QueryStep *step = &self->steps.contents[final_step_index]; + if ( + step->depth != PATTERN_DONE_MARKER && + step->depth > parent_depth && + !step->is_dead_end + ) { + step->parent_pattern_guaranteed = false; + step->root_pattern_guaranteed = false; + } + } + } + + // Mark as indefinite any step with captures that are used in predicates. + Array(uint16_t) predicate_capture_ids = array_new(); + for (unsigned i = 0; i < self->patterns.size; i++) { + QueryPattern *pattern = &self->patterns.contents[i]; + + // Gather all of the captures that are used in predicates for this pattern. + array_clear(&predicate_capture_ids); + for ( + unsigned start = pattern->predicate_steps.offset, + end = start + pattern->predicate_steps.length, + j = start; j < end; j++ + ) { + TSQueryPredicateStep *step = &self->predicate_steps.contents[j]; + if (step->type == TSQueryPredicateStepTypeCapture) { + uint16_t value_id = step->value_id; + array_insert_sorted_by(&predicate_capture_ids, , value_id); + } + } + + // Find all of the steps that have these captures. + for ( + unsigned start = pattern->steps.offset, + end = start + pattern->steps.length, + j = start; j < end; j++ + ) { + QueryStep *step = &self->steps.contents[j]; + for (unsigned k = 0; k < MAX_STEP_CAPTURE_COUNT; k++) { + uint16_t capture_id = step->capture_ids[k]; + if (capture_id == NONE) break; + unsigned index, exists; + array_search_sorted_by(&predicate_capture_ids, , capture_id, &index, &exists); + if (exists) { + step->root_pattern_guaranteed = false; + break; + } + } + } + } + + // Propagate fallibility. If a pattern is fallible at a given step, then it is + // fallible at all of its preceding steps. + bool done = self->steps.size == 0; + while (!done) { + done = true; + for (unsigned i = self->steps.size - 1; i > 0; i--) { + QueryStep *step = &self->steps.contents[i]; + if (step->depth == PATTERN_DONE_MARKER) continue; + + // Determine if this step is definite or has definite alternatives. + bool parent_pattern_guaranteed = false; + for (;;) { + if (step->root_pattern_guaranteed) { + parent_pattern_guaranteed = true; + break; + } + if (step->alternative_index == NONE || step->alternative_index < i) { + break; + } + step = &self->steps.contents[step->alternative_index]; + } + + // If not, mark its predecessor as indefinite. + if (!parent_pattern_guaranteed) { + QueryStep *prev_step = &self->steps.contents[i - 1]; + if ( + !prev_step->is_dead_end && + prev_step->depth != PATTERN_DONE_MARKER && + prev_step->root_pattern_guaranteed + ) { + prev_step->root_pattern_guaranteed = false; + done = false; + } + } + } + } + + #ifdef DEBUG_ANALYZE_QUERY + printf("Steps:\n"); + for (unsigned i = 0; i < self->steps.size; i++) { + QueryStep *step = &self->steps.contents[i]; + if (step->depth == PATTERN_DONE_MARKER) { + printf(" %u: DONE\n", i); + } else { + printf( + " %u: {symbol: %s, field: %s, depth: %u, parent_pattern_guaranteed: %d, root_pattern_guaranteed: %d}\n", + i, + (step->symbol == WILDCARD_SYMBOL) + ? "ANY" + : ts_language_symbol_name(self->language, step->symbol), + (step->field ? ts_language_field_name_for_id(self->language, step->field) : "-"), + step->depth, + step->parent_pattern_guaranteed, + step->root_pattern_guaranteed + ); + } + } + #endif + + // Determine which repetition symbols in this language have the possibility + // of matching non-rooted patterns in this query. These repetition symbols + // prevent certain optimizations with range restrictions. + analysis.did_abort = false; + for (uint32_t i = 0; i < non_rooted_pattern_start_steps.size; i++) { + uint16_t pattern_entry_index = non_rooted_pattern_start_steps.contents[i]; + PatternEntry *pattern_entry = &self->pattern_map.contents[pattern_entry_index]; + + analysis_state_set__clear(&analysis.states, &analysis.state_pool); + analysis_state_set__clear(&analysis.deeper_states, &analysis.state_pool); + for (unsigned j = 0; j < subgraphs.size; j++) { + AnalysisSubgraph *subgraph = &subgraphs.contents[j]; + TSSymbolMetadata metadata = ts_language_symbol_metadata(self->language, subgraph->symbol); + if (metadata.visible || metadata.named) continue; + + for (uint32_t k = 0; k < subgraph->start_states.size; k++) { + TSStateId parse_state = subgraph->start_states.contents[k]; + analysis_state_set__push(&analysis.states, &analysis.state_pool, &((AnalysisState) { + .step_index = pattern_entry->step_index, + .stack = { + [0] = { + .parse_state = parse_state, + .parent_symbol = subgraph->symbol, + .child_index = 0, + .field_id = 0, + .done = false, + }, + }, + .root_symbol = subgraph->symbol, + .depth = 1, + })); + } + } + + #ifdef DEBUG_ANALYZE_QUERY + printf("\nWalk states for rootless pattern step %u:\n", pattern_entry->step_index); + #endif + + ts_query__perform_analysis( + self, + &subgraphs, + &analysis + ); + + if (analysis.finished_parent_symbols.size > 0) { + self->patterns.contents[pattern_entry->pattern_index].is_non_local = true; + } + + for (unsigned k = 0; k < analysis.finished_parent_symbols.size; k++) { + TSSymbol symbol = analysis.finished_parent_symbols.contents[k]; + array_insert_sorted_by(&self->repeat_symbols_with_rootless_patterns, , symbol); + } + } + + #ifdef DEBUG_ANALYZE_QUERY + if (self->repeat_symbols_with_rootless_patterns.size > 0) { + printf("\nRepetition symbols with rootless patterns:\n"); + printf("aborted analysis: %d\n", analysis.did_abort); + for (unsigned i = 0; i < self->repeat_symbols_with_rootless_patterns.size; i++) { + TSSymbol symbol = self->repeat_symbols_with_rootless_patterns.contents[i]; + printf(" %u, %s\n", symbol, ts_language_symbol_name(self->language, symbol)); + } + printf("\n"); + } + #endif + + // Cleanup + for (unsigned i = 0; i < subgraphs.size; i++) { + array_delete(&subgraphs.contents[i].start_states); + array_delete(&subgraphs.contents[i].nodes); + } + array_delete(&subgraphs); + query_analysis__delete(&analysis); + array_delete(&next_nodes); + array_delete(&non_rooted_pattern_start_steps); + array_delete(&parent_step_indices); + array_delete(&predicate_capture_ids); + state_predecessor_map_delete(&predecessor_map); + + return all_patterns_are_valid; +} + +static void ts_query__add_negated_fields( + TSQuery *self, + uint16_t step_index, + TSFieldId *field_ids, + uint16_t field_count +) { + QueryStep *step = &self->steps.contents[step_index]; + + // The negated field array stores a list of field lists, separated by zeros. + // Try to find the start index of an existing list that matches this new list. + bool failed_match = false; + unsigned match_count = 0; + unsigned start_i = 0; + for (unsigned i = 0; i < self->negated_fields.size; i++) { + TSFieldId existing_field_id = self->negated_fields.contents[i]; + + // At each zero value, terminate the match attempt. If we've exactly + // matched the new field list, then reuse this index. Otherwise, + // start over the matching process. + if (existing_field_id == 0) { + if (match_count == field_count) { + step->negated_field_list_id = start_i; + return; + } else { + start_i = i + 1; + match_count = 0; + failed_match = false; + } + } + + // If the existing list matches our new list so far, then advance + // to the next element of the new list. + else if ( + match_count < field_count && + existing_field_id == field_ids[match_count] && + !failed_match + ) { + match_count++; + } + + // Otherwise, this existing list has failed to match. + else { + match_count = 0; + failed_match = true; + } + } + + step->negated_field_list_id = self->negated_fields.size; + array_extend(&self->negated_fields, field_count, field_ids); + array_push(&self->negated_fields, 0); +} + +static TSQueryError ts_query__parse_string_literal( + TSQuery *self, + Stream *stream +) { + const char *string_start = stream->input; + if (stream->next != '"') return TSQueryErrorSyntax; + stream_advance(stream); + const char *prev_position = stream->input; + + bool is_escaped = false; + array_clear(&self->string_buffer); + for (;;) { + if (is_escaped) { + is_escaped = false; + switch (stream->next) { + case 'n': + array_push(&self->string_buffer, '\n'); + break; + case 'r': + array_push(&self->string_buffer, '\r'); + break; + case 't': + array_push(&self->string_buffer, '\t'); + break; + case '0': + array_push(&self->string_buffer, '\0'); + break; + default: + array_extend(&self->string_buffer, stream->next_size, stream->input); + break; + } + prev_position = stream->input + stream->next_size; + } else { + if (stream->next == '\\') { + array_extend(&self->string_buffer, (uint32_t)(stream->input - prev_position), prev_position); + prev_position = stream->input + 1; + is_escaped = true; + } else if (stream->next == '"') { + array_extend(&self->string_buffer, (uint32_t)(stream->input - prev_position), prev_position); + stream_advance(stream); + return TSQueryErrorNone; + } else if (stream->next == '\n') { + stream_reset(stream, string_start); + return TSQueryErrorSyntax; + } + } + if (!stream_advance(stream)) { + stream_reset(stream, string_start); + return TSQueryErrorSyntax; + } + } +} + +// Parse a single predicate associated with a pattern, adding it to the +// query's internal `predicate_steps` array. Predicates are arbitrary +// S-expressions associated with a pattern which are meant to be handled at +// a higher level of abstraction, such as the Rust/JavaScript bindings. They +// can contain '@'-prefixed capture names, double-quoted strings, and bare +// symbols, which also represent strings. +static TSQueryError ts_query__parse_predicate( + TSQuery *self, + Stream *stream +) { + if (!stream_is_ident_start(stream)) return TSQueryErrorSyntax; + const char *predicate_name = stream->input; + stream_scan_identifier(stream); + uint32_t length = (uint32_t)(stream->input - predicate_name); + uint16_t id = symbol_table_insert_name( + &self->predicate_values, + predicate_name, + length + ); + array_push(&self->predicate_steps, ((TSQueryPredicateStep) { + .type = TSQueryPredicateStepTypeString, + .value_id = id, + })); + stream_skip_whitespace(stream); + + for (;;) { + if (stream->next == ')') { + stream_advance(stream); + stream_skip_whitespace(stream); + array_push(&self->predicate_steps, ((TSQueryPredicateStep) { + .type = TSQueryPredicateStepTypeDone, + .value_id = 0, + })); + break; + } + + // Parse an '@'-prefixed capture name + else if (stream->next == '@') { + stream_advance(stream); + + // Parse the capture name + if (!stream_is_ident_start(stream)) return TSQueryErrorSyntax; + const char *capture_name = stream->input; + stream_scan_identifier(stream); + uint32_t capture_length = (uint32_t)(stream->input - capture_name); + + // Add the capture id to the first step of the pattern + int capture_id = symbol_table_id_for_name( + &self->captures, + capture_name, + capture_length + ); + if (capture_id == -1) { + stream_reset(stream, capture_name); + return TSQueryErrorCapture; + } + + array_push(&self->predicate_steps, ((TSQueryPredicateStep) { + .type = TSQueryPredicateStepTypeCapture, + .value_id = capture_id, + })); + } + + // Parse a string literal + else if (stream->next == '"') { + TSQueryError e = ts_query__parse_string_literal(self, stream); + if (e) return e; + uint16_t query_id = symbol_table_insert_name( + &self->predicate_values, + self->string_buffer.contents, + self->string_buffer.size + ); + array_push(&self->predicate_steps, ((TSQueryPredicateStep) { + .type = TSQueryPredicateStepTypeString, + .value_id = query_id, + })); + } + + // Parse a bare symbol + else if (stream_is_ident_start(stream)) { + const char *symbol_start = stream->input; + stream_scan_identifier(stream); + uint32_t symbol_length = (uint32_t)(stream->input - symbol_start); + uint16_t query_id = symbol_table_insert_name( + &self->predicate_values, + symbol_start, + symbol_length + ); + array_push(&self->predicate_steps, ((TSQueryPredicateStep) { + .type = TSQueryPredicateStepTypeString, + .value_id = query_id, + })); + } + + else { + return TSQueryErrorSyntax; + } + + stream_skip_whitespace(stream); + } + + return 0; +} + +// Read one S-expression pattern from the stream, and incorporate it into +// the query's internal state machine representation. For nested patterns, +// this function calls itself recursively. +// +// The caller is responsible for passing in a dedicated CaptureQuantifiers. +// These should not be shared between different calls to ts_query__parse_pattern! +static TSQueryError ts_query__parse_pattern( + TSQuery *self, + Stream *stream, + uint32_t depth, + bool is_immediate, + CaptureQuantifiers *capture_quantifiers +) { + if (stream->next == 0) return TSQueryErrorSyntax; + if (stream->next == ')' || stream->next == ']') return PARENT_DONE; + + const uint32_t starting_step_index = self->steps.size; + + // Store the byte offset of each step in the query. + if ( + self->step_offsets.size == 0 || + array_back(&self->step_offsets)->step_index != starting_step_index + ) { + array_push(&self->step_offsets, ((StepOffset) { + .step_index = starting_step_index, + .byte_offset = stream_offset(stream), + })); + } + + // An open bracket is the start of an alternation. + if (stream->next == '[') { + stream_advance(stream); + stream_skip_whitespace(stream); + + // Parse each branch, and add a placeholder step in between the branches. + Array(uint32_t) branch_step_indices = array_new(); + CaptureQuantifiers branch_capture_quantifiers = capture_quantifiers_new(); + for (;;) { + uint32_t start_index = self->steps.size; + TSQueryError e = ts_query__parse_pattern( + self, + stream, + depth, + is_immediate, + &branch_capture_quantifiers + ); + + if (e == PARENT_DONE) { + if (stream->next == ']' && branch_step_indices.size > 0) { + stream_advance(stream); + break; + } + e = TSQueryErrorSyntax; + } + if (e) { + capture_quantifiers_delete(&branch_capture_quantifiers); + array_delete(&branch_step_indices); + return e; + } + + if (start_index == starting_step_index) { + capture_quantifiers_replace(capture_quantifiers, &branch_capture_quantifiers); + } else { + capture_quantifiers_join_all(capture_quantifiers, &branch_capture_quantifiers); + } + + array_push(&branch_step_indices, start_index); + array_push(&self->steps, query_step__new(0, depth, false)); + capture_quantifiers_clear(&branch_capture_quantifiers); + } + (void)array_pop(&self->steps); + + // For all of the branches except for the last one, add the subsequent branch as an + // alternative, and link the end of the branch to the current end of the steps. + for (unsigned i = 0; i < branch_step_indices.size - 1; i++) { + uint32_t step_index = branch_step_indices.contents[i]; + uint32_t next_step_index = branch_step_indices.contents[i + 1]; + QueryStep *start_step = &self->steps.contents[step_index]; + QueryStep *end_step = &self->steps.contents[next_step_index - 1]; + start_step->alternative_index = next_step_index; + end_step->alternative_index = self->steps.size; + end_step->is_dead_end = true; + } + + capture_quantifiers_delete(&branch_capture_quantifiers); + array_delete(&branch_step_indices); + } + + // An open parenthesis can be the start of three possible constructs: + // * A grouped sequence + // * A predicate + // * A named node + else if (stream->next == '(') { + stream_advance(stream); + stream_skip_whitespace(stream); + + // If this parenthesis is followed by a node, then it represents a grouped sequence. + if (stream->next == '(' || stream->next == '"' || stream->next == '[') { + bool child_is_immediate = is_immediate; + CaptureQuantifiers child_capture_quantifiers = capture_quantifiers_new(); + for (;;) { + if (stream->next == '.') { + child_is_immediate = true; + stream_advance(stream); + stream_skip_whitespace(stream); + } + TSQueryError e = ts_query__parse_pattern( + self, + stream, + depth, + child_is_immediate, + &child_capture_quantifiers + ); + if (e == PARENT_DONE) { + if (stream->next == ')') { + stream_advance(stream); + break; + } + e = TSQueryErrorSyntax; + } + if (e) { + capture_quantifiers_delete(&child_capture_quantifiers); + return e; + } + + capture_quantifiers_add_all(capture_quantifiers, &child_capture_quantifiers); + capture_quantifiers_clear(&child_capture_quantifiers); + child_is_immediate = false; + } + + capture_quantifiers_delete(&child_capture_quantifiers); + } + + // A dot/pound character indicates the start of a predicate. + else if (stream->next == '.' || stream->next == '#') { + stream_advance(stream); + return ts_query__parse_predicate(self, stream); + } + + // Otherwise, this parenthesis is the start of a named node. + else { + TSSymbol symbol; + + // Parse a normal node name + if (stream_is_ident_start(stream)) { + const char *node_name = stream->input; + stream_scan_identifier(stream); + uint32_t length = (uint32_t)(stream->input - node_name); + + // Parse the wildcard symbol + if (length == 1 && node_name[0] == '_') { + symbol = WILDCARD_SYMBOL; + } + + else { + symbol = ts_language_symbol_for_name( + self->language, + node_name, + length, + true + ); + if (!symbol) { + stream_reset(stream, node_name); + return TSQueryErrorNodeType; + } + } + } else { + return TSQueryErrorSyntax; + } + + // Add a step for the node. + array_push(&self->steps, query_step__new(symbol, depth, is_immediate)); + QueryStep *step = array_back(&self->steps); + if (ts_language_symbol_metadata(self->language, symbol).supertype) { + step->supertype_symbol = step->symbol; + step->symbol = WILDCARD_SYMBOL; + } + if (symbol == WILDCARD_SYMBOL) { + step->is_named = true; + } + + stream_skip_whitespace(stream); + + if (stream->next == '/') { + stream_advance(stream); + if (!stream_is_ident_start(stream)) { + return TSQueryErrorSyntax; + } + + const char *node_name = stream->input; + stream_scan_identifier(stream); + uint32_t length = (uint32_t)(stream->input - node_name); + + step->symbol = ts_language_symbol_for_name( + self->language, + node_name, + length, + true + ); + if (!step->symbol) { + stream_reset(stream, node_name); + return TSQueryErrorNodeType; + } + + stream_skip_whitespace(stream); + } + + // Parse the child patterns + bool child_is_immediate = false; + uint16_t last_child_step_index = 0; + uint16_t negated_field_count = 0; + TSFieldId negated_field_ids[MAX_NEGATED_FIELD_COUNT]; + CaptureQuantifiers child_capture_quantifiers = capture_quantifiers_new(); + for (;;) { + // Parse a negated field assertion + if (stream->next == '!') { + stream_advance(stream); + stream_skip_whitespace(stream); + if (!stream_is_ident_start(stream)) { + capture_quantifiers_delete(&child_capture_quantifiers); + return TSQueryErrorSyntax; + } + const char *field_name = stream->input; + stream_scan_identifier(stream); + uint32_t length = (uint32_t)(stream->input - field_name); + stream_skip_whitespace(stream); + + TSFieldId field_id = ts_language_field_id_for_name( + self->language, + field_name, + length + ); + if (!field_id) { + stream->input = field_name; + capture_quantifiers_delete(&child_capture_quantifiers); + return TSQueryErrorField; + } + + // Keep the field ids sorted. + if (negated_field_count < MAX_NEGATED_FIELD_COUNT) { + negated_field_ids[negated_field_count] = field_id; + negated_field_count++; + } + + continue; + } + + // Parse a sibling anchor + if (stream->next == '.') { + child_is_immediate = true; + stream_advance(stream); + stream_skip_whitespace(stream); + } + + uint16_t step_index = self->steps.size; + TSQueryError e = ts_query__parse_pattern( + self, + stream, + depth + 1, + child_is_immediate, + &child_capture_quantifiers + ); + if (e == PARENT_DONE) { + if (stream->next == ')') { + if (child_is_immediate) { + if (last_child_step_index == 0) { + capture_quantifiers_delete(&child_capture_quantifiers); + return TSQueryErrorSyntax; + } + self->steps.contents[last_child_step_index].is_last_child = true; + } + + if (negated_field_count) { + ts_query__add_negated_fields( + self, + starting_step_index, + negated_field_ids, + negated_field_count + ); + } + + stream_advance(stream); + break; + } + e = TSQueryErrorSyntax; + } + if (e) { + capture_quantifiers_delete(&child_capture_quantifiers); + return e; + } + + capture_quantifiers_add_all(capture_quantifiers, &child_capture_quantifiers); + + last_child_step_index = step_index; + child_is_immediate = false; + capture_quantifiers_clear(&child_capture_quantifiers); + } + capture_quantifiers_delete(&child_capture_quantifiers); + } + } + + // Parse a wildcard pattern + else if (stream->next == '_') { + stream_advance(stream); + stream_skip_whitespace(stream); + + // Add a step that matches any kind of node + array_push(&self->steps, query_step__new(WILDCARD_SYMBOL, depth, is_immediate)); + } + + // Parse a double-quoted anonymous leaf node expression + else if (stream->next == '"') { + const char *string_start = stream->input; + TSQueryError e = ts_query__parse_string_literal(self, stream); + if (e) return e; + + // Add a step for the node + TSSymbol symbol = ts_language_symbol_for_name( + self->language, + self->string_buffer.contents, + self->string_buffer.size, + false + ); + if (!symbol) { + stream_reset(stream, string_start + 1); + return TSQueryErrorNodeType; + } + array_push(&self->steps, query_step__new(symbol, depth, is_immediate)); + } + + // Parse a field-prefixed pattern + else if (stream_is_ident_start(stream)) { + // Parse the field name + const char *field_name = stream->input; + stream_scan_identifier(stream); + uint32_t length = (uint32_t)(stream->input - field_name); + stream_skip_whitespace(stream); + + if (stream->next != ':') { + stream_reset(stream, field_name); + return TSQueryErrorSyntax; + } + stream_advance(stream); + stream_skip_whitespace(stream); + + // Parse the pattern + CaptureQuantifiers field_capture_quantifiers = capture_quantifiers_new(); + TSQueryError e = ts_query__parse_pattern( + self, + stream, + depth, + is_immediate, + &field_capture_quantifiers + ); + if (e) { + capture_quantifiers_delete(&field_capture_quantifiers); + if (e == PARENT_DONE) e = TSQueryErrorSyntax; + return e; + } + + // Add the field name to the first step of the pattern + TSFieldId field_id = ts_language_field_id_for_name( + self->language, + field_name, + length + ); + if (!field_id) { + stream->input = field_name; + return TSQueryErrorField; + } + + uint32_t step_index = starting_step_index; + QueryStep *step = &self->steps.contents[step_index]; + for (;;) { + step->field = field_id; + if ( + step->alternative_index != NONE && + step->alternative_index > step_index && + step->alternative_index < self->steps.size + ) { + step_index = step->alternative_index; + step = &self->steps.contents[step_index]; + } else { + break; + } + } + + capture_quantifiers_add_all(capture_quantifiers, &field_capture_quantifiers); + capture_quantifiers_delete(&field_capture_quantifiers); + } + + else { + return TSQueryErrorSyntax; + } + + stream_skip_whitespace(stream); + + // Parse suffixes modifiers for this pattern + TSQuantifier quantifier = TSQuantifierOne; + for (;;) { + // Parse the one-or-more operator. + if (stream->next == '+') { + quantifier = quantifier_join(TSQuantifierOneOrMore, quantifier); + + stream_advance(stream); + stream_skip_whitespace(stream); + + QueryStep repeat_step = query_step__new(WILDCARD_SYMBOL, depth, false); + repeat_step.alternative_index = starting_step_index; + repeat_step.is_pass_through = true; + repeat_step.alternative_is_immediate = true; + array_push(&self->steps, repeat_step); + } + + // Parse the zero-or-more repetition operator. + else if (stream->next == '*') { + quantifier = quantifier_join(TSQuantifierZeroOrMore, quantifier); + + stream_advance(stream); + stream_skip_whitespace(stream); + + QueryStep repeat_step = query_step__new(WILDCARD_SYMBOL, depth, false); + repeat_step.alternative_index = starting_step_index; + repeat_step.is_pass_through = true; + repeat_step.alternative_is_immediate = true; + array_push(&self->steps, repeat_step); + + // Stop when `step->alternative_index` is `NONE` or it points to + // `repeat_step` or beyond. Note that having just been pushed, + // `repeat_step` occupies slot `self->steps.size - 1`. + QueryStep *step = &self->steps.contents[starting_step_index]; + while (step->alternative_index != NONE && step->alternative_index < self->steps.size - 1) { + step = &self->steps.contents[step->alternative_index]; + } + step->alternative_index = self->steps.size; + } + + // Parse the optional operator. + else if (stream->next == '?') { + quantifier = quantifier_join(TSQuantifierZeroOrOne, quantifier); + + stream_advance(stream); + stream_skip_whitespace(stream); + + QueryStep *step = &self->steps.contents[starting_step_index]; + while (step->alternative_index != NONE && step->alternative_index < self->steps.size) { + step = &self->steps.contents[step->alternative_index]; + } + step->alternative_index = self->steps.size; + } + + // Parse an '@'-prefixed capture pattern + else if (stream->next == '@') { + stream_advance(stream); + if (!stream_is_ident_start(stream)) return TSQueryErrorSyntax; + const char *capture_name = stream->input; + stream_scan_identifier(stream); + uint32_t length = (uint32_t)(stream->input - capture_name); + stream_skip_whitespace(stream); + + // Add the capture id to the first step of the pattern + uint16_t capture_id = symbol_table_insert_name( + &self->captures, + capture_name, + length + ); + + // Add the capture quantifier + capture_quantifiers_add_for_id(capture_quantifiers, capture_id, TSQuantifierOne); + + uint32_t step_index = starting_step_index; + for (;;) { + QueryStep *step = &self->steps.contents[step_index]; + query_step__add_capture(step, capture_id); + if ( + step->alternative_index != NONE && + step->alternative_index > step_index && + step->alternative_index < self->steps.size + ) { + step_index = step->alternative_index; + } else { + break; + } + } + } + + // No more suffix modifiers + else { + break; + } + } + + capture_quantifiers_mul(capture_quantifiers, quantifier); + + return 0; +} + +TSQuery *ts_query_new( + const TSLanguage *language, + const char *source, + uint32_t source_len, + uint32_t *error_offset, + TSQueryError *error_type +) { + if ( + !language || + language->version > TREE_SITTER_LANGUAGE_VERSION || + language->version < TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION + ) { + *error_type = TSQueryErrorLanguage; + return NULL; + } + + TSQuery *self = ts_malloc(sizeof(TSQuery)); + *self = (TSQuery) { + .steps = array_new(), + .pattern_map = array_new(), + .captures = symbol_table_new(), + .capture_quantifiers = array_new(), + .predicate_values = symbol_table_new(), + .predicate_steps = array_new(), + .patterns = array_new(), + .step_offsets = array_new(), + .string_buffer = array_new(), + .negated_fields = array_new(), + .repeat_symbols_with_rootless_patterns = array_new(), + .wildcard_root_pattern_count = 0, + .language = ts_language_copy(language), + }; + + array_push(&self->negated_fields, 0); + + // Parse all of the S-expressions in the given string. + Stream stream = stream_new(source, source_len); + stream_skip_whitespace(&stream); + while (stream.input < stream.end) { + uint32_t pattern_index = self->patterns.size; + uint32_t start_step_index = self->steps.size; + uint32_t start_predicate_step_index = self->predicate_steps.size; + array_push(&self->patterns, ((QueryPattern) { + .steps = (Slice) {.offset = start_step_index}, + .predicate_steps = (Slice) {.offset = start_predicate_step_index}, + .start_byte = stream_offset(&stream), + .is_non_local = false, + })); + CaptureQuantifiers capture_quantifiers = capture_quantifiers_new(); + *error_type = ts_query__parse_pattern(self, &stream, 0, false, &capture_quantifiers); + array_push(&self->steps, query_step__new(0, PATTERN_DONE_MARKER, false)); + + QueryPattern *pattern = array_back(&self->patterns); + pattern->steps.length = self->steps.size - start_step_index; + pattern->predicate_steps.length = self->predicate_steps.size - start_predicate_step_index; + + // If any pattern could not be parsed, then report the error information + // and terminate. + if (*error_type) { + if (*error_type == PARENT_DONE) *error_type = TSQueryErrorSyntax; + *error_offset = stream_offset(&stream); + capture_quantifiers_delete(&capture_quantifiers); + ts_query_delete(self); + return NULL; + } + + // Maintain a list of capture quantifiers for each pattern + array_push(&self->capture_quantifiers, capture_quantifiers); + + // Maintain a map that can look up patterns for a given root symbol. + uint16_t wildcard_root_alternative_index = NONE; + for (;;) { + QueryStep *step = &self->steps.contents[start_step_index]; + + // If a pattern has a wildcard at its root, but it has a non-wildcard child, + // then optimize the matching process by skipping matching the wildcard. + // Later, during the matching process, the query cursor will check that + // there is a parent node, and capture it if necessary. + if (step->symbol == WILDCARD_SYMBOL && step->depth == 0 && !step->field) { + QueryStep *second_step = &self->steps.contents[start_step_index + 1]; + if (second_step->symbol != WILDCARD_SYMBOL && second_step->depth == 1) { + wildcard_root_alternative_index = step->alternative_index; + start_step_index += 1; + step = second_step; + } + } + + // Determine whether the pattern has a single root node. This affects + // decisions about whether or not to start matching the pattern when + // a query cursor has a range restriction or when immediately within an + // error node. + uint32_t start_depth = step->depth; + bool is_rooted = start_depth == 0; + for (uint32_t step_index = start_step_index + 1; step_index < self->steps.size; step_index++) { + QueryStep *child_step = &self->steps.contents[step_index]; + if (child_step->is_dead_end) break; + if (child_step->depth == start_depth) { + is_rooted = false; + break; + } + } + + ts_query__pattern_map_insert(self, step->symbol, (PatternEntry) { + .step_index = start_step_index, + .pattern_index = pattern_index, + .is_rooted = is_rooted + }); + if (step->symbol == WILDCARD_SYMBOL) { + self->wildcard_root_pattern_count++; + } + + // If there are alternatives or options at the root of the pattern, + // then add multiple entries to the pattern map. + if (step->alternative_index != NONE) { + start_step_index = step->alternative_index; + } else if (wildcard_root_alternative_index != NONE) { + start_step_index = wildcard_root_alternative_index; + wildcard_root_alternative_index = NONE; + } else { + break; + } + } + } + + if (!ts_query__analyze_patterns(self, error_offset)) { + *error_type = TSQueryErrorStructure; + ts_query_delete(self); + return NULL; + } + + array_delete(&self->string_buffer); + return self; +} + +void ts_query_delete(TSQuery *self) { + if (self) { + array_delete(&self->steps); + array_delete(&self->pattern_map); + array_delete(&self->predicate_steps); + array_delete(&self->patterns); + array_delete(&self->step_offsets); + array_delete(&self->string_buffer); + array_delete(&self->negated_fields); + array_delete(&self->repeat_symbols_with_rootless_patterns); + ts_language_delete(self->language); + symbol_table_delete(&self->captures); + symbol_table_delete(&self->predicate_values); + for (uint32_t index = 0; index < self->capture_quantifiers.size; index++) { + CaptureQuantifiers *capture_quantifiers = array_get(&self->capture_quantifiers, index); + capture_quantifiers_delete(capture_quantifiers); + } + array_delete(&self->capture_quantifiers); + ts_free(self); + } +} + +uint32_t ts_query_pattern_count(const TSQuery *self) { + return self->patterns.size; +} + +uint32_t ts_query_capture_count(const TSQuery *self) { + return self->captures.slices.size; +} + +uint32_t ts_query_string_count(const TSQuery *self) { + return self->predicate_values.slices.size; +} + +const char *ts_query_capture_name_for_id( + const TSQuery *self, + uint32_t index, + uint32_t *length +) { + return symbol_table_name_for_id(&self->captures, index, length); +} + +TSQuantifier ts_query_capture_quantifier_for_id( + const TSQuery *self, + uint32_t pattern_index, + uint32_t capture_index +) { + CaptureQuantifiers *capture_quantifiers = array_get(&self->capture_quantifiers, pattern_index); + return capture_quantifier_for_id(capture_quantifiers, capture_index); +} + +const char *ts_query_string_value_for_id( + const TSQuery *self, + uint32_t index, + uint32_t *length +) { + return symbol_table_name_for_id(&self->predicate_values, index, length); +} + +const TSQueryPredicateStep *ts_query_predicates_for_pattern( + const TSQuery *self, + uint32_t pattern_index, + uint32_t *step_count +) { + Slice slice = self->patterns.contents[pattern_index].predicate_steps; + *step_count = slice.length; + if (self->predicate_steps.contents == NULL) { + return NULL; + } + return &self->predicate_steps.contents[slice.offset]; +} + +uint32_t ts_query_start_byte_for_pattern( + const TSQuery *self, + uint32_t pattern_index +) { + return self->patterns.contents[pattern_index].start_byte; +} + +bool ts_query_is_pattern_rooted( + const TSQuery *self, + uint32_t pattern_index +) { + for (unsigned i = 0; i < self->pattern_map.size; i++) { + PatternEntry *entry = &self->pattern_map.contents[i]; + if (entry->pattern_index == pattern_index) { + if (!entry->is_rooted) return false; + } + } + return true; +} + +bool ts_query_is_pattern_non_local( + const TSQuery *self, + uint32_t pattern_index +) { + if (pattern_index < self->patterns.size) { + return self->patterns.contents[pattern_index].is_non_local; + } else { + return false; + } +} + +bool ts_query_is_pattern_guaranteed_at_step( + const TSQuery *self, + uint32_t byte_offset +) { + uint32_t step_index = UINT32_MAX; + for (unsigned i = 0; i < self->step_offsets.size; i++) { + StepOffset *step_offset = &self->step_offsets.contents[i]; + if (step_offset->byte_offset > byte_offset) break; + step_index = step_offset->step_index; + } + if (step_index < self->steps.size) { + return self->steps.contents[step_index].root_pattern_guaranteed; + } else { + return false; + } +} + +bool ts_query__step_is_fallible( + const TSQuery *self, + uint16_t step_index +) { + assert((uint32_t)step_index + 1 < self->steps.size); + QueryStep *step = &self->steps.contents[step_index]; + QueryStep *next_step = &self->steps.contents[step_index + 1]; + return ( + next_step->depth != PATTERN_DONE_MARKER && + next_step->depth > step->depth && + !next_step->parent_pattern_guaranteed + ); +} + +void ts_query_disable_capture( + TSQuery *self, + const char *name, + uint32_t length +) { + // Remove capture information for any pattern step that previously + // captured with the given name. + int id = symbol_table_id_for_name(&self->captures, name, length); + if (id != -1) { + for (unsigned i = 0; i < self->steps.size; i++) { + QueryStep *step = &self->steps.contents[i]; + query_step__remove_capture(step, id); + } + } +} + +void ts_query_disable_pattern( + TSQuery *self, + uint32_t pattern_index +) { + // Remove the given pattern from the pattern map. Its steps will still + // be in the `steps` array, but they will never be read. + for (unsigned i = 0; i < self->pattern_map.size; i++) { + PatternEntry *pattern = &self->pattern_map.contents[i]; + if (pattern->pattern_index == pattern_index) { + array_erase(&self->pattern_map, i); + i--; + } + } +} + +/*************** + * QueryCursor + ***************/ + +TSQueryCursor *ts_query_cursor_new(void) { + TSQueryCursor *self = ts_malloc(sizeof(TSQueryCursor)); + *self = (TSQueryCursor) { + .did_exceed_match_limit = false, + .ascending = false, + .halted = false, + .states = array_new(), + .finished_states = array_new(), + .capture_list_pool = capture_list_pool_new(), + .start_byte = 0, + .end_byte = UINT32_MAX, + .start_point = {0, 0}, + .end_point = POINT_MAX, + .max_start_depth = UINT32_MAX, + }; + array_reserve(&self->states, 8); + array_reserve(&self->finished_states, 8); + return self; +} + +void ts_query_cursor_delete(TSQueryCursor *self) { + array_delete(&self->states); + array_delete(&self->finished_states); + ts_tree_cursor_delete(&self->cursor); + capture_list_pool_delete(&self->capture_list_pool); + ts_free(self); +} + +bool ts_query_cursor_did_exceed_match_limit(const TSQueryCursor *self) { + return self->did_exceed_match_limit; +} + +uint32_t ts_query_cursor_match_limit(const TSQueryCursor *self) { + return self->capture_list_pool.max_capture_list_count; +} + +void ts_query_cursor_set_match_limit(TSQueryCursor *self, uint32_t limit) { + self->capture_list_pool.max_capture_list_count = limit; +} + +#ifdef DEBUG_EXECUTE_QUERY +#define LOG(...) fprintf(stderr, __VA_ARGS__) +#else +#define LOG(...) +#endif + +void ts_query_cursor_exec( + TSQueryCursor *self, + const TSQuery *query, + TSNode node +) { + if (query) { + LOG("query steps:\n"); + for (unsigned i = 0; i < query->steps.size; i++) { + QueryStep *step = &query->steps.contents[i]; + LOG(" %u: {", i); + if (step->depth == PATTERN_DONE_MARKER) { + LOG("DONE"); + } else if (step->is_dead_end) { + LOG("dead_end"); + } else if (step->is_pass_through) { + LOG("pass_through"); + } else if (step->symbol != WILDCARD_SYMBOL) { + LOG("symbol: %s", query->language->symbol_names[step->symbol]); + } else { + LOG("symbol: *"); + } + if (step->field) { + LOG(", field: %s", query->language->field_names[step->field]); + } + if (step->alternative_index != NONE) { + LOG(", alternative: %u", step->alternative_index); + } + LOG("},\n"); + } + } + + array_clear(&self->states); + array_clear(&self->finished_states); + ts_tree_cursor_reset(&self->cursor, node); + capture_list_pool_reset(&self->capture_list_pool); + self->on_visible_node = true; + self->next_state_id = 0; + self->depth = 0; + self->ascending = false; + self->halted = false; + self->query = query; + self->did_exceed_match_limit = false; +} + +void ts_query_cursor_set_byte_range( + TSQueryCursor *self, + uint32_t start_byte, + uint32_t end_byte +) { + if (end_byte == 0) { + end_byte = UINT32_MAX; + } + self->start_byte = start_byte; + self->end_byte = end_byte; +} + +void ts_query_cursor_set_point_range( + TSQueryCursor *self, + TSPoint start_point, + TSPoint end_point +) { + if (end_point.row == 0 && end_point.column == 0) { + end_point = POINT_MAX; + } + self->start_point = start_point; + self->end_point = end_point; +} + +// Search through all of the in-progress states, and find the captured +// node that occurs earliest in the document. +static bool ts_query_cursor__first_in_progress_capture( + TSQueryCursor *self, + uint32_t *state_index, + uint32_t *byte_offset, + uint32_t *pattern_index, + bool *root_pattern_guaranteed +) { + bool result = false; + *state_index = UINT32_MAX; + *byte_offset = UINT32_MAX; + *pattern_index = UINT32_MAX; + for (unsigned i = 0; i < self->states.size; i++) { + QueryState *state = &self->states.contents[i]; + if (state->dead) continue; + + const CaptureList *captures = capture_list_pool_get( + &self->capture_list_pool, + state->capture_list_id + ); + if (state->consumed_capture_count >= captures->size) { + continue; + } + + TSNode node = captures->contents[state->consumed_capture_count].node; + if ( + ts_node_end_byte(node) <= self->start_byte || + point_lte(ts_node_end_point(node), self->start_point) + ) { + state->consumed_capture_count++; + i--; + continue; + } + + uint32_t node_start_byte = ts_node_start_byte(node); + if ( + !result || + node_start_byte < *byte_offset || + (node_start_byte == *byte_offset && state->pattern_index < *pattern_index) + ) { + QueryStep *step = &self->query->steps.contents[state->step_index]; + if (root_pattern_guaranteed) { + *root_pattern_guaranteed = step->root_pattern_guaranteed; + } else if (step->root_pattern_guaranteed) { + continue; + } + + result = true; + *state_index = i; + *byte_offset = node_start_byte; + *pattern_index = state->pattern_index; + } + } + return result; +} + +// Determine which node is first in a depth-first traversal +int ts_query_cursor__compare_nodes(TSNode left, TSNode right) { + if (left.id != right.id) { + uint32_t left_start = ts_node_start_byte(left); + uint32_t right_start = ts_node_start_byte(right); + if (left_start < right_start) return -1; + if (left_start > right_start) return 1; + uint32_t left_node_count = ts_node_end_byte(left); + uint32_t right_node_count = ts_node_end_byte(right); + if (left_node_count > right_node_count) return -1; + if (left_node_count < right_node_count) return 1; + } + return 0; +} + +// Determine if either state contains a superset of the other state's captures. +void ts_query_cursor__compare_captures( + TSQueryCursor *self, + QueryState *left_state, + QueryState *right_state, + bool *left_contains_right, + bool *right_contains_left +) { + const CaptureList *left_captures = capture_list_pool_get( + &self->capture_list_pool, + left_state->capture_list_id + ); + const CaptureList *right_captures = capture_list_pool_get( + &self->capture_list_pool, + right_state->capture_list_id + ); + *left_contains_right = true; + *right_contains_left = true; + unsigned i = 0, j = 0; + for (;;) { + if (i < left_captures->size) { + if (j < right_captures->size) { + TSQueryCapture *left = &left_captures->contents[i]; + TSQueryCapture *right = &right_captures->contents[j]; + if (left->node.id == right->node.id && left->index == right->index) { + i++; + j++; + } else { + switch (ts_query_cursor__compare_nodes(left->node, right->node)) { + case -1: + *right_contains_left = false; + i++; + break; + case 1: + *left_contains_right = false; + j++; + break; + default: + *right_contains_left = false; + *left_contains_right = false; + i++; + j++; + break; + } + } + } else { + *right_contains_left = false; + break; + } + } else { + if (j < right_captures->size) { + *left_contains_right = false; + } + break; + } + } +} + +static void ts_query_cursor__add_state( + TSQueryCursor *self, + const PatternEntry *pattern +) { + QueryStep *step = &self->query->steps.contents[pattern->step_index]; + uint32_t start_depth = self->depth - step->depth; + + // Keep the states array in ascending order of start_depth and pattern_index, + // so that it can be processed more efficiently elsewhere. Usually, there is + // no work to do here because of two facts: + // * States with lower start_depth are naturally added first due to the + // order in which nodes are visited. + // * Earlier patterns are naturally added first because of the ordering of the + // pattern_map data structure that's used to initiate matches. + // + // This loop is only needed in cases where two conditions hold: + // * A pattern consists of more than one sibling node, so that its states + // remain in progress after exiting the node that started the match. + // * The first node in the pattern matches against multiple nodes at the + // same depth. + // + // An example of this is the pattern '((comment)* (function))'. If multiple + // `comment` nodes appear in a row, then we may initiate a new state for this + // pattern while another state for the same pattern is already in progress. + // If there are multiple patterns like this in a query, then this loop will + // need to execute in order to keep the states ordered by pattern_index. + uint32_t index = self->states.size; + while (index > 0) { + QueryState *prev_state = &self->states.contents[index - 1]; + if (prev_state->start_depth < start_depth) break; + if (prev_state->start_depth == start_depth) { + // Avoid inserting an unnecessary duplicate state, which would be + // immediately pruned by the longest-match criteria. + if ( + prev_state->pattern_index == pattern->pattern_index && + prev_state->step_index == pattern->step_index + ) return; + if (prev_state->pattern_index <= pattern->pattern_index) break; + } + index--; + } + + LOG( + " start state. pattern:%u, step:%u\n", + pattern->pattern_index, + pattern->step_index + ); + array_insert(&self->states, index, ((QueryState) { + .id = UINT32_MAX, + .capture_list_id = NONE, + .step_index = pattern->step_index, + .pattern_index = pattern->pattern_index, + .start_depth = start_depth, + .consumed_capture_count = 0, + .seeking_immediate_match = true, + .has_in_progress_alternatives = false, + .needs_parent = step->depth == 1, + .dead = false, + })); +} + +// Acquire a capture list for this state. If there are no capture lists left in the +// pool, this will steal the capture list from another existing state, and mark that +// other state as 'dead'. +static CaptureList *ts_query_cursor__prepare_to_capture( + TSQueryCursor *self, + QueryState *state, + unsigned state_index_to_preserve +) { + if (state->capture_list_id == NONE) { + state->capture_list_id = capture_list_pool_acquire(&self->capture_list_pool); + + // If there are no capture lists left in the pool, then terminate whichever + // state has captured the earliest node in the document, and steal its + // capture list. + if (state->capture_list_id == NONE) { + self->did_exceed_match_limit = true; + uint32_t state_index, byte_offset, pattern_index; + if ( + ts_query_cursor__first_in_progress_capture( + self, + &state_index, + &byte_offset, + &pattern_index, + NULL + ) && + state_index != state_index_to_preserve + ) { + LOG( + " abandon state. index:%u, pattern:%u, offset:%u.\n", + state_index, pattern_index, byte_offset + ); + QueryState *other_state = &self->states.contents[state_index]; + state->capture_list_id = other_state->capture_list_id; + other_state->capture_list_id = NONE; + other_state->dead = true; + CaptureList *list = capture_list_pool_get_mut( + &self->capture_list_pool, + state->capture_list_id + ); + array_clear(list); + return list; + } else { + LOG(" ran out of capture lists"); + return NULL; + } + } + } + return capture_list_pool_get_mut(&self->capture_list_pool, state->capture_list_id); +} + +static void ts_query_cursor__capture( + TSQueryCursor *self, + QueryState *state, + QueryStep *step, + TSNode node +) { + if (state->dead) return; + CaptureList *capture_list = ts_query_cursor__prepare_to_capture(self, state, UINT32_MAX); + if (!capture_list) { + state->dead = true; + return; + } + + for (unsigned j = 0; j < MAX_STEP_CAPTURE_COUNT; j++) { + uint16_t capture_id = step->capture_ids[j]; + if (step->capture_ids[j] == NONE) break; + array_push(capture_list, ((TSQueryCapture) { node, capture_id })); + LOG( + " capture node. type:%s, pattern:%u, capture_id:%u, capture_count:%u\n", + ts_node_type(node), + state->pattern_index, + capture_id, + capture_list->size + ); + } +} + +// Duplicate the given state and insert the newly-created state immediately after +// the given state in the `states` array. Ensures that the given state reference is +// still valid, even if the states array is reallocated. +static QueryState *ts_query_cursor__copy_state( + TSQueryCursor *self, + QueryState **state_ref +) { + const QueryState *state = *state_ref; + uint32_t state_index = (uint32_t)(state - self->states.contents); + QueryState copy = *state; + copy.capture_list_id = NONE; + + // If the state has captures, copy its capture list. + if (state->capture_list_id != NONE) { + CaptureList *new_captures = ts_query_cursor__prepare_to_capture(self, ©, state_index); + if (!new_captures) return NULL; + const CaptureList *old_captures = capture_list_pool_get( + &self->capture_list_pool, + state->capture_list_id + ); + array_push_all(new_captures, old_captures); + } + + array_insert(&self->states, state_index + 1, copy); + *state_ref = &self->states.contents[state_index]; + return &self->states.contents[state_index + 1]; +} + +static inline bool ts_query_cursor__should_descend( + TSQueryCursor *self, + bool node_intersects_range +) { + + if (node_intersects_range && self->depth < self->max_start_depth) { + return true; + } + + // If there are in-progress matches whose remaining steps occur + // deeper in the tree, then descend. + for (unsigned i = 0; i < self->states.size; i++) { + QueryState *state = &self->states.contents[i];; + QueryStep *next_step = &self->query->steps.contents[state->step_index]; + if ( + next_step->depth != PATTERN_DONE_MARKER && + state->start_depth + next_step->depth > self->depth + ) { + return true; + } + } + + if (self->depth >= self->max_start_depth) { + return false; + } + + // If the current node is hidden, then a non-rooted pattern might match + // one if its roots inside of this node, and match another of its roots + // as part of a sibling node, so we may need to descend. + if (!self->on_visible_node) { + // Descending into a repetition node outside of the range can be + // expensive, because these nodes can have many visible children. + // Avoid descending into repetition nodes unless we have already + // determined that this query can match rootless patterns inside + // of this type of repetition node. + Subtree subtree = ts_tree_cursor_current_subtree(&self->cursor); + if (ts_subtree_is_repetition(subtree)) { + bool exists; + uint32_t index; + array_search_sorted_by( + &self->query->repeat_symbols_with_rootless_patterns,, + ts_subtree_symbol(subtree), + &index, + &exists + ); + return exists; + } + + return true; + } + + return false; +} + +// Walk the tree, processing patterns until at least one pattern finishes, +// If one or more patterns finish, return `true` and store their states in the +// `finished_states` array. Multiple patterns can finish on the same node. If +// there are no more matches, return `false`. +static inline bool ts_query_cursor__advance( + TSQueryCursor *self, + bool stop_on_definite_step +) { + bool did_match = false; + for (;;) { + if (self->halted) { + while (self->states.size > 0) { + QueryState state = array_pop(&self->states); + capture_list_pool_release( + &self->capture_list_pool, + state.capture_list_id + ); + } + } + + if (did_match || self->halted) return did_match; + + // Exit the current node. + if (self->ascending) { + if (self->on_visible_node) { + LOG( + "leave node. depth:%u, type:%s\n", + self->depth, + ts_node_type(ts_tree_cursor_current_node(&self->cursor)) + ); + + // After leaving a node, remove any states that cannot make further progress. + uint32_t deleted_count = 0; + for (unsigned i = 0, n = self->states.size; i < n; i++) { + QueryState *state = &self->states.contents[i]; + QueryStep *step = &self->query->steps.contents[state->step_index]; + + // If a state completed its pattern inside of this node, but was deferred from finishing + // in order to search for longer matches, mark it as finished. + if ( + step->depth == PATTERN_DONE_MARKER && + (state->start_depth > self->depth || self->depth == 0) + ) { + LOG(" finish pattern %u\n", state->pattern_index); + array_push(&self->finished_states, *state); + did_match = true; + deleted_count++; + } + + // If a state needed to match something within this node, then remove that state + // as it has failed to match. + else if ( + step->depth != PATTERN_DONE_MARKER && + (uint32_t)state->start_depth + (uint32_t)step->depth > self->depth + ) { + LOG( + " failed to match. pattern:%u, step:%u\n", + state->pattern_index, + state->step_index + ); + capture_list_pool_release( + &self->capture_list_pool, + state->capture_list_id + ); + deleted_count++; + } + + else if (deleted_count > 0) { + self->states.contents[i - deleted_count] = *state; + } + } + self->states.size -= deleted_count; + } + + // Leave this node by stepping to its next sibling or to its parent. + switch (ts_tree_cursor_goto_next_sibling_internal(&self->cursor)) { + case TreeCursorStepVisible: + if (!self->on_visible_node) { + self->depth++; + self->on_visible_node = true; + } + self->ascending = false; + break; + case TreeCursorStepHidden: + if (self->on_visible_node) { + self->depth--; + self->on_visible_node = false; + } + self->ascending = false; + break; + default: + if (ts_tree_cursor_goto_parent(&self->cursor)) { + self->depth--; + } else { + LOG("halt at root\n"); + self->halted = true; + } + } + } + + // Enter a new node. + else { + // Get the properties of the current node. + TSNode node = ts_tree_cursor_current_node(&self->cursor); + TSNode parent_node = ts_tree_cursor_parent_node(&self->cursor); + bool parent_precedes_range = !ts_node_is_null(parent_node) && ( + ts_node_end_byte(parent_node) <= self->start_byte || + point_lte(ts_node_end_point(parent_node), self->start_point) + ); + bool parent_follows_range = !ts_node_is_null(parent_node) && ( + ts_node_start_byte(parent_node) >= self->end_byte || + point_gte(ts_node_start_point(parent_node), self->end_point) + ); + bool node_precedes_range = parent_precedes_range || ( + ts_node_end_byte(node) <= self->start_byte || + point_lte(ts_node_end_point(node), self->start_point) + ); + bool node_follows_range = parent_follows_range || ( + ts_node_start_byte(node) >= self->end_byte || + point_gte(ts_node_start_point(node), self->end_point) + ); + bool parent_intersects_range = !parent_precedes_range && !parent_follows_range; + bool node_intersects_range = !node_precedes_range && !node_follows_range; + + if (self->on_visible_node) { + TSSymbol symbol = ts_node_symbol(node); + bool is_named = ts_node_is_named(node); + bool has_later_siblings; + bool has_later_named_siblings; + bool can_have_later_siblings_with_this_field; + TSFieldId field_id = 0; + TSSymbol supertypes[8] = {0}; + unsigned supertype_count = 8; + ts_tree_cursor_current_status( + &self->cursor, + &field_id, + &has_later_siblings, + &has_later_named_siblings, + &can_have_later_siblings_with_this_field, + supertypes, + &supertype_count + ); + LOG( + "enter node. depth:%u, type:%s, field:%s, row:%u state_count:%u, finished_state_count:%u\n", + self->depth, + ts_node_type(node), + ts_language_field_name_for_id(self->query->language, field_id), + ts_node_start_point(node).row, + self->states.size, + self->finished_states.size + ); + + bool node_is_error = symbol == ts_builtin_sym_error; + bool parent_is_error = + !ts_node_is_null(parent_node) && + ts_node_symbol(parent_node) == ts_builtin_sym_error; + + // Add new states for any patterns whose root node is a wildcard. + if (!node_is_error) { + for (unsigned i = 0; i < self->query->wildcard_root_pattern_count; i++) { + PatternEntry *pattern = &self->query->pattern_map.contents[i]; + + // If this node matches the first step of the pattern, then add a new + // state at the start of this pattern. + QueryStep *step = &self->query->steps.contents[pattern->step_index]; + uint32_t start_depth = self->depth - step->depth; + if ( + (pattern->is_rooted ? + node_intersects_range : + (parent_intersects_range && !parent_is_error)) && + (!step->field || field_id == step->field) && + (!step->supertype_symbol || supertype_count > 0) && + (start_depth <= self->max_start_depth) + ) { + ts_query_cursor__add_state(self, pattern); + } + } + } + + // Add new states for any patterns whose root node matches this node. + unsigned i; + if (ts_query__pattern_map_search(self->query, symbol, &i)) { + PatternEntry *pattern = &self->query->pattern_map.contents[i]; + + QueryStep *step = &self->query->steps.contents[pattern->step_index]; + uint32_t start_depth = self->depth - step->depth; + do { + // If this node matches the first step of the pattern, then add a new + // state at the start of this pattern. + if ( + (pattern->is_rooted ? + node_intersects_range : + (parent_intersects_range && !parent_is_error)) && + (!step->field || field_id == step->field) && + (start_depth <= self->max_start_depth) + ) { + ts_query_cursor__add_state(self, pattern); + } + + // Advance to the next pattern whose root node matches this node. + i++; + if (i == self->query->pattern_map.size) break; + pattern = &self->query->pattern_map.contents[i]; + step = &self->query->steps.contents[pattern->step_index]; + } while (step->symbol == symbol); + } + + // Update all of the in-progress states with current node. + for (unsigned j = 0, copy_count = 0; j < self->states.size; j += 1 + copy_count) { + QueryState *state = &self->states.contents[j]; + QueryStep *step = &self->query->steps.contents[state->step_index]; + state->has_in_progress_alternatives = false; + copy_count = 0; + + // Check that the node matches all of the criteria for the next + // step of the pattern. + if ((uint32_t)state->start_depth + (uint32_t)step->depth != self->depth) continue; + + // Determine if this node matches this step of the pattern, and also + // if this node can have later siblings that match this step of the + // pattern. + bool node_does_match = false; + if (step->symbol == WILDCARD_SYMBOL) { + node_does_match = !node_is_error && (is_named || !step->is_named); + } else { + node_does_match = symbol == step->symbol; + } + bool later_sibling_can_match = has_later_siblings; + if ((step->is_immediate && is_named) || state->seeking_immediate_match) { + later_sibling_can_match = false; + } + if (step->is_last_child && has_later_named_siblings) { + node_does_match = false; + } + if (step->supertype_symbol) { + bool has_supertype = false; + for (unsigned k = 0; k < supertype_count; k++) { + if (supertypes[k] == step->supertype_symbol) { + has_supertype = true; + break; + } + } + if (!has_supertype) node_does_match = false; + } + if (step->field) { + if (step->field == field_id) { + if (!can_have_later_siblings_with_this_field) { + later_sibling_can_match = false; + } + } else { + node_does_match = false; + } + } + + if (step->negated_field_list_id) { + TSFieldId *negated_field_ids = &self->query->negated_fields.contents[step->negated_field_list_id]; + for (;;) { + TSFieldId negated_field_id = *negated_field_ids; + if (negated_field_id) { + negated_field_ids++; + if (ts_node_child_by_field_id(node, negated_field_id).id) { + node_does_match = false; + break; + } + } else { + break; + } + } + } + + // Remove states immediately if it is ever clear that they cannot match. + if (!node_does_match) { + if (!later_sibling_can_match) { + LOG( + " discard state. pattern:%u, step:%u\n", + state->pattern_index, + state->step_index + ); + capture_list_pool_release( + &self->capture_list_pool, + state->capture_list_id + ); + array_erase(&self->states, j); + j--; + } + continue; + } + + // Some patterns can match their root node in multiple ways, capturing different + // children. If this pattern step could match later children within the same + // parent, then this query state cannot simply be updated in place. It must be + // split into two states: one that matches this node, and one which skips over + // this node, to preserve the possibility of matching later siblings. + if (later_sibling_can_match && ( + step->contains_captures || + ts_query__step_is_fallible(self->query, state->step_index) + )) { + if (ts_query_cursor__copy_state(self, &state)) { + LOG( + " split state for capture. pattern:%u, step:%u\n", + state->pattern_index, + state->step_index + ); + copy_count++; + } + } + + // If this pattern started with a wildcard, such that the pattern map + // actually points to the *second* step of the pattern, then check + // that the node has a parent, and capture the parent node if necessary. + if (state->needs_parent) { + TSNode parent = ts_tree_cursor_parent_node(&self->cursor); + if (ts_node_is_null(parent)) { + LOG(" missing parent node\n"); + state->dead = true; + } else { + state->needs_parent = false; + QueryStep *skipped_wildcard_step = step; + do { + skipped_wildcard_step--; + } while ( + skipped_wildcard_step->is_dead_end || + skipped_wildcard_step->is_pass_through || + skipped_wildcard_step->depth > 0 + ); + if (skipped_wildcard_step->capture_ids[0] != NONE) { + LOG(" capture wildcard parent\n"); + ts_query_cursor__capture( + self, + state, + skipped_wildcard_step, + parent + ); + } + } + } + + // If the current node is captured in this pattern, add it to the capture list. + if (step->capture_ids[0] != NONE) { + ts_query_cursor__capture(self, state, step, node); + } + + if (state->dead) { + array_erase(&self->states, j); + j--; + continue; + } + + // Advance this state to the next step of its pattern. + state->step_index++; + state->seeking_immediate_match = false; + LOG( + " advance state. pattern:%u, step:%u\n", + state->pattern_index, + state->step_index + ); + + QueryStep *next_step = &self->query->steps.contents[state->step_index]; + if (stop_on_definite_step && next_step->root_pattern_guaranteed) did_match = true; + + // If this state's next step has an alternative step, then copy the state in order + // to pursue both alternatives. The alternative step itself may have an alternative, + // so this is an interactive process. + unsigned end_index = j + 1; + for (unsigned k = j; k < end_index; k++) { + QueryState *child_state = &self->states.contents[k]; + QueryStep *child_step = &self->query->steps.contents[child_state->step_index]; + if (child_step->alternative_index != NONE) { + // A "dead-end" step exists only to add a non-sequential jump into the step sequence, + // via its alternative index. When a state reaches a dead-end step, it jumps straight + // to the step's alternative. + if (child_step->is_dead_end) { + child_state->step_index = child_step->alternative_index; + k--; + continue; + } + + // A "pass-through" step exists only to add a branch into the step sequence, + // via its alternative_index. When a state reaches a pass-through step, it splits + // in order to process the alternative step, and then it advances to the next step. + if (child_step->is_pass_through) { + child_state->step_index++; + k--; + } + + QueryState *copy = ts_query_cursor__copy_state(self, &child_state); + if (copy) { + LOG( + " split state for branch. pattern:%u, from_step:%u, to_step:%u, immediate:%d, capture_count: %u\n", + copy->pattern_index, + copy->step_index, + next_step->alternative_index, + next_step->alternative_is_immediate, + capture_list_pool_get(&self->capture_list_pool, copy->capture_list_id)->size + ); + end_index++; + copy_count++; + copy->step_index = child_step->alternative_index; + if (child_step->alternative_is_immediate) { + copy->seeking_immediate_match = true; + } + } + } + } + } + + for (unsigned j = 0; j < self->states.size; j++) { + QueryState *state = &self->states.contents[j]; + if (state->dead) { + array_erase(&self->states, j); + j--; + continue; + } + + // Enforce the longest-match criteria. When a query pattern contains optional or + // repeated nodes, this is necessary to avoid multiple redundant states, where + // one state has a strict subset of another state's captures. + bool did_remove = false; + for (unsigned k = j + 1; k < self->states.size; k++) { + QueryState *other_state = &self->states.contents[k]; + + // Query states are kept in ascending order of start_depth and pattern_index. + // Since the longest-match criteria is only used for deduping matches of the same + // pattern and root node, we only need to perform pairwise comparisons within a + // small slice of the states array. + if ( + other_state->start_depth != state->start_depth || + other_state->pattern_index != state->pattern_index + ) break; + + bool left_contains_right, right_contains_left; + ts_query_cursor__compare_captures( + self, + state, + other_state, + &left_contains_right, + &right_contains_left + ); + if (left_contains_right) { + if (state->step_index == other_state->step_index) { + LOG( + " drop shorter state. pattern: %u, step_index: %u\n", + state->pattern_index, + state->step_index + ); + capture_list_pool_release(&self->capture_list_pool, other_state->capture_list_id); + array_erase(&self->states, k); + k--; + continue; + } + other_state->has_in_progress_alternatives = true; + } + if (right_contains_left) { + if (state->step_index == other_state->step_index) { + LOG( + " drop shorter state. pattern: %u, step_index: %u\n", + state->pattern_index, + state->step_index + ); + capture_list_pool_release(&self->capture_list_pool, state->capture_list_id); + array_erase(&self->states, j); + j--; + did_remove = true; + break; + } + state->has_in_progress_alternatives = true; + } + } + + // If the state is at the end of its pattern, remove it from the list + // of in-progress states and add it to the list of finished states. + if (!did_remove) { + LOG( + " keep state. pattern: %u, start_depth: %u, step_index: %u, capture_count: %u\n", + state->pattern_index, + state->start_depth, + state->step_index, + capture_list_pool_get(&self->capture_list_pool, state->capture_list_id)->size + ); + QueryStep *next_step = &self->query->steps.contents[state->step_index]; + if (next_step->depth == PATTERN_DONE_MARKER) { + if (state->has_in_progress_alternatives) { + LOG(" defer finishing pattern %u\n", state->pattern_index); + } else { + LOG(" finish pattern %u\n", state->pattern_index); + array_push(&self->finished_states, *state); + array_erase(&self->states, (uint32_t)(state - self->states.contents)); + did_match = true; + j--; + } + } + } + } + } + + if (ts_query_cursor__should_descend(self, node_intersects_range)) { + switch (ts_tree_cursor_goto_first_child_internal(&self->cursor)) { + case TreeCursorStepVisible: + self->depth++; + self->on_visible_node = true; + continue; + case TreeCursorStepHidden: + self->on_visible_node = false; + continue; + default: + break; + } + } + + self->ascending = true; + } + } +} + +bool ts_query_cursor_next_match( + TSQueryCursor *self, + TSQueryMatch *match +) { + if (self->finished_states.size == 0) { + if (!ts_query_cursor__advance(self, false)) { + return false; + } + } + + QueryState *state = &self->finished_states.contents[0]; + if (state->id == UINT32_MAX) state->id = self->next_state_id++; + match->id = state->id; + match->pattern_index = state->pattern_index; + const CaptureList *captures = capture_list_pool_get( + &self->capture_list_pool, + state->capture_list_id + ); + match->captures = captures->contents; + match->capture_count = captures->size; + capture_list_pool_release(&self->capture_list_pool, state->capture_list_id); + array_erase(&self->finished_states, 0); + return true; +} + +void ts_query_cursor_remove_match( + TSQueryCursor *self, + uint32_t match_id +) { + for (unsigned i = 0; i < self->finished_states.size; i++) { + const QueryState *state = &self->finished_states.contents[i]; + if (state->id == match_id) { + capture_list_pool_release( + &self->capture_list_pool, + state->capture_list_id + ); + array_erase(&self->finished_states, i); + return; + } + } + + // Remove unfinished query states as well to prevent future + // captures for a match being removed. + for (unsigned i = 0; i < self->states.size; i++) { + const QueryState *state = &self->states.contents[i]; + if (state->id == match_id) { + capture_list_pool_release( + &self->capture_list_pool, + state->capture_list_id + ); + array_erase(&self->states, i); + return; + } + } +} + +bool ts_query_cursor_next_capture( + TSQueryCursor *self, + TSQueryMatch *match, + uint32_t *capture_index +) { + // The goal here is to return captures in order, even though they may not + // be discovered in order, because patterns can overlap. Search for matches + // until there is a finished capture that is before any unfinished capture. + for (;;) { + // First, find the earliest capture in an unfinished match. + uint32_t first_unfinished_capture_byte; + uint32_t first_unfinished_pattern_index; + uint32_t first_unfinished_state_index; + bool first_unfinished_state_is_definite = false; + ts_query_cursor__first_in_progress_capture( + self, + &first_unfinished_state_index, + &first_unfinished_capture_byte, + &first_unfinished_pattern_index, + &first_unfinished_state_is_definite + ); + + // Then find the earliest capture in a finished match. It must occur + // before the first capture in an *unfinished* match. + QueryState *first_finished_state = NULL; + uint32_t first_finished_capture_byte = first_unfinished_capture_byte; + uint32_t first_finished_pattern_index = first_unfinished_pattern_index; + for (unsigned i = 0; i < self->finished_states.size;) { + QueryState *state = &self->finished_states.contents[i]; + const CaptureList *captures = capture_list_pool_get( + &self->capture_list_pool, + state->capture_list_id + ); + + // Remove states whose captures are all consumed. + if (state->consumed_capture_count >= captures->size) { + capture_list_pool_release( + &self->capture_list_pool, + state->capture_list_id + ); + array_erase(&self->finished_states, i); + continue; + } + + TSNode node = captures->contents[state->consumed_capture_count].node; + + bool node_precedes_range = ( + ts_node_end_byte(node) <= self->start_byte || + point_lte(ts_node_end_point(node), self->start_point) + ); + bool node_follows_range = ( + ts_node_start_byte(node) >= self->end_byte || + point_gte(ts_node_start_point(node), self->end_point) + ); + bool node_outside_of_range = node_precedes_range || node_follows_range; + + // Skip captures that are outside of the cursor's range. + if (node_outside_of_range) { + state->consumed_capture_count++; + continue; + } + + uint32_t node_start_byte = ts_node_start_byte(node); + if ( + node_start_byte < first_finished_capture_byte || + ( + node_start_byte == first_finished_capture_byte && + state->pattern_index < first_finished_pattern_index + ) + ) { + first_finished_state = state; + first_finished_capture_byte = node_start_byte; + first_finished_pattern_index = state->pattern_index; + } + i++; + } + + // If there is finished capture that is clearly before any unfinished + // capture, then return its match, and its capture index. Internally + // record the fact that the capture has been 'consumed'. + QueryState *state; + if (first_finished_state) { + state = first_finished_state; + } else if (first_unfinished_state_is_definite) { + state = &self->states.contents[first_unfinished_state_index]; + } else { + state = NULL; + } + + if (state) { + if (state->id == UINT32_MAX) state->id = self->next_state_id++; + match->id = state->id; + match->pattern_index = state->pattern_index; + const CaptureList *captures = capture_list_pool_get( + &self->capture_list_pool, + state->capture_list_id + ); + match->captures = captures->contents; + match->capture_count = captures->size; + *capture_index = state->consumed_capture_count; + state->consumed_capture_count++; + return true; + } + + if (capture_list_pool_is_empty(&self->capture_list_pool)) { + LOG( + " abandon state. index:%u, pattern:%u, offset:%u.\n", + first_unfinished_state_index, + first_unfinished_pattern_index, + first_unfinished_capture_byte + ); + capture_list_pool_release( + &self->capture_list_pool, + self->states.contents[first_unfinished_state_index].capture_list_id + ); + array_erase(&self->states, first_unfinished_state_index); + } + + // If there are no finished matches that are ready to be returned, then + // continue finding more matches. + if ( + !ts_query_cursor__advance(self, true) && + self->finished_states.size == 0 + ) return false; + } +} + +void ts_query_cursor_set_max_start_depth( + TSQueryCursor *self, + uint32_t max_start_depth +) { + self->max_start_depth = max_start_depth; +} + +#undef LOG diff --git a/parser/nnsrc/reduce_action.h b/parser/nnsrc/reduce_action.h new file mode 100644 index 00000000..0637c24c --- /dev/null +++ b/parser/nnsrc/reduce_action.h @@ -0,0 +1,34 @@ +#ifndef TREE_SITTER_REDUCE_ACTION_H_ +#define TREE_SITTER_REDUCE_ACTION_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "./array.h" +#include "api.h" + +typedef struct { + uint32_t count; + TSSymbol symbol; + int dynamic_precedence; + unsigned short production_id; +} ReduceAction; + +typedef Array(ReduceAction) ReduceActionSet; + +static inline void ts_reduce_action_set_add(ReduceActionSet *self, + ReduceAction new_action) { + for (uint32_t i = 0; i < self->size; i++) { + ReduceAction action = self->contents[i]; + if (action.symbol == new_action.symbol && action.count == new_action.count) + return; + } + array_push(self, new_action); +} + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_REDUCE_ACTION_H_ diff --git a/parser/nnsrc/reusable_node.h b/parser/nnsrc/reusable_node.h new file mode 100644 index 00000000..63fe3c1a --- /dev/null +++ b/parser/nnsrc/reusable_node.h @@ -0,0 +1,95 @@ +#include "./subtree.h" + +typedef struct { + Subtree tree; + uint32_t child_index; + uint32_t byte_offset; +} StackEntry; + +typedef struct { + Array(StackEntry) stack; + Subtree last_external_token; +} ReusableNode; + +static inline ReusableNode reusable_node_new(void) { + return (ReusableNode) {array_new(), NULL_SUBTREE}; +} + +static inline void reusable_node_clear(ReusableNode *self) { + array_clear(&self->stack); + self->last_external_token = NULL_SUBTREE; +} + +static inline Subtree reusable_node_tree(ReusableNode *self) { + return self->stack.size > 0 + ? self->stack.contents[self->stack.size - 1].tree + : NULL_SUBTREE; +} + +static inline uint32_t reusable_node_byte_offset(ReusableNode *self) { + return self->stack.size > 0 + ? self->stack.contents[self->stack.size - 1].byte_offset + : UINT32_MAX; +} + +static inline void reusable_node_delete(ReusableNode *self) { + array_delete(&self->stack); +} + +static inline void reusable_node_advance(ReusableNode *self) { + StackEntry last_entry = *array_back(&self->stack); + uint32_t byte_offset = last_entry.byte_offset + ts_subtree_total_bytes(last_entry.tree); + if (ts_subtree_has_external_tokens(last_entry.tree)) { + self->last_external_token = ts_subtree_last_external_token(last_entry.tree); + } + + Subtree tree; + uint32_t next_index; + do { + StackEntry popped_entry = array_pop(&self->stack); + next_index = popped_entry.child_index + 1; + if (self->stack.size == 0) return; + tree = array_back(&self->stack)->tree; + } while (ts_subtree_child_count(tree) <= next_index); + + array_push(&self->stack, ((StackEntry) { + .tree = ts_subtree_children(tree)[next_index], + .child_index = next_index, + .byte_offset = byte_offset, + })); +} + +static inline bool reusable_node_descend(ReusableNode *self) { + StackEntry last_entry = *array_back(&self->stack); + if (ts_subtree_child_count(last_entry.tree) > 0) { + array_push(&self->stack, ((StackEntry) { + .tree = ts_subtree_children(last_entry.tree)[0], + .child_index = 0, + .byte_offset = last_entry.byte_offset, + })); + return true; + } else { + return false; + } +} + +static inline void reusable_node_advance_past_leaf(ReusableNode *self) { + while (reusable_node_descend(self)) {} + reusable_node_advance(self); +} + +static inline void reusable_node_reset(ReusableNode *self, Subtree tree) { + reusable_node_clear(self); + array_push(&self->stack, ((StackEntry) { + .tree = tree, + .child_index = 0, + .byte_offset = 0, + })); + + // Never reuse the root node, because it has a non-standard internal structure + // due to transformations that are applied when it is accepted: adding the EOF + // child and any extra children. + if (!reusable_node_descend(self)) { + reusable_node_clear(self); + } +} diff --git a/parser/nnsrc/scanner.c b/parser/nnsrc/scanner.c new file mode 100644 index 00000000..1ed67ff3 --- /dev/null +++ b/parser/nnsrc/scanner.c @@ -0,0 +1,1241 @@ +#include "array.h" +#include "parser.h" + +#include +#include +#include +#include + +enum TokenType +{ + HEREDOC_START, + SIMPLE_HEREDOC_BODY, + HEREDOC_BODY_BEGINNING, + HEREDOC_CONTENT, + HEREDOC_END, + FILE_DESCRIPTOR, + EMPTY_VALUE, + CONCAT, + VARIABLE_NAME, + REGEX, + EXPANSION_WORD, + EXTGLOB_PATTERN, + BARE_DOLLAR, + IMMEDIATE_DOUBLE_HASH, + HEREDOC_ARROW, + HEREDOC_ARROW_DASH, + NEWLINE, + OPENING_PAREN, + ESAC, + ERROR_RECOVERY, +}; +// enum TokenType { +// HEREDOC_START, +// SIMPLE_HEREDOC_BODY, +// HEREDOC_BODY_BEGINNING, +// HEREDOC_CONTENT, +// HEREDOC_END, +// FILE_DESCRIPTOR, +// EMPTY_VALUE, +// CONCAT, +// VARIABLE_NAME, +// TEST_OPERATOR, +// REGEX, +// REGEX_NO_SLASH, +// REGEX_NO_SPACE, +// EXPANSION_WORD, +// EXTGLOB_PATTERN, +// BARE_DOLLAR, +// BRACE_START, +// IMMEDIATE_DOUBLE_HASH, +// EXTERNAL_EXPANSION_SYM_HASH, +// EXTERNAL_EXPANSION_SYM_BANG, +// EXTERNAL_EXPANSION_SYM_EQUAL, +// CLOSING_BRACE, +// CLOSING_BRACKET, +// HEREDOC_ARROW, +// HEREDOC_ARROW_DASH, +// NEWLINE, +// OPENING_PAREN, +// ESAC, +// ERROR_RECOVERY, +// }; + +typedef Array(char) String; + +typedef struct +{ + bool is_raw; + bool started; + bool allows_indent; + String delimiter; + String current_leading_word; +} Heredoc; + +#define heredoc_new() \ + { \ + .is_raw = false, \ + .started = false, \ + .allows_indent = false, \ + .delimiter = array_new(), \ + .current_leading_word = array_new(), \ + }; + +typedef struct +{ + uint8_t last_glob_paren_depth; + bool ext_was_in_double_quote; + bool ext_saw_outside_quote; + Array(Heredoc) heredocs; +} Scanner; + +static inline void advance(TSLexer *lexer) +{ + lexer->advance(lexer, false); +} + +static inline void skip(TSLexer *lexer) +{ + lexer->advance(lexer, true); +} + +static inline bool in_error_recovery(const bool *valid_symbols) +{ + return valid_symbols[ERROR_RECOVERY]; +} + +static inline void reset_string(String *string) +{ + if (string->size > 0) + { + memset(string->contents, 0, string->size); + array_clear(string); + } +} + +static inline void reset_heredoc(Heredoc *heredoc) +{ + heredoc->is_raw = false; + heredoc->started = false; + heredoc->allows_indent = false; + reset_string(&heredoc->delimiter); +} + +static inline void reset(Scanner *scanner) +{ + for (uint32_t i = 0; i < scanner->heredocs.size; i++) + { + reset_heredoc(array_get(&scanner->heredocs, i)); + } +} + +static unsigned serialize(Scanner *scanner, char *buffer) +{ + uint32_t size = 0; + + buffer[size++] = (char)scanner->last_glob_paren_depth; + buffer[size++] = (char)scanner->ext_was_in_double_quote; + buffer[size++] = (char)scanner->ext_saw_outside_quote; + buffer[size++] = (char)scanner->heredocs.size; + + for (uint32_t i = 0; i < scanner->heredocs.size; i++) + { + Heredoc *heredoc = array_get(&scanner->heredocs, i); + if (heredoc->delimiter.size + 3 + size >= TREE_SITTER_SERIALIZATION_BUFFER_SIZE) + { + return 0; + } + + buffer[size++] = (char)heredoc->is_raw; + buffer[size++] = (char)heredoc->started; + buffer[size++] = (char)heredoc->allows_indent; + + memcpy(&buffer[size], &heredoc->delimiter.size, sizeof(uint32_t)); + size += sizeof(uint32_t); + if (heredoc->delimiter.size > 0) + { + memcpy(&buffer[size], heredoc->delimiter.contents, heredoc->delimiter.size); + size += heredoc->delimiter.size; + } + } + return size; +} + +static void deserialize(Scanner *scanner, const char *buffer, unsigned length) +{ + if (length == 0) + { + reset(scanner); + } + else + { + uint32_t size = 0; + scanner->last_glob_paren_depth = buffer[size++]; + scanner->ext_was_in_double_quote = buffer[size++]; + scanner->ext_saw_outside_quote = buffer[size++]; + uint32_t heredoc_count = (unsigned char)buffer[size++]; + for (uint32_t i = 0; i < heredoc_count; i++) + { + Heredoc *heredoc = NULL; + if (i < scanner->heredocs.size) + { + heredoc = array_get(&scanner->heredocs, i); + } + else + { + Heredoc new_heredoc = heredoc_new(); + array_push(&scanner->heredocs, new_heredoc); + heredoc = array_back(&scanner->heredocs); + } + + heredoc->is_raw = buffer[size++]; + heredoc->started = buffer[size++]; + heredoc->allows_indent = buffer[size++]; + + memcpy(&heredoc->delimiter.size, &buffer[size], sizeof(uint32_t)); + size += sizeof(uint32_t); + array_reserve(&heredoc->delimiter, heredoc->delimiter.size); + + if (heredoc->delimiter.size > 0) + { + memcpy(heredoc->delimiter.contents, &buffer[size], heredoc->delimiter.size); + size += heredoc->delimiter.size; + } + } + assert(size == length); + } +} + +/** + * Consume a "word" in POSIX parlance, and returns it unquoted. + * + * This is an approximate implementation that doesn't deal with any + * POSIX-mandated substitution, and assumes the default value for + * IFS. + */ +static bool advance_word(TSLexer *lexer, String *unquoted_word) +{ + bool empty = true; + int32_t quote = 0; + + if (lexer->lookahead == '\'' || lexer->lookahead == '"') + { + quote = lexer->lookahead; + advance(lexer); + } + + while (lexer->lookahead && + !(quote ? lexer->lookahead == quote || lexer->lookahead == '\r' || lexer->lookahead == '\n' : iswspace(lexer->lookahead))) + { + if (lexer->lookahead == '\\') + { + advance(lexer); + if (!lexer->lookahead) + return false; + } + empty = false; + array_push(unquoted_word, lexer->lookahead); + advance(lexer); + } + array_push(unquoted_word, '\0'); + + if (quote && lexer->lookahead == quote) + advance(lexer); + + return !empty; +} + +static inline bool scan_bare_dollar(TSLexer *lexer) +{ + while (iswspace(lexer->lookahead) && lexer->lookahead != '\n' && !lexer->eof(lexer)) + skip(lexer); + + if (lexer->lookahead == '$') + { + advance(lexer); + lexer->result_symbol = BARE_DOLLAR; + lexer->mark_end(lexer); + return (iswspace(lexer->lookahead) || lexer->eof(lexer) || lexer->lookahead == '\"'); + } + + return false; +} + +static bool scan_heredoc_start(Heredoc *heredoc, TSLexer *lexer) +{ + while (iswspace(lexer->lookahead)) + { + skip(lexer); + } + + lexer->result_symbol = HEREDOC_START; + heredoc->is_raw = lexer->lookahead == '\'' || lexer->lookahead == '"' || lexer->lookahead == '\\'; + + bool found_delimiter = advance_word(lexer, &heredoc->delimiter); + if (!found_delimiter) + { + reset_string(&heredoc->delimiter); + return false; + } + return found_delimiter; +} + +static bool scan_heredoc_end_identifier(Heredoc *heredoc, TSLexer *lexer) +{ + reset_string(&heredoc->current_leading_word); + // Scan the first 'n' characters on this line, to see if they match the + // heredoc delimiter + int32_t size = 0; + if (heredoc->delimiter.size > 0) + { + while (lexer->lookahead != '\0' && lexer->lookahead != '\n' && (int32_t)*array_get(&heredoc->delimiter, size) == lexer->lookahead && + heredoc->current_leading_word.size < heredoc->delimiter.size) + { + array_push(&heredoc->current_leading_word, lexer->lookahead); + advance(lexer); + size++; + } + } + array_push(&heredoc->current_leading_word, '\0'); + return heredoc->delimiter.size == 0 ? false : strcmp(heredoc->current_leading_word.contents, heredoc->delimiter.contents) == 0; +} + +static bool scan_heredoc_content(Scanner *scanner, TSLexer *lexer, enum TokenType middle_type, enum TokenType end_type) +{ + bool did_advance = false; + Heredoc *heredoc = array_back(&scanner->heredocs); + + for (;;) + { + switch (lexer->lookahead) + { + case '\0': { + if (lexer->eof(lexer) && did_advance) + { + reset_heredoc(heredoc); + lexer->result_symbol = end_type; + return true; + } + return false; + } + + case '\\': { + did_advance = true; + advance(lexer); + advance(lexer); + break; + } + + case '$': { + if (heredoc->is_raw) + { + did_advance = true; + advance(lexer); + break; + } + if (did_advance) + { + lexer->mark_end(lexer); + lexer->result_symbol = middle_type; + heredoc->started = true; + advance(lexer); + if (iswalpha(lexer->lookahead) || lexer->lookahead == '{' || lexer->lookahead == '(') + { + return true; + } + break; + } + if (middle_type == HEREDOC_BODY_BEGINNING && lexer->get_column(lexer) == 0) + { + lexer->result_symbol = middle_type; + heredoc->started = true; + return true; + } + return false; + } + + case '\n': { + if (!did_advance) + { + skip(lexer); + } + else + { + advance(lexer); + } + did_advance = true; + if (heredoc->allows_indent) + { + while (iswspace(lexer->lookahead)) + { + advance(lexer); + } + } + lexer->result_symbol = heredoc->started ? middle_type : end_type; + lexer->mark_end(lexer); + if (scan_heredoc_end_identifier(heredoc, lexer)) + { + if (lexer->result_symbol == HEREDOC_END) + { + (void)array_pop(&scanner->heredocs); + } + return true; + } + break; + } + + default: { + if (lexer->get_column(lexer) == 0) + { + // an alternative is to check the starting column of the + // heredoc body and track that statefully + while (iswspace(lexer->lookahead)) + { + if (did_advance) + { + advance(lexer); + } + else + { + skip(lexer); + } + } + if (end_type != SIMPLE_HEREDOC_BODY) + { + lexer->result_symbol = middle_type; + if (scan_heredoc_end_identifier(heredoc, lexer)) + { + return true; + } + } + if (end_type == SIMPLE_HEREDOC_BODY) + { + lexer->result_symbol = end_type; + lexer->mark_end(lexer); + if (scan_heredoc_end_identifier(heredoc, lexer)) + { + return true; + } + } + } + did_advance = true; + advance(lexer); + break; + } + } + } +} + +static bool scan(Scanner *scanner, TSLexer *lexer, const bool *valid_symbols) +{ + if (valid_symbols[CONCAT] && !in_error_recovery(valid_symbols)) + { + if (!(lexer->lookahead == 0 || iswspace(lexer->lookahead) || lexer->lookahead == '>' || lexer->lookahead == '<' || + lexer->lookahead == ')' || lexer->lookahead == '(' || lexer->lookahead == ';' || lexer->lookahead == '&' || + lexer->lookahead == '|')) + { + lexer->result_symbol = CONCAT; + // So for a`b`, we want to return a concat. We check if the + // 2nd backtick has whitespace after it, and if it does we + // return concat. + if (lexer->lookahead == '`') + { + lexer->mark_end(lexer); + advance(lexer); + while (lexer->lookahead != '`' && !lexer->eof(lexer)) + { + advance(lexer); + } + if (lexer->eof(lexer)) + { + return false; + } + if (lexer->lookahead == '`') + { + advance(lexer); + } + return iswspace(lexer->lookahead) || lexer->eof(lexer); + } + // strings w/ expansions that contains escaped quotes or + // backslashes need this to return a concat + if (lexer->lookahead == '\\') + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == '"' || lexer->lookahead == '\'' || lexer->lookahead == '\\') + { + return true; + } + if (lexer->eof(lexer)) + { + return false; + } + } + else + { + return true; + } + } + } + + if (valid_symbols[IMMEDIATE_DOUBLE_HASH] && !in_error_recovery(valid_symbols)) + { + // advance two # and ensure not } after + if (lexer->lookahead == '#') + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == '#') + { + advance(lexer); + if (lexer->lookahead != '}') + { + lexer->result_symbol = IMMEDIATE_DOUBLE_HASH; + lexer->mark_end(lexer); + return true; + } + } + } + } + + if (valid_symbols[EMPTY_VALUE]) + { + if (iswspace(lexer->lookahead) || lexer->eof(lexer) || lexer->lookahead == ';' || lexer->lookahead == '&') + { + lexer->result_symbol = EMPTY_VALUE; + return true; + } + } + + if ((valid_symbols[HEREDOC_BODY_BEGINNING] || valid_symbols[SIMPLE_HEREDOC_BODY]) && scanner->heredocs.size > 0 && + !array_back(&scanner->heredocs)->started && !in_error_recovery(valid_symbols)) + { + return scan_heredoc_content(scanner, lexer, HEREDOC_BODY_BEGINNING, SIMPLE_HEREDOC_BODY); + } + + if (valid_symbols[HEREDOC_END] && scanner->heredocs.size > 0) + { + Heredoc *heredoc = array_back(&scanner->heredocs); + if (scan_heredoc_end_identifier(heredoc, lexer)) + { + array_delete(&heredoc->current_leading_word); + array_delete(&heredoc->delimiter); + (void)array_pop(&scanner->heredocs); + lexer->result_symbol = HEREDOC_END; + return true; + } + } + + if (valid_symbols[HEREDOC_CONTENT] && scanner->heredocs.size > 0 && array_back(&scanner->heredocs)->started && + !in_error_recovery(valid_symbols)) + { + return scan_heredoc_content(scanner, lexer, HEREDOC_CONTENT, HEREDOC_END); + } + + if (valid_symbols[HEREDOC_START] && !in_error_recovery(valid_symbols) && scanner->heredocs.size > 0) + { + return scan_heredoc_start(array_back(&scanner->heredocs), lexer); + } + + if ((valid_symbols[VARIABLE_NAME] || valid_symbols[FILE_DESCRIPTOR] || valid_symbols[HEREDOC_ARROW]) && + !in_error_recovery(valid_symbols)) + { + for (;;) + { + if ((lexer->lookahead == ' ' || lexer->lookahead == '\t' || lexer->lookahead == '\r' || + (lexer->lookahead == '\n' && !valid_symbols[NEWLINE])) && + !valid_symbols[EXPANSION_WORD]) + { + skip(lexer); + } + else if (lexer->lookahead == '\\') + { + skip(lexer); + + if (lexer->eof(lexer)) + { + lexer->mark_end(lexer); + lexer->result_symbol = VARIABLE_NAME; + return true; + } + + if (lexer->lookahead == '\r') + { + skip(lexer); + } + if (lexer->lookahead == '\n') + { + skip(lexer); + } + else + { + if (lexer->lookahead == '\\' && valid_symbols[EXPANSION_WORD]) + { + goto expansion_word; + } + return false; + } + } + else + { + break; + } + } + + // no '*', '@', '?', '-', '$', '0', '_' + if (!valid_symbols[EXPANSION_WORD] && (lexer->lookahead == '*' || lexer->lookahead == '@' || lexer->lookahead == '?' || + lexer->lookahead == '-' || lexer->lookahead == '0' || lexer->lookahead == '_')) + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == '=' || lexer->lookahead == '[' || lexer->lookahead == ':' || lexer->lookahead == '-' || + lexer->lookahead == '%' || lexer->lookahead == '#' || lexer->lookahead == '/') + { + return false; + } + if (valid_symbols[EXTGLOB_PATTERN] && iswspace(lexer->lookahead)) + { + lexer->mark_end(lexer); + lexer->result_symbol = EXTGLOB_PATTERN; + return true; + } + } + + if (valid_symbols[HEREDOC_ARROW] && lexer->lookahead == '<') + { + advance(lexer); + if (lexer->lookahead == '<') + { + advance(lexer); + if (lexer->lookahead == '-') + { + advance(lexer); + Heredoc heredoc = heredoc_new(); + heredoc.allows_indent = true; + array_push(&scanner->heredocs, heredoc); + lexer->result_symbol = HEREDOC_ARROW_DASH; + } + else if (lexer->lookahead == '<' || lexer->lookahead == '=') + { + return false; + } + else + { + Heredoc heredoc = heredoc_new(); + array_push(&scanner->heredocs, heredoc); + lexer->result_symbol = HEREDOC_ARROW; + } + return true; + } + return false; + } + + bool is_number = true; + if (iswdigit(lexer->lookahead)) + { + advance(lexer); + } + else if (iswalpha(lexer->lookahead) || lexer->lookahead == '_') + { + is_number = false; + advance(lexer); + } + else + { + if (lexer->lookahead == '{') + { + goto brace_start; + } + if (valid_symbols[EXPANSION_WORD]) + { + goto expansion_word; + } + if (valid_symbols[EXTGLOB_PATTERN]) + { + goto extglob_pattern; + } + return false; + } + + for (;;) + { + if (iswdigit(lexer->lookahead)) + { + advance(lexer); + } + else if (iswalpha(lexer->lookahead) || lexer->lookahead == '_') + { + is_number = false; + advance(lexer); + } + else + { + break; + } + } + + if (is_number && valid_symbols[FILE_DESCRIPTOR] && (lexer->lookahead == '>' || lexer->lookahead == '<')) + { + lexer->result_symbol = FILE_DESCRIPTOR; + return true; + } + + if (valid_symbols[VARIABLE_NAME]) + { + if (lexer->lookahead == '+') + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == '=' || lexer->lookahead == ':') + { + lexer->result_symbol = VARIABLE_NAME; + return true; + } + return false; + } + if (lexer->lookahead == '/') + { + return false; + } + if (lexer->lookahead == '=' || lexer->lookahead == '[' || + (lexer->lookahead == ':' && + !valid_symbols[OPENING_PAREN]) || // TODO(amaanq): more cases for regular word chars but not variable + // names for function words, only handling : for now? #235 + lexer->lookahead == '%' || + (lexer->lookahead == '#' && !is_number) || lexer->lookahead == '@' || (lexer->lookahead == '-')) + { + lexer->mark_end(lexer); + lexer->result_symbol = VARIABLE_NAME; + return true; + } + + if (lexer->lookahead == '?') + { + lexer->mark_end(lexer); + advance(lexer); + lexer->result_symbol = VARIABLE_NAME; + return iswalpha(lexer->lookahead); + } + } + + return false; + } + + if (valid_symbols[BARE_DOLLAR] && !in_error_recovery(valid_symbols) && scan_bare_dollar(lexer)) + { + return true; + } + + if ((valid_symbols[REGEX]) && !in_error_recovery(valid_symbols)) + { + if (valid_symbols[REGEX]) + { + while (iswspace(lexer->lookahead)) + { + skip(lexer); + } + } + + if ((lexer->lookahead != '"' && lexer->lookahead != '\'') || ((lexer->lookahead == '$' || lexer->lookahead == '\'')) || + (lexer->lookahead == '\'')) + { + typedef struct + { + bool done; + bool advanced_once; + bool found_non_alnumdollarunderdash; + bool last_was_escape; + bool in_single_quote; + uint32_t paren_depth; + uint32_t bracket_depth; + uint32_t brace_depth; + } State; + + if (lexer->lookahead == '$') + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == '(') + { + return false; + } + } + + lexer->mark_end(lexer); + + State state = {false, false, false, false, false, 0, 0, 0}; + while (!state.done) + { + if (state.in_single_quote) + { + if (lexer->lookahead == '\'') + { + state.in_single_quote = false; + advance(lexer); + lexer->mark_end(lexer); + } + } + switch (lexer->lookahead) + { + case '\\': + state.last_was_escape = true; + break; + case '\0': + return false; + case '(': + state.paren_depth++; + state.last_was_escape = false; + break; + case '[': + state.bracket_depth++; + state.last_was_escape = false; + break; + case '{': + if (!state.last_was_escape) + state.brace_depth++; + state.last_was_escape = false; + break; + case ')': + if (state.paren_depth == 0) + state.done = true; + state.paren_depth--; + state.last_was_escape = false; + break; + case ']': + if (state.bracket_depth == 0) + state.done = true; + state.bracket_depth--; + state.last_was_escape = false; + break; + case '}': + if (state.brace_depth == 0) + state.done = true; + state.brace_depth--; + state.last_was_escape = false; + break; + case '\'': + // Enter or exit a single-quoted string. + state.in_single_quote = !state.in_single_quote; + advance(lexer); + state.advanced_once = true; + state.last_was_escape = false; + continue; + default: + state.last_was_escape = false; + break; + } + + if (!state.done) + { + if (valid_symbols[REGEX]) + { + bool was_space = !state.in_single_quote && iswspace(lexer->lookahead); + advance(lexer); + state.advanced_once = true; + if (!was_space || state.paren_depth > 0) + { + lexer->mark_end(lexer); + } + } + } + } + + lexer->result_symbol = REGEX; + if (valid_symbols[REGEX] && !state.advanced_once) + { + return false; + } + return true; + } + } + +extglob_pattern: + if (valid_symbols[EXTGLOB_PATTERN] && !in_error_recovery(valid_symbols)) + { + // first skip ws, then check for ? * + @ ! + while (iswspace(lexer->lookahead)) + { + skip(lexer); + } + + if (lexer->lookahead == '?' || lexer->lookahead == '*' || lexer->lookahead == '+' || lexer->lookahead == '@' || + lexer->lookahead == '!' || lexer->lookahead == '-' || lexer->lookahead == ')' || lexer->lookahead == '\\' || + lexer->lookahead == '.' || lexer->lookahead == '[' || (iswalpha(lexer->lookahead))) + { + if (lexer->lookahead == '\\') + { + advance(lexer); + if ((iswspace(lexer->lookahead) || lexer->lookahead == '"') && lexer->lookahead != '\r' && lexer->lookahead != '\n') + { + advance(lexer); + } + else + { + return false; + } + } + + if (lexer->lookahead == ')' && scanner->last_glob_paren_depth == 0) + { + lexer->mark_end(lexer); + advance(lexer); + + if (iswspace(lexer->lookahead)) + { + return false; + } + } + + lexer->mark_end(lexer); + bool was_non_alpha = !iswalpha(lexer->lookahead); + if (lexer->lookahead != '[') + { + // no esac + if (lexer->lookahead == 'e') + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == 's') + { + advance(lexer); + if (lexer->lookahead == 'a') + { + advance(lexer); + if (lexer->lookahead == 'c') + { + advance(lexer); + if (iswspace(lexer->lookahead)) + { + return false; + } + } + } + } + } + else + { + advance(lexer); + } + } + + // -\w is just a word, find something else special + if (lexer->lookahead == '-') + { + lexer->mark_end(lexer); + advance(lexer); + while (iswalnum(lexer->lookahead)) + { + advance(lexer); + } + + if (lexer->lookahead == ')' || lexer->lookahead == '\\' || lexer->lookahead == '.') + { + return false; + } + lexer->mark_end(lexer); + } + + // case item -) or *) + if (lexer->lookahead == ')' && scanner->last_glob_paren_depth == 0) + { + lexer->mark_end(lexer); + advance(lexer); + if (iswspace(lexer->lookahead)) + { + lexer->result_symbol = EXTGLOB_PATTERN; + return was_non_alpha; + } + } + + if (iswspace(lexer->lookahead)) + { + lexer->mark_end(lexer); + lexer->result_symbol = EXTGLOB_PATTERN; + scanner->last_glob_paren_depth = 0; + return true; + } + + if (lexer->lookahead == '$') + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == '{' || lexer->lookahead == '(') + { + lexer->result_symbol = EXTGLOB_PATTERN; + return true; + } + } + + if (lexer->lookahead == '|') + { + lexer->mark_end(lexer); + advance(lexer); + lexer->result_symbol = EXTGLOB_PATTERN; + return true; + } + + if (!iswalnum(lexer->lookahead) && lexer->lookahead != '(' && lexer->lookahead != '"' && lexer->lookahead != '[' && + lexer->lookahead != '?' && lexer->lookahead != '/' && lexer->lookahead != '\\' && lexer->lookahead != '_' && + lexer->lookahead != '*') + { + return false; + } + + typedef struct + { + bool done; + bool saw_non_alphadot; + uint32_t paren_depth; + uint32_t bracket_depth; + uint32_t brace_depth; + } State; + + State state = {false, was_non_alpha, scanner->last_glob_paren_depth, 0, 0}; + while (!state.done) + { + switch (lexer->lookahead) + { + case '\0': + return false; + case '(': + state.paren_depth++; + break; + case '[': + state.bracket_depth++; + break; + case '{': + state.brace_depth++; + break; + case ')': + if (state.paren_depth == 0) + { + state.done = true; + } + state.paren_depth--; + break; + case ']': + if (state.bracket_depth == 0) + { + state.done = true; + } + state.bracket_depth--; + break; + case '}': + if (state.brace_depth == 0) + { + state.done = true; + } + state.brace_depth--; + break; + } + + if (lexer->lookahead == '|') + { + lexer->mark_end(lexer); + advance(lexer); + if (state.paren_depth == 0 && state.bracket_depth == 0 && state.brace_depth == 0) + { + lexer->result_symbol = EXTGLOB_PATTERN; + return true; + } + } + + if (!state.done) + { + bool was_space = iswspace(lexer->lookahead); + if (lexer->lookahead == '$') + { + lexer->mark_end(lexer); + if (!iswalpha(lexer->lookahead) && lexer->lookahead != '.' && lexer->lookahead != '\\') + { + state.saw_non_alphadot = true; + } + advance(lexer); + if (lexer->lookahead == '(' || lexer->lookahead == '{') + { + lexer->result_symbol = EXTGLOB_PATTERN; + scanner->last_glob_paren_depth = state.paren_depth; + return state.saw_non_alphadot; + } + } + if (was_space) + { + lexer->mark_end(lexer); + lexer->result_symbol = EXTGLOB_PATTERN; + scanner->last_glob_paren_depth = 0; + return state.saw_non_alphadot; + } + if (lexer->lookahead == '"') + { + lexer->mark_end(lexer); + lexer->result_symbol = EXTGLOB_PATTERN; + scanner->last_glob_paren_depth = 0; + return state.saw_non_alphadot; + } + if (lexer->lookahead == '\\') + { + if (!iswalpha(lexer->lookahead) && lexer->lookahead != '.' && lexer->lookahead != '\\') + { + state.saw_non_alphadot = true; + } + advance(lexer); + if (iswspace(lexer->lookahead) || lexer->lookahead == '"') + { + advance(lexer); + } + } + else + { + if (!iswalpha(lexer->lookahead) && lexer->lookahead != '.' && lexer->lookahead != '\\') + { + state.saw_non_alphadot = true; + } + advance(lexer); + } + if (!was_space) + { + lexer->mark_end(lexer); + } + } + } + + lexer->result_symbol = EXTGLOB_PATTERN; + scanner->last_glob_paren_depth = 0; + return state.saw_non_alphadot; + } + scanner->last_glob_paren_depth = 0; + + return false; + } + +expansion_word: + if (valid_symbols[EXPANSION_WORD]) + { + bool advanced_once = false; + bool advance_once_space = false; + for (;;) + { + if (lexer->lookahead == '\"') + { + return false; + } + if (lexer->lookahead == '$') + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == '{' || lexer->lookahead == '(' || lexer->lookahead == '\'' || iswalnum(lexer->lookahead)) + { + lexer->result_symbol = EXPANSION_WORD; + return advanced_once; + } + advanced_once = true; + } + + if (lexer->lookahead == '}') + { + lexer->mark_end(lexer); + lexer->result_symbol = EXPANSION_WORD; + return advanced_once || advance_once_space; + } + + if (lexer->lookahead == '(' && !(advanced_once || advance_once_space)) + { + lexer->mark_end(lexer); + advance(lexer); + while (lexer->lookahead != ')' && !lexer->eof(lexer)) + { + // if we find a $( or ${ assume this is valid and is + // a garbage concatenation of some weird word + an + // expansion + // I wonder where this can fail + if (lexer->lookahead == '$') + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == '{' || lexer->lookahead == '(' || lexer->lookahead == '\'' || iswalnum(lexer->lookahead)) + { + lexer->result_symbol = EXPANSION_WORD; + return advanced_once; + } + advanced_once = true; + } + else + { + advanced_once = advanced_once || !iswspace(lexer->lookahead); + advance_once_space = advance_once_space || iswspace(lexer->lookahead); + advance(lexer); + } + } + lexer->mark_end(lexer); + if (lexer->lookahead == ')') + { + advanced_once = true; + advance(lexer); + lexer->mark_end(lexer); + if (lexer->lookahead == '}') + { + return false; + } + } + else + { + return false; + } + } + + if (lexer->lookahead == '\'') + { + return false; + } + + if (lexer->eof(lexer)) + { + return false; + } + advanced_once = advanced_once || !iswspace(lexer->lookahead); + advance_once_space = advance_once_space || iswspace(lexer->lookahead); + advance(lexer); + } + } + +brace_start: + return false; +} + +void *tree_sitter_sh_external_scanner_create() +{ + Scanner *scanner = calloc(1, sizeof(Scanner)); + array_init(&scanner->heredocs); + return scanner; +} + +bool tree_sitter_sh_external_scanner_scan(void *payload, TSLexer *lexer, const bool *valid_symbols) +{ + Scanner *scanner = (Scanner *)payload; + return scan(scanner, lexer, valid_symbols); +} + +unsigned tree_sitter_sh_external_scanner_serialize(void *payload, char *state) +{ + Scanner *scanner = (Scanner *)payload; + return serialize(scanner, state); +} + +void tree_sitter_sh_external_scanner_deserialize(void *payload, const char *state, unsigned length) +{ + Scanner *scanner = (Scanner *)payload; + deserialize(scanner, state, length); +} + +void tree_sitter_sh_external_scanner_destroy(void *payload) +{ + Scanner *scanner = (Scanner *)payload; + for (size_t i = 0; i < scanner->heredocs.size; i++) + { + Heredoc *heredoc = array_get(&scanner->heredocs, i); + array_delete(&heredoc->current_leading_word); + array_delete(&heredoc->delimiter); + } + array_delete(&scanner->heredocs); + free(scanner); +} diff --git a/parser/nnsrc/stack.c b/parser/nnsrc/stack.c new file mode 100644 index 00000000..98d8c561 --- /dev/null +++ b/parser/nnsrc/stack.c @@ -0,0 +1,899 @@ +#include "./alloc.h" +#include "./language.h" +#include "./subtree.h" +#include "./array.h" +#include "./stack.h" +#include "./length.h" +#include +#include +#include + +#define MAX_LINK_COUNT 8 +#define MAX_NODE_POOL_SIZE 50 +#define MAX_ITERATOR_COUNT 64 + +#if defined _WIN32 && !defined __GNUC__ +#define forceinline __forceinline +#else +#define forceinline static inline __attribute__((always_inline)) +#endif + +typedef struct StackNode StackNode; + +typedef struct { + StackNode *node; + Subtree subtree; + bool is_pending; +} StackLink; + +struct StackNode { + TSStateId state; + Length position; + StackLink links[MAX_LINK_COUNT]; + short unsigned int link_count; + uint32_t ref_count; + unsigned error_cost; + unsigned node_count; + int dynamic_precedence; +}; + +typedef struct { + StackNode *node; + SubtreeArray subtrees; + uint32_t subtree_count; + bool is_pending; +} StackIterator; + +typedef Array(StackNode *) StackNodeArray; + +typedef enum { + StackStatusActive, + StackStatusPaused, + StackStatusHalted, +} StackStatus; + +typedef struct { + StackNode *node; + StackSummary *summary; + unsigned node_count_at_last_error; + Subtree last_external_token; + Subtree lookahead_when_paused; + StackStatus status; +} StackHead; + +struct Stack { + Array(StackHead) heads; + StackSliceArray slices; + Array(StackIterator) iterators; + StackNodeArray node_pool; + StackNode *base_node; + SubtreePool *subtree_pool; +}; + +typedef unsigned StackAction; +enum { + StackActionNone, + StackActionStop = 1, + StackActionPop = 2, +}; + +typedef StackAction (*StackCallback)(void *, const StackIterator *); + +static void stack_node_retain(StackNode *self) { + if (!self) + return; + assert(self->ref_count > 0); + self->ref_count++; + assert(self->ref_count != 0); +} + +static void stack_node_release( + StackNode *self, + StackNodeArray *pool, + SubtreePool *subtree_pool +) { +recur: + assert(self->ref_count != 0); + self->ref_count--; + if (self->ref_count > 0) return; + + StackNode *first_predecessor = NULL; + if (self->link_count > 0) { + for (unsigned i = self->link_count - 1; i > 0; i--) { + StackLink link = self->links[i]; + if (link.subtree.ptr) ts_subtree_release(subtree_pool, link.subtree); + stack_node_release(link.node, pool, subtree_pool); + } + StackLink link = self->links[0]; + if (link.subtree.ptr) ts_subtree_release(subtree_pool, link.subtree); + first_predecessor = self->links[0].node; + } + + if (pool->size < MAX_NODE_POOL_SIZE) { + array_push(pool, self); + } else { + ts_free(self); + } + + if (first_predecessor) { + self = first_predecessor; + goto recur; + } +} + +/// Get the number of nodes in the subtree, for the purpose of measuring +/// how much progress has been made by a given version of the stack. +static uint32_t stack__subtree_node_count(Subtree subtree) { + uint32_t count = ts_subtree_visible_descendant_count(subtree); + if (ts_subtree_visible(subtree)) count++; + + // Count intermediate error nodes even though they are not visible, + // because a stack version's node count is used to check whether it + // has made any progress since the last time it encountered an error. + if (ts_subtree_symbol(subtree) == ts_builtin_sym_error_repeat) count++; + + return count; +} + +static StackNode *stack_node_new( + StackNode *previous_node, + Subtree subtree, + bool is_pending, + TSStateId state, + StackNodeArray *pool +) { + StackNode *node = pool->size > 0 + ? array_pop(pool) + : ts_malloc(sizeof(StackNode)); + *node = (StackNode) { + .ref_count = 1, + .link_count = 0, + .state = state + }; + + if (previous_node) { + node->link_count = 1; + node->links[0] = (StackLink) { + .node = previous_node, + .subtree = subtree, + .is_pending = is_pending, + }; + + node->position = previous_node->position; + node->error_cost = previous_node->error_cost; + node->dynamic_precedence = previous_node->dynamic_precedence; + node->node_count = previous_node->node_count; + + if (subtree.ptr) { + node->error_cost += ts_subtree_error_cost(subtree); + node->position = length_add(node->position, ts_subtree_total_size(subtree)); + node->node_count += stack__subtree_node_count(subtree); + node->dynamic_precedence += ts_subtree_dynamic_precedence(subtree); + } + } else { + node->position = length_zero(); + node->error_cost = 0; + } + + return node; +} + +static bool stack__subtree_is_equivalent(Subtree left, Subtree right) { + if (left.ptr == right.ptr) return true; + if (!left.ptr || !right.ptr) return false; + + // Symbols must match + if (ts_subtree_symbol(left) != ts_subtree_symbol(right)) return false; + + // If both have errors, don't bother keeping both. + if (ts_subtree_error_cost(left) > 0 && ts_subtree_error_cost(right) > 0) return true; + + return ( + ts_subtree_padding(left).bytes == ts_subtree_padding(right).bytes && + ts_subtree_size(left).bytes == ts_subtree_size(right).bytes && + ts_subtree_child_count(left) == ts_subtree_child_count(right) && + ts_subtree_extra(left) == ts_subtree_extra(right) && + ts_subtree_external_scanner_state_eq(left, right) + ); +} + +static void stack_node_add_link( + StackNode *self, + StackLink link, + SubtreePool *subtree_pool +) { + if (link.node == self) return; + + for (int i = 0; i < self->link_count; i++) { + StackLink *existing_link = &self->links[i]; + if (stack__subtree_is_equivalent(existing_link->subtree, link.subtree)) { + // In general, we preserve ambiguities until they are removed from the stack + // during a pop operation where multiple paths lead to the same node. But in + // the special case where two links directly connect the same pair of nodes, + // we can safely remove the ambiguity ahead of time without changing behavior. + if (existing_link->node == link.node) { + if ( + ts_subtree_dynamic_precedence(link.subtree) > + ts_subtree_dynamic_precedence(existing_link->subtree) + ) { + ts_subtree_retain(link.subtree); + ts_subtree_release(subtree_pool, existing_link->subtree); + existing_link->subtree = link.subtree; + self->dynamic_precedence = + link.node->dynamic_precedence + ts_subtree_dynamic_precedence(link.subtree); + } + return; + } + + // If the previous nodes are mergeable, merge them recursively. + if ( + existing_link->node->state == link.node->state && + existing_link->node->position.bytes == link.node->position.bytes && + existing_link->node->error_cost == link.node->error_cost + ) { + for (int j = 0; j < link.node->link_count; j++) { + stack_node_add_link(existing_link->node, link.node->links[j], subtree_pool); + } + int32_t dynamic_precedence = link.node->dynamic_precedence; + if (link.subtree.ptr) { + dynamic_precedence += ts_subtree_dynamic_precedence(link.subtree); + } + if (dynamic_precedence > self->dynamic_precedence) { + self->dynamic_precedence = dynamic_precedence; + } + return; + } + } + } + + if (self->link_count == MAX_LINK_COUNT) return; + + stack_node_retain(link.node); + unsigned node_count = link.node->node_count; + int dynamic_precedence = link.node->dynamic_precedence; + self->links[self->link_count++] = link; + + if (link.subtree.ptr) { + ts_subtree_retain(link.subtree); + node_count += stack__subtree_node_count(link.subtree); + dynamic_precedence += ts_subtree_dynamic_precedence(link.subtree); + } + + if (node_count > self->node_count) self->node_count = node_count; + if (dynamic_precedence > self->dynamic_precedence) self->dynamic_precedence = dynamic_precedence; +} + +static void stack_head_delete( + StackHead *self, + StackNodeArray *pool, + SubtreePool *subtree_pool +) { + if (self->node) { + if (self->last_external_token.ptr) { + ts_subtree_release(subtree_pool, self->last_external_token); + } + if (self->lookahead_when_paused.ptr) { + ts_subtree_release(subtree_pool, self->lookahead_when_paused); + } + if (self->summary) { + array_delete(self->summary); + ts_free(self->summary); + } + stack_node_release(self->node, pool, subtree_pool); + } +} + +static StackVersion ts_stack__add_version( + Stack *self, + StackVersion original_version, + StackNode *node +) { + StackHead head = { + .node = node, + .node_count_at_last_error = self->heads.contents[original_version].node_count_at_last_error, + .last_external_token = self->heads.contents[original_version].last_external_token, + .status = StackStatusActive, + .lookahead_when_paused = NULL_SUBTREE, + }; + array_push(&self->heads, head); + stack_node_retain(node); + if (head.last_external_token.ptr) ts_subtree_retain(head.last_external_token); + return (StackVersion)(self->heads.size - 1); +} + +static void ts_stack__add_slice( + Stack *self, + StackVersion original_version, + StackNode *node, + SubtreeArray *subtrees +) { + for (uint32_t i = self->slices.size - 1; i + 1 > 0; i--) { + StackVersion version = self->slices.contents[i].version; + if (self->heads.contents[version].node == node) { + StackSlice slice = {*subtrees, version}; + array_insert(&self->slices, i + 1, slice); + return; + } + } + + StackVersion version = ts_stack__add_version(self, original_version, node); + StackSlice slice = { *subtrees, version }; + array_push(&self->slices, slice); +} + +static StackSliceArray stack__iter( + Stack *self, + StackVersion version, + StackCallback callback, + void *payload, + int goal_subtree_count +) { + array_clear(&self->slices); + array_clear(&self->iterators); + + StackHead *head = array_get(&self->heads, version); + StackIterator new_iterator = { + .node = head->node, + .subtrees = array_new(), + .subtree_count = 0, + .is_pending = true, + }; + + bool include_subtrees = false; + if (goal_subtree_count >= 0) { + include_subtrees = true; + array_reserve(&new_iterator.subtrees, (uint32_t)ts_subtree_alloc_size(goal_subtree_count) / sizeof(Subtree)); + } + + array_push(&self->iterators, new_iterator); + + while (self->iterators.size > 0) { + for (uint32_t i = 0, size = self->iterators.size; i < size; i++) { + StackIterator *iterator = &self->iterators.contents[i]; + StackNode *node = iterator->node; + + StackAction action = callback(payload, iterator); + bool should_pop = action & StackActionPop; + bool should_stop = action & StackActionStop || node->link_count == 0; + + if (should_pop) { + SubtreeArray subtrees = iterator->subtrees; + if (!should_stop) { + ts_subtree_array_copy(subtrees, &subtrees); + } + ts_subtree_array_reverse(&subtrees); + ts_stack__add_slice( + self, + version, + node, + &subtrees + ); + } + + if (should_stop) { + if (!should_pop) { + ts_subtree_array_delete(self->subtree_pool, &iterator->subtrees); + } + array_erase(&self->iterators, i); + i--, size--; + continue; + } + + for (uint32_t j = 1; j <= node->link_count; j++) { + StackIterator *next_iterator; + StackLink link; + if (j == node->link_count) { + link = node->links[0]; + next_iterator = &self->iterators.contents[i]; + } else { + if (self->iterators.size >= MAX_ITERATOR_COUNT) continue; + link = node->links[j]; + StackIterator current_iterator = self->iterators.contents[i]; + array_push(&self->iterators, current_iterator); + next_iterator = array_back(&self->iterators); + ts_subtree_array_copy(next_iterator->subtrees, &next_iterator->subtrees); + } + + next_iterator->node = link.node; + if (link.subtree.ptr) { + if (include_subtrees) { + array_push(&next_iterator->subtrees, link.subtree); + ts_subtree_retain(link.subtree); + } + + if (!ts_subtree_extra(link.subtree)) { + next_iterator->subtree_count++; + if (!link.is_pending) { + next_iterator->is_pending = false; + } + } + } else { + next_iterator->subtree_count++; + next_iterator->is_pending = false; + } + } + } + } + + return self->slices; +} + +Stack *ts_stack_new(SubtreePool *subtree_pool) { + Stack *self = ts_calloc(1, sizeof(Stack)); + + array_init(&self->heads); + array_init(&self->slices); + array_init(&self->iterators); + array_init(&self->node_pool); + array_reserve(&self->heads, 4); + array_reserve(&self->slices, 4); + array_reserve(&self->iterators, 4); + array_reserve(&self->node_pool, MAX_NODE_POOL_SIZE); + + self->subtree_pool = subtree_pool; + self->base_node = stack_node_new(NULL, NULL_SUBTREE, false, 1, &self->node_pool); + ts_stack_clear(self); + + return self; +} + +void ts_stack_delete(Stack *self) { + if (self->slices.contents) + array_delete(&self->slices); + if (self->iterators.contents) + array_delete(&self->iterators); + stack_node_release(self->base_node, &self->node_pool, self->subtree_pool); + for (uint32_t i = 0; i < self->heads.size; i++) { + stack_head_delete(&self->heads.contents[i], &self->node_pool, self->subtree_pool); + } + array_clear(&self->heads); + if (self->node_pool.contents) { + for (uint32_t i = 0; i < self->node_pool.size; i++) + ts_free(self->node_pool.contents[i]); + array_delete(&self->node_pool); + } + array_delete(&self->heads); + ts_free(self); +} + +uint32_t ts_stack_version_count(const Stack *self) { + return self->heads.size; +} + +TSStateId ts_stack_state(const Stack *self, StackVersion version) { + return array_get(&self->heads, version)->node->state; +} + +Length ts_stack_position(const Stack *self, StackVersion version) { + return array_get(&self->heads, version)->node->position; +} + +Subtree ts_stack_last_external_token(const Stack *self, StackVersion version) { + return array_get(&self->heads, version)->last_external_token; +} + +void ts_stack_set_last_external_token(Stack *self, StackVersion version, Subtree token) { + StackHead *head = array_get(&self->heads, version); + if (token.ptr) ts_subtree_retain(token); + if (head->last_external_token.ptr) ts_subtree_release(self->subtree_pool, head->last_external_token); + head->last_external_token = token; +} + +unsigned ts_stack_error_cost(const Stack *self, StackVersion version) { + StackHead *head = array_get(&self->heads, version); + unsigned result = head->node->error_cost; + if ( + head->status == StackStatusPaused || + (head->node->state == ERROR_STATE && !head->node->links[0].subtree.ptr)) { + result += ERROR_COST_PER_RECOVERY; + } + return result; +} + +unsigned ts_stack_node_count_since_error(const Stack *self, StackVersion version) { + StackHead *head = array_get(&self->heads, version); + if (head->node->node_count < head->node_count_at_last_error) { + head->node_count_at_last_error = head->node->node_count; + } + return head->node->node_count - head->node_count_at_last_error; +} + +void ts_stack_push( + Stack *self, + StackVersion version, + Subtree subtree, + bool pending, + TSStateId state +) { + StackHead *head = array_get(&self->heads, version); + StackNode *new_node = stack_node_new(head->node, subtree, pending, state, &self->node_pool); + if (!subtree.ptr) head->node_count_at_last_error = new_node->node_count; + head->node = new_node; +} + +forceinline StackAction pop_count_callback(void *payload, const StackIterator *iterator) { + unsigned *goal_subtree_count = payload; + if (iterator->subtree_count == *goal_subtree_count) { + return StackActionPop | StackActionStop; + } else { + return StackActionNone; + } +} + +StackSliceArray ts_stack_pop_count(Stack *self, StackVersion version, uint32_t count) { + return stack__iter(self, version, pop_count_callback, &count, (int)count); +} + +forceinline StackAction pop_pending_callback(void *payload, const StackIterator *iterator) { + (void)payload; + if (iterator->subtree_count >= 1) { + if (iterator->is_pending) { + return StackActionPop | StackActionStop; + } else { + return StackActionStop; + } + } else { + return StackActionNone; + } +} + +StackSliceArray ts_stack_pop_pending(Stack *self, StackVersion version) { + StackSliceArray pop = stack__iter(self, version, pop_pending_callback, NULL, 0); + if (pop.size > 0) { + ts_stack_renumber_version(self, pop.contents[0].version, version); + pop.contents[0].version = version; + } + return pop; +} + +forceinline StackAction pop_error_callback(void *payload, const StackIterator *iterator) { + if (iterator->subtrees.size > 0) { + bool *found_error = payload; + if (!*found_error && ts_subtree_is_error(iterator->subtrees.contents[0])) { + *found_error = true; + return StackActionPop | StackActionStop; + } else { + return StackActionStop; + } + } else { + return StackActionNone; + } +} + +SubtreeArray ts_stack_pop_error(Stack *self, StackVersion version) { + StackNode *node = array_get(&self->heads, version)->node; + for (unsigned i = 0; i < node->link_count; i++) { + if (node->links[i].subtree.ptr && ts_subtree_is_error(node->links[i].subtree)) { + bool found_error = false; + StackSliceArray pop = stack__iter(self, version, pop_error_callback, &found_error, 1); + if (pop.size > 0) { + assert(pop.size == 1); + ts_stack_renumber_version(self, pop.contents[0].version, version); + return pop.contents[0].subtrees; + } + break; + } + } + return (SubtreeArray) {.size = 0}; +} + +forceinline StackAction pop_all_callback(void *payload, const StackIterator *iterator) { + (void)payload; + return iterator->node->link_count == 0 ? StackActionPop : StackActionNone; +} + +StackSliceArray ts_stack_pop_all(Stack *self, StackVersion version) { + return stack__iter(self, version, pop_all_callback, NULL, 0); +} + +typedef struct { + StackSummary *summary; + unsigned max_depth; +} SummarizeStackSession; + +forceinline StackAction summarize_stack_callback(void *payload, const StackIterator *iterator) { + SummarizeStackSession *session = payload; + TSStateId state = iterator->node->state; + unsigned depth = iterator->subtree_count; + if (depth > session->max_depth) return StackActionStop; + for (unsigned i = session->summary->size - 1; i + 1 > 0; i--) { + StackSummaryEntry entry = session->summary->contents[i]; + if (entry.depth < depth) break; + if (entry.depth == depth && entry.state == state) return StackActionNone; + } + array_push(session->summary, ((StackSummaryEntry) { + .position = iterator->node->position, + .depth = depth, + .state = state, + })); + return StackActionNone; +} + +void ts_stack_record_summary(Stack *self, StackVersion version, unsigned max_depth) { + SummarizeStackSession session = { + .summary = ts_malloc(sizeof(StackSummary)), + .max_depth = max_depth + }; + array_init(session.summary); + stack__iter(self, version, summarize_stack_callback, &session, -1); + StackHead *head = &self->heads.contents[version]; + if (head->summary) { + array_delete(head->summary); + ts_free(head->summary); + } + head->summary = session.summary; +} + +StackSummary *ts_stack_get_summary(Stack *self, StackVersion version) { + return array_get(&self->heads, version)->summary; +} + +int ts_stack_dynamic_precedence(Stack *self, StackVersion version) { + return array_get(&self->heads, version)->node->dynamic_precedence; +} + +bool ts_stack_has_advanced_since_error(const Stack *self, StackVersion version) { + const StackHead *head = array_get(&self->heads, version); + const StackNode *node = head->node; + if (node->error_cost == 0) return true; + while (node) { + if (node->link_count > 0) { + Subtree subtree = node->links[0].subtree; + if (subtree.ptr) { + if (ts_subtree_total_bytes(subtree) > 0) { + return true; + } else if ( + node->node_count > head->node_count_at_last_error && + ts_subtree_error_cost(subtree) == 0 + ) { + node = node->links[0].node; + continue; + } + } + } + break; + } + return false; +} + +void ts_stack_remove_version(Stack *self, StackVersion version) { + stack_head_delete(array_get(&self->heads, version), &self->node_pool, self->subtree_pool); + array_erase(&self->heads, version); +} + +void ts_stack_renumber_version(Stack *self, StackVersion v1, StackVersion v2) { + if (v1 == v2) return; + assert(v2 < v1); + assert((uint32_t)v1 < self->heads.size); + StackHead *source_head = &self->heads.contents[v1]; + StackHead *target_head = &self->heads.contents[v2]; + if (target_head->summary && !source_head->summary) { + source_head->summary = target_head->summary; + target_head->summary = NULL; + } + stack_head_delete(target_head, &self->node_pool, self->subtree_pool); + *target_head = *source_head; + array_erase(&self->heads, v1); +} + +void ts_stack_swap_versions(Stack *self, StackVersion v1, StackVersion v2) { + StackHead temporary_head = self->heads.contents[v1]; + self->heads.contents[v1] = self->heads.contents[v2]; + self->heads.contents[v2] = temporary_head; +} + +StackVersion ts_stack_copy_version(Stack *self, StackVersion version) { + assert(version < self->heads.size); + array_push(&self->heads, self->heads.contents[version]); + StackHead *head = array_back(&self->heads); + stack_node_retain(head->node); + if (head->last_external_token.ptr) ts_subtree_retain(head->last_external_token); + head->summary = NULL; + return self->heads.size - 1; +} + +bool ts_stack_merge(Stack *self, StackVersion version1, StackVersion version2) { + if (!ts_stack_can_merge(self, version1, version2)) return false; + StackHead *head1 = &self->heads.contents[version1]; + StackHead *head2 = &self->heads.contents[version2]; + for (uint32_t i = 0; i < head2->node->link_count; i++) { + stack_node_add_link(head1->node, head2->node->links[i], self->subtree_pool); + } + if (head1->node->state == ERROR_STATE) { + head1->node_count_at_last_error = head1->node->node_count; + } + ts_stack_remove_version(self, version2); + return true; +} + +bool ts_stack_can_merge(Stack *self, StackVersion version1, StackVersion version2) { + StackHead *head1 = &self->heads.contents[version1]; + StackHead *head2 = &self->heads.contents[version2]; + return + head1->status == StackStatusActive && + head2->status == StackStatusActive && + head1->node->state == head2->node->state && + head1->node->position.bytes == head2->node->position.bytes && + head1->node->error_cost == head2->node->error_cost && + ts_subtree_external_scanner_state_eq(head1->last_external_token, head2->last_external_token); +} + +void ts_stack_halt(Stack *self, StackVersion version) { + array_get(&self->heads, version)->status = StackStatusHalted; +} + +void ts_stack_pause(Stack *self, StackVersion version, Subtree lookahead) { + StackHead *head = array_get(&self->heads, version); + head->status = StackStatusPaused; + head->lookahead_when_paused = lookahead; + head->node_count_at_last_error = head->node->node_count; +} + +bool ts_stack_is_active(const Stack *self, StackVersion version) { + return array_get(&self->heads, version)->status == StackStatusActive; +} + +bool ts_stack_is_halted(const Stack *self, StackVersion version) { + return array_get(&self->heads, version)->status == StackStatusHalted; +} + +bool ts_stack_is_paused(const Stack *self, StackVersion version) { + return array_get(&self->heads, version)->status == StackStatusPaused; +} + +Subtree ts_stack_resume(Stack *self, StackVersion version) { + StackHead *head = array_get(&self->heads, version); + assert(head->status == StackStatusPaused); + Subtree result = head->lookahead_when_paused; + head->status = StackStatusActive; + head->lookahead_when_paused = NULL_SUBTREE; + return result; +} + +void ts_stack_clear(Stack *self) { + stack_node_retain(self->base_node); + for (uint32_t i = 0; i < self->heads.size; i++) { + stack_head_delete(&self->heads.contents[i], &self->node_pool, self->subtree_pool); + } + array_clear(&self->heads); + array_push(&self->heads, ((StackHead) { + .node = self->base_node, + .status = StackStatusActive, + .last_external_token = NULL_SUBTREE, + .lookahead_when_paused = NULL_SUBTREE, + })); +} + +bool ts_stack_print_dot_graph(Stack *self, const TSLanguage *language, FILE *f) { + array_reserve(&self->iterators, 32); + if (!f) f = stderr; + + fprintf(f, "digraph stack {\n"); + fprintf(f, "rankdir=\"RL\";\n"); + fprintf(f, "edge [arrowhead=none]\n"); + + Array(StackNode *) visited_nodes = array_new(); + + array_clear(&self->iterators); + for (uint32_t i = 0; i < self->heads.size; i++) { + StackHead *head = &self->heads.contents[i]; + if (head->status == StackStatusHalted) continue; + + fprintf(f, "node_head_%u [shape=none, label=\"\"]\n", i); + fprintf(f, "node_head_%u -> node_%p [", i, (void *)head->node); + + if (head->status == StackStatusPaused) { + fprintf(f, "color=red "); + } + fprintf(f, + "label=%u, fontcolor=blue, weight=10000, labeltooltip=\"node_count: %u\nerror_cost: %u", + i, + ts_stack_node_count_since_error(self, i), + ts_stack_error_cost(self, i) + ); + + if (head->summary) { + fprintf(f, "\nsummary:"); + for (uint32_t j = 0; j < head->summary->size; j++) fprintf(f, " %u", head->summary->contents[j].state); + } + + if (head->last_external_token.ptr) { + const ExternalScannerState *state = &head->last_external_token.ptr->external_scanner_state; + const char *data = ts_external_scanner_state_data(state); + fprintf(f, "\nexternal_scanner_state:"); + for (uint32_t j = 0; j < state->length; j++) fprintf(f, " %2X", data[j]); + } + + fprintf(f, "\"]\n"); + array_push(&self->iterators, ((StackIterator) { + .node = head->node + })); + } + + bool all_iterators_done = false; + while (!all_iterators_done) { + all_iterators_done = true; + + for (uint32_t i = 0; i < self->iterators.size; i++) { + StackIterator iterator = self->iterators.contents[i]; + StackNode *node = iterator.node; + + for (uint32_t j = 0; j < visited_nodes.size; j++) { + if (visited_nodes.contents[j] == node) { + node = NULL; + break; + } + } + + if (!node) continue; + all_iterators_done = false; + + fprintf(f, "node_%p [", (void *)node); + if (node->state == ERROR_STATE) { + fprintf(f, "label=\"?\""); + } else if ( + node->link_count == 1 && + node->links[0].subtree.ptr && + ts_subtree_extra(node->links[0].subtree) + ) { + fprintf(f, "shape=point margin=0 label=\"\""); + } else { + fprintf(f, "label=\"%d\"", node->state); + } + + fprintf( + f, + " tooltip=\"position: %u,%u\nnode_count:%u\nerror_cost: %u\ndynamic_precedence: %d\"];\n", + node->position.extent.row + 1, + node->position.extent.column, + node->node_count, + node->error_cost, + node->dynamic_precedence + ); + + for (int j = 0; j < node->link_count; j++) { + StackLink link = node->links[j]; + fprintf(f, "node_%p -> node_%p [", (void *)node, (void *)link.node); + if (link.is_pending) fprintf(f, "style=dashed "); + if (link.subtree.ptr && ts_subtree_extra(link.subtree)) fprintf(f, "fontcolor=gray "); + + if (!link.subtree.ptr) { + fprintf(f, "color=red"); + } else { + fprintf(f, "label=\""); + bool quoted = ts_subtree_visible(link.subtree) && !ts_subtree_named(link.subtree); + if (quoted) fprintf(f, "'"); + ts_language_write_symbol_as_dot_string(language, f, ts_subtree_symbol(link.subtree)); + if (quoted) fprintf(f, "'"); + fprintf(f, "\""); + fprintf( + f, + "labeltooltip=\"error_cost: %u\ndynamic_precedence: %" PRId32 "\"", + ts_subtree_error_cost(link.subtree), + ts_subtree_dynamic_precedence(link.subtree) + ); + } + + fprintf(f, "];\n"); + + StackIterator *next_iterator; + if (j == 0) { + next_iterator = &self->iterators.contents[i]; + } else { + array_push(&self->iterators, iterator); + next_iterator = array_back(&self->iterators); + } + next_iterator->node = link.node; + } + + array_push(&visited_nodes, node); + } + } + + fprintf(f, "}\n"); + + array_delete(&visited_nodes); + return true; +} + +#undef forceinline diff --git a/parser/nnsrc/stack.h b/parser/nnsrc/stack.h new file mode 100644 index 00000000..86abbc9d --- /dev/null +++ b/parser/nnsrc/stack.h @@ -0,0 +1,133 @@ +#ifndef TREE_SITTER_PARSE_STACK_H_ +#define TREE_SITTER_PARSE_STACK_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "./array.h" +#include "./subtree.h" +#include "./error_costs.h" +#include + +typedef struct Stack Stack; + +typedef unsigned StackVersion; +#define STACK_VERSION_NONE ((StackVersion)-1) + +typedef struct { + SubtreeArray subtrees; + StackVersion version; +} StackSlice; +typedef Array(StackSlice) StackSliceArray; + +typedef struct { + Length position; + unsigned depth; + TSStateId state; +} StackSummaryEntry; +typedef Array(StackSummaryEntry) StackSummary; + +// Create a stack. +Stack *ts_stack_new(SubtreePool *); + +// Release the memory reserved for a given stack. +void ts_stack_delete(Stack *); + +// Get the stack's current number of versions. +uint32_t ts_stack_version_count(const Stack *); + +// Get the state at the top of the given version of the stack. If the stack is +// empty, this returns the initial state, 0. +TSStateId ts_stack_state(const Stack *, StackVersion); + +// Get the last external token associated with a given version of the stack. +Subtree ts_stack_last_external_token(const Stack *, StackVersion); + +// Set the last external token associated with a given version of the stack. +void ts_stack_set_last_external_token(Stack *, StackVersion, Subtree ); + +// Get the position of the given version of the stack within the document. +Length ts_stack_position(const Stack *, StackVersion); + +// Push a tree and state onto the given version of the stack. +// +// This transfers ownership of the tree to the Stack. Callers that +// need to retain ownership of the tree for their own purposes should +// first retain the tree. +void ts_stack_push(Stack *, StackVersion, Subtree , bool, TSStateId); + +// Pop the given number of entries from the given version of the stack. This +// operation can increase the number of stack versions by revealing multiple +// versions which had previously been merged. It returns an array that +// specifies the index of each revealed version and the trees that were +// removed from that version. +StackSliceArray ts_stack_pop_count(Stack *, StackVersion, uint32_t count); + +// Remove an error at the top of the given version of the stack. +SubtreeArray ts_stack_pop_error(Stack *, StackVersion); + +// Remove any pending trees from the top of the given version of the stack. +StackSliceArray ts_stack_pop_pending(Stack *, StackVersion); + +// Remove any all trees from the given version of the stack. +StackSliceArray ts_stack_pop_all(Stack *, StackVersion); + +// Get the maximum number of tree nodes reachable from this version of the stack +// since the last error was detected. +unsigned ts_stack_node_count_since_error(const Stack *, StackVersion); + +int ts_stack_dynamic_precedence(Stack *, StackVersion); + +bool ts_stack_has_advanced_since_error(const Stack *, StackVersion); + +// Compute a summary of all the parse states near the top of the given +// version of the stack and store the summary for later retrieval. +void ts_stack_record_summary(Stack *, StackVersion, unsigned max_depth); + +// Retrieve a summary of all the parse states near the top of the +// given version of the stack. +StackSummary *ts_stack_get_summary(Stack *, StackVersion); + +// Get the total cost of all errors on the given version of the stack. +unsigned ts_stack_error_cost(const Stack *, StackVersion version); + +// Merge the given two stack versions if possible, returning true +// if they were successfully merged and false otherwise. +bool ts_stack_merge(Stack *, StackVersion, StackVersion); + +// Determine whether the given two stack versions can be merged. +bool ts_stack_can_merge(Stack *, StackVersion, StackVersion); + +Subtree ts_stack_resume(Stack *, StackVersion); + +void ts_stack_pause(Stack *, StackVersion, Subtree); + +void ts_stack_halt(Stack *, StackVersion); + +bool ts_stack_is_active(const Stack *, StackVersion); + +bool ts_stack_is_paused(const Stack *, StackVersion); + +bool ts_stack_is_halted(const Stack *, StackVersion); + +void ts_stack_renumber_version(Stack *, StackVersion, StackVersion); + +void ts_stack_swap_versions(Stack *, StackVersion, StackVersion); + +StackVersion ts_stack_copy_version(Stack *, StackVersion); + +// Remove the given version from the stack. +void ts_stack_remove_version(Stack *, StackVersion); + +void ts_stack_clear(Stack *); + +bool ts_stack_print_dot_graph(Stack *, const TSLanguage *, FILE *); + +typedef void (*StackIterateCallback)(void *, TSStateId, uint32_t); + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_PARSE_STACK_H_ diff --git a/parser/nnsrc/subtree.c b/parser/nnsrc/subtree.c new file mode 100644 index 00000000..4524e182 --- /dev/null +++ b/parser/nnsrc/subtree.c @@ -0,0 +1,1060 @@ +#include +#include +#include +#include +#include +#include +#include "./alloc.h" +#include "./array.h" +#include "./atomic.h" +#include "./subtree.h" +#include "./length.h" +#include "./language.h" +#include "./error_costs.h" +#include + +typedef struct { + Length start; + Length old_end; + Length new_end; +} Edit; + +#define TS_MAX_INLINE_TREE_LENGTH UINT8_MAX +#define TS_MAX_TREE_POOL_SIZE 32 + +// ExternalScannerState + +void ts_external_scanner_state_init(ExternalScannerState *self, const char *data, unsigned length) { + self->length = length; + if (length > sizeof(self->short_data)) { + self->long_data = ts_malloc(length); + memcpy(self->long_data, data, length); + } else { + memcpy(self->short_data, data, length); + } +} + +ExternalScannerState ts_external_scanner_state_copy(const ExternalScannerState *self) { + ExternalScannerState result = *self; + if (self->length > sizeof(self->short_data)) { + result.long_data = ts_malloc(self->length); + memcpy(result.long_data, self->long_data, self->length); + } + return result; +} + +void ts_external_scanner_state_delete(ExternalScannerState *self) { + if (self->length > sizeof(self->short_data)) { + ts_free(self->long_data); + } +} + +const char *ts_external_scanner_state_data(const ExternalScannerState *self) { + if (self->length > sizeof(self->short_data)) { + return self->long_data; + } else { + return self->short_data; + } +} + +bool ts_external_scanner_state_eq(const ExternalScannerState *self, const char *buffer, unsigned length) { + return + self->length == length && + memcmp(ts_external_scanner_state_data(self), buffer, length) == 0; +} + +// SubtreeArray + +void ts_subtree_array_copy(SubtreeArray self, SubtreeArray *dest) { + dest->size = self.size; + dest->capacity = self.capacity; + dest->contents = self.contents; + if (self.capacity > 0) { + dest->contents = ts_calloc(self.capacity, sizeof(Subtree)); + memcpy(dest->contents, self.contents, self.size * sizeof(Subtree)); + for (uint32_t i = 0; i < self.size; i++) { + ts_subtree_retain(dest->contents[i]); + } + } +} + +void ts_subtree_array_clear(SubtreePool *pool, SubtreeArray *self) { + for (uint32_t i = 0; i < self->size; i++) { + ts_subtree_release(pool, self->contents[i]); + } + array_clear(self); +} + +void ts_subtree_array_delete(SubtreePool *pool, SubtreeArray *self) { + ts_subtree_array_clear(pool, self); + array_delete(self); +} + +void ts_subtree_array_remove_trailing_extras( + SubtreeArray *self, + SubtreeArray *destination +) { + array_clear(destination); + while (self->size > 0) { + Subtree last = self->contents[self->size - 1]; + if (ts_subtree_extra(last)) { + self->size--; + array_push(destination, last); + } else { + break; + } + } + ts_subtree_array_reverse(destination); +} + +void ts_subtree_array_reverse(SubtreeArray *self) { + for (uint32_t i = 0, limit = self->size / 2; i < limit; i++) { + size_t reverse_index = self->size - 1 - i; + Subtree swap = self->contents[i]; + self->contents[i] = self->contents[reverse_index]; + self->contents[reverse_index] = swap; + } +} + +// SubtreePool + +SubtreePool ts_subtree_pool_new(uint32_t capacity) { + SubtreePool self = {array_new(), array_new()}; + array_reserve(&self.free_trees, capacity); + return self; +} + +void ts_subtree_pool_delete(SubtreePool *self) { + if (self->free_trees.contents) { + for (unsigned i = 0; i < self->free_trees.size; i++) { + ts_free(self->free_trees.contents[i].ptr); + } + array_delete(&self->free_trees); + } + if (self->tree_stack.contents) array_delete(&self->tree_stack); +} + +static SubtreeHeapData *ts_subtree_pool_allocate(SubtreePool *self) { + if (self->free_trees.size > 0) { + return array_pop(&self->free_trees).ptr; + } else { + return ts_malloc(sizeof(SubtreeHeapData)); + } +} + +static void ts_subtree_pool_free(SubtreePool *self, SubtreeHeapData *tree) { + if (self->free_trees.capacity > 0 && self->free_trees.size + 1 <= TS_MAX_TREE_POOL_SIZE) { + array_push(&self->free_trees, (MutableSubtree) {.ptr = tree}); + } else { + ts_free(tree); + } +} + +// Subtree + +static inline bool ts_subtree_can_inline(Length padding, Length size, uint32_t lookahead_bytes) { + return + padding.bytes < TS_MAX_INLINE_TREE_LENGTH && + padding.extent.row < 16 && + padding.extent.column < TS_MAX_INLINE_TREE_LENGTH && + size.extent.row == 0 && + size.extent.column < TS_MAX_INLINE_TREE_LENGTH && + lookahead_bytes < 16; +} + +Subtree ts_subtree_new_leaf( + SubtreePool *pool, TSSymbol symbol, Length padding, Length size, + uint32_t lookahead_bytes, TSStateId parse_state, + bool has_external_tokens, bool depends_on_column, + bool is_keyword, const TSLanguage *language +) { + TSSymbolMetadata metadata = ts_language_symbol_metadata(language, symbol); + bool extra = symbol == ts_builtin_sym_end; + + bool is_inline = ( + symbol <= UINT8_MAX && + !has_external_tokens && + ts_subtree_can_inline(padding, size, lookahead_bytes) + ); + + if (is_inline) { + return (Subtree) {{ + .parse_state = parse_state, + .symbol = symbol, + .padding_bytes = padding.bytes, + .padding_rows = padding.extent.row, + .padding_columns = padding.extent.column, + .size_bytes = size.bytes, + .lookahead_bytes = lookahead_bytes, + .visible = metadata.visible, + .named = metadata.named, + .extra = extra, + .has_changes = false, + .is_missing = false, + .is_keyword = is_keyword, + .is_inline = true, + }}; + } else { + SubtreeHeapData *data = ts_subtree_pool_allocate(pool); + *data = (SubtreeHeapData) { + .ref_count = 1, + .padding = padding, + .size = size, + .lookahead_bytes = lookahead_bytes, + .error_cost = 0, + .child_count = 0, + .symbol = symbol, + .parse_state = parse_state, + .visible = metadata.visible, + .named = metadata.named, + .extra = extra, + .fragile_left = false, + .fragile_right = false, + .has_changes = false, + .has_external_tokens = has_external_tokens, + .has_external_scanner_state_change = false, + .depends_on_column = depends_on_column, + .is_missing = false, + .is_keyword = is_keyword, + {{.first_leaf = {.symbol = 0, .parse_state = 0}}} + }; + return (Subtree) {.ptr = data}; + } +} + +void ts_subtree_set_symbol( + MutableSubtree *self, + TSSymbol symbol, + const TSLanguage *language +) { + TSSymbolMetadata metadata = ts_language_symbol_metadata(language, symbol); + if (self->data.is_inline) { + assert(symbol < UINT8_MAX); + self->data.symbol = symbol; + self->data.named = metadata.named; + self->data.visible = metadata.visible; + } else { + self->ptr->symbol = symbol; + self->ptr->named = metadata.named; + self->ptr->visible = metadata.visible; + } +} + +Subtree ts_subtree_new_error( + SubtreePool *pool, int32_t lookahead_char, Length padding, Length size, + uint32_t bytes_scanned, TSStateId parse_state, const TSLanguage *language +) { + Subtree result = ts_subtree_new_leaf( + pool, ts_builtin_sym_error, padding, size, bytes_scanned, + parse_state, false, false, false, language + ); + SubtreeHeapData *data = (SubtreeHeapData *)result.ptr; + data->fragile_left = true; + data->fragile_right = true; + data->lookahead_char = lookahead_char; + return result; +} + +// Clone a subtree. +MutableSubtree ts_subtree_clone(Subtree self) { + size_t alloc_size = ts_subtree_alloc_size(self.ptr->child_count); + Subtree *new_children = ts_malloc(alloc_size); + Subtree *old_children = ts_subtree_children(self); + memcpy(new_children, old_children, alloc_size); + SubtreeHeapData *result = (SubtreeHeapData *)&new_children[self.ptr->child_count]; + if (self.ptr->child_count > 0) { + for (uint32_t i = 0; i < self.ptr->child_count; i++) { + ts_subtree_retain(new_children[i]); + } + } else if (self.ptr->has_external_tokens) { + result->external_scanner_state = ts_external_scanner_state_copy( + &self.ptr->external_scanner_state + ); + } + result->ref_count = 1; + return (MutableSubtree) {.ptr = result}; +} + +// Get mutable version of a subtree. +// +// This takes ownership of the subtree. If the subtree has only one owner, +// this will directly convert it into a mutable version. Otherwise, it will +// perform a copy. +MutableSubtree ts_subtree_make_mut(SubtreePool *pool, Subtree self) { + if (self.data.is_inline) return (MutableSubtree) {self.data}; + if (self.ptr->ref_count == 1) return ts_subtree_to_mut_unsafe(self); + MutableSubtree result = ts_subtree_clone(self); + ts_subtree_release(pool, self); + return result; +} + +static void ts_subtree__compress( + MutableSubtree self, + unsigned count, + const TSLanguage *language, + MutableSubtreeArray *stack +) { + unsigned initial_stack_size = stack->size; + + MutableSubtree tree = self; + TSSymbol symbol = tree.ptr->symbol; + for (unsigned i = 0; i < count; i++) { + if (tree.ptr->ref_count > 1 || tree.ptr->child_count < 2) break; + + MutableSubtree child = ts_subtree_to_mut_unsafe(ts_subtree_children(tree)[0]); + if ( + child.data.is_inline || + child.ptr->child_count < 2 || + child.ptr->ref_count > 1 || + child.ptr->symbol != symbol + ) break; + + MutableSubtree grandchild = ts_subtree_to_mut_unsafe(ts_subtree_children(child)[0]); + if ( + grandchild.data.is_inline || + grandchild.ptr->child_count < 2 || + grandchild.ptr->ref_count > 1 || + grandchild.ptr->symbol != symbol + ) break; + + ts_subtree_children(tree)[0] = ts_subtree_from_mut(grandchild); + ts_subtree_children(child)[0] = ts_subtree_children(grandchild)[grandchild.ptr->child_count - 1]; + ts_subtree_children(grandchild)[grandchild.ptr->child_count - 1] = ts_subtree_from_mut(child); + array_push(stack, tree); + tree = grandchild; + } + + while (stack->size > initial_stack_size) { + tree = array_pop(stack); + MutableSubtree child = ts_subtree_to_mut_unsafe(ts_subtree_children(tree)[0]); + MutableSubtree grandchild = ts_subtree_to_mut_unsafe(ts_subtree_children(child)[child.ptr->child_count - 1]); + ts_subtree_summarize_children(grandchild, language); + ts_subtree_summarize_children(child, language); + ts_subtree_summarize_children(tree, language); + } +} + +void ts_subtree_balance(Subtree self, SubtreePool *pool, const TSLanguage *language) { + array_clear(&pool->tree_stack); + + if (ts_subtree_child_count(self) > 0 && self.ptr->ref_count == 1) { + array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(self)); + } + + while (pool->tree_stack.size > 0) { + MutableSubtree tree = array_pop(&pool->tree_stack); + + if (tree.ptr->repeat_depth > 0) { + Subtree child1 = ts_subtree_children(tree)[0]; + Subtree child2 = ts_subtree_children(tree)[tree.ptr->child_count - 1]; + long repeat_delta = (long)ts_subtree_repeat_depth(child1) - (long)ts_subtree_repeat_depth(child2); + if (repeat_delta > 0) { + unsigned n = (unsigned)repeat_delta; + for (unsigned i = n / 2; i > 0; i /= 2) { + ts_subtree__compress(tree, i, language, &pool->tree_stack); + n -= i; + } + } + } + + for (uint32_t i = 0; i < tree.ptr->child_count; i++) { + Subtree child = ts_subtree_children(tree)[i]; + if (ts_subtree_child_count(child) > 0 && child.ptr->ref_count == 1) { + array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(child)); + } + } + } +} + +// Assign all of the node's properties that depend on its children. +void ts_subtree_summarize_children( + MutableSubtree self, + const TSLanguage *language +) { + assert(!self.data.is_inline); + + self.ptr->named_child_count = 0; + self.ptr->visible_child_count = 0; + self.ptr->error_cost = 0; + self.ptr->repeat_depth = 0; + self.ptr->visible_descendant_count = 0; + self.ptr->has_external_tokens = false; + self.ptr->depends_on_column = false; + self.ptr->has_external_scanner_state_change = false; + self.ptr->dynamic_precedence = 0; + + uint32_t structural_index = 0; + const TSSymbol *alias_sequence = ts_language_alias_sequence(language, self.ptr->production_id); + uint32_t lookahead_end_byte = 0; + + const Subtree *children = ts_subtree_children(self); + for (uint32_t i = 0; i < self.ptr->child_count; i++) { + Subtree child = children[i]; + + if ( + self.ptr->size.extent.row == 0 && + ts_subtree_depends_on_column(child) + ) { + self.ptr->depends_on_column = true; + } + + if (ts_subtree_has_external_scanner_state_change(child)) { + self.ptr->has_external_scanner_state_change = true; + } + + if (i == 0) { + self.ptr->padding = ts_subtree_padding(child); + self.ptr->size = ts_subtree_size(child); + } else { + self.ptr->size = length_add(self.ptr->size, ts_subtree_total_size(child)); + } + + uint32_t child_lookahead_end_byte = + self.ptr->padding.bytes + + self.ptr->size.bytes + + ts_subtree_lookahead_bytes(child); + if (child_lookahead_end_byte > lookahead_end_byte) { + lookahead_end_byte = child_lookahead_end_byte; + } + + if (ts_subtree_symbol(child) != ts_builtin_sym_error_repeat) { + self.ptr->error_cost += ts_subtree_error_cost(child); + } + + uint32_t grandchild_count = ts_subtree_child_count(child); + if ( + self.ptr->symbol == ts_builtin_sym_error || + self.ptr->symbol == ts_builtin_sym_error_repeat + ) { + if (!ts_subtree_extra(child) && !(ts_subtree_is_error(child) && grandchild_count == 0)) { + if (ts_subtree_visible(child)) { + self.ptr->error_cost += ERROR_COST_PER_SKIPPED_TREE; + } else if (grandchild_count > 0) { + self.ptr->error_cost += ERROR_COST_PER_SKIPPED_TREE * child.ptr->visible_child_count; + } + } + } + + self.ptr->dynamic_precedence += ts_subtree_dynamic_precedence(child); + self.ptr->visible_descendant_count += ts_subtree_visible_descendant_count(child); + + if (alias_sequence && alias_sequence[structural_index] != 0 && !ts_subtree_extra(child)) { + self.ptr->visible_descendant_count++; + self.ptr->visible_child_count++; + if (ts_language_symbol_metadata(language, alias_sequence[structural_index]).named) { + self.ptr->named_child_count++; + } + } else if (ts_subtree_visible(child)) { + self.ptr->visible_descendant_count++; + self.ptr->visible_child_count++; + if (ts_subtree_named(child)) self.ptr->named_child_count++; + } else if (grandchild_count > 0) { + self.ptr->visible_child_count += child.ptr->visible_child_count; + self.ptr->named_child_count += child.ptr->named_child_count; + } + + if (ts_subtree_has_external_tokens(child)) self.ptr->has_external_tokens = true; + + if (ts_subtree_is_error(child)) { + self.ptr->fragile_left = self.ptr->fragile_right = true; + self.ptr->parse_state = TS_TREE_STATE_NONE; + } + + if (!ts_subtree_extra(child)) structural_index++; + } + + self.ptr->lookahead_bytes = lookahead_end_byte - self.ptr->size.bytes - self.ptr->padding.bytes; + + if ( + self.ptr->symbol == ts_builtin_sym_error || + self.ptr->symbol == ts_builtin_sym_error_repeat + ) { + self.ptr->error_cost += + ERROR_COST_PER_RECOVERY + + ERROR_COST_PER_SKIPPED_CHAR * self.ptr->size.bytes + + ERROR_COST_PER_SKIPPED_LINE * self.ptr->size.extent.row; + } + + if (self.ptr->child_count > 0) { + Subtree first_child = children[0]; + Subtree last_child = children[self.ptr->child_count - 1]; + + self.ptr->first_leaf.symbol = ts_subtree_leaf_symbol(first_child); + self.ptr->first_leaf.parse_state = ts_subtree_leaf_parse_state(first_child); + + if (ts_subtree_fragile_left(first_child)) self.ptr->fragile_left = true; + if (ts_subtree_fragile_right(last_child)) self.ptr->fragile_right = true; + + if ( + self.ptr->child_count >= 2 && + !self.ptr->visible && + !self.ptr->named && + ts_subtree_symbol(first_child) == self.ptr->symbol + ) { + if (ts_subtree_repeat_depth(first_child) > ts_subtree_repeat_depth(last_child)) { + self.ptr->repeat_depth = ts_subtree_repeat_depth(first_child) + 1; + } else { + self.ptr->repeat_depth = ts_subtree_repeat_depth(last_child) + 1; + } + } + } +} + +// Create a new parent node with the given children. +// +// This takes ownership of the children array. +MutableSubtree ts_subtree_new_node( + TSSymbol symbol, + SubtreeArray *children, + unsigned production_id, + const TSLanguage *language +) { + TSSymbolMetadata metadata = ts_language_symbol_metadata(language, symbol); + bool fragile = symbol == ts_builtin_sym_error || symbol == ts_builtin_sym_error_repeat; + + // Allocate the node's data at the end of the array of children. + size_t new_byte_size = ts_subtree_alloc_size(children->size); + if (children->capacity * sizeof(Subtree) < new_byte_size) { + children->contents = ts_realloc(children->contents, new_byte_size); + children->capacity = (uint32_t)(new_byte_size / sizeof(Subtree)); + } + SubtreeHeapData *data = (SubtreeHeapData *)&children->contents[children->size]; + + *data = (SubtreeHeapData) { + .ref_count = 1, + .symbol = symbol, + .child_count = children->size, + .visible = metadata.visible, + .named = metadata.named, + .has_changes = false, + .has_external_scanner_state_change = false, + .fragile_left = fragile, + .fragile_right = fragile, + .is_keyword = false, + {{ + .visible_descendant_count = 0, + .production_id = production_id, + .first_leaf = {.symbol = 0, .parse_state = 0}, + }} + }; + MutableSubtree result = {.ptr = data}; + ts_subtree_summarize_children(result, language); + return result; +} + +// Create a new error node containing the given children. +// +// This node is treated as 'extra'. Its children are prevented from having +// having any effect on the parse state. +Subtree ts_subtree_new_error_node( + SubtreeArray *children, + bool extra, + const TSLanguage *language +) { + MutableSubtree result = ts_subtree_new_node( + ts_builtin_sym_error, children, 0, language + ); + result.ptr->extra = extra; + return ts_subtree_from_mut(result); +} + +// Create a new 'missing leaf' node. +// +// This node is treated as 'extra'. Its children are prevented from having +// having any effect on the parse state. +Subtree ts_subtree_new_missing_leaf( + SubtreePool *pool, + TSSymbol symbol, + Length padding, + uint32_t lookahead_bytes, + const TSLanguage *language +) { + Subtree result = ts_subtree_new_leaf( + pool, symbol, padding, length_zero(), lookahead_bytes, + 0, false, false, false, language + ); + if (result.data.is_inline) { + result.data.is_missing = true; + } else { + ((SubtreeHeapData *)result.ptr)->is_missing = true; + } + return result; +} + +void ts_subtree_retain(Subtree self) { + if (self.data.is_inline) return; + assert(self.ptr->ref_count > 0); + atomic_inc((volatile uint32_t *)&self.ptr->ref_count); + assert(self.ptr->ref_count != 0); +} + +void ts_subtree_release(SubtreePool *pool, Subtree self) { + if (self.data.is_inline) return; + array_clear(&pool->tree_stack); + + assert(self.ptr->ref_count > 0); + if (atomic_dec((volatile uint32_t *)&self.ptr->ref_count) == 0) { + array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(self)); + } + + while (pool->tree_stack.size > 0) { + MutableSubtree tree = array_pop(&pool->tree_stack); + if (tree.ptr->child_count > 0) { + Subtree *children = ts_subtree_children(tree); + for (uint32_t i = 0; i < tree.ptr->child_count; i++) { + Subtree child = children[i]; + if (child.data.is_inline) continue; + assert(child.ptr->ref_count > 0); + if (atomic_dec((volatile uint32_t *)&child.ptr->ref_count) == 0) { + array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(child)); + } + } + ts_free(children); + } else { + if (tree.ptr->has_external_tokens) { + ts_external_scanner_state_delete(&tree.ptr->external_scanner_state); + } + ts_subtree_pool_free(pool, tree.ptr); + } + } +} + +int ts_subtree_compare(Subtree left, Subtree right, SubtreePool *pool) { + array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(left)); + array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(right)); + + while (pool->tree_stack.size > 0) { + right = ts_subtree_from_mut(array_pop(&pool->tree_stack)); + left = ts_subtree_from_mut(array_pop(&pool->tree_stack)); + + int result = 0; + if (ts_subtree_symbol(left) < ts_subtree_symbol(right)) result = -1; + else if (ts_subtree_symbol(right) < ts_subtree_symbol(left)) result = 1; + else if (ts_subtree_child_count(left) < ts_subtree_child_count(right)) result = -1; + else if (ts_subtree_child_count(right) < ts_subtree_child_count(left)) result = 1; + if (result != 0) { + array_clear(&pool->tree_stack); + return result; + } + + for (uint32_t i = ts_subtree_child_count(left); i > 0; i--) { + Subtree left_child = ts_subtree_children(left)[i - 1]; + Subtree right_child = ts_subtree_children(right)[i - 1]; + array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(left_child)); + array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(right_child)); + } + } + + return 0; +} + +static inline void ts_subtree_set_has_changes(MutableSubtree *self) { + if (self->data.is_inline) { + self->data.has_changes = true; + } else { + self->ptr->has_changes = true; + } +} + +Subtree ts_subtree_edit(Subtree self, const TSInputEdit *input_edit, SubtreePool *pool) { + typedef struct { + Subtree *tree; + Edit edit; + } EditEntry; + + Array(EditEntry) stack = array_new(); + array_push(&stack, ((EditEntry) { + .tree = &self, + .edit = (Edit) { + .start = {input_edit->start_byte, input_edit->start_point}, + .old_end = {input_edit->old_end_byte, input_edit->old_end_point}, + .new_end = {input_edit->new_end_byte, input_edit->new_end_point}, + }, + })); + + while (stack.size) { + EditEntry entry = array_pop(&stack); + Edit edit = entry.edit; + bool is_noop = edit.old_end.bytes == edit.start.bytes && edit.new_end.bytes == edit.start.bytes; + bool is_pure_insertion = edit.old_end.bytes == edit.start.bytes; + bool invalidate_first_row = ts_subtree_depends_on_column(*entry.tree); + + Length size = ts_subtree_size(*entry.tree); + Length padding = ts_subtree_padding(*entry.tree); + Length total_size = length_add(padding, size); + uint32_t lookahead_bytes = ts_subtree_lookahead_bytes(*entry.tree); + uint32_t end_byte = total_size.bytes + lookahead_bytes; + if (edit.start.bytes > end_byte || (is_noop && edit.start.bytes == end_byte)) continue; + + // If the edit is entirely within the space before this subtree, then shift this + // subtree over according to the edit without changing its size. + if (edit.old_end.bytes <= padding.bytes) { + padding = length_add(edit.new_end, length_sub(padding, edit.old_end)); + } + + // If the edit starts in the space before this subtree and extends into this subtree, + // shrink the subtree's content to compensate for the change in the space before it. + else if (edit.start.bytes < padding.bytes) { + size = length_saturating_sub(size, length_sub(edit.old_end, padding)); + padding = edit.new_end; + } + + // If the edit is a pure insertion right at the start of the subtree, + // shift the subtree over according to the insertion. + else if (edit.start.bytes == padding.bytes && is_pure_insertion) { + padding = edit.new_end; + } + + // If the edit is within this subtree, resize the subtree to reflect the edit. + else if ( + edit.start.bytes < total_size.bytes || + (edit.start.bytes == total_size.bytes && is_pure_insertion) + ) { + size = length_add( + length_sub(edit.new_end, padding), + length_saturating_sub(total_size, edit.old_end) + ); + } + + MutableSubtree result = ts_subtree_make_mut(pool, *entry.tree); + + if (result.data.is_inline) { + if (ts_subtree_can_inline(padding, size, lookahead_bytes)) { + result.data.padding_bytes = padding.bytes; + result.data.padding_rows = padding.extent.row; + result.data.padding_columns = padding.extent.column; + result.data.size_bytes = size.bytes; + } else { + SubtreeHeapData *data = ts_subtree_pool_allocate(pool); + data->ref_count = 1; + data->padding = padding; + data->size = size; + data->lookahead_bytes = lookahead_bytes; + data->error_cost = 0; + data->child_count = 0; + data->symbol = result.data.symbol; + data->parse_state = result.data.parse_state; + data->visible = result.data.visible; + data->named = result.data.named; + data->extra = result.data.extra; + data->fragile_left = false; + data->fragile_right = false; + data->has_changes = false; + data->has_external_tokens = false; + data->depends_on_column = false; + data->is_missing = result.data.is_missing; + data->is_keyword = result.data.is_keyword; + result.ptr = data; + } + } else { + result.ptr->padding = padding; + result.ptr->size = size; + } + + ts_subtree_set_has_changes(&result); + *entry.tree = ts_subtree_from_mut(result); + + Length child_left, child_right = length_zero(); + for (uint32_t i = 0, n = ts_subtree_child_count(*entry.tree); i < n; i++) { + Subtree *child = &ts_subtree_children(*entry.tree)[i]; + Length child_size = ts_subtree_total_size(*child); + child_left = child_right; + child_right = length_add(child_left, child_size); + + // If this child ends before the edit, it is not affected. + if (child_right.bytes + ts_subtree_lookahead_bytes(*child) < edit.start.bytes) continue; + + // Keep editing child nodes until a node is reached that starts after the edit. + // Also, if this node's validity depends on its column position, then continue + // invaliditing child nodes until reaching a line break. + if (( + (child_left.bytes > edit.old_end.bytes) || + (child_left.bytes == edit.old_end.bytes && child_size.bytes > 0 && i > 0) + ) && ( + !invalidate_first_row || + child_left.extent.row > entry.tree->ptr->padding.extent.row + )) { + break; + } + + // Transform edit into the child's coordinate space. + Edit child_edit = { + .start = length_saturating_sub(edit.start, child_left), + .old_end = length_saturating_sub(edit.old_end, child_left), + .new_end = length_saturating_sub(edit.new_end, child_left), + }; + + // Interpret all inserted text as applying to the *first* child that touches the edit. + // Subsequent children are only never have any text inserted into them; they are only + // shrunk to compensate for the edit. + if ( + child_right.bytes > edit.start.bytes || + (child_right.bytes == edit.start.bytes && is_pure_insertion) + ) { + edit.new_end = edit.start; + } + + // Children that occur before the edit are not reshaped by the edit. + else { + child_edit.old_end = child_edit.start; + child_edit.new_end = child_edit.start; + } + + // Queue processing of this child's subtree. + array_push(&stack, ((EditEntry) { + .tree = child, + .edit = child_edit, + })); + } + } + + array_delete(&stack); + return self; +} + +Subtree ts_subtree_last_external_token(Subtree tree) { + if (!ts_subtree_has_external_tokens(tree)) return NULL_SUBTREE; + while (tree.ptr->child_count > 0) { + for (uint32_t i = tree.ptr->child_count - 1; i + 1 > 0; i--) { + Subtree child = ts_subtree_children(tree)[i]; + if (ts_subtree_has_external_tokens(child)) { + tree = child; + break; + } + } + } + return tree; +} + +static size_t ts_subtree__write_char_to_string(char *str, size_t n, int32_t chr) { + if (chr == -1) + return snprintf(str, n, "INVALID"); + else if (chr == '\0') + return snprintf(str, n, "'\\0'"); + else if (chr == '\n') + return snprintf(str, n, "'\\n'"); + else if (chr == '\t') + return snprintf(str, n, "'\\t'"); + else if (chr == '\r') + return snprintf(str, n, "'\\r'"); + else if (0 < chr && chr < 128 && isprint(chr)) + return snprintf(str, n, "'%c'", chr); + else + return snprintf(str, n, "%d", chr); +} + +static const char *const ROOT_FIELD = "__ROOT__"; + +static size_t ts_subtree__write_to_string( + Subtree self, char *string, size_t limit, + const TSLanguage *language, bool include_all, + TSSymbol alias_symbol, bool alias_is_named, const char *field_name +) { + if (!self.ptr) return snprintf(string, limit, "(NULL)"); + + char *cursor = string; + char **writer = (limit > 1) ? &cursor : &string; + bool is_root = field_name == ROOT_FIELD; + bool is_visible = + include_all || + ts_subtree_missing(self) || + ( + alias_symbol + ? alias_is_named + : ts_subtree_visible(self) && ts_subtree_named(self) + ); + + if (is_visible) { + if (!is_root) { + cursor += snprintf(*writer, limit, " "); + if (field_name) { + cursor += snprintf(*writer, limit, "%s: ", field_name); + } + } + + if (ts_subtree_is_error(self) && ts_subtree_child_count(self) == 0 && self.ptr->size.bytes > 0) { + cursor += snprintf(*writer, limit, "(UNEXPECTED "); + cursor += ts_subtree__write_char_to_string(*writer, limit, self.ptr->lookahead_char); + } else { + TSSymbol symbol = alias_symbol ? alias_symbol : ts_subtree_symbol(self); + const char *symbol_name = ts_language_symbol_name(language, symbol); + if (ts_subtree_missing(self)) { + cursor += snprintf(*writer, limit, "(MISSING "); + if (alias_is_named || ts_subtree_named(self)) { + cursor += snprintf(*writer, limit, "%s", symbol_name); + } else { + cursor += snprintf(*writer, limit, "\"%s\"", symbol_name); + } + } else { + cursor += snprintf(*writer, limit, "(%s", symbol_name); + } + } + } else if (is_root) { + TSSymbol symbol = alias_symbol ? alias_symbol : ts_subtree_symbol(self); + const char *symbol_name = ts_language_symbol_name(language, symbol); + if (ts_subtree_child_count(self) > 0) { + cursor += snprintf(*writer, limit, "(%s", symbol_name); + } else if (ts_subtree_named(self)) { + cursor += snprintf(*writer, limit, "(%s)", symbol_name); + } else { + cursor += snprintf(*writer, limit, "(\"%s\")", symbol_name); + } + } + + if (ts_subtree_child_count(self)) { + const TSSymbol *alias_sequence = ts_language_alias_sequence(language, self.ptr->production_id); + const TSFieldMapEntry *field_map, *field_map_end; + ts_language_field_map( + language, + self.ptr->production_id, + &field_map, + &field_map_end + ); + + uint32_t structural_child_index = 0; + for (uint32_t i = 0; i < self.ptr->child_count; i++) { + Subtree child = ts_subtree_children(self)[i]; + if (ts_subtree_extra(child)) { + cursor += ts_subtree__write_to_string( + child, *writer, limit, + language, include_all, + 0, false, NULL + ); + } else { + TSSymbol subtree_alias_symbol = alias_sequence + ? alias_sequence[structural_child_index] + : 0; + bool subtree_alias_is_named = subtree_alias_symbol + ? ts_language_symbol_metadata(language, subtree_alias_symbol).named + : false; + + const char *child_field_name = is_visible ? NULL : field_name; + for (const TSFieldMapEntry *map = field_map; map < field_map_end; map++) { + if (!map->inherited && map->child_index == structural_child_index) { + child_field_name = language->field_names[map->field_id]; + break; + } + } + + cursor += ts_subtree__write_to_string( + child, *writer, limit, + language, include_all, + subtree_alias_symbol, subtree_alias_is_named, child_field_name + ); + structural_child_index++; + } + } + } + + if (is_visible) cursor += snprintf(*writer, limit, ")"); + + return cursor - string; +} + +char *ts_subtree_string( + Subtree self, + TSSymbol alias_symbol, + bool alias_is_named, + const TSLanguage *language, + bool include_all +) { + char scratch_string[1]; + size_t size = ts_subtree__write_to_string( + self, scratch_string, 1, + language, include_all, + alias_symbol, alias_is_named, ROOT_FIELD + ) + 1; + char *result = ts_malloc(size * sizeof(char)); + ts_subtree__write_to_string( + self, result, size, + language, include_all, + alias_symbol, alias_is_named, ROOT_FIELD + ); + return result; +} + +void ts_subtree__print_dot_graph(const Subtree *self, uint32_t start_offset, + const TSLanguage *language, TSSymbol alias_symbol, + FILE *f) { + TSSymbol subtree_symbol = ts_subtree_symbol(*self); + TSSymbol symbol = alias_symbol ? alias_symbol : subtree_symbol; + uint32_t end_offset = start_offset + ts_subtree_total_bytes(*self); + fprintf(f, "tree_%p [label=\"", (void *)self); + ts_language_write_symbol_as_dot_string(language, f, symbol); + fprintf(f, "\""); + + if (ts_subtree_child_count(*self) == 0) fprintf(f, ", shape=plaintext"); + if (ts_subtree_extra(*self)) fprintf(f, ", fontcolor=gray"); + + fprintf(f, ", tooltip=\"" + "range: %u - %u\n" + "state: %d\n" + "error-cost: %u\n" + "has-changes: %u\n" + "depends-on-column: %u\n" + "descendant-count: %u\n" + "repeat-depth: %u\n" + "lookahead-bytes: %u", + start_offset, end_offset, + ts_subtree_parse_state(*self), + ts_subtree_error_cost(*self), + ts_subtree_has_changes(*self), + ts_subtree_depends_on_column(*self), + ts_subtree_visible_descendant_count(*self), + ts_subtree_repeat_depth(*self), + ts_subtree_lookahead_bytes(*self) + ); + + if (ts_subtree_is_error(*self) && ts_subtree_child_count(*self) == 0 && self->ptr->lookahead_char != 0) { + fprintf(f, "\ncharacter: '%c'", self->ptr->lookahead_char); + } + + fprintf(f, "\"]\n"); + + uint32_t child_start_offset = start_offset; + uint32_t child_info_offset = + language->max_alias_sequence_length * + ts_subtree_production_id(*self); + for (uint32_t i = 0, n = ts_subtree_child_count(*self); i < n; i++) { + const Subtree *child = &ts_subtree_children(*self)[i]; + TSSymbol subtree_alias_symbol = 0; + if (!ts_subtree_extra(*child) && child_info_offset) { + subtree_alias_symbol = language->alias_sequences[child_info_offset]; + child_info_offset++; + } + ts_subtree__print_dot_graph(child, child_start_offset, language, subtree_alias_symbol, f); + fprintf(f, "tree_%p -> tree_%p [tooltip=%u]\n", (void *)self, (void *)child, i); + child_start_offset += ts_subtree_total_bytes(*child); + } +} + +void ts_subtree_print_dot_graph(Subtree self, const TSLanguage *language, FILE *f) { + fprintf(f, "digraph tree {\n"); + fprintf(f, "edge [arrowhead=none]\n"); + ts_subtree__print_dot_graph(&self, 0, language, 0, f); + fprintf(f, "}\n"); +} + +const ExternalScannerState *ts_subtree_external_scanner_state(Subtree self) { + static const ExternalScannerState empty_state = {{.short_data = {0}}, .length = 0}; + if ( + self.ptr && + !self.data.is_inline && + self.ptr->has_external_tokens && + self.ptr->child_count == 0 + ) { + return &self.ptr->external_scanner_state; + } else { + return &empty_state; + } +} + +bool ts_subtree_external_scanner_state_eq(Subtree self, Subtree other) { + const ExternalScannerState *state_self = ts_subtree_external_scanner_state(self); + const ExternalScannerState *state_other = ts_subtree_external_scanner_state(other); + return ts_external_scanner_state_eq( + state_self, + ts_external_scanner_state_data(state_other), + state_other->length + ); +} diff --git a/parser/nnsrc/subtree.h b/parser/nnsrc/subtree.h new file mode 100644 index 00000000..0b3062e9 --- /dev/null +++ b/parser/nnsrc/subtree.h @@ -0,0 +1,382 @@ +#ifndef TREE_SITTER_SUBTREE_H_ +#define TREE_SITTER_SUBTREE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include "./length.h" +#include "./array.h" +#include "./error_costs.h" +#include "./host.h" +#include "api.h" +#include "./parser.h" + +#define TS_TREE_STATE_NONE USHRT_MAX +#define NULL_SUBTREE ((Subtree) {.ptr = NULL}) + +// The serialized state of an external scanner. +// +// Every time an external token subtree is created after a call to an +// external scanner, the scanner's `serialize` function is called to +// retrieve a serialized copy of its state. The bytes are then copied +// onto the subtree itself so that the scanner's state can later be +// restored using its `deserialize` function. +// +// Small byte arrays are stored inline, and long ones are allocated +// separately on the heap. +typedef struct { + union { + char *long_data; + char short_data[24]; + }; + uint32_t length; +} ExternalScannerState; + +// A compact representation of a subtree. +// +// This representation is used for small leaf nodes that are not +// errors, and were not created by an external scanner. +// +// The idea behind the layout of this struct is that the `is_inline` +// bit will fall exactly into the same location as the least significant +// bit of the pointer in `Subtree` or `MutableSubtree`, respectively. +// Because of alignment, for any valid pointer this will be 0, giving +// us the opportunity to make use of this bit to signify whether to use +// the pointer or the inline struct. +typedef struct SubtreeInlineData SubtreeInlineData; + +#define SUBTREE_BITS \ + bool visible : 1; \ + bool named : 1; \ + bool extra : 1; \ + bool has_changes : 1; \ + bool is_missing : 1; \ + bool is_keyword : 1; + +#define SUBTREE_SIZE \ + uint8_t padding_columns; \ + uint8_t padding_rows : 4; \ + uint8_t lookahead_bytes : 4; \ + uint8_t padding_bytes; \ + uint8_t size_bytes; + +#if TS_BIG_ENDIAN +#if TS_PTR_SIZE == 32 + +struct SubtreeInlineData { + uint16_t parse_state; + uint8_t symbol; + SUBTREE_BITS + bool unused : 1; + bool is_inline : 1; + SUBTREE_SIZE +}; + +#else + +struct SubtreeInlineData { + SUBTREE_SIZE + uint16_t parse_state; + uint8_t symbol; + SUBTREE_BITS + bool unused : 1; + bool is_inline : 1; +}; + +#endif +#else + +struct SubtreeInlineData { + bool is_inline : 1; + SUBTREE_BITS + uint8_t symbol; + uint16_t parse_state; + SUBTREE_SIZE +}; + +#endif + +#undef SUBTREE_BITS +#undef SUBTREE_SIZE + +// A heap-allocated representation of a subtree. +// +// This representation is used for parent nodes, external tokens, +// errors, and other leaf nodes whose data is too large to fit into +// the inline representation. +typedef struct { + volatile uint32_t ref_count; + Length padding; + Length size; + uint32_t lookahead_bytes; + uint32_t error_cost; + uint32_t child_count; + TSSymbol symbol; + TSStateId parse_state; + + bool visible : 1; + bool named : 1; + bool extra : 1; + bool fragile_left : 1; + bool fragile_right : 1; + bool has_changes : 1; + bool has_external_tokens : 1; + bool has_external_scanner_state_change : 1; + bool depends_on_column: 1; + bool is_missing : 1; + bool is_keyword : 1; + + union { + // Non-terminal subtrees (`child_count > 0`) + struct { + uint32_t visible_child_count; + uint32_t named_child_count; + uint32_t visible_descendant_count; + int32_t dynamic_precedence; + uint16_t repeat_depth; + uint16_t production_id; + struct { + TSSymbol symbol; + TSStateId parse_state; + } first_leaf; + }; + + // External terminal subtrees (`child_count == 0 && has_external_tokens`) + ExternalScannerState external_scanner_state; + + // Error terminal subtrees (`child_count == 0 && symbol == ts_builtin_sym_error`) + int32_t lookahead_char; + }; +} SubtreeHeapData; + +// The fundamental building block of a syntax tree. +typedef union { + SubtreeInlineData data; + const SubtreeHeapData *ptr; +} Subtree; + +// Like Subtree, but mutable. +typedef union { + SubtreeInlineData data; + SubtreeHeapData *ptr; +} MutableSubtree; + +typedef Array(Subtree) SubtreeArray; +typedef Array(MutableSubtree) MutableSubtreeArray; + +typedef struct { + MutableSubtreeArray free_trees; + MutableSubtreeArray tree_stack; +} SubtreePool; + +void ts_external_scanner_state_init(ExternalScannerState *, const char *, unsigned); +const char *ts_external_scanner_state_data(const ExternalScannerState *); +bool ts_external_scanner_state_eq(const ExternalScannerState *self, const char *, unsigned); +void ts_external_scanner_state_delete(ExternalScannerState *self); + +void ts_subtree_array_copy(SubtreeArray, SubtreeArray *); +void ts_subtree_array_clear(SubtreePool *, SubtreeArray *); +void ts_subtree_array_delete(SubtreePool *, SubtreeArray *); +void ts_subtree_array_remove_trailing_extras(SubtreeArray *, SubtreeArray *); +void ts_subtree_array_reverse(SubtreeArray *); + +SubtreePool ts_subtree_pool_new(uint32_t capacity); +void ts_subtree_pool_delete(SubtreePool *); + +Subtree ts_subtree_new_leaf( + SubtreePool *, TSSymbol, Length, Length, uint32_t, + TSStateId, bool, bool, bool, const TSLanguage * +); +Subtree ts_subtree_new_error( + SubtreePool *, int32_t, Length, Length, uint32_t, TSStateId, const TSLanguage * +); +MutableSubtree ts_subtree_new_node(TSSymbol, SubtreeArray *, unsigned, const TSLanguage *); +Subtree ts_subtree_new_error_node(SubtreeArray *, bool, const TSLanguage *); +Subtree ts_subtree_new_missing_leaf(SubtreePool *, TSSymbol, Length, uint32_t, const TSLanguage *); +MutableSubtree ts_subtree_make_mut(SubtreePool *, Subtree); +void ts_subtree_retain(Subtree); +void ts_subtree_release(SubtreePool *, Subtree); +int ts_subtree_compare(Subtree, Subtree, SubtreePool *); +void ts_subtree_set_symbol(MutableSubtree *, TSSymbol, const TSLanguage *); +void ts_subtree_summarize(MutableSubtree, const Subtree *, uint32_t, const TSLanguage *); +void ts_subtree_summarize_children(MutableSubtree, const TSLanguage *); +void ts_subtree_balance(Subtree, SubtreePool *, const TSLanguage *); +Subtree ts_subtree_edit(Subtree, const TSInputEdit *edit, SubtreePool *); +char *ts_subtree_string(Subtree, TSSymbol, bool, const TSLanguage *, bool include_all); +void ts_subtree_print_dot_graph(Subtree, const TSLanguage *, FILE *); +Subtree ts_subtree_last_external_token(Subtree); +const ExternalScannerState *ts_subtree_external_scanner_state(Subtree self); +bool ts_subtree_external_scanner_state_eq(Subtree, Subtree); + +#define SUBTREE_GET(self, name) ((self).data.is_inline ? (self).data.name : (self).ptr->name) + +static inline TSSymbol ts_subtree_symbol(Subtree self) { return SUBTREE_GET(self, symbol); } +static inline bool ts_subtree_visible(Subtree self) { return SUBTREE_GET(self, visible); } +static inline bool ts_subtree_named(Subtree self) { return SUBTREE_GET(self, named); } +static inline bool ts_subtree_extra(Subtree self) { return SUBTREE_GET(self, extra); } +static inline bool ts_subtree_has_changes(Subtree self) { return SUBTREE_GET(self, has_changes); } +static inline bool ts_subtree_missing(Subtree self) { return SUBTREE_GET(self, is_missing); } +static inline bool ts_subtree_is_keyword(Subtree self) { return SUBTREE_GET(self, is_keyword); } +static inline TSStateId ts_subtree_parse_state(Subtree self) { return SUBTREE_GET(self, parse_state); } +static inline uint32_t ts_subtree_lookahead_bytes(Subtree self) { return SUBTREE_GET(self, lookahead_bytes); } + +#undef SUBTREE_GET + +// Get the size needed to store a heap-allocated subtree with the given +// number of children. +static inline size_t ts_subtree_alloc_size(uint32_t child_count) { + return child_count * sizeof(Subtree) + sizeof(SubtreeHeapData); +} + +// Get a subtree's children, which are allocated immediately before the +// tree's own heap data. +#define ts_subtree_children(self) \ + ((self).data.is_inline ? NULL : (Subtree *)((self).ptr) - (self).ptr->child_count) + +static inline void ts_subtree_set_extra(MutableSubtree *self, bool is_extra) { + if (self->data.is_inline) { + self->data.extra = is_extra; + } else { + self->ptr->extra = is_extra; + } +} + +static inline TSSymbol ts_subtree_leaf_symbol(Subtree self) { + if (self.data.is_inline) return self.data.symbol; + if (self.ptr->child_count == 0) return self.ptr->symbol; + return self.ptr->first_leaf.symbol; +} + +static inline TSStateId ts_subtree_leaf_parse_state(Subtree self) { + if (self.data.is_inline) return self.data.parse_state; + if (self.ptr->child_count == 0) return self.ptr->parse_state; + return self.ptr->first_leaf.parse_state; +} + +static inline Length ts_subtree_padding(Subtree self) { + if (self.data.is_inline) { + Length result = {self.data.padding_bytes, {self.data.padding_rows, self.data.padding_columns}}; + return result; + } else { + return self.ptr->padding; + } +} + +static inline Length ts_subtree_size(Subtree self) { + if (self.data.is_inline) { + Length result = {self.data.size_bytes, {0, self.data.size_bytes}}; + return result; + } else { + return self.ptr->size; + } +} + +static inline Length ts_subtree_total_size(Subtree self) { + return length_add(ts_subtree_padding(self), ts_subtree_size(self)); +} + +static inline uint32_t ts_subtree_total_bytes(Subtree self) { + return ts_subtree_total_size(self).bytes; +} + +static inline uint32_t ts_subtree_child_count(Subtree self) { + return self.data.is_inline ? 0 : self.ptr->child_count; +} + +static inline uint32_t ts_subtree_repeat_depth(Subtree self) { + return self.data.is_inline ? 0 : self.ptr->repeat_depth; +} + +static inline uint32_t ts_subtree_is_repetition(Subtree self) { + return self.data.is_inline + ? 0 + : !self.ptr->named && !self.ptr->visible && self.ptr->child_count != 0; +} + +static inline uint32_t ts_subtree_visible_descendant_count(Subtree self) { + return (self.data.is_inline || self.ptr->child_count == 0) + ? 0 + : self.ptr->visible_descendant_count; +} + +static inline uint32_t ts_subtree_visible_child_count(Subtree self) { + if (ts_subtree_child_count(self) > 0) { + return self.ptr->visible_child_count; + } else { + return 0; + } +} + +static inline uint32_t ts_subtree_error_cost(Subtree self) { + if (ts_subtree_missing(self)) { + return ERROR_COST_PER_MISSING_TREE + ERROR_COST_PER_RECOVERY; + } else { + return self.data.is_inline ? 0 : self.ptr->error_cost; + } +} + +static inline int32_t ts_subtree_dynamic_precedence(Subtree self) { + return (self.data.is_inline || self.ptr->child_count == 0) ? 0 : self.ptr->dynamic_precedence; +} + +static inline uint16_t ts_subtree_production_id(Subtree self) { + if (ts_subtree_child_count(self) > 0) { + return self.ptr->production_id; + } else { + return 0; + } +} + +static inline bool ts_subtree_fragile_left(Subtree self) { + return self.data.is_inline ? false : self.ptr->fragile_left; +} + +static inline bool ts_subtree_fragile_right(Subtree self) { + return self.data.is_inline ? false : self.ptr->fragile_right; +} + +static inline bool ts_subtree_has_external_tokens(Subtree self) { + return self.data.is_inline ? false : self.ptr->has_external_tokens; +} + +static inline bool ts_subtree_has_external_scanner_state_change(Subtree self) { + return self.data.is_inline ? false : self.ptr->has_external_scanner_state_change; +} + +static inline bool ts_subtree_depends_on_column(Subtree self) { + return self.data.is_inline ? false : self.ptr->depends_on_column; +} + +static inline bool ts_subtree_is_fragile(Subtree self) { + return self.data.is_inline ? false : (self.ptr->fragile_left || self.ptr->fragile_right); +} + +static inline bool ts_subtree_is_error(Subtree self) { + return ts_subtree_symbol(self) == ts_builtin_sym_error; +} + +static inline bool ts_subtree_is_eof(Subtree self) { + return ts_subtree_symbol(self) == ts_builtin_sym_end; +} + +static inline Subtree ts_subtree_from_mut(MutableSubtree self) { + Subtree result; + result.data = self.data; + return result; +} + +static inline MutableSubtree ts_subtree_to_mut_unsafe(Subtree self) { + MutableSubtree result; + result.data = self.data; + return result; +} + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_SUBTREE_H_ diff --git a/parser/nnsrc/tree.c b/parser/nnsrc/tree.c new file mode 100644 index 00000000..1cea1794 --- /dev/null +++ b/parser/nnsrc/tree.c @@ -0,0 +1,165 @@ +#define _POSIX_C_SOURCE 200112L + +#include "api.h" +#include "./array.h" +#include "./get_changed_ranges.h" +#include "./length.h" +#include "./subtree.h" +#include "./tree_cursor.h" +#include "./tree.h" + +TSTree *ts_tree_new( + Subtree root, const TSLanguage *language, + const TSRange *included_ranges, unsigned included_range_count +) { + TSTree *result = ts_malloc(sizeof(TSTree)); + result->root = root; + result->language = ts_language_copy(language); + result->included_ranges = ts_calloc(included_range_count, sizeof(TSRange)); + memcpy(result->included_ranges, included_ranges, included_range_count * sizeof(TSRange)); + result->included_range_count = included_range_count; + return result; +} + +TSTree *ts_tree_copy(const TSTree *self) { + ts_subtree_retain(self->root); + return ts_tree_new(self->root, self->language, self->included_ranges, self->included_range_count); +} + +void ts_tree_delete(TSTree *self) { + if (!self) return; + + SubtreePool pool = ts_subtree_pool_new(0); + ts_subtree_release(&pool, self->root); + ts_subtree_pool_delete(&pool); + ts_language_delete(self->language); + ts_free(self->included_ranges); + ts_free(self); +} + +TSNode ts_tree_root_node(const TSTree *self) { + return ts_node_new(self, &self->root, ts_subtree_padding(self->root), 0); +} + +TSNode ts_tree_root_node_with_offset( + const TSTree *self, + uint32_t offset_bytes, + TSPoint offset_extent +) { + Length offset = {offset_bytes, offset_extent}; + return ts_node_new(self, &self->root, length_add(offset, ts_subtree_padding(self->root)), 0); +} + +const TSLanguage *ts_tree_language(const TSTree *self) { + return self->language; +} + +void ts_tree_edit(TSTree *self, const TSInputEdit *edit) { + for (unsigned i = 0; i < self->included_range_count; i++) { + TSRange *range = &self->included_ranges[i]; + if (range->end_byte >= edit->old_end_byte) { + if (range->end_byte != UINT32_MAX) { + range->end_byte = edit->new_end_byte + (range->end_byte - edit->old_end_byte); + range->end_point = point_add( + edit->new_end_point, + point_sub(range->end_point, edit->old_end_point) + ); + if (range->end_byte < edit->new_end_byte) { + range->end_byte = UINT32_MAX; + range->end_point = POINT_MAX; + } + } + } else if (range->end_byte > edit->start_byte) { + range->end_byte = edit->start_byte; + range->end_point = edit->start_point; + } + if (range->start_byte >= edit->old_end_byte) { + range->start_byte = edit->new_end_byte + (range->start_byte - edit->old_end_byte); + range->start_point = point_add( + edit->new_end_point, + point_sub(range->start_point, edit->old_end_point) + ); + if (range->start_byte < edit->new_end_byte) { + range->start_byte = UINT32_MAX; + range->start_point = POINT_MAX; + } + } else if (range->start_byte > edit->start_byte) { + range->start_byte = edit->start_byte; + range->start_point = edit->start_point; + } + } + + SubtreePool pool = ts_subtree_pool_new(0); + self->root = ts_subtree_edit(self->root, edit, &pool); + ts_subtree_pool_delete(&pool); +} + +TSRange *ts_tree_included_ranges(const TSTree *self, uint32_t *length) { + *length = self->included_range_count; + TSRange *ranges = ts_calloc(self->included_range_count, sizeof(TSRange)); + memcpy(ranges, self->included_ranges, self->included_range_count * sizeof(TSRange)); + return ranges; +} + +TSRange *ts_tree_get_changed_ranges(const TSTree *old_tree, const TSTree *new_tree, uint32_t *length) { + TreeCursor cursor1 = {NULL, array_new(), 0}; + TreeCursor cursor2 = {NULL, array_new(), 0}; + ts_tree_cursor_init(&cursor1, ts_tree_root_node(old_tree)); + ts_tree_cursor_init(&cursor2, ts_tree_root_node(new_tree)); + + TSRangeArray included_range_differences = array_new(); + ts_range_array_get_changed_ranges( + old_tree->included_ranges, old_tree->included_range_count, + new_tree->included_ranges, new_tree->included_range_count, + &included_range_differences + ); + + TSRange *result; + *length = ts_subtree_get_changed_ranges( + &old_tree->root, &new_tree->root, &cursor1, &cursor2, + old_tree->language, &included_range_differences, &result + ); + + array_delete(&included_range_differences); + array_delete(&cursor1.stack); + array_delete(&cursor2.stack); + return result; +} + +#ifdef _WIN32 + +#include +#include + +int _ts_dup(HANDLE handle) { + HANDLE dup_handle; + if (!DuplicateHandle( + GetCurrentProcess(), handle, + GetCurrentProcess(), &dup_handle, + 0, FALSE, DUPLICATE_SAME_ACCESS + )) return -1; + + return _open_osfhandle((intptr_t)dup_handle, 0); +} + +void ts_tree_print_dot_graph(const TSTree *self, int fd) { + FILE *file = _fdopen(_ts_dup((HANDLE)_get_osfhandle(fd)), "a"); + ts_subtree_print_dot_graph(self->root, self->language, file); + fclose(file); +} + +#else + +#include + +int _ts_dup(int file_descriptor) { + return dup(file_descriptor); +} + +void ts_tree_print_dot_graph(const TSTree *self, int file_descriptor) { + FILE *file = fdopen(_ts_dup(file_descriptor), "a"); + ts_subtree_print_dot_graph(self->root, self->language, file); + fclose(file); +} + +#endif diff --git a/parser/nnsrc/tree.h b/parser/nnsrc/tree.h new file mode 100644 index 00000000..f012f888 --- /dev/null +++ b/parser/nnsrc/tree.h @@ -0,0 +1,31 @@ +#ifndef TREE_SITTER_TREE_H_ +#define TREE_SITTER_TREE_H_ + +#include "./subtree.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + const Subtree *child; + const Subtree *parent; + Length position; + TSSymbol alias_symbol; +} ParentCacheEntry; + +struct TSTree { + Subtree root; + const TSLanguage *language; + TSRange *included_ranges; + unsigned included_range_count; +}; + +TSTree *ts_tree_new(Subtree root, const TSLanguage *language, const TSRange *, unsigned); +TSNode ts_node_new(const TSTree *, const Subtree *, Length, TSSymbol); + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_TREE_H_ diff --git a/parser/nnsrc/tree_cursor.c b/parser/nnsrc/tree_cursor.c new file mode 100644 index 00000000..c1a3d8a4 --- /dev/null +++ b/parser/nnsrc/tree_cursor.c @@ -0,0 +1,714 @@ +#include "api.h" +#include "./alloc.h" +#include "./tree_cursor.h" +#include "./language.h" +#include "./tree.h" + +typedef struct { + Subtree parent; + const TSTree *tree; + Length position; + uint32_t child_index; + uint32_t structural_child_index; + uint32_t descendant_index; + const TSSymbol *alias_sequence; +} CursorChildIterator; + +// CursorChildIterator + +static inline bool ts_tree_cursor_is_entry_visible(const TreeCursor *self, uint32_t index) { + TreeCursorEntry *entry = &self->stack.contents[index]; + if (index == 0 || ts_subtree_visible(*entry->subtree)) { + return true; + } else if (!ts_subtree_extra(*entry->subtree)) { + TreeCursorEntry *parent_entry = &self->stack.contents[index - 1]; + return ts_language_alias_at( + self->tree->language, + parent_entry->subtree->ptr->production_id, + entry->structural_child_index + ); + } else { + return false; + } +} + +static inline CursorChildIterator ts_tree_cursor_iterate_children(const TreeCursor *self) { + TreeCursorEntry *last_entry = array_back(&self->stack); + if (ts_subtree_child_count(*last_entry->subtree) == 0) { + return (CursorChildIterator) {NULL_SUBTREE, self->tree, length_zero(), 0, 0, 0, NULL}; + } + const TSSymbol *alias_sequence = ts_language_alias_sequence( + self->tree->language, + last_entry->subtree->ptr->production_id + ); + + uint32_t descendant_index = last_entry->descendant_index; + if (ts_tree_cursor_is_entry_visible(self, self->stack.size - 1)) { + descendant_index += 1; + } + + return (CursorChildIterator) { + .tree = self->tree, + .parent = *last_entry->subtree, + .position = last_entry->position, + .child_index = 0, + .structural_child_index = 0, + .descendant_index = descendant_index, + .alias_sequence = alias_sequence, + }; +} + +static inline bool ts_tree_cursor_child_iterator_next( + CursorChildIterator *self, + TreeCursorEntry *result, + bool *visible +) { + if (!self->parent.ptr || self->child_index == self->parent.ptr->child_count) return false; + const Subtree *child = &ts_subtree_children(self->parent)[self->child_index]; + *result = (TreeCursorEntry) { + .subtree = child, + .position = self->position, + .child_index = self->child_index, + .structural_child_index = self->structural_child_index, + .descendant_index = self->descendant_index, + }; + *visible = ts_subtree_visible(*child); + bool extra = ts_subtree_extra(*child); + if (!extra) { + if (self->alias_sequence) { + *visible |= self->alias_sequence[self->structural_child_index]; + } + self->structural_child_index++; + } + + self->descendant_index += ts_subtree_visible_descendant_count(*child); + if (*visible) { + self->descendant_index += 1; + } + + self->position = length_add(self->position, ts_subtree_size(*child)); + self->child_index++; + + if (self->child_index < self->parent.ptr->child_count) { + Subtree next_child = ts_subtree_children(self->parent)[self->child_index]; + self->position = length_add(self->position, ts_subtree_padding(next_child)); + } + + return true; +} + +// Return a position that, when `b` is added to it, yields `a`. This +// can only be computed if `b` has zero rows. Otherwise, this function +// returns `LENGTH_UNDEFINED`, and the caller needs to recompute +// the position some other way. +static inline Length length_backtrack(Length a, Length b) { + if (length_is_undefined(a) || b.extent.row != 0) { + return LENGTH_UNDEFINED; + } + + Length result; + result.bytes = a.bytes - b.bytes; + result.extent.row = a.extent.row; + result.extent.column = a.extent.column - b.extent.column; + return result; +} + +static inline bool ts_tree_cursor_child_iterator_previous( + CursorChildIterator *self, + TreeCursorEntry *result, + bool *visible +) { + // this is mostly a reverse `ts_tree_cursor_child_iterator_next` taking into + // account unsigned underflow + if (!self->parent.ptr || (int8_t)self->child_index == -1) return false; + const Subtree *child = &ts_subtree_children(self->parent)[self->child_index]; + *result = (TreeCursorEntry) { + .subtree = child, + .position = self->position, + .child_index = self->child_index, + .structural_child_index = self->structural_child_index, + }; + *visible = ts_subtree_visible(*child); + bool extra = ts_subtree_extra(*child); + if (!extra && self->alias_sequence) { + *visible |= self->alias_sequence[self->structural_child_index]; + self->structural_child_index--; + } + + self->position = length_backtrack(self->position, ts_subtree_padding(*child)); + self->child_index--; + + // unsigned can underflow so compare it to child_count + if (self->child_index < self->parent.ptr->child_count) { + Subtree previous_child = ts_subtree_children(self->parent)[self->child_index]; + Length size = ts_subtree_size(previous_child); + self->position = length_backtrack(self->position, size); + } + + return true; +} + +// TSTreeCursor - lifecycle + +TSTreeCursor ts_tree_cursor_new(TSNode node) { + TSTreeCursor self = {NULL, NULL, {0, 0, 0}}; + ts_tree_cursor_init((TreeCursor *)&self, node); + return self; +} + +void ts_tree_cursor_reset(TSTreeCursor *_self, TSNode node) { + ts_tree_cursor_init((TreeCursor *)_self, node); +} + +void ts_tree_cursor_init(TreeCursor *self, TSNode node) { + self->tree = node.tree; + self->root_alias_symbol = node.context[3]; + array_clear(&self->stack); + array_push(&self->stack, ((TreeCursorEntry) { + .subtree = (const Subtree *)node.id, + .position = { + ts_node_start_byte(node), + ts_node_start_point(node) + }, + .child_index = 0, + .structural_child_index = 0, + .descendant_index = 0, + })); +} + +void ts_tree_cursor_delete(TSTreeCursor *_self) { + TreeCursor *self = (TreeCursor *)_self; + array_delete(&self->stack); +} + +// TSTreeCursor - walking the tree + +TreeCursorStep ts_tree_cursor_goto_first_child_internal(TSTreeCursor *_self) { + TreeCursor *self = (TreeCursor *)_self; + bool visible; + TreeCursorEntry entry; + CursorChildIterator iterator = ts_tree_cursor_iterate_children(self); + while (ts_tree_cursor_child_iterator_next(&iterator, &entry, &visible)) { + if (visible) { + array_push(&self->stack, entry); + return TreeCursorStepVisible; + } + if (ts_subtree_visible_child_count(*entry.subtree) > 0) { + array_push(&self->stack, entry); + return TreeCursorStepHidden; + } + } + return TreeCursorStepNone; +} + +bool ts_tree_cursor_goto_first_child(TSTreeCursor *self) { + for (;;) { + switch (ts_tree_cursor_goto_first_child_internal(self)) { + case TreeCursorStepHidden: + continue; + case TreeCursorStepVisible: + return true; + default: + return false; + } + } + return false; +} + +TreeCursorStep ts_tree_cursor_goto_last_child_internal(TSTreeCursor *_self) { + TreeCursor *self = (TreeCursor *)_self; + bool visible; + TreeCursorEntry entry; + CursorChildIterator iterator = ts_tree_cursor_iterate_children(self); + if (!iterator.parent.ptr || iterator.parent.ptr->child_count == 0) return TreeCursorStepNone; + + TreeCursorEntry last_entry = {0}; + TreeCursorStep last_step = TreeCursorStepNone; + while (ts_tree_cursor_child_iterator_next(&iterator, &entry, &visible)) { + if (visible) { + last_entry = entry; + last_step = TreeCursorStepVisible; + } + else if (ts_subtree_visible_child_count(*entry.subtree) > 0) { + last_entry = entry; + last_step = TreeCursorStepHidden; + } + } + if (last_entry.subtree) { + array_push(&self->stack, last_entry); + return last_step; + } + + return TreeCursorStepNone; +} + +bool ts_tree_cursor_goto_last_child(TSTreeCursor *self) { + for (;;) { + switch (ts_tree_cursor_goto_last_child_internal(self)) { + case TreeCursorStepHidden: + continue; + case TreeCursorStepVisible: + return true; + default: + return false; + } + } + return false; +} + +static inline int64_t ts_tree_cursor_goto_first_child_for_byte_and_point( + TSTreeCursor *_self, + uint32_t goal_byte, + TSPoint goal_point +) { + TreeCursor *self = (TreeCursor *)_self; + uint32_t initial_size = self->stack.size; + uint32_t visible_child_index = 0; + + bool did_descend; + do { + did_descend = false; + + bool visible; + TreeCursorEntry entry; + CursorChildIterator iterator = ts_tree_cursor_iterate_children(self); + while (ts_tree_cursor_child_iterator_next(&iterator, &entry, &visible)) { + Length entry_end = length_add(entry.position, ts_subtree_size(*entry.subtree)); + bool at_goal = entry_end.bytes >= goal_byte && point_gte(entry_end.extent, goal_point); + uint32_t visible_child_count = ts_subtree_visible_child_count(*entry.subtree); + if (at_goal) { + if (visible) { + array_push(&self->stack, entry); + return visible_child_index; + } + if (visible_child_count > 0) { + array_push(&self->stack, entry); + did_descend = true; + break; + } + } else if (visible) { + visible_child_index++; + } else { + visible_child_index += visible_child_count; + } + } + } while (did_descend); + + self->stack.size = initial_size; + return -1; +} + +int64_t ts_tree_cursor_goto_first_child_for_byte(TSTreeCursor *self, uint32_t goal_byte) { + return ts_tree_cursor_goto_first_child_for_byte_and_point(self, goal_byte, POINT_ZERO); +} + +int64_t ts_tree_cursor_goto_first_child_for_point(TSTreeCursor *self, TSPoint goal_point) { + return ts_tree_cursor_goto_first_child_for_byte_and_point(self, 0, goal_point); +} + +TreeCursorStep ts_tree_cursor_goto_sibling_internal( + TSTreeCursor *_self, + bool (*advance)(CursorChildIterator *, TreeCursorEntry *, bool *)) { + TreeCursor *self = (TreeCursor *)_self; + uint32_t initial_size = self->stack.size; + + while (self->stack.size > 1) { + TreeCursorEntry entry = array_pop(&self->stack); + CursorChildIterator iterator = ts_tree_cursor_iterate_children(self); + iterator.child_index = entry.child_index; + iterator.structural_child_index = entry.structural_child_index; + iterator.position = entry.position; + iterator.descendant_index = entry.descendant_index; + + bool visible = false; + advance(&iterator, &entry, &visible); + if (visible && self->stack.size + 1 < initial_size) break; + + while (advance(&iterator, &entry, &visible)) { + if (visible) { + array_push(&self->stack, entry); + return TreeCursorStepVisible; + } + + if (ts_subtree_visible_child_count(*entry.subtree)) { + array_push(&self->stack, entry); + return TreeCursorStepHidden; + } + } + } + + self->stack.size = initial_size; + return TreeCursorStepNone; +} + +TreeCursorStep ts_tree_cursor_goto_next_sibling_internal(TSTreeCursor *_self) { + return ts_tree_cursor_goto_sibling_internal(_self, ts_tree_cursor_child_iterator_next); +} + +bool ts_tree_cursor_goto_next_sibling(TSTreeCursor *self) { + switch (ts_tree_cursor_goto_next_sibling_internal(self)) { + case TreeCursorStepHidden: + ts_tree_cursor_goto_first_child(self); + return true; + case TreeCursorStepVisible: + return true; + default: + return false; + } +} + +TreeCursorStep ts_tree_cursor_goto_previous_sibling_internal(TSTreeCursor *_self) { + // since subtracting across row loses column information, we may have to + // restore it + TreeCursor *self = (TreeCursor *)_self; + + // for that, save current position before traversing + TreeCursorStep step = ts_tree_cursor_goto_sibling_internal( + _self, ts_tree_cursor_child_iterator_previous); + if (step == TreeCursorStepNone) + return step; + + // if length is already valid, there's no need to recompute it + if (!length_is_undefined(array_back(&self->stack)->position)) + return step; + + // restore position from the parent node + const TreeCursorEntry *parent = &self->stack.contents[self->stack.size - 2]; + Length position = parent->position; + uint32_t child_index = array_back(&self->stack)->child_index; + const Subtree *children = ts_subtree_children((*(parent->subtree))); + + if (child_index > 0) { + // skip first child padding since its position should match the position of the parent + position = length_add(position, ts_subtree_size(children[0])); + for (uint32_t i = 1; i < child_index; ++i) { + position = length_add(position, ts_subtree_total_size(children[i])); + } + position = length_add(position, ts_subtree_padding(children[child_index])); + } + + array_back(&self->stack)->position = position; + + return step; +} + +bool ts_tree_cursor_goto_previous_sibling(TSTreeCursor *self) { + switch (ts_tree_cursor_goto_previous_sibling_internal(self)) { + case TreeCursorStepHidden: + ts_tree_cursor_goto_last_child(self); + return true; + case TreeCursorStepVisible: + return true; + default: + return false; + } +} + +bool ts_tree_cursor_goto_parent(TSTreeCursor *_self) { + TreeCursor *self = (TreeCursor *)_self; + for (unsigned i = self->stack.size - 2; i + 1 > 0; i--) { + if (ts_tree_cursor_is_entry_visible(self, i)) { + self->stack.size = i + 1; + return true; + } + } + return false; +} + +void ts_tree_cursor_goto_descendant( + TSTreeCursor *_self, + uint32_t goal_descendant_index +) { + TreeCursor *self = (TreeCursor *)_self; + + // Ascend to the lowest ancestor that contains the goal node. + for (;;) { + uint32_t i = self->stack.size - 1; + TreeCursorEntry *entry = &self->stack.contents[i]; + uint32_t next_descendant_index = + entry->descendant_index + + (ts_tree_cursor_is_entry_visible(self, i) ? 1 : 0) + + ts_subtree_visible_descendant_count(*entry->subtree); + if ( + (entry->descendant_index <= goal_descendant_index) && + (next_descendant_index > goal_descendant_index) + ) { + break; + } else if (self->stack.size <= 1) { + return; + } else { + self->stack.size--; + } + } + + // Descend to the goal node. + bool did_descend = true; + do { + did_descend = false; + bool visible; + TreeCursorEntry entry; + CursorChildIterator iterator = ts_tree_cursor_iterate_children(self); + if (iterator.descendant_index > goal_descendant_index) { + return; + } + + while (ts_tree_cursor_child_iterator_next(&iterator, &entry, &visible)) { + if (iterator.descendant_index > goal_descendant_index) { + array_push(&self->stack, entry); + if (visible && entry.descendant_index == goal_descendant_index) { + return; + } else { + did_descend = true; + break; + } + } + } + } while (did_descend); +} + +uint32_t ts_tree_cursor_current_descendant_index(const TSTreeCursor *_self) { + const TreeCursor *self = (const TreeCursor *)_self; + TreeCursorEntry *last_entry = array_back(&self->stack); + return last_entry->descendant_index; +} + +TSNode ts_tree_cursor_current_node(const TSTreeCursor *_self) { + const TreeCursor *self = (const TreeCursor *)_self; + TreeCursorEntry *last_entry = array_back(&self->stack); + TSSymbol alias_symbol = self->root_alias_symbol; + if (self->stack.size > 1 && !ts_subtree_extra(*last_entry->subtree)) { + TreeCursorEntry *parent_entry = &self->stack.contents[self->stack.size - 2]; + alias_symbol = ts_language_alias_at( + self->tree->language, + parent_entry->subtree->ptr->production_id, + last_entry->structural_child_index + ); + } + return ts_node_new( + self->tree, + last_entry->subtree, + last_entry->position, + alias_symbol + ); +} + +// Private - Get various facts about the current node that are needed +// when executing tree queries. +void ts_tree_cursor_current_status( + const TSTreeCursor *_self, + TSFieldId *field_id, + bool *has_later_siblings, + bool *has_later_named_siblings, + bool *can_have_later_siblings_with_this_field, + TSSymbol *supertypes, + unsigned *supertype_count +) { + const TreeCursor *self = (const TreeCursor *)_self; + unsigned max_supertypes = *supertype_count; + *field_id = 0; + *supertype_count = 0; + *has_later_siblings = false; + *has_later_named_siblings = false; + *can_have_later_siblings_with_this_field = false; + + // Walk up the tree, visiting the current node and its invisible ancestors, + // because fields can refer to nodes through invisible *wrapper* nodes, + for (unsigned i = self->stack.size - 1; i > 0; i--) { + TreeCursorEntry *entry = &self->stack.contents[i]; + TreeCursorEntry *parent_entry = &self->stack.contents[i - 1]; + + const TSSymbol *alias_sequence = ts_language_alias_sequence( + self->tree->language, + parent_entry->subtree->ptr->production_id + ); + + #define subtree_symbol(subtree, structural_child_index) \ + (( \ + !ts_subtree_extra(subtree) && \ + alias_sequence && \ + alias_sequence[structural_child_index] \ + ) ? \ + alias_sequence[structural_child_index] : \ + ts_subtree_symbol(subtree)) + + // Stop walking up when a visible ancestor is found. + TSSymbol entry_symbol = subtree_symbol( + *entry->subtree, + entry->structural_child_index + ); + TSSymbolMetadata entry_metadata = ts_language_symbol_metadata( + self->tree->language, + entry_symbol + ); + if (i != self->stack.size - 1 && entry_metadata.visible) break; + + // Record any supertypes + if (entry_metadata.supertype && *supertype_count < max_supertypes) { + supertypes[*supertype_count] = entry_symbol; + (*supertype_count)++; + } + + // Determine if the current node has later siblings. + if (!*has_later_siblings) { + unsigned sibling_count = parent_entry->subtree->ptr->child_count; + unsigned structural_child_index = entry->structural_child_index; + if (!ts_subtree_extra(*entry->subtree)) structural_child_index++; + for (unsigned j = entry->child_index + 1; j < sibling_count; j++) { + Subtree sibling = ts_subtree_children(*parent_entry->subtree)[j]; + TSSymbolMetadata sibling_metadata = ts_language_symbol_metadata( + self->tree->language, + subtree_symbol(sibling, structural_child_index) + ); + if (sibling_metadata.visible) { + *has_later_siblings = true; + if (*has_later_named_siblings) break; + if (sibling_metadata.named) { + *has_later_named_siblings = true; + break; + } + } else if (ts_subtree_visible_child_count(sibling) > 0) { + *has_later_siblings = true; + if (*has_later_named_siblings) break; + if (sibling.ptr->named_child_count > 0) { + *has_later_named_siblings = true; + break; + } + } + if (!ts_subtree_extra(sibling)) structural_child_index++; + } + } + + #undef subtree_symbol + + if (!ts_subtree_extra(*entry->subtree)) { + const TSFieldMapEntry *field_map, *field_map_end; + ts_language_field_map( + self->tree->language, + parent_entry->subtree->ptr->production_id, + &field_map, &field_map_end + ); + + // Look for a field name associated with the current node. + if (!*field_id) { + for (const TSFieldMapEntry *map = field_map; map < field_map_end; map++) { + if (!map->inherited && map->child_index == entry->structural_child_index) { + *field_id = map->field_id; + break; + } + } + } + + // Determine if the current node can have later siblings with the same field name. + if (*field_id) { + for (const TSFieldMapEntry *map = field_map; map < field_map_end; map++) { + if ( + map->field_id == *field_id && + map->child_index > entry->structural_child_index + ) { + *can_have_later_siblings_with_this_field = true; + break; + } + } + } + } + } +} + +uint32_t ts_tree_cursor_current_depth(const TSTreeCursor *_self) { + const TreeCursor *self = (const TreeCursor *)_self; + uint32_t depth = 0; + for (unsigned i = 1; i < self->stack.size; i++) { + if (ts_tree_cursor_is_entry_visible(self, i)) { + depth++; + } + } + return depth; +} + +TSNode ts_tree_cursor_parent_node(const TSTreeCursor *_self) { + const TreeCursor *self = (const TreeCursor *)_self; + for (int i = (int)self->stack.size - 2; i >= 0; i--) { + TreeCursorEntry *entry = &self->stack.contents[i]; + bool is_visible = true; + TSSymbol alias_symbol = 0; + if (i > 0) { + TreeCursorEntry *parent_entry = &self->stack.contents[i - 1]; + alias_symbol = ts_language_alias_at( + self->tree->language, + parent_entry->subtree->ptr->production_id, + entry->structural_child_index + ); + is_visible = (alias_symbol != 0) || ts_subtree_visible(*entry->subtree); + } + if (is_visible) { + return ts_node_new( + self->tree, + entry->subtree, + entry->position, + alias_symbol + ); + } + } + return ts_node_new(NULL, NULL, length_zero(), 0); +} + +TSFieldId ts_tree_cursor_current_field_id(const TSTreeCursor *_self) { + const TreeCursor *self = (const TreeCursor *)_self; + + // Walk up the tree, visiting the current node and its invisible ancestors. + for (unsigned i = self->stack.size - 1; i > 0; i--) { + TreeCursorEntry *entry = &self->stack.contents[i]; + TreeCursorEntry *parent_entry = &self->stack.contents[i - 1]; + + // Stop walking up when another visible node is found. + if ( + i != self->stack.size - 1 && + ts_tree_cursor_is_entry_visible(self, i) + ) break; + + if (ts_subtree_extra(*entry->subtree)) break; + + const TSFieldMapEntry *field_map, *field_map_end; + ts_language_field_map( + self->tree->language, + parent_entry->subtree->ptr->production_id, + &field_map, &field_map_end + ); + for (const TSFieldMapEntry *map = field_map; map < field_map_end; map++) { + if (!map->inherited && map->child_index == entry->structural_child_index) { + return map->field_id; + } + } + } + return 0; +} + +const char *ts_tree_cursor_current_field_name(const TSTreeCursor *_self) { + TSFieldId id = ts_tree_cursor_current_field_id(_self); + if (id) { + const TreeCursor *self = (const TreeCursor *)_self; + return self->tree->language->field_names[id]; + } else { + return NULL; + } +} + +TSTreeCursor ts_tree_cursor_copy(const TSTreeCursor *_cursor) { + const TreeCursor *cursor = (const TreeCursor *)_cursor; + TSTreeCursor res = {NULL, NULL, {0, 0}}; + TreeCursor *copy = (TreeCursor *)&res; + copy->tree = cursor->tree; + copy->root_alias_symbol = cursor->root_alias_symbol; + array_init(©->stack); + array_push_all(©->stack, &cursor->stack); + return res; +} + +void ts_tree_cursor_reset_to(TSTreeCursor *_dst, const TSTreeCursor *_src) { + const TreeCursor *cursor = (const TreeCursor *)_src; + TreeCursor *copy = (TreeCursor *)_dst; + copy->tree = cursor->tree; + copy->root_alias_symbol = cursor->root_alias_symbol; + array_clear(©->stack); + array_push_all(©->stack, &cursor->stack); +} diff --git a/parser/nnsrc/tree_cursor.h b/parser/nnsrc/tree_cursor.h new file mode 100644 index 00000000..96a386df --- /dev/null +++ b/parser/nnsrc/tree_cursor.h @@ -0,0 +1,48 @@ +#ifndef TREE_SITTER_TREE_CURSOR_H_ +#define TREE_SITTER_TREE_CURSOR_H_ + +#include "./subtree.h" + +typedef struct { + const Subtree *subtree; + Length position; + uint32_t child_index; + uint32_t structural_child_index; + uint32_t descendant_index; +} TreeCursorEntry; + +typedef struct { + const TSTree *tree; + Array(TreeCursorEntry) stack; + TSSymbol root_alias_symbol; +} TreeCursor; + +typedef enum { + TreeCursorStepNone, + TreeCursorStepHidden, + TreeCursorStepVisible, +} TreeCursorStep; + +void ts_tree_cursor_init(TreeCursor *, TSNode); +void ts_tree_cursor_current_status( + const TSTreeCursor *, + TSFieldId *, + bool *, + bool *, + bool *, + TSSymbol *, + unsigned * +); + +TreeCursorStep ts_tree_cursor_goto_first_child_internal(TSTreeCursor *); +TreeCursorStep ts_tree_cursor_goto_next_sibling_internal(TSTreeCursor *); + +static inline Subtree ts_tree_cursor_current_subtree(const TSTreeCursor *_self) { + const TreeCursor *self = (const TreeCursor *)_self; + TreeCursorEntry *last_entry = array_back(&self->stack); + return *last_entry->subtree; +} + +TSNode ts_tree_cursor_parent_node(const TSTreeCursor *); + +#endif // TREE_SITTER_TREE_CURSOR_H_ diff --git a/parser/nnsrc/unicode.h b/parser/nnsrc/unicode.h new file mode 100644 index 00000000..0fba56a6 --- /dev/null +++ b/parser/nnsrc/unicode.h @@ -0,0 +1,50 @@ +#ifndef TREE_SITTER_UNICODE_H_ +#define TREE_SITTER_UNICODE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#define U_EXPORT +#define U_EXPORT2 +#include "unicode/utf8.h" +#include "unicode/utf16.h" + +static const int32_t TS_DECODE_ERROR = U_SENTINEL; + +// These functions read one unicode code point from the given string, +// returning the number of bytes consumed. +typedef uint32_t (*UnicodeDecodeFunction)( + const uint8_t *string, + uint32_t length, + int32_t *code_point +); + +static inline uint32_t ts_decode_utf8( + const uint8_t *string, + uint32_t length, + int32_t *code_point +) { + uint32_t i = 0; + U8_NEXT(string, i, length, *code_point); + return i; +} + +static inline uint32_t ts_decode_utf16( + const uint8_t *string, + uint32_t length, + int32_t *code_point +) { + uint32_t i = 0; + U16_NEXT(((uint16_t *)string), i, length, *code_point); + return i * 2; +} + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_UNICODE_H_ diff --git a/parser/nnsrc/unicode/ICU_SHA b/parser/nnsrc/unicode/ICU_SHA new file mode 100644 index 00000000..3622283b --- /dev/null +++ b/parser/nnsrc/unicode/ICU_SHA @@ -0,0 +1 @@ +552b01f61127d30d6589aa4bf99468224979b661 diff --git a/parser/nnsrc/unicode/LICENSE b/parser/nnsrc/unicode/LICENSE new file mode 100644 index 00000000..2e01e368 --- /dev/null +++ b/parser/nnsrc/unicode/LICENSE @@ -0,0 +1,414 @@ +COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later) + +Copyright © 1991-2019 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in https://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. + +--------------------- + +Third-Party Software Licenses + +This section contains third-party software notices and/or additional +terms for licensed third-party software components included within ICU +libraries. + +1. ICU License - ICU 1.8.1 to ICU 57.1 + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1995-2016 International Business Machines Corporation and others +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, and/or sell copies of the Software, and to permit persons +to whom the Software is furnished to do so, provided that the above +copyright notice(s) and this permission notice appear in all copies of +the Software and that both the above copyright notice(s) and this +permission notice appear in supporting documentation. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY +SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, use +or other dealings in this Software without prior written authorization +of the copyright holder. + +All trademarks and registered trademarks mentioned herein are the +property of their respective owners. + +2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt) + + # The Google Chrome software developed by Google is licensed under + # the BSD license. Other software included in this distribution is + # provided under other licenses, as set forth below. + # + # The BSD License + # http://opensource.org/licenses/bsd-license.php + # Copyright (C) 2006-2008, Google Inc. + # + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions are met: + # + # Redistributions of source code must retain the above copyright notice, + # this list of conditions and the following disclaimer. + # Redistributions in binary form must reproduce the above + # copyright notice, this list of conditions and the following + # disclaimer in the documentation and/or other materials provided with + # the distribution. + # Neither the name of Google Inc. nor the names of its + # contributors may be used to endorse or promote products derived from + # this software without specific prior written permission. + # + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + # + # + # The word list in cjdict.txt are generated by combining three word lists + # listed below with further processing for compound word breaking. The + # frequency is generated with an iterative training against Google web + # corpora. + # + # * Libtabe (Chinese) + # - https://sourceforge.net/project/?group_id=1519 + # - Its license terms and conditions are shown below. + # + # * IPADIC (Japanese) + # - http://chasen.aist-nara.ac.jp/chasen/distribution.html + # - Its license terms and conditions are shown below. + # + # ---------COPYING.libtabe ---- BEGIN-------------------- + # + # /* + # * Copyright (c) 1999 TaBE Project. + # * Copyright (c) 1999 Pai-Hsiang Hsiao. + # * All rights reserved. + # * + # * Redistribution and use in source and binary forms, with or without + # * modification, are permitted provided that the following conditions + # * are met: + # * + # * . Redistributions of source code must retain the above copyright + # * notice, this list of conditions and the following disclaimer. + # * . Redistributions in binary form must reproduce the above copyright + # * notice, this list of conditions and the following disclaimer in + # * the documentation and/or other materials provided with the + # * distribution. + # * . Neither the name of the TaBE Project nor the names of its + # * contributors may be used to endorse or promote products derived + # * from this software without specific prior written permission. + # * + # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # * OF THE POSSIBILITY OF SUCH DAMAGE. + # */ + # + # /* + # * Copyright (c) 1999 Computer Systems and Communication Lab, + # * Institute of Information Science, Academia + # * Sinica. All rights reserved. + # * + # * Redistribution and use in source and binary forms, with or without + # * modification, are permitted provided that the following conditions + # * are met: + # * + # * . Redistributions of source code must retain the above copyright + # * notice, this list of conditions and the following disclaimer. + # * . Redistributions in binary form must reproduce the above copyright + # * notice, this list of conditions and the following disclaimer in + # * the documentation and/or other materials provided with the + # * distribution. + # * . Neither the name of the Computer Systems and Communication Lab + # * nor the names of its contributors may be used to endorse or + # * promote products derived from this software without specific + # * prior written permission. + # * + # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # * OF THE POSSIBILITY OF SUCH DAMAGE. + # */ + # + # Copyright 1996 Chih-Hao Tsai @ Beckman Institute, + # University of Illinois + # c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4 + # + # ---------------COPYING.libtabe-----END-------------------------------- + # + # + # ---------------COPYING.ipadic-----BEGIN------------------------------- + # + # Copyright 2000, 2001, 2002, 2003 Nara Institute of Science + # and Technology. All Rights Reserved. + # + # Use, reproduction, and distribution of this software is permitted. + # Any copy of this software, whether in its original form or modified, + # must include both the above copyright notice and the following + # paragraphs. + # + # Nara Institute of Science and Technology (NAIST), + # the copyright holders, disclaims all warranties with regard to this + # software, including all implied warranties of merchantability and + # fitness, in no event shall NAIST be liable for + # any special, indirect or consequential damages or any damages + # whatsoever resulting from loss of use, data or profits, whether in an + # action of contract, negligence or other tortuous action, arising out + # of or in connection with the use or performance of this software. + # + # A large portion of the dictionary entries + # originate from ICOT Free Software. The following conditions for ICOT + # Free Software applies to the current dictionary as well. + # + # Each User may also freely distribute the Program, whether in its + # original form or modified, to any third party or parties, PROVIDED + # that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear + # on, or be attached to, the Program, which is distributed substantially + # in the same form as set out herein and that such intended + # distribution, if actually made, will neither violate or otherwise + # contravene any of the laws and regulations of the countries having + # jurisdiction over the User or the intended distribution itself. + # + # NO WARRANTY + # + # The program was produced on an experimental basis in the course of the + # research and development conducted during the project and is provided + # to users as so produced on an experimental basis. Accordingly, the + # program is provided without any warranty whatsoever, whether express, + # implied, statutory or otherwise. The term "warranty" used herein + # includes, but is not limited to, any warranty of the quality, + # performance, merchantability and fitness for a particular purpose of + # the program and the nonexistence of any infringement or violation of + # any right of any third party. + # + # Each user of the program will agree and understand, and be deemed to + # have agreed and understood, that there is no warranty whatsoever for + # the program and, accordingly, the entire risk arising from or + # otherwise connected with the program is assumed by the user. + # + # Therefore, neither ICOT, the copyright holder, or any other + # organization that participated in or was otherwise related to the + # development of the program and their respective officials, directors, + # officers and other employees shall be held liable for any and all + # damages, including, without limitation, general, special, incidental + # and consequential damages, arising out of or otherwise in connection + # with the use or inability to use the program or any product, material + # or result produced or otherwise obtained by using the program, + # regardless of whether they have been advised of, or otherwise had + # knowledge of, the possibility of such damages at any time during the + # project or thereafter. Each user will be deemed to have agreed to the + # foregoing by his or her commencement of use of the program. The term + # "use" as used herein includes, but is not limited to, the use, + # modification, copying and distribution of the program and the + # production of secondary products from the program. + # + # In the case where the program, whether in its original form or + # modified, was distributed or delivered to or received by a user from + # any person, organization or entity other than ICOT, unless it makes or + # grants independently of ICOT any specific warranty to the user in + # writing, such person, organization or entity, will also be exempted + # from and not be held liable to the user for any such damages as noted + # above as far as the program is concerned. + # + # ---------------COPYING.ipadic-----END---------------------------------- + +3. Lao Word Break Dictionary Data (laodict.txt) + + # Copyright (c) 2013 International Business Machines Corporation + # and others. All Rights Reserved. + # + # Project: http://code.google.com/p/lao-dictionary/ + # Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt + # License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt + # (copied below) + # + # This file is derived from the above dictionary, with slight + # modifications. + # ---------------------------------------------------------------------- + # Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell. + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, + # are permitted provided that the following conditions are met: + # + # + # Redistributions of source code must retain the above copyright notice, this + # list of conditions and the following disclaimer. Redistributions in + # binary form must reproduce the above copyright notice, this list of + # conditions and the following disclaimer in the documentation and/or + # other materials provided with the distribution. + # + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # OF THE POSSIBILITY OF SUCH DAMAGE. + # -------------------------------------------------------------------------- + +4. Burmese Word Break Dictionary Data (burmesedict.txt) + + # Copyright (c) 2014 International Business Machines Corporation + # and others. All Rights Reserved. + # + # This list is part of a project hosted at: + # github.com/kanyawtech/myanmar-karen-word-lists + # + # -------------------------------------------------------------------------- + # Copyright (c) 2013, LeRoy Benjamin Sharon + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions + # are met: Redistributions of source code must retain the above + # copyright notice, this list of conditions and the following + # disclaimer. Redistributions in binary form must reproduce the + # above copyright notice, this list of conditions and the following + # disclaimer in the documentation and/or other materials provided + # with the distribution. + # + # Neither the name Myanmar Karen Word Lists, nor the names of its + # contributors may be used to endorse or promote products derived + # from this software without specific prior written permission. + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS + # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + # SUCH DAMAGE. + # -------------------------------------------------------------------------- + +5. Time Zone Database + + ICU uses the public domain data and code derived from Time Zone +Database for its time zone support. The ownership of the TZ database +is explained in BCP 175: Procedure for Maintaining the Time Zone +Database section 7. + + # 7. Database Ownership + # + # The TZ database itself is not an IETF Contribution or an IETF + # document. Rather it is a pre-existing and regularly updated work + # that is in the public domain, and is intended to remain in the + # public domain. Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do + # not apply to the TZ Database or contributions that individuals make + # to it. Should any claims be made and substantiated against the TZ + # Database, the organization that is providing the IANA + # Considerations defined in this RFC, under the memorandum of + # understanding with the IETF, currently ICANN, may act in accordance + # with all competent court orders. No ownership claims will be made + # by ICANN or the IETF Trust on the database or the code. Any person + # making a contribution to the database or code waives all rights to + # future claims in that contribution or in the TZ Database. + +6. Google double-conversion + +Copyright 2006-2011, the V8 project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/parser/nnsrc/unicode/README.md b/parser/nnsrc/unicode/README.md new file mode 100644 index 00000000..623b8e38 --- /dev/null +++ b/parser/nnsrc/unicode/README.md @@ -0,0 +1,29 @@ +# ICU Parts + +This directory contains a small subset of files from the Unicode organization's [ICU repository](https://github.com/unicode-org/icu). + +### License + +The license for these files is contained in the `LICENSE` file within this directory. + +### Contents + +* Source files taken from the [`icu4c/source/common/unicode`](https://github.com/unicode-org/icu/tree/552b01f61127d30d6589aa4bf99468224979b661/icu4c/source/common/unicode) directory: + * `utf8.h` + * `utf16.h` + * `umachine.h` +* Empty source files that are referenced by the above source files, but whose original contents in `libicu` are not needed: + * `ptypes.h` + * `urename.h` + * `utf.h` +* `ICU_SHA` - File containing the Git SHA of the commit in the `icu` repository from which the files were obtained. +* `LICENSE` - The license file from the [`icu4c`](https://github.com/unicode-org/icu/tree/552b01f61127d30d6589aa4bf99468224979b661/icu4c) directory of the `icu` repository. +* `README.md` - This text file. + +### Updating ICU + +To incorporate changes from the upstream `icu` repository: + +* Update `ICU_SHA` with the new Git SHA. +* Update `LICENSE` with the license text from the directory mentioned above. +* Update `utf8.h`, `utf16.h`, and `umachine.h` with their new contents in the `icu` repository. diff --git a/parser/nnsrc/unicode/ptypes.h b/parser/nnsrc/unicode/ptypes.h new file mode 100644 index 00000000..ac79ad0f --- /dev/null +++ b/parser/nnsrc/unicode/ptypes.h @@ -0,0 +1 @@ +// This file must exist in order for `utf8.h` and `utf16.h` to be used. diff --git a/parser/nnsrc/unicode/umachine.h b/parser/nnsrc/unicode/umachine.h new file mode 100644 index 00000000..9195824d --- /dev/null +++ b/parser/nnsrc/unicode/umachine.h @@ -0,0 +1,448 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +****************************************************************************** +* +* Copyright (C) 1999-2015, International Business Machines +* Corporation and others. All Rights Reserved. +* +****************************************************************************** +* file name: umachine.h +* encoding: UTF-8 +* tab size: 8 (not used) +* indentation:4 +* +* created on: 1999sep13 +* created by: Markus W. Scherer +* +* This file defines basic types and constants for ICU to be +* platform-independent. umachine.h and utf.h are included into +* utypes.h to provide all the general definitions for ICU. +* All of these definitions used to be in utypes.h before +* the UTF-handling macros made this unmaintainable. +*/ + +#ifndef __UMACHINE_H__ +#define __UMACHINE_H__ + + +/** + * \file + * \brief Basic types and constants for UTF + * + *

Basic types and constants for UTF

+ * This file defines basic types and constants for utf.h to be + * platform-independent. umachine.h and utf.h are included into + * utypes.h to provide all the general definitions for ICU. + * All of these definitions used to be in utypes.h before + * the UTF-handling macros made this unmaintainable. + * + */ +/*==========================================================================*/ +/* Include platform-dependent definitions */ +/* which are contained in the platform-specific file platform.h */ +/*==========================================================================*/ + +#include "unicode/ptypes.h" /* platform.h is included in ptypes.h */ + +/* + * ANSI C headers: + * stddef.h defines wchar_t + */ +#include + +/*==========================================================================*/ +/* For C wrappers, we use the symbol U_STABLE. */ +/* This works properly if the includer is C or C++. */ +/* Functions are declared U_STABLE return-type U_EXPORT2 function-name()... */ +/*==========================================================================*/ + +/** + * \def U_CFUNC + * This is used in a declaration of a library private ICU C function. + * @stable ICU 2.4 + */ + +/** + * \def U_CDECL_BEGIN + * This is used to begin a declaration of a library private ICU C API. + * @stable ICU 2.4 + */ + +/** + * \def U_CDECL_END + * This is used to end a declaration of a library private ICU C API + * @stable ICU 2.4 + */ + +#ifdef __cplusplus +# define U_CFUNC extern "C" +# define U_CDECL_BEGIN extern "C" { +# define U_CDECL_END } +#else +# define U_CFUNC extern +# define U_CDECL_BEGIN +# define U_CDECL_END +#endif + +#ifndef U_ATTRIBUTE_DEPRECATED +/** + * \def U_ATTRIBUTE_DEPRECATED + * This is used for GCC specific attributes + * @internal + */ +#if U_GCC_MAJOR_MINOR >= 302 +# define U_ATTRIBUTE_DEPRECATED __attribute__ ((deprecated)) +/** + * \def U_ATTRIBUTE_DEPRECATED + * This is used for Visual C++ specific attributes + * @internal + */ +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) +# define U_ATTRIBUTE_DEPRECATED __declspec(deprecated) +#else +# define U_ATTRIBUTE_DEPRECATED +#endif +#endif + +/** This is used to declare a function as a public ICU C API @stable ICU 2.0*/ +#define U_CAPI U_CFUNC U_EXPORT +/** This is used to declare a function as a stable public ICU C API*/ +#define U_STABLE U_CAPI +/** This is used to declare a function as a draft public ICU C API */ +#define U_DRAFT U_CAPI +/** This is used to declare a function as a deprecated public ICU C API */ +#define U_DEPRECATED U_CAPI U_ATTRIBUTE_DEPRECATED +/** This is used to declare a function as an obsolete public ICU C API */ +#define U_OBSOLETE U_CAPI +/** This is used to declare a function as an internal ICU C API */ +#define U_INTERNAL U_CAPI + +/** + * \def U_OVERRIDE + * Defined to the C++11 "override" keyword if available. + * Denotes a class or member which is an override of the base class. + * May result in an error if it applied to something not an override. + * @internal + */ +#ifndef U_OVERRIDE +#define U_OVERRIDE override +#endif + +/** + * \def U_FINAL + * Defined to the C++11 "final" keyword if available. + * Denotes a class or member which may not be overridden in subclasses. + * May result in an error if subclasses attempt to override. + * @internal + */ +#if !defined(U_FINAL) || defined(U_IN_DOXYGEN) +#define U_FINAL final +#endif + +// Before ICU 65, function-like, multi-statement ICU macros were just defined as +// series of statements wrapped in { } blocks and the caller could choose to +// either treat them as if they were actual functions and end the invocation +// with a trailing ; creating an empty statement after the block or else omit +// this trailing ; using the knowledge that the macro would expand to { }. +// +// But doing so doesn't work well with macros that look like functions and +// compiler warnings about empty statements (ICU-20601) and ICU 65 therefore +// switches to the standard solution of wrapping such macros in do { } while. +// +// This will however break existing code that depends on being able to invoke +// these macros without a trailing ; so to be able to remain compatible with +// such code the wrapper is itself defined as macros so that it's possible to +// build ICU 65 and later with the old macro behaviour, like this: +// +// CPPFLAGS='-DUPRV_BLOCK_MACRO_BEGIN="" -DUPRV_BLOCK_MACRO_END=""' +// runConfigureICU ... + +/** + * \def UPRV_BLOCK_MACRO_BEGIN + * Defined as the "do" keyword by default. + * @internal + */ +#ifndef UPRV_BLOCK_MACRO_BEGIN +#define UPRV_BLOCK_MACRO_BEGIN do +#endif + +/** + * \def UPRV_BLOCK_MACRO_END + * Defined as "while (FALSE)" by default. + * @internal + */ +#ifndef UPRV_BLOCK_MACRO_END +#define UPRV_BLOCK_MACRO_END while (FALSE) +#endif + +/*==========================================================================*/ +/* limits for int32_t etc., like in POSIX inttypes.h */ +/*==========================================================================*/ + +#ifndef INT8_MIN +/** The smallest value an 8 bit signed integer can hold @stable ICU 2.0 */ +# define INT8_MIN ((int8_t)(-128)) +#endif +#ifndef INT16_MIN +/** The smallest value a 16 bit signed integer can hold @stable ICU 2.0 */ +# define INT16_MIN ((int16_t)(-32767-1)) +#endif +#ifndef INT32_MIN +/** The smallest value a 32 bit signed integer can hold @stable ICU 2.0 */ +# define INT32_MIN ((int32_t)(-2147483647-1)) +#endif + +#ifndef INT8_MAX +/** The largest value an 8 bit signed integer can hold @stable ICU 2.0 */ +# define INT8_MAX ((int8_t)(127)) +#endif +#ifndef INT16_MAX +/** The largest value a 16 bit signed integer can hold @stable ICU 2.0 */ +# define INT16_MAX ((int16_t)(32767)) +#endif +#ifndef INT32_MAX +/** The largest value a 32 bit signed integer can hold @stable ICU 2.0 */ +# define INT32_MAX ((int32_t)(2147483647)) +#endif + +#ifndef UINT8_MAX +/** The largest value an 8 bit unsigned integer can hold @stable ICU 2.0 */ +# define UINT8_MAX ((uint8_t)(255U)) +#endif +#ifndef UINT16_MAX +/** The largest value a 16 bit unsigned integer can hold @stable ICU 2.0 */ +# define UINT16_MAX ((uint16_t)(65535U)) +#endif +#ifndef UINT32_MAX +/** The largest value a 32 bit unsigned integer can hold @stable ICU 2.0 */ +# define UINT32_MAX ((uint32_t)(4294967295U)) +#endif + +#if defined(U_INT64_T_UNAVAILABLE) +# error int64_t is required for decimal format and rule-based number format. +#else +# ifndef INT64_C +/** + * Provides a platform independent way to specify a signed 64-bit integer constant. + * note: may be wrong for some 64 bit platforms - ensure your compiler provides INT64_C + * @stable ICU 2.8 + */ +# define INT64_C(c) c ## LL +# endif +# ifndef UINT64_C +/** + * Provides a platform independent way to specify an unsigned 64-bit integer constant. + * note: may be wrong for some 64 bit platforms - ensure your compiler provides UINT64_C + * @stable ICU 2.8 + */ +# define UINT64_C(c) c ## ULL +# endif +# ifndef U_INT64_MIN +/** The smallest value a 64 bit signed integer can hold @stable ICU 2.8 */ +# define U_INT64_MIN ((int64_t)(INT64_C(-9223372036854775807)-1)) +# endif +# ifndef U_INT64_MAX +/** The largest value a 64 bit signed integer can hold @stable ICU 2.8 */ +# define U_INT64_MAX ((int64_t)(INT64_C(9223372036854775807))) +# endif +# ifndef U_UINT64_MAX +/** The largest value a 64 bit unsigned integer can hold @stable ICU 2.8 */ +# define U_UINT64_MAX ((uint64_t)(UINT64_C(18446744073709551615))) +# endif +#endif + +/*==========================================================================*/ +/* Boolean data type */ +/*==========================================================================*/ + +/** The ICU boolean type @stable ICU 2.0 */ +typedef int8_t UBool; + +#ifndef TRUE +/** The TRUE value of a UBool @stable ICU 2.0 */ +# define TRUE 1 +#endif +#ifndef FALSE +/** The FALSE value of a UBool @stable ICU 2.0 */ +# define FALSE 0 +#endif + + +/*==========================================================================*/ +/* Unicode data types */ +/*==========================================================================*/ + +/* wchar_t-related definitions -------------------------------------------- */ + +/* + * \def U_WCHAR_IS_UTF16 + * Defined if wchar_t uses UTF-16. + * + * @stable ICU 2.0 + */ +/* + * \def U_WCHAR_IS_UTF32 + * Defined if wchar_t uses UTF-32. + * + * @stable ICU 2.0 + */ +#if !defined(U_WCHAR_IS_UTF16) && !defined(U_WCHAR_IS_UTF32) +# ifdef __STDC_ISO_10646__ +# if (U_SIZEOF_WCHAR_T==2) +# define U_WCHAR_IS_UTF16 +# elif (U_SIZEOF_WCHAR_T==4) +# define U_WCHAR_IS_UTF32 +# endif +# elif defined __UCS2__ +# if (U_PF_OS390 <= U_PLATFORM && U_PLATFORM <= U_PF_OS400) && (U_SIZEOF_WCHAR_T==2) +# define U_WCHAR_IS_UTF16 +# endif +# elif defined(__UCS4__) || (U_PLATFORM == U_PF_OS400 && defined(__UTF32__)) +# if (U_SIZEOF_WCHAR_T==4) +# define U_WCHAR_IS_UTF32 +# endif +# elif U_PLATFORM_IS_DARWIN_BASED || (U_SIZEOF_WCHAR_T==4 && U_PLATFORM_IS_LINUX_BASED) +# define U_WCHAR_IS_UTF32 +# elif U_PLATFORM_HAS_WIN32_API +# define U_WCHAR_IS_UTF16 +# endif +#endif + +/* UChar and UChar32 definitions -------------------------------------------- */ + +/** Number of bytes in a UChar. @stable ICU 2.0 */ +#define U_SIZEOF_UCHAR 2 + +/** + * \def U_CHAR16_IS_TYPEDEF + * If 1, then char16_t is a typedef and not a real type (yet) + * @internal + */ +#if (U_PLATFORM == U_PF_AIX) && defined(__cplusplus) &&(U_CPLUSPLUS_VERSION < 11) +// for AIX, uchar.h needs to be included +# include +# define U_CHAR16_IS_TYPEDEF 1 +#elif defined(_MSC_VER) && (_MSC_VER < 1900) +// Versions of Visual Studio/MSVC below 2015 do not support char16_t as a real type, +// and instead use a typedef. https://msdn.microsoft.com/library/bb531344.aspx +# define U_CHAR16_IS_TYPEDEF 1 +#else +# define U_CHAR16_IS_TYPEDEF 0 +#endif + + +/** + * \var UChar + * + * The base type for UTF-16 code units and pointers. + * Unsigned 16-bit integer. + * Starting with ICU 59, C++ API uses char16_t directly, while C API continues to use UChar. + * + * UChar is configurable by defining the macro UCHAR_TYPE + * on the preprocessor or compiler command line: + * -DUCHAR_TYPE=uint16_t or -DUCHAR_TYPE=wchar_t (if U_SIZEOF_WCHAR_T==2) etc. + * (The UCHAR_TYPE can also be \#defined earlier in this file, for outside the ICU library code.) + * This is for transitional use from application code that uses uint16_t or wchar_t for UTF-16. + * + * The default is UChar=char16_t. + * + * C++11 defines char16_t as bit-compatible with uint16_t, but as a distinct type. + * + * In C, char16_t is a simple typedef of uint_least16_t. + * ICU requires uint_least16_t=uint16_t for data memory mapping. + * On macOS, char16_t is not available because the uchar.h standard header is missing. + * + * @stable ICU 4.4 + */ + +#if 1 + // #if 1 is normal. UChar defaults to char16_t in C++. + // For configuration testing of UChar=uint16_t temporarily change this to #if 0. + // The intltest Makefile #defines UCHAR_TYPE=char16_t, + // so we only #define it to uint16_t if it is undefined so far. +#elif !defined(UCHAR_TYPE) +# define UCHAR_TYPE uint16_t +#endif + +#if defined(U_COMBINED_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) || \ + defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) + // Inside the ICU library code, never configurable. + typedef char16_t UChar; +#elif defined(UCHAR_TYPE) + typedef UCHAR_TYPE UChar; +#elif defined(__cplusplus) + typedef char16_t UChar; +#else + typedef uint16_t UChar; +#endif + +/** + * \var OldUChar + * Default ICU 58 definition of UChar. + * A base type for UTF-16 code units and pointers. + * Unsigned 16-bit integer. + * + * Define OldUChar to be wchar_t if that is 16 bits wide. + * If wchar_t is not 16 bits wide, then define UChar to be uint16_t. + * + * This makes the definition of OldUChar platform-dependent + * but allows direct string type compatibility with platforms with + * 16-bit wchar_t types. + * + * This is how UChar was defined in ICU 58, for transition convenience. + * Exception: ICU 58 UChar was defined to UCHAR_TYPE if that macro was defined. + * The current UChar responds to UCHAR_TYPE but OldUChar does not. + * + * @stable ICU 59 + */ +#if U_SIZEOF_WCHAR_T==2 + typedef wchar_t OldUChar; +#elif defined(__CHAR16_TYPE__) + typedef __CHAR16_TYPE__ OldUChar; +#else + typedef uint16_t OldUChar; +#endif + +/** + * Define UChar32 as a type for single Unicode code points. + * UChar32 is a signed 32-bit integer (same as int32_t). + * + * The Unicode code point range is 0..0x10ffff. + * All other values (negative or >=0x110000) are illegal as Unicode code points. + * They may be used as sentinel values to indicate "done", "error" + * or similar non-code point conditions. + * + * Before ICU 2.4 (Jitterbug 2146), UChar32 was defined + * to be wchar_t if that is 32 bits wide (wchar_t may be signed or unsigned) + * or else to be uint32_t. + * That is, the definition of UChar32 was platform-dependent. + * + * @see U_SENTINEL + * @stable ICU 2.4 + */ +typedef int32_t UChar32; + +/** + * This value is intended for sentinel values for APIs that + * (take or) return single code points (UChar32). + * It is outside of the Unicode code point range 0..0x10ffff. + * + * For example, a "done" or "error" value in a new API + * could be indicated with U_SENTINEL. + * + * ICU APIs designed before ICU 2.4 usually define service-specific "done" + * values, mostly 0xffff. + * Those may need to be distinguished from + * actual U+ffff text contents by calling functions like + * CharacterIterator::hasNext() or UnicodeString::length(). + * + * @return -1 + * @see UChar32 + * @stable ICU 2.4 + */ +#define U_SENTINEL (-1) + +#include "unicode/urename.h" + +#endif diff --git a/parser/nnsrc/unicode/urename.h b/parser/nnsrc/unicode/urename.h new file mode 100644 index 00000000..ac79ad0f --- /dev/null +++ b/parser/nnsrc/unicode/urename.h @@ -0,0 +1 @@ +// This file must exist in order for `utf8.h` and `utf16.h` to be used. diff --git a/parser/nnsrc/unicode/utf.h b/parser/nnsrc/unicode/utf.h new file mode 100644 index 00000000..ac79ad0f --- /dev/null +++ b/parser/nnsrc/unicode/utf.h @@ -0,0 +1 @@ +// This file must exist in order for `utf8.h` and `utf16.h` to be used. diff --git a/parser/nnsrc/unicode/utf16.h b/parser/nnsrc/unicode/utf16.h new file mode 100644 index 00000000..9fd7d5c8 --- /dev/null +++ b/parser/nnsrc/unicode/utf16.h @@ -0,0 +1,733 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +******************************************************************************* +* +* Copyright (C) 1999-2012, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: utf16.h +* encoding: UTF-8 +* tab size: 8 (not used) +* indentation:4 +* +* created on: 1999sep09 +* created by: Markus W. Scherer +*/ + +/** + * \file + * \brief C API: 16-bit Unicode handling macros + * + * This file defines macros to deal with 16-bit Unicode (UTF-16) code units and strings. + * + * For more information see utf.h and the ICU User Guide Strings chapter + * (http://userguide.icu-project.org/strings). + * + * Usage: + * ICU coding guidelines for if() statements should be followed when using these macros. + * Compound statements (curly braces {}) must be used for if-else-while... + * bodies and all macro statements should be terminated with semicolon. + */ + +#ifndef __UTF16_H__ +#define __UTF16_H__ + +#include "unicode/umachine.h" +#ifndef __UTF_H__ +# include "unicode/utf.h" +#endif + +/* single-code point definitions -------------------------------------------- */ + +/** + * Does this code unit alone encode a code point (BMP, not a surrogate)? + * @param c 16-bit code unit + * @return TRUE or FALSE + * @stable ICU 2.4 + */ +#define U16_IS_SINGLE(c) !U_IS_SURROGATE(c) + +/** + * Is this code unit a lead surrogate (U+d800..U+dbff)? + * @param c 16-bit code unit + * @return TRUE or FALSE + * @stable ICU 2.4 + */ +#define U16_IS_LEAD(c) (((c)&0xfffffc00)==0xd800) + +/** + * Is this code unit a trail surrogate (U+dc00..U+dfff)? + * @param c 16-bit code unit + * @return TRUE or FALSE + * @stable ICU 2.4 + */ +#define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00) + +/** + * Is this code unit a surrogate (U+d800..U+dfff)? + * @param c 16-bit code unit + * @return TRUE or FALSE + * @stable ICU 2.4 + */ +#define U16_IS_SURROGATE(c) U_IS_SURROGATE(c) + +/** + * Assuming c is a surrogate code point (U16_IS_SURROGATE(c)), + * is it a lead surrogate? + * @param c 16-bit code unit + * @return TRUE or FALSE + * @stable ICU 2.4 + */ +#define U16_IS_SURROGATE_LEAD(c) (((c)&0x400)==0) + +/** + * Assuming c is a surrogate code point (U16_IS_SURROGATE(c)), + * is it a trail surrogate? + * @param c 16-bit code unit + * @return TRUE or FALSE + * @stable ICU 4.2 + */ +#define U16_IS_SURROGATE_TRAIL(c) (((c)&0x400)!=0) + +/** + * Helper constant for U16_GET_SUPPLEMENTARY. + * @internal + */ +#define U16_SURROGATE_OFFSET ((0xd800<<10UL)+0xdc00-0x10000) + +/** + * Get a supplementary code point value (U+10000..U+10ffff) + * from its lead and trail surrogates. + * The result is undefined if the input values are not + * lead and trail surrogates. + * + * @param lead lead surrogate (U+d800..U+dbff) + * @param trail trail surrogate (U+dc00..U+dfff) + * @return supplementary code point (U+10000..U+10ffff) + * @stable ICU 2.4 + */ +#define U16_GET_SUPPLEMENTARY(lead, trail) \ + (((UChar32)(lead)<<10UL)+(UChar32)(trail)-U16_SURROGATE_OFFSET) + + +/** + * Get the lead surrogate (0xd800..0xdbff) for a + * supplementary code point (0x10000..0x10ffff). + * @param supplementary 32-bit code point (U+10000..U+10ffff) + * @return lead surrogate (U+d800..U+dbff) for supplementary + * @stable ICU 2.4 + */ +#define U16_LEAD(supplementary) (UChar)(((supplementary)>>10)+0xd7c0) + +/** + * Get the trail surrogate (0xdc00..0xdfff) for a + * supplementary code point (0x10000..0x10ffff). + * @param supplementary 32-bit code point (U+10000..U+10ffff) + * @return trail surrogate (U+dc00..U+dfff) for supplementary + * @stable ICU 2.4 + */ +#define U16_TRAIL(supplementary) (UChar)(((supplementary)&0x3ff)|0xdc00) + +/** + * How many 16-bit code units are used to encode this Unicode code point? (1 or 2) + * The result is not defined if c is not a Unicode code point (U+0000..U+10ffff). + * @param c 32-bit code point + * @return 1 or 2 + * @stable ICU 2.4 + */ +#define U16_LENGTH(c) ((uint32_t)(c)<=0xffff ? 1 : 2) + +/** + * The maximum number of 16-bit code units per Unicode code point (U+0000..U+10ffff). + * @return 2 + * @stable ICU 2.4 + */ +#define U16_MAX_LENGTH 2 + +/** + * Get a code point from a string at a random-access offset, + * without changing the offset. + * "Unsafe" macro, assumes well-formed UTF-16. + * + * The offset may point to either the lead or trail surrogate unit + * for a supplementary code point, in which case the macro will read + * the adjacent matching surrogate as well. + * The result is undefined if the offset points to a single, unpaired surrogate. + * Iteration through a string is more efficient with U16_NEXT_UNSAFE or U16_NEXT. + * + * @param s const UChar * string + * @param i string offset + * @param c output UChar32 variable + * @see U16_GET + * @stable ICU 2.4 + */ +#define U16_GET_UNSAFE(s, i, c) UPRV_BLOCK_MACRO_BEGIN { \ + (c)=(s)[i]; \ + if(U16_IS_SURROGATE(c)) { \ + if(U16_IS_SURROGATE_LEAD(c)) { \ + (c)=U16_GET_SUPPLEMENTARY((c), (s)[(i)+1]); \ + } else { \ + (c)=U16_GET_SUPPLEMENTARY((s)[(i)-1], (c)); \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Get a code point from a string at a random-access offset, + * without changing the offset. + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * The offset may point to either the lead or trail surrogate unit + * for a supplementary code point, in which case the macro will read + * the adjacent matching surrogate as well. + * + * The length can be negative for a NUL-terminated string. + * + * If the offset points to a single, unpaired surrogate, then + * c is set to that unpaired surrogate. + * Iteration through a string is more efficient with U16_NEXT_UNSAFE or U16_NEXT. + * + * @param s const UChar * string + * @param start starting string offset (usually 0) + * @param i string offset, must be start<=i(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \ + (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \ + } \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Get a code point from a string at a random-access offset, + * without changing the offset. + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * The offset may point to either the lead or trail surrogate unit + * for a supplementary code point, in which case the macro will read + * the adjacent matching surrogate as well. + * + * The length can be negative for a NUL-terminated string. + * + * If the offset points to a single, unpaired surrogate, then + * c is set to U+FFFD. + * Iteration through a string is more efficient with U16_NEXT_UNSAFE or U16_NEXT_OR_FFFD. + * + * @param s const UChar * string + * @param start starting string offset (usually 0) + * @param i string offset, must be start<=i(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \ + (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \ + } else { \ + (c)=0xfffd; \ + } \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/* definitions with forward iteration --------------------------------------- */ + +/** + * Get a code point from a string at a code point boundary offset, + * and advance the offset to the next code point boundary. + * (Post-incrementing forward iteration.) + * "Unsafe" macro, assumes well-formed UTF-16. + * + * The offset may point to the lead surrogate unit + * for a supplementary code point, in which case the macro will read + * the following trail surrogate as well. + * If the offset points to a trail surrogate, then that itself + * will be returned as the code point. + * The result is undefined if the offset points to a single, unpaired lead surrogate. + * + * @param s const UChar * string + * @param i string offset + * @param c output UChar32 variable + * @see U16_NEXT + * @stable ICU 2.4 + */ +#define U16_NEXT_UNSAFE(s, i, c) UPRV_BLOCK_MACRO_BEGIN { \ + (c)=(s)[(i)++]; \ + if(U16_IS_LEAD(c)) { \ + (c)=U16_GET_SUPPLEMENTARY((c), (s)[(i)++]); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Get a code point from a string at a code point boundary offset, + * and advance the offset to the next code point boundary. + * (Post-incrementing forward iteration.) + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * The length can be negative for a NUL-terminated string. + * + * The offset may point to the lead surrogate unit + * for a supplementary code point, in which case the macro will read + * the following trail surrogate as well. + * If the offset points to a trail surrogate or + * to a single, unpaired lead surrogate, then c is set to that unpaired surrogate. + * + * @param s const UChar * string + * @param i string offset, must be i>10)+0xd7c0); \ + (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Append a code point to a string, overwriting 1 or 2 code units. + * The offset points to the current end of the string contents + * and is advanced (post-increment). + * "Safe" macro, checks for a valid code point. + * If a surrogate pair is written, checks for sufficient space in the string. + * If the code point is not valid or a trail surrogate does not fit, + * then isError is set to TRUE. + * + * @param s const UChar * string buffer + * @param i string offset, must be i>10)+0xd7c0); \ + (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \ + } else /* c>0x10ffff or not enough space */ { \ + (isError)=TRUE; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Advance the string offset from one code point boundary to the next. + * (Post-incrementing iteration.) + * "Unsafe" macro, assumes well-formed UTF-16. + * + * @param s const UChar * string + * @param i string offset + * @see U16_FWD_1 + * @stable ICU 2.4 + */ +#define U16_FWD_1_UNSAFE(s, i) UPRV_BLOCK_MACRO_BEGIN { \ + if(U16_IS_LEAD((s)[(i)++])) { \ + ++(i); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Advance the string offset from one code point boundary to the next. + * (Post-incrementing iteration.) + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * The length can be negative for a NUL-terminated string. + * + * @param s const UChar * string + * @param i string offset, must be i0) { \ + U16_FWD_1_UNSAFE(s, i); \ + --__N; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Advance the string offset from one code point boundary to the n-th next one, + * i.e., move forward by n code points. + * (Post-incrementing iteration.) + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * The length can be negative for a NUL-terminated string. + * + * @param s const UChar * string + * @param i int32_t string offset, must be i0 && ((i)<(length) || ((length)<0 && (s)[i]!=0))) { \ + U16_FWD_1(s, i, length); \ + --__N; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Adjust a random-access offset to a code point boundary + * at the start of a code point. + * If the offset points to the trail surrogate of a surrogate pair, + * then the offset is decremented. + * Otherwise, it is not modified. + * "Unsafe" macro, assumes well-formed UTF-16. + * + * @param s const UChar * string + * @param i string offset + * @see U16_SET_CP_START + * @stable ICU 2.4 + */ +#define U16_SET_CP_START_UNSAFE(s, i) UPRV_BLOCK_MACRO_BEGIN { \ + if(U16_IS_TRAIL((s)[i])) { \ + --(i); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Adjust a random-access offset to a code point boundary + * at the start of a code point. + * If the offset points to the trail surrogate of a surrogate pair, + * then the offset is decremented. + * Otherwise, it is not modified. + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * @param s const UChar * string + * @param start starting string offset (usually 0) + * @param i string offset, must be start<=i + * @see U16_SET_CP_START_UNSAFE + * @stable ICU 2.4 + */ +#define U16_SET_CP_START(s, start, i) UPRV_BLOCK_MACRO_BEGIN { \ + if(U16_IS_TRAIL((s)[i]) && (i)>(start) && U16_IS_LEAD((s)[(i)-1])) { \ + --(i); \ + } \ +} UPRV_BLOCK_MACRO_END + +/* definitions with backward iteration -------------------------------------- */ + +/** + * Move the string offset from one code point boundary to the previous one + * and get the code point between them. + * (Pre-decrementing backward iteration.) + * "Unsafe" macro, assumes well-formed UTF-16. + * + * The input offset may be the same as the string length. + * If the offset is behind a trail surrogate unit + * for a supplementary code point, then the macro will read + * the preceding lead surrogate as well. + * If the offset is behind a lead surrogate, then that itself + * will be returned as the code point. + * The result is undefined if the offset is behind a single, unpaired trail surrogate. + * + * @param s const UChar * string + * @param i string offset + * @param c output UChar32 variable + * @see U16_PREV + * @stable ICU 2.4 + */ +#define U16_PREV_UNSAFE(s, i, c) UPRV_BLOCK_MACRO_BEGIN { \ + (c)=(s)[--(i)]; \ + if(U16_IS_TRAIL(c)) { \ + (c)=U16_GET_SUPPLEMENTARY((s)[--(i)], (c)); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Move the string offset from one code point boundary to the previous one + * and get the code point between them. + * (Pre-decrementing backward iteration.) + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * The input offset may be the same as the string length. + * If the offset is behind a trail surrogate unit + * for a supplementary code point, then the macro will read + * the preceding lead surrogate as well. + * If the offset is behind a lead surrogate or behind a single, unpaired + * trail surrogate, then c is set to that unpaired surrogate. + * + * @param s const UChar * string + * @param start starting string offset (usually 0) + * @param i string offset, must be start(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \ + --(i); \ + (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Move the string offset from one code point boundary to the previous one + * and get the code point between them. + * (Pre-decrementing backward iteration.) + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * The input offset may be the same as the string length. + * If the offset is behind a trail surrogate unit + * for a supplementary code point, then the macro will read + * the preceding lead surrogate as well. + * If the offset is behind a lead surrogate or behind a single, unpaired + * trail surrogate, then c is set to U+FFFD. + * + * @param s const UChar * string + * @param start starting string offset (usually 0) + * @param i string offset, must be start(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \ + --(i); \ + (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \ + } else { \ + (c)=0xfffd; \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Move the string offset from one code point boundary to the previous one. + * (Pre-decrementing backward iteration.) + * The input offset may be the same as the string length. + * "Unsafe" macro, assumes well-formed UTF-16. + * + * @param s const UChar * string + * @param i string offset + * @see U16_BACK_1 + * @stable ICU 2.4 + */ +#define U16_BACK_1_UNSAFE(s, i) UPRV_BLOCK_MACRO_BEGIN { \ + if(U16_IS_TRAIL((s)[--(i)])) { \ + --(i); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Move the string offset from one code point boundary to the previous one. + * (Pre-decrementing backward iteration.) + * The input offset may be the same as the string length. + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * @param s const UChar * string + * @param start starting string offset (usually 0) + * @param i string offset, must be start(start) && U16_IS_LEAD((s)[(i)-1])) { \ + --(i); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Move the string offset from one code point boundary to the n-th one before it, + * i.e., move backward by n code points. + * (Pre-decrementing backward iteration.) + * The input offset may be the same as the string length. + * "Unsafe" macro, assumes well-formed UTF-16. + * + * @param s const UChar * string + * @param i string offset + * @param n number of code points to skip + * @see U16_BACK_N + * @stable ICU 2.4 + */ +#define U16_BACK_N_UNSAFE(s, i, n) UPRV_BLOCK_MACRO_BEGIN { \ + int32_t __N=(n); \ + while(__N>0) { \ + U16_BACK_1_UNSAFE(s, i); \ + --__N; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Move the string offset from one code point boundary to the n-th one before it, + * i.e., move backward by n code points. + * (Pre-decrementing backward iteration.) + * The input offset may be the same as the string length. + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * @param s const UChar * string + * @param start start of string + * @param i string offset, must be start0 && (i)>(start)) { \ + U16_BACK_1(s, start, i); \ + --__N; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Adjust a random-access offset to a code point boundary after a code point. + * If the offset is behind the lead surrogate of a surrogate pair, + * then the offset is incremented. + * Otherwise, it is not modified. + * The input offset may be the same as the string length. + * "Unsafe" macro, assumes well-formed UTF-16. + * + * @param s const UChar * string + * @param i string offset + * @see U16_SET_CP_LIMIT + * @stable ICU 2.4 + */ +#define U16_SET_CP_LIMIT_UNSAFE(s, i) UPRV_BLOCK_MACRO_BEGIN { \ + if(U16_IS_LEAD((s)[(i)-1])) { \ + ++(i); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Adjust a random-access offset to a code point boundary after a code point. + * If the offset is behind the lead surrogate of a surrogate pair, + * then the offset is incremented. + * Otherwise, it is not modified. + * The input offset may be the same as the string length. + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * The length can be negative for a NUL-terminated string. + * + * @param s const UChar * string + * @param start int32_t starting string offset (usually 0) + * @param i int32_t string offset, start<=i<=length + * @param length int32_t string length + * @see U16_SET_CP_LIMIT_UNSAFE + * @stable ICU 2.4 + */ +#define U16_SET_CP_LIMIT(s, start, i, length) UPRV_BLOCK_MACRO_BEGIN { \ + if((start)<(i) && ((i)<(length) || (length)<0) && U16_IS_LEAD((s)[(i)-1]) && U16_IS_TRAIL((s)[i])) { \ + ++(i); \ + } \ +} UPRV_BLOCK_MACRO_END + +#endif diff --git a/parser/nnsrc/unicode/utf8.h b/parser/nnsrc/unicode/utf8.h new file mode 100644 index 00000000..bb001303 --- /dev/null +++ b/parser/nnsrc/unicode/utf8.h @@ -0,0 +1,881 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +******************************************************************************* +* +* Copyright (C) 1999-2015, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: utf8.h +* encoding: UTF-8 +* tab size: 8 (not used) +* indentation:4 +* +* created on: 1999sep13 +* created by: Markus W. Scherer +*/ + +/** + * \file + * \brief C API: 8-bit Unicode handling macros + * + * This file defines macros to deal with 8-bit Unicode (UTF-8) code units (bytes) and strings. + * + * For more information see utf.h and the ICU User Guide Strings chapter + * (http://userguide.icu-project.org/strings). + * + * Usage: + * ICU coding guidelines for if() statements should be followed when using these macros. + * Compound statements (curly braces {}) must be used for if-else-while... + * bodies and all macro statements should be terminated with semicolon. + */ + +#ifndef __UTF8_H__ +#define __UTF8_H__ + +#include "unicode/umachine.h" +#ifndef __UTF_H__ +# include "unicode/utf.h" +#endif + +/* internal definitions ----------------------------------------------------- */ + +/** + * Counts the trail bytes for a UTF-8 lead byte. + * Returns 0 for 0..0xc1 as well as for 0xf5..0xff. + * leadByte might be evaluated multiple times. + * + * This is internal since it is not meant to be called directly by external clients; + * however it is called by public macros in this file and thus must remain stable. + * + * @param leadByte The first byte of a UTF-8 sequence. Must be 0..0xff. + * @internal + */ +#define U8_COUNT_TRAIL_BYTES(leadByte) \ + (U8_IS_LEAD(leadByte) ? \ + ((uint8_t)(leadByte)>=0xe0)+((uint8_t)(leadByte)>=0xf0)+1 : 0) + +/** + * Counts the trail bytes for a UTF-8 lead byte of a valid UTF-8 sequence. + * Returns 0 for 0..0xc1. Undefined for 0xf5..0xff. + * leadByte might be evaluated multiple times. + * + * This is internal since it is not meant to be called directly by external clients; + * however it is called by public macros in this file and thus must remain stable. + * + * @param leadByte The first byte of a UTF-8 sequence. Must be 0..0xff. + * @internal + */ +#define U8_COUNT_TRAIL_BYTES_UNSAFE(leadByte) \ + (((uint8_t)(leadByte)>=0xc2)+((uint8_t)(leadByte)>=0xe0)+((uint8_t)(leadByte)>=0xf0)) + +/** + * Mask a UTF-8 lead byte, leave only the lower bits that form part of the code point value. + * + * This is internal since it is not meant to be called directly by external clients; + * however it is called by public macros in this file and thus must remain stable. + * @internal + */ +#define U8_MASK_LEAD_BYTE(leadByte, countTrailBytes) ((leadByte)&=(1<<(6-(countTrailBytes)))-1) + +/** + * Internal bit vector for 3-byte UTF-8 validity check, for use in U8_IS_VALID_LEAD3_AND_T1. + * Each bit indicates whether one lead byte + first trail byte pair starts a valid sequence. + * Lead byte E0..EF bits 3..0 are used as byte index, + * first trail byte bits 7..5 are used as bit index into that byte. + * @see U8_IS_VALID_LEAD3_AND_T1 + * @internal + */ +#define U8_LEAD3_T1_BITS "\x20\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x10\x30\x30" + +/** + * Internal 3-byte UTF-8 validity check. + * Non-zero if lead byte E0..EF and first trail byte 00..FF start a valid sequence. + * @internal + */ +#define U8_IS_VALID_LEAD3_AND_T1(lead, t1) (U8_LEAD3_T1_BITS[(lead)&0xf]&(1<<((uint8_t)(t1)>>5))) + +/** + * Internal bit vector for 4-byte UTF-8 validity check, for use in U8_IS_VALID_LEAD4_AND_T1. + * Each bit indicates whether one lead byte + first trail byte pair starts a valid sequence. + * First trail byte bits 7..4 are used as byte index, + * lead byte F0..F4 bits 2..0 are used as bit index into that byte. + * @see U8_IS_VALID_LEAD4_AND_T1 + * @internal + */ +#define U8_LEAD4_T1_BITS "\x00\x00\x00\x00\x00\x00\x00\x00\x1E\x0F\x0F\x0F\x00\x00\x00\x00" + +/** + * Internal 4-byte UTF-8 validity check. + * Non-zero if lead byte F0..F4 and first trail byte 00..FF start a valid sequence. + * @internal + */ +#define U8_IS_VALID_LEAD4_AND_T1(lead, t1) (U8_LEAD4_T1_BITS[(uint8_t)(t1)>>4]&(1<<((lead)&7))) + +/** + * Function for handling "next code point" with error-checking. + * + * This is internal since it is not meant to be called directly by external clients; + * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this + * file and thus must remain stable, and should not be hidden when other internal + * functions are hidden (otherwise public macros would fail to compile). + * @internal + */ +U_STABLE UChar32 U_EXPORT2 +utf8_nextCharSafeBody(const uint8_t *s, int32_t *pi, int32_t length, UChar32 c, UBool strict); + +/** + * Function for handling "append code point" with error-checking. + * + * This is internal since it is not meant to be called directly by external clients; + * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this + * file and thus must remain stable, and should not be hidden when other internal + * functions are hidden (otherwise public macros would fail to compile). + * @internal + */ +U_STABLE int32_t U_EXPORT2 +utf8_appendCharSafeBody(uint8_t *s, int32_t i, int32_t length, UChar32 c, UBool *pIsError); + +/** + * Function for handling "previous code point" with error-checking. + * + * This is internal since it is not meant to be called directly by external clients; + * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this + * file and thus must remain stable, and should not be hidden when other internal + * functions are hidden (otherwise public macros would fail to compile). + * @internal + */ +U_STABLE UChar32 U_EXPORT2 +utf8_prevCharSafeBody(const uint8_t *s, int32_t start, int32_t *pi, UChar32 c, UBool strict); + +/** + * Function for handling "skip backward one code point" with error-checking. + * + * This is internal since it is not meant to be called directly by external clients; + * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this + * file and thus must remain stable, and should not be hidden when other internal + * functions are hidden (otherwise public macros would fail to compile). + * @internal + */ +U_STABLE int32_t U_EXPORT2 +utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); + +/* single-code point definitions -------------------------------------------- */ + +/** + * Does this code unit (byte) encode a code point by itself (US-ASCII 0..0x7f)? + * @param c 8-bit code unit (byte) + * @return TRUE or FALSE + * @stable ICU 2.4 + */ +#define U8_IS_SINGLE(c) (((c)&0x80)==0) + +/** + * Is this code unit (byte) a UTF-8 lead byte? (0xC2..0xF4) + * @param c 8-bit code unit (byte) + * @return TRUE or FALSE + * @stable ICU 2.4 + */ +#define U8_IS_LEAD(c) ((uint8_t)((c)-0xc2)<=0x32) +// 0x32=0xf4-0xc2 + +/** + * Is this code unit (byte) a UTF-8 trail byte? (0x80..0xBF) + * @param c 8-bit code unit (byte) + * @return TRUE or FALSE + * @stable ICU 2.4 + */ +#define U8_IS_TRAIL(c) ((int8_t)(c)<-0x40) + +/** + * How many code units (bytes) are used for the UTF-8 encoding + * of this Unicode code point? + * @param c 32-bit code point + * @return 1..4, or 0 if c is a surrogate or not a Unicode code point + * @stable ICU 2.4 + */ +#define U8_LENGTH(c) \ + ((uint32_t)(c)<=0x7f ? 1 : \ + ((uint32_t)(c)<=0x7ff ? 2 : \ + ((uint32_t)(c)<=0xd7ff ? 3 : \ + ((uint32_t)(c)<=0xdfff || (uint32_t)(c)>0x10ffff ? 0 : \ + ((uint32_t)(c)<=0xffff ? 3 : 4)\ + ) \ + ) \ + ) \ + ) + +/** + * The maximum number of UTF-8 code units (bytes) per Unicode code point (U+0000..U+10ffff). + * @return 4 + * @stable ICU 2.4 + */ +#define U8_MAX_LENGTH 4 + +/** + * Get a code point from a string at a random-access offset, + * without changing the offset. + * The offset may point to either the lead byte or one of the trail bytes + * for a code point, in which case the macro will read all of the bytes + * for the code point. + * The result is undefined if the offset points to an illegal UTF-8 + * byte sequence. + * Iteration through a string is more efficient with U8_NEXT_UNSAFE or U8_NEXT. + * + * @param s const uint8_t * string + * @param i string offset + * @param c output UChar32 variable + * @see U8_GET + * @stable ICU 2.4 + */ +#define U8_GET_UNSAFE(s, i, c) UPRV_BLOCK_MACRO_BEGIN { \ + int32_t _u8_get_unsafe_index=(int32_t)(i); \ + U8_SET_CP_START_UNSAFE(s, _u8_get_unsafe_index); \ + U8_NEXT_UNSAFE(s, _u8_get_unsafe_index, c); \ +} UPRV_BLOCK_MACRO_END + +/** + * Get a code point from a string at a random-access offset, + * without changing the offset. + * The offset may point to either the lead byte or one of the trail bytes + * for a code point, in which case the macro will read all of the bytes + * for the code point. + * + * The length can be negative for a NUL-terminated string. + * + * If the offset points to an illegal UTF-8 byte sequence, then + * c is set to a negative value. + * Iteration through a string is more efficient with U8_NEXT_UNSAFE or U8_NEXT. + * + * @param s const uint8_t * string + * @param start int32_t starting string offset + * @param i int32_t string offset, must be start<=i=0xe0 ? \ + ((c)<0xf0 ? /* U+0800..U+FFFF except surrogates */ \ + U8_LEAD3_T1_BITS[(c)&=0xf]&(1<<((__t=(s)[i])>>5)) && \ + (__t&=0x3f, 1) \ + : /* U+10000..U+10FFFF */ \ + ((c)-=0xf0)<=4 && \ + U8_LEAD4_T1_BITS[(__t=(s)[i])>>4]&(1<<(c)) && \ + ((c)=((c)<<6)|(__t&0x3f), ++(i)!=(length)) && \ + (__t=(s)[i]-0x80)<=0x3f) && \ + /* valid second-to-last trail byte */ \ + ((c)=((c)<<6)|__t, ++(i)!=(length)) \ + : /* U+0080..U+07FF */ \ + (c)>=0xc2 && ((c)&=0x1f, 1)) && \ + /* last trail byte */ \ + (__t=(s)[i]-0x80)<=0x3f && \ + ((c)=((c)<<6)|__t, ++(i), 1)) { \ + } else { \ + (c)=(sub); /* ill-formed*/ \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Append a code point to a string, overwriting 1 to 4 bytes. + * The offset points to the current end of the string contents + * and is advanced (post-increment). + * "Unsafe" macro, assumes a valid code point and sufficient space in the string. + * Otherwise, the result is undefined. + * + * @param s const uint8_t * string buffer + * @param i string offset + * @param c code point to append + * @see U8_APPEND + * @stable ICU 2.4 + */ +#define U8_APPEND_UNSAFE(s, i, c) UPRV_BLOCK_MACRO_BEGIN { \ + uint32_t __uc=(c); \ + if(__uc<=0x7f) { \ + (s)[(i)++]=(uint8_t)__uc; \ + } else { \ + if(__uc<=0x7ff) { \ + (s)[(i)++]=(uint8_t)((__uc>>6)|0xc0); \ + } else { \ + if(__uc<=0xffff) { \ + (s)[(i)++]=(uint8_t)((__uc>>12)|0xe0); \ + } else { \ + (s)[(i)++]=(uint8_t)((__uc>>18)|0xf0); \ + (s)[(i)++]=(uint8_t)(((__uc>>12)&0x3f)|0x80); \ + } \ + (s)[(i)++]=(uint8_t)(((__uc>>6)&0x3f)|0x80); \ + } \ + (s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Append a code point to a string, overwriting 1 to 4 bytes. + * The offset points to the current end of the string contents + * and is advanced (post-increment). + * "Safe" macro, checks for a valid code point. + * If a non-ASCII code point is written, checks for sufficient space in the string. + * If the code point is not valid or trail bytes do not fit, + * then isError is set to TRUE. + * + * @param s const uint8_t * string buffer + * @param i int32_t string offset, must be i>6)|0xc0); \ + (s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \ + } else if((__uc<=0xd7ff || (0xe000<=__uc && __uc<=0xffff)) && (i)+2<(capacity)) { \ + (s)[(i)++]=(uint8_t)((__uc>>12)|0xe0); \ + (s)[(i)++]=(uint8_t)(((__uc>>6)&0x3f)|0x80); \ + (s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \ + } else if(0xffff<__uc && __uc<=0x10ffff && (i)+3<(capacity)) { \ + (s)[(i)++]=(uint8_t)((__uc>>18)|0xf0); \ + (s)[(i)++]=(uint8_t)(((__uc>>12)&0x3f)|0x80); \ + (s)[(i)++]=(uint8_t)(((__uc>>6)&0x3f)|0x80); \ + (s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \ + } else { \ + (isError)=TRUE; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Advance the string offset from one code point boundary to the next. + * (Post-incrementing iteration.) + * "Unsafe" macro, assumes well-formed UTF-8. + * + * @param s const uint8_t * string + * @param i string offset + * @see U8_FWD_1 + * @stable ICU 2.4 + */ +#define U8_FWD_1_UNSAFE(s, i) UPRV_BLOCK_MACRO_BEGIN { \ + (i)+=1+U8_COUNT_TRAIL_BYTES_UNSAFE((s)[i]); \ +} UPRV_BLOCK_MACRO_END + +/** + * Advance the string offset from one code point boundary to the next. + * (Post-incrementing iteration.) + * "Safe" macro, checks for illegal sequences and for string boundaries. + * + * The length can be negative for a NUL-terminated string. + * + * @param s const uint8_t * string + * @param i int32_t string offset, must be i=0xf0 */ { \ + if(U8_IS_VALID_LEAD4_AND_T1(__b, __t1) && \ + ++(i)!=(length) && U8_IS_TRAIL((s)[i]) && \ + ++(i)!=(length) && U8_IS_TRAIL((s)[i])) { \ + ++(i); \ + } \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Advance the string offset from one code point boundary to the n-th next one, + * i.e., move forward by n code points. + * (Post-incrementing iteration.) + * "Unsafe" macro, assumes well-formed UTF-8. + * + * @param s const uint8_t * string + * @param i string offset + * @param n number of code points to skip + * @see U8_FWD_N + * @stable ICU 2.4 + */ +#define U8_FWD_N_UNSAFE(s, i, n) UPRV_BLOCK_MACRO_BEGIN { \ + int32_t __N=(n); \ + while(__N>0) { \ + U8_FWD_1_UNSAFE(s, i); \ + --__N; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Advance the string offset from one code point boundary to the n-th next one, + * i.e., move forward by n code points. + * (Post-incrementing iteration.) + * "Safe" macro, checks for illegal sequences and for string boundaries. + * + * The length can be negative for a NUL-terminated string. + * + * @param s const uint8_t * string + * @param i int32_t string offset, must be i0 && ((i)<(length) || ((length)<0 && (s)[i]!=0))) { \ + U8_FWD_1(s, i, length); \ + --__N; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Adjust a random-access offset to a code point boundary + * at the start of a code point. + * If the offset points to a UTF-8 trail byte, + * then the offset is moved backward to the corresponding lead byte. + * Otherwise, it is not modified. + * "Unsafe" macro, assumes well-formed UTF-8. + * + * @param s const uint8_t * string + * @param i string offset + * @see U8_SET_CP_START + * @stable ICU 2.4 + */ +#define U8_SET_CP_START_UNSAFE(s, i) UPRV_BLOCK_MACRO_BEGIN { \ + while(U8_IS_TRAIL((s)[i])) { --(i); } \ +} UPRV_BLOCK_MACRO_END + +/** + * Adjust a random-access offset to a code point boundary + * at the start of a code point. + * If the offset points to a UTF-8 trail byte, + * then the offset is moved backward to the corresponding lead byte. + * Otherwise, it is not modified. + * + * "Safe" macro, checks for illegal sequences and for string boundaries. + * Unlike U8_TRUNCATE_IF_INCOMPLETE(), this macro always reads s[i]. + * + * @param s const uint8_t * string + * @param start int32_t starting string offset (usually 0) + * @param i int32_t string offset, must be start<=i + * @see U8_SET_CP_START_UNSAFE + * @see U8_TRUNCATE_IF_INCOMPLETE + * @stable ICU 2.4 + */ +#define U8_SET_CP_START(s, start, i) UPRV_BLOCK_MACRO_BEGIN { \ + if(U8_IS_TRAIL((s)[(i)])) { \ + (i)=utf8_back1SafeBody(s, start, (i)); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * If the string ends with a UTF-8 byte sequence that is valid so far + * but incomplete, then reduce the length of the string to end before + * the lead byte of that incomplete sequence. + * For example, if the string ends with E1 80, the length is reduced by 2. + * + * In all other cases (the string ends with a complete sequence, or it is not + * possible for any further trail byte to extend the trailing sequence) + * the length remains unchanged. + * + * Useful for processing text split across multiple buffers + * (save the incomplete sequence for later) + * and for optimizing iteration + * (check for string length only once per character). + * + * "Safe" macro, checks for illegal sequences and for string boundaries. + * Unlike U8_SET_CP_START(), this macro never reads s[length]. + * + * (In UTF-16, simply check for U16_IS_LEAD(last code unit).) + * + * @param s const uint8_t * string + * @param start int32_t starting string offset (usually 0) + * @param length int32_t string length (usually start<=length) + * @see U8_SET_CP_START + * @stable ICU 61 + */ +#define U8_TRUNCATE_IF_INCOMPLETE(s, start, length) UPRV_BLOCK_MACRO_BEGIN { \ + if((length)>(start)) { \ + uint8_t __b1=s[(length)-1]; \ + if(U8_IS_SINGLE(__b1)) { \ + /* common ASCII character */ \ + } else if(U8_IS_LEAD(__b1)) { \ + --(length); \ + } else if(U8_IS_TRAIL(__b1) && ((length)-2)>=(start)) { \ + uint8_t __b2=s[(length)-2]; \ + if(0xe0<=__b2 && __b2<=0xf4) { \ + if(__b2<0xf0 ? U8_IS_VALID_LEAD3_AND_T1(__b2, __b1) : \ + U8_IS_VALID_LEAD4_AND_T1(__b2, __b1)) { \ + (length)-=2; \ + } \ + } else if(U8_IS_TRAIL(__b2) && ((length)-3)>=(start)) { \ + uint8_t __b3=s[(length)-3]; \ + if(0xf0<=__b3 && __b3<=0xf4 && U8_IS_VALID_LEAD4_AND_T1(__b3, __b2)) { \ + (length)-=3; \ + } \ + } \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/* definitions with backward iteration -------------------------------------- */ + +/** + * Move the string offset from one code point boundary to the previous one + * and get the code point between them. + * (Pre-decrementing backward iteration.) + * "Unsafe" macro, assumes well-formed UTF-8. + * + * The input offset may be the same as the string length. + * If the offset is behind a multi-byte sequence, then the macro will read + * the whole sequence. + * If the offset is behind a lead byte, then that itself + * will be returned as the code point. + * The result is undefined if the offset is behind an illegal UTF-8 sequence. + * + * @param s const uint8_t * string + * @param i string offset + * @param c output UChar32 variable + * @see U8_PREV + * @stable ICU 2.4 + */ +#define U8_PREV_UNSAFE(s, i, c) UPRV_BLOCK_MACRO_BEGIN { \ + (c)=(uint8_t)(s)[--(i)]; \ + if(U8_IS_TRAIL(c)) { \ + uint8_t __b, __count=1, __shift=6; \ +\ + /* c is a trail byte */ \ + (c)&=0x3f; \ + for(;;) { \ + __b=(s)[--(i)]; \ + if(__b>=0xc0) { \ + U8_MASK_LEAD_BYTE(__b, __count); \ + (c)|=(UChar32)__b<<__shift; \ + break; \ + } else { \ + (c)|=(UChar32)(__b&0x3f)<<__shift; \ + ++__count; \ + __shift+=6; \ + } \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Move the string offset from one code point boundary to the previous one + * and get the code point between them. + * (Pre-decrementing backward iteration.) + * "Safe" macro, checks for illegal sequences and for string boundaries. + * + * The input offset may be the same as the string length. + * If the offset is behind a multi-byte sequence, then the macro will read + * the whole sequence. + * If the offset is behind a lead byte, then that itself + * will be returned as the code point. + * If the offset is behind an illegal UTF-8 sequence, then c is set to a negative value. + * + * @param s const uint8_t * string + * @param start int32_t starting string offset (usually 0) + * @param i int32_t string offset, must be start0) { \ + U8_BACK_1_UNSAFE(s, i); \ + --__N; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Move the string offset from one code point boundary to the n-th one before it, + * i.e., move backward by n code points. + * (Pre-decrementing backward iteration.) + * The input offset may be the same as the string length. + * "Safe" macro, checks for illegal sequences and for string boundaries. + * + * @param s const uint8_t * string + * @param start int32_t index of the start of the string + * @param i int32_t string offset, must be start0 && (i)>(start)) { \ + U8_BACK_1(s, start, i); \ + --__N; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Adjust a random-access offset to a code point boundary after a code point. + * If the offset is behind a partial multi-byte sequence, + * then the offset is incremented to behind the whole sequence. + * Otherwise, it is not modified. + * The input offset may be the same as the string length. + * "Unsafe" macro, assumes well-formed UTF-8. + * + * @param s const uint8_t * string + * @param i string offset + * @see U8_SET_CP_LIMIT + * @stable ICU 2.4 + */ +#define U8_SET_CP_LIMIT_UNSAFE(s, i) UPRV_BLOCK_MACRO_BEGIN { \ + U8_BACK_1_UNSAFE(s, i); \ + U8_FWD_1_UNSAFE(s, i); \ +} UPRV_BLOCK_MACRO_END + +/** + * Adjust a random-access offset to a code point boundary after a code point. + * If the offset is behind a partial multi-byte sequence, + * then the offset is incremented to behind the whole sequence. + * Otherwise, it is not modified. + * The input offset may be the same as the string length. + * "Safe" macro, checks for illegal sequences and for string boundaries. + * + * The length can be negative for a NUL-terminated string. + * + * @param s const uint8_t * string + * @param start int32_t starting string offset (usually 0) + * @param i int32_t string offset, must be start<=i<=length + * @param length int32_t string length + * @see U8_SET_CP_LIMIT_UNSAFE + * @stable ICU 2.4 + */ +#define U8_SET_CP_LIMIT(s, start, i, length) UPRV_BLOCK_MACRO_BEGIN { \ + if((start)<(i) && ((i)<(length) || (length)<0)) { \ + U8_BACK_1(s, start, i); \ + U8_FWD_1(s, i, length); \ + } \ +} UPRV_BLOCK_MACRO_END + +#endif diff --git a/parser/nnsrc/wasm/stdlib-symbols.txt b/parser/nnsrc/wasm/stdlib-symbols.txt new file mode 100644 index 00000000..1b6d789e --- /dev/null +++ b/parser/nnsrc/wasm/stdlib-symbols.txt @@ -0,0 +1,24 @@ +"calloc", +"free", +"iswalnum", +"iswalpha", +"iswblank", +"iswdigit", +"iswlower", +"iswspace", +"iswupper", +"iswxdigit", +"malloc", +"memchr", +"memcmp", +"memcpy", +"memmove", +"memset", +"realloc", +"strcmp", +"strlen", +"strncat", +"strncmp", +"strncpy", +"towlower", +"towupper", diff --git a/parser/nnsrc/wasm/stdlib.c b/parser/nnsrc/wasm/stdlib.c new file mode 100644 index 00000000..cfe2e4b3 --- /dev/null +++ b/parser/nnsrc/wasm/stdlib.c @@ -0,0 +1,109 @@ +// This file implements a very simple allocator for external scanners running +// in WASM. Allocation is just bumping a static pointer and growing the heap +// as needed, and freeing is mostly a noop. But in the special case of freeing +// the last-allocated pointer, we'll reuse that pointer again. + +#include +#include +#include +#include + +extern void tree_sitter_debug_message(const char *, size_t); + +#define PAGESIZE 0x10000 +#define MAX_HEAP_SIZE (4 * 1024 * 1024) + +typedef struct { + size_t size; + char data[0]; +} Region; + +static Region *heap_end = NULL; +static Region *heap_start = NULL; +static Region *next = NULL; + +// Get the region metadata for the given heap pointer. +static inline Region *region_for_ptr(void *ptr) { + return ((Region *)ptr) - 1; +} + +// Get the location of the next region after the given region, +// if the given region had the given size. +static inline Region *region_after(Region *self, size_t len) { + char *address = self->data + len; + char *aligned = (char *)((uintptr_t)(address + 3) & ~0x3); + return (Region *)aligned; +} + +static void *get_heap_end() { + return (void *)(__builtin_wasm_memory_size(0) * PAGESIZE); +} + +static int grow_heap(size_t size) { + size_t new_page_count = ((size - 1) / PAGESIZE) + 1; + return __builtin_wasm_memory_grow(0, new_page_count) != SIZE_MAX; +} + +// Clear out the heap, and move it to the given address. +void reset_heap(void *new_heap_start) { + heap_start = new_heap_start; + next = new_heap_start; + heap_end = get_heap_end(); +} + +void *malloc(size_t size) { + Region *region_end = region_after(next, size); + + if (region_end > heap_end) { + if ((char *)region_end - (char *)heap_start > MAX_HEAP_SIZE) { + return NULL; + } + if (!grow_heap(size)) return NULL; + heap_end = get_heap_end(); + } + + void *result = &next->data; + next->size = size; + next = region_end; + + return result; +} + +void free(void *ptr) { + if (ptr == NULL) return; + + Region *region = region_for_ptr(ptr); + Region *region_end = region_after(region, region->size); + + // When freeing the last allocated pointer, re-use that + // pointer for the next allocation. + if (region_end == next) { + next = region; + } +} + +void *calloc(size_t count, size_t size) { + void *result = malloc(count * size); + memset(result, 0, count * size); + return result; +} + +void *realloc(void *ptr, size_t new_size) { + if (ptr == NULL) { + return malloc(new_size); + } + + Region *region = region_for_ptr(ptr); + Region *region_end = region_after(region, region->size); + + // When reallocating the last allocated region, return + // the same pointer, and skip copying the data. + if (region_end == next) { + next = region; + return malloc(new_size); + } + + void *result = malloc(new_size); + memcpy(result, ®ion->data, region->size); + return result; +} diff --git a/parser/nnsrc/wasm/wasm-stdlib.h b/parser/nnsrc/wasm/wasm-stdlib.h new file mode 100644 index 00000000..c1f3bc08 --- /dev/null +++ b/parser/nnsrc/wasm/wasm-stdlib.h @@ -0,0 +1,1302 @@ +unsigned char STDLIB_WASM[] = { + 0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x06, 0x60, + 0x02, 0x7f, 0x7f, 0x01, 0x7f, 0x60, 0x01, 0x7f, 0x00, 0x60, 0x00, 0x00, + 0x60, 0x01, 0x7f, 0x01, 0x7f, 0x60, 0x00, 0x01, 0x7f, 0x60, 0x03, 0x7f, + 0x7f, 0x7f, 0x01, 0x7f, 0x02, 0x9e, 0x01, 0x05, 0x03, 0x65, 0x6e, 0x76, + 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x02, 0x00, 0x02, 0x03, 0x65, + 0x6e, 0x76, 0x19, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x01, 0x70, 0x00, 0x01, 0x16, 0x77, 0x61, 0x73, + 0x69, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x31, 0x08, 0x61, 0x72, 0x67, 0x73, + 0x5f, 0x67, 0x65, 0x74, 0x00, 0x00, 0x16, 0x77, 0x61, 0x73, 0x69, 0x5f, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x70, 0x72, 0x65, + 0x76, 0x69, 0x65, 0x77, 0x31, 0x0e, 0x61, 0x72, 0x67, 0x73, 0x5f, 0x73, + 0x69, 0x7a, 0x65, 0x73, 0x5f, 0x67, 0x65, 0x74, 0x00, 0x00, 0x16, 0x77, + 0x61, 0x73, 0x69, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x31, 0x09, 0x70, 0x72, + 0x6f, 0x63, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x00, 0x01, 0x03, 0x2a, 0x29, + 0x02, 0x00, 0x02, 0x02, 0x01, 0x03, 0x01, 0x00, 0x00, 0x01, 0x04, 0x00, + 0x00, 0x01, 0x02, 0x02, 0x05, 0x05, 0x03, 0x03, 0x05, 0x05, 0x00, 0x03, + 0x00, 0x03, 0x05, 0x03, 0x05, 0x03, 0x03, 0x03, 0x03, 0x05, 0x05, 0x05, + 0x03, 0x03, 0x00, 0x03, 0x03, 0x06, 0x0d, 0x02, 0x7f, 0x01, 0x41, 0x80, + 0x80, 0x04, 0x0b, 0x7f, 0x00, 0x41, 0x00, 0x0b, 0x07, 0xad, 0x02, 0x1c, + 0x11, 0x5f, 0x5f, 0x77, 0x61, 0x73, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, + 0x5f, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x00, 0x03, 0x0f, 0x5f, 0x5f, 0x73, + 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x03, 0x00, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, 0x06, 0x0a, + 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x00, 0x07, + 0x06, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x08, 0x04, 0x66, 0x72, + 0x65, 0x65, 0x00, 0x09, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x00, + 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x73, 0x65, 0x74, 0x00, 0x14, 0x07, 0x72, + 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x0b, 0x06, 0x6d, 0x65, 0x6d, + 0x63, 0x70, 0x79, 0x00, 0x13, 0x06, 0x73, 0x74, 0x72, 0x6c, 0x65, 0x6e, + 0x00, 0x15, 0x08, 0x69, 0x73, 0x77, 0x61, 0x6c, 0x6e, 0x75, 0x6d, 0x00, + 0x2b, 0x08, 0x69, 0x73, 0x77, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x16, + 0x08, 0x69, 0x73, 0x77, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x00, 0x22, 0x08, + 0x69, 0x73, 0x77, 0x64, 0x69, 0x67, 0x69, 0x74, 0x00, 0x23, 0x08, 0x69, + 0x73, 0x77, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x00, 0x20, 0x08, 0x69, 0x73, + 0x77, 0x73, 0x70, 0x61, 0x63, 0x65, 0x00, 0x2a, 0x08, 0x69, 0x73, 0x77, + 0x75, 0x70, 0x70, 0x65, 0x72, 0x00, 0x1e, 0x09, 0x69, 0x73, 0x77, 0x78, + 0x64, 0x69, 0x67, 0x69, 0x74, 0x00, 0x27, 0x08, 0x74, 0x6f, 0x77, 0x6c, + 0x6f, 0x77, 0x65, 0x72, 0x00, 0x1a, 0x08, 0x74, 0x6f, 0x77, 0x75, 0x70, + 0x70, 0x65, 0x72, 0x00, 0x1c, 0x06, 0x6d, 0x65, 0x6d, 0x63, 0x68, 0x72, + 0x00, 0x18, 0x06, 0x6d, 0x65, 0x6d, 0x63, 0x6d, 0x70, 0x00, 0x17, 0x07, + 0x6d, 0x65, 0x6d, 0x6d, 0x6f, 0x76, 0x65, 0x00, 0x1f, 0x06, 0x73, 0x74, + 0x72, 0x63, 0x6d, 0x70, 0x00, 0x19, 0x07, 0x73, 0x74, 0x72, 0x6e, 0x63, + 0x61, 0x74, 0x00, 0x24, 0x07, 0x73, 0x74, 0x72, 0x6e, 0x63, 0x6d, 0x70, + 0x00, 0x1d, 0x07, 0x73, 0x74, 0x72, 0x6e, 0x63, 0x70, 0x79, 0x00, 0x26, + 0x08, 0x01, 0x05, 0x0a, 0xe8, 0x2b, 0x29, 0x02, 0x00, 0x0b, 0x03, 0x00, + 0x00, 0x0b, 0x0d, 0x00, 0x41, 0xe8, 0xc2, 0x04, 0x41, 0x00, 0x41, 0x10, + 0xfc, 0x0b, 0x00, 0x0b, 0x52, 0x01, 0x01, 0x7f, 0x02, 0x40, 0x02, 0x40, + 0x23, 0x81, 0x80, 0x80, 0x80, 0x00, 0x41, 0xe8, 0xc2, 0x84, 0x80, 0x00, + 0x6a, 0x28, 0x02, 0x00, 0x0d, 0x00, 0x23, 0x81, 0x80, 0x80, 0x80, 0x00, + 0x41, 0xe8, 0xc2, 0x84, 0x80, 0x00, 0x6a, 0x41, 0x01, 0x36, 0x02, 0x00, + 0x10, 0x83, 0x80, 0x80, 0x80, 0x00, 0x10, 0x8d, 0x80, 0x80, 0x80, 0x00, + 0x21, 0x00, 0x10, 0x92, 0x80, 0x80, 0x80, 0x00, 0x20, 0x00, 0x0d, 0x01, + 0x0f, 0x0b, 0x00, 0x00, 0x0b, 0x20, 0x00, 0x10, 0x90, 0x80, 0x80, 0x80, + 0x00, 0x00, 0x0b, 0x37, 0x01, 0x01, 0x7f, 0x23, 0x81, 0x80, 0x80, 0x80, + 0x00, 0x22, 0x01, 0x41, 0xf0, 0xc2, 0x84, 0x80, 0x00, 0x6a, 0x20, 0x00, + 0x36, 0x02, 0x00, 0x20, 0x01, 0x41, 0xec, 0xc2, 0x84, 0x80, 0x00, 0x6a, + 0x20, 0x00, 0x36, 0x02, 0x00, 0x20, 0x01, 0x41, 0xf4, 0xc2, 0x84, 0x80, + 0x00, 0x6a, 0x3f, 0x00, 0x41, 0x10, 0x74, 0x36, 0x02, 0x00, 0x0b, 0xb4, + 0x01, 0x01, 0x03, 0x7f, 0x02, 0x40, 0x02, 0x40, 0x23, 0x81, 0x80, 0x80, + 0x80, 0x00, 0x22, 0x01, 0x41, 0xf4, 0xc2, 0x84, 0x80, 0x00, 0x6a, 0x28, + 0x02, 0x00, 0x20, 0x01, 0x41, 0xf0, 0xc2, 0x84, 0x80, 0x00, 0x6a, 0x28, + 0x02, 0x00, 0x22, 0x01, 0x20, 0x00, 0x6a, 0x41, 0x07, 0x6a, 0x41, 0x7c, + 0x71, 0x22, 0x02, 0x4f, 0x0d, 0x00, 0x41, 0x00, 0x21, 0x01, 0x20, 0x02, + 0x23, 0x81, 0x80, 0x80, 0x80, 0x00, 0x41, 0xec, 0xc2, 0x84, 0x80, 0x00, + 0x6a, 0x28, 0x02, 0x00, 0x6b, 0x41, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x0d, + 0x01, 0x20, 0x00, 0x41, 0x7f, 0x6a, 0x41, 0x10, 0x76, 0x41, 0x01, 0x6a, + 0x40, 0x00, 0x41, 0x7f, 0x46, 0x0d, 0x01, 0x3f, 0x00, 0x21, 0x01, 0x23, + 0x81, 0x80, 0x80, 0x80, 0x00, 0x22, 0x03, 0x41, 0xf4, 0xc2, 0x84, 0x80, + 0x00, 0x6a, 0x20, 0x01, 0x41, 0x10, 0x74, 0x36, 0x02, 0x00, 0x20, 0x03, + 0x41, 0xf0, 0xc2, 0x84, 0x80, 0x00, 0x6a, 0x28, 0x02, 0x00, 0x21, 0x01, + 0x0b, 0x20, 0x01, 0x20, 0x00, 0x36, 0x02, 0x00, 0x23, 0x81, 0x80, 0x80, + 0x80, 0x00, 0x41, 0xf0, 0xc2, 0x84, 0x80, 0x00, 0x6a, 0x20, 0x02, 0x36, + 0x02, 0x00, 0x20, 0x01, 0x41, 0x04, 0x6a, 0x21, 0x01, 0x0b, 0x20, 0x01, + 0x0b, 0x48, 0x01, 0x02, 0x7f, 0x02, 0x40, 0x20, 0x00, 0x45, 0x0d, 0x00, + 0x20, 0x00, 0x41, 0x7c, 0x6a, 0x22, 0x01, 0x28, 0x02, 0x00, 0x21, 0x02, + 0x23, 0x81, 0x80, 0x80, 0x80, 0x00, 0x41, 0xf0, 0xc2, 0x84, 0x80, 0x00, + 0x6a, 0x28, 0x02, 0x00, 0x20, 0x00, 0x20, 0x02, 0x6a, 0x41, 0x03, 0x6a, + 0x41, 0x7c, 0x71, 0x47, 0x0d, 0x00, 0x23, 0x81, 0x80, 0x80, 0x80, 0x00, + 0x41, 0xf0, 0xc2, 0x84, 0x80, 0x00, 0x6a, 0x20, 0x01, 0x36, 0x02, 0x00, + 0x0b, 0x0b, 0x19, 0x00, 0x20, 0x01, 0x20, 0x00, 0x6c, 0x22, 0x00, 0x10, + 0x88, 0x80, 0x80, 0x80, 0x00, 0x41, 0x00, 0x20, 0x00, 0x10, 0x94, 0x80, + 0x80, 0x80, 0x00, 0x0b, 0x6b, 0x01, 0x02, 0x7f, 0x02, 0x40, 0x20, 0x00, + 0x45, 0x0d, 0x00, 0x20, 0x00, 0x41, 0x7c, 0x6a, 0x22, 0x02, 0x28, 0x02, + 0x00, 0x21, 0x03, 0x02, 0x40, 0x23, 0x81, 0x80, 0x80, 0x80, 0x00, 0x41, + 0xf0, 0xc2, 0x84, 0x80, 0x00, 0x6a, 0x28, 0x02, 0x00, 0x20, 0x00, 0x20, + 0x03, 0x6a, 0x41, 0x03, 0x6a, 0x41, 0x7c, 0x71, 0x47, 0x0d, 0x00, 0x23, + 0x81, 0x80, 0x80, 0x80, 0x00, 0x41, 0xf0, 0xc2, 0x84, 0x80, 0x00, 0x6a, + 0x20, 0x02, 0x36, 0x02, 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x01, 0x10, 0x88, + 0x80, 0x80, 0x80, 0x00, 0x20, 0x00, 0x20, 0x02, 0x28, 0x02, 0x00, 0x10, + 0x93, 0x80, 0x80, 0x80, 0x00, 0x0f, 0x0b, 0x20, 0x01, 0x10, 0x88, 0x80, + 0x80, 0x80, 0x00, 0x0b, 0x0b, 0x00, 0x20, 0x00, 0x10, 0x90, 0x80, 0x80, + 0x80, 0x00, 0x00, 0x0b, 0xd5, 0x01, 0x01, 0x03, 0x7f, 0x23, 0x80, 0x80, + 0x80, 0x80, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x00, 0x24, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, + 0x20, 0x00, 0x41, 0x08, 0x6a, 0x20, 0x00, 0x41, 0x0c, 0x6a, 0x10, 0x8f, + 0x80, 0x80, 0x80, 0x00, 0x0d, 0x00, 0x20, 0x00, 0x28, 0x02, 0x08, 0x41, + 0x01, 0x6a, 0x22, 0x01, 0x45, 0x0d, 0x01, 0x20, 0x00, 0x28, 0x02, 0x0c, + 0x10, 0x88, 0x80, 0x80, 0x80, 0x00, 0x22, 0x02, 0x45, 0x0d, 0x02, 0x20, + 0x01, 0x41, 0x04, 0x10, 0x8a, 0x80, 0x80, 0x80, 0x00, 0x22, 0x01, 0x45, + 0x0d, 0x03, 0x20, 0x01, 0x20, 0x02, 0x10, 0x8e, 0x80, 0x80, 0x80, 0x00, + 0x0d, 0x04, 0x20, 0x00, 0x28, 0x02, 0x08, 0x20, 0x01, 0x10, 0x84, 0x80, + 0x80, 0x80, 0x00, 0x21, 0x01, 0x20, 0x00, 0x41, 0x10, 0x6a, 0x24, 0x80, + 0x80, 0x80, 0x80, 0x00, 0x20, 0x01, 0x0f, 0x0b, 0x41, 0xc7, 0x00, 0x10, + 0x8c, 0x80, 0x80, 0x80, 0x00, 0x00, 0x0b, 0x41, 0xc6, 0x00, 0x10, 0x8c, + 0x80, 0x80, 0x80, 0x00, 0x00, 0x0b, 0x41, 0xc6, 0x00, 0x10, 0x8c, 0x80, + 0x80, 0x80, 0x00, 0x00, 0x0b, 0x20, 0x02, 0x10, 0x89, 0x80, 0x80, 0x80, + 0x00, 0x41, 0xc6, 0x00, 0x10, 0x8c, 0x80, 0x80, 0x80, 0x00, 0x00, 0x0b, + 0x20, 0x02, 0x10, 0x89, 0x80, 0x80, 0x80, 0x00, 0x20, 0x01, 0x10, 0x89, + 0x80, 0x80, 0x80, 0x00, 0x41, 0xc7, 0x00, 0x10, 0x8c, 0x80, 0x80, 0x80, + 0x00, 0x00, 0x0b, 0x11, 0x00, 0x20, 0x00, 0x20, 0x01, 0x10, 0x80, 0x80, + 0x80, 0x80, 0x00, 0x41, 0xff, 0xff, 0x03, 0x71, 0x0b, 0x11, 0x00, 0x20, + 0x00, 0x20, 0x01, 0x10, 0x81, 0x80, 0x80, 0x80, 0x00, 0x41, 0xff, 0xff, + 0x03, 0x71, 0x0b, 0x0b, 0x00, 0x20, 0x00, 0x10, 0x82, 0x80, 0x80, 0x80, + 0x00, 0x00, 0x0b, 0x02, 0x00, 0x0b, 0x0e, 0x00, 0x10, 0x91, 0x80, 0x80, + 0x80, 0x00, 0x10, 0x91, 0x80, 0x80, 0x80, 0x00, 0x0b, 0xe6, 0x07, 0x01, + 0x04, 0x7f, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x02, 0x41, 0x20, + 0x4b, 0x0d, 0x00, 0x20, 0x01, 0x41, 0x03, 0x71, 0x45, 0x0d, 0x01, 0x20, + 0x02, 0x45, 0x0d, 0x01, 0x20, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x3a, + 0x00, 0x00, 0x20, 0x02, 0x41, 0x7f, 0x6a, 0x21, 0x03, 0x20, 0x00, 0x41, + 0x01, 0x6a, 0x21, 0x04, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x22, 0x05, 0x41, + 0x03, 0x71, 0x45, 0x0d, 0x02, 0x20, 0x03, 0x45, 0x0d, 0x02, 0x20, 0x00, + 0x20, 0x01, 0x2d, 0x00, 0x01, 0x3a, 0x00, 0x01, 0x20, 0x02, 0x41, 0x7e, + 0x6a, 0x21, 0x03, 0x20, 0x00, 0x41, 0x02, 0x6a, 0x21, 0x04, 0x20, 0x01, + 0x41, 0x02, 0x6a, 0x22, 0x05, 0x41, 0x03, 0x71, 0x45, 0x0d, 0x02, 0x20, + 0x03, 0x45, 0x0d, 0x02, 0x20, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x02, 0x3a, + 0x00, 0x02, 0x20, 0x02, 0x41, 0x7d, 0x6a, 0x21, 0x03, 0x20, 0x00, 0x41, + 0x03, 0x6a, 0x21, 0x04, 0x20, 0x01, 0x41, 0x03, 0x6a, 0x22, 0x05, 0x41, + 0x03, 0x71, 0x45, 0x0d, 0x02, 0x20, 0x03, 0x45, 0x0d, 0x02, 0x20, 0x00, + 0x20, 0x01, 0x2d, 0x00, 0x03, 0x3a, 0x00, 0x03, 0x20, 0x02, 0x41, 0x7c, + 0x6a, 0x21, 0x03, 0x20, 0x00, 0x41, 0x04, 0x6a, 0x21, 0x04, 0x20, 0x01, + 0x41, 0x04, 0x6a, 0x21, 0x05, 0x0c, 0x02, 0x0b, 0x20, 0x00, 0x20, 0x01, + 0x20, 0x02, 0xfc, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x0f, 0x0b, 0x20, 0x02, + 0x21, 0x03, 0x20, 0x00, 0x21, 0x04, 0x20, 0x01, 0x21, 0x05, 0x0b, 0x02, + 0x40, 0x02, 0x40, 0x20, 0x04, 0x41, 0x03, 0x71, 0x22, 0x02, 0x0d, 0x00, + 0x02, 0x40, 0x02, 0x40, 0x20, 0x03, 0x41, 0x10, 0x4f, 0x0d, 0x00, 0x20, + 0x03, 0x21, 0x02, 0x0c, 0x01, 0x0b, 0x02, 0x40, 0x20, 0x03, 0x41, 0x70, + 0x6a, 0x22, 0x02, 0x41, 0x10, 0x71, 0x0d, 0x00, 0x20, 0x04, 0x20, 0x05, + 0x29, 0x02, 0x00, 0x37, 0x02, 0x00, 0x20, 0x04, 0x20, 0x05, 0x29, 0x02, + 0x08, 0x37, 0x02, 0x08, 0x20, 0x04, 0x41, 0x10, 0x6a, 0x21, 0x04, 0x20, + 0x05, 0x41, 0x10, 0x6a, 0x21, 0x05, 0x20, 0x02, 0x21, 0x03, 0x0b, 0x20, + 0x02, 0x41, 0x10, 0x49, 0x0d, 0x00, 0x20, 0x03, 0x21, 0x02, 0x03, 0x40, + 0x20, 0x04, 0x20, 0x05, 0x29, 0x02, 0x00, 0x37, 0x02, 0x00, 0x20, 0x04, + 0x20, 0x05, 0x29, 0x02, 0x08, 0x37, 0x02, 0x08, 0x20, 0x04, 0x20, 0x05, + 0x29, 0x02, 0x10, 0x37, 0x02, 0x10, 0x20, 0x04, 0x20, 0x05, 0x29, 0x02, + 0x18, 0x37, 0x02, 0x18, 0x20, 0x04, 0x41, 0x20, 0x6a, 0x21, 0x04, 0x20, + 0x05, 0x41, 0x20, 0x6a, 0x21, 0x05, 0x20, 0x02, 0x41, 0x60, 0x6a, 0x22, + 0x02, 0x41, 0x0f, 0x4b, 0x0d, 0x00, 0x0b, 0x0b, 0x02, 0x40, 0x20, 0x02, + 0x41, 0x08, 0x49, 0x0d, 0x00, 0x20, 0x04, 0x20, 0x05, 0x29, 0x02, 0x00, + 0x37, 0x02, 0x00, 0x20, 0x05, 0x41, 0x08, 0x6a, 0x21, 0x05, 0x20, 0x04, + 0x41, 0x08, 0x6a, 0x21, 0x04, 0x0b, 0x02, 0x40, 0x20, 0x02, 0x41, 0x04, + 0x71, 0x45, 0x0d, 0x00, 0x20, 0x04, 0x20, 0x05, 0x28, 0x02, 0x00, 0x36, + 0x02, 0x00, 0x20, 0x05, 0x41, 0x04, 0x6a, 0x21, 0x05, 0x20, 0x04, 0x41, + 0x04, 0x6a, 0x21, 0x04, 0x0b, 0x02, 0x40, 0x20, 0x02, 0x41, 0x02, 0x71, + 0x45, 0x0d, 0x00, 0x20, 0x04, 0x20, 0x05, 0x2f, 0x00, 0x00, 0x3b, 0x00, + 0x00, 0x20, 0x04, 0x41, 0x02, 0x6a, 0x21, 0x04, 0x20, 0x05, 0x41, 0x02, + 0x6a, 0x21, 0x05, 0x0b, 0x20, 0x02, 0x41, 0x01, 0x71, 0x45, 0x0d, 0x01, + 0x20, 0x04, 0x20, 0x05, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x00, + 0x0f, 0x0b, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, + 0x20, 0x03, 0x41, 0x20, 0x49, 0x0d, 0x00, 0x02, 0x40, 0x02, 0x40, 0x20, + 0x02, 0x41, 0x7f, 0x6a, 0x0e, 0x03, 0x03, 0x00, 0x01, 0x07, 0x0b, 0x20, + 0x04, 0x20, 0x05, 0x28, 0x02, 0x00, 0x3b, 0x00, 0x00, 0x20, 0x04, 0x20, + 0x05, 0x41, 0x02, 0x6a, 0x28, 0x01, 0x00, 0x36, 0x02, 0x02, 0x20, 0x04, + 0x20, 0x05, 0x41, 0x06, 0x6a, 0x29, 0x01, 0x00, 0x37, 0x02, 0x06, 0x20, + 0x04, 0x41, 0x12, 0x6a, 0x21, 0x02, 0x20, 0x05, 0x41, 0x12, 0x6a, 0x21, + 0x01, 0x41, 0x0e, 0x21, 0x06, 0x20, 0x05, 0x41, 0x0e, 0x6a, 0x28, 0x01, + 0x00, 0x21, 0x05, 0x41, 0x0e, 0x21, 0x03, 0x0c, 0x03, 0x0b, 0x20, 0x04, + 0x20, 0x05, 0x28, 0x02, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x04, 0x20, 0x05, + 0x41, 0x01, 0x6a, 0x28, 0x00, 0x00, 0x36, 0x02, 0x01, 0x20, 0x04, 0x20, + 0x05, 0x41, 0x05, 0x6a, 0x29, 0x00, 0x00, 0x37, 0x02, 0x05, 0x20, 0x04, + 0x41, 0x11, 0x6a, 0x21, 0x02, 0x20, 0x05, 0x41, 0x11, 0x6a, 0x21, 0x01, + 0x41, 0x0d, 0x21, 0x06, 0x20, 0x05, 0x41, 0x0d, 0x6a, 0x28, 0x00, 0x00, + 0x21, 0x05, 0x41, 0x0f, 0x21, 0x03, 0x0c, 0x02, 0x0b, 0x02, 0x40, 0x02, + 0x40, 0x20, 0x03, 0x41, 0x10, 0x4f, 0x0d, 0x00, 0x20, 0x04, 0x21, 0x02, + 0x20, 0x05, 0x21, 0x01, 0x0c, 0x01, 0x0b, 0x20, 0x04, 0x20, 0x05, 0x2d, + 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x04, 0x20, 0x05, 0x28, 0x00, 0x01, + 0x36, 0x00, 0x01, 0x20, 0x04, 0x20, 0x05, 0x29, 0x00, 0x05, 0x37, 0x00, + 0x05, 0x20, 0x04, 0x20, 0x05, 0x2f, 0x00, 0x0d, 0x3b, 0x00, 0x0d, 0x20, + 0x04, 0x20, 0x05, 0x2d, 0x00, 0x0f, 0x3a, 0x00, 0x0f, 0x20, 0x04, 0x41, + 0x10, 0x6a, 0x21, 0x02, 0x20, 0x05, 0x41, 0x10, 0x6a, 0x21, 0x01, 0x0b, + 0x20, 0x03, 0x41, 0x08, 0x71, 0x0d, 0x02, 0x0c, 0x03, 0x0b, 0x20, 0x04, + 0x20, 0x05, 0x28, 0x02, 0x00, 0x22, 0x02, 0x3a, 0x00, 0x00, 0x20, 0x04, + 0x20, 0x02, 0x41, 0x10, 0x76, 0x3a, 0x00, 0x02, 0x20, 0x04, 0x20, 0x02, + 0x41, 0x08, 0x76, 0x3a, 0x00, 0x01, 0x20, 0x04, 0x20, 0x05, 0x41, 0x03, + 0x6a, 0x28, 0x00, 0x00, 0x36, 0x02, 0x03, 0x20, 0x04, 0x20, 0x05, 0x41, + 0x07, 0x6a, 0x29, 0x00, 0x00, 0x37, 0x02, 0x07, 0x20, 0x04, 0x41, 0x13, + 0x6a, 0x21, 0x02, 0x20, 0x05, 0x41, 0x13, 0x6a, 0x21, 0x01, 0x41, 0x0f, + 0x21, 0x06, 0x20, 0x05, 0x41, 0x0f, 0x6a, 0x28, 0x00, 0x00, 0x21, 0x05, + 0x41, 0x0d, 0x21, 0x03, 0x0b, 0x20, 0x04, 0x20, 0x06, 0x6a, 0x20, 0x05, + 0x36, 0x02, 0x00, 0x0b, 0x20, 0x02, 0x20, 0x01, 0x29, 0x00, 0x00, 0x37, + 0x00, 0x00, 0x20, 0x02, 0x41, 0x08, 0x6a, 0x21, 0x02, 0x20, 0x01, 0x41, + 0x08, 0x6a, 0x21, 0x01, 0x0b, 0x02, 0x40, 0x20, 0x03, 0x41, 0x04, 0x71, + 0x45, 0x0d, 0x00, 0x20, 0x02, 0x20, 0x01, 0x28, 0x00, 0x00, 0x36, 0x00, + 0x00, 0x20, 0x02, 0x41, 0x04, 0x6a, 0x21, 0x02, 0x20, 0x01, 0x41, 0x04, + 0x6a, 0x21, 0x01, 0x0b, 0x02, 0x40, 0x20, 0x03, 0x41, 0x02, 0x71, 0x45, + 0x0d, 0x00, 0x20, 0x02, 0x20, 0x01, 0x2f, 0x00, 0x00, 0x3b, 0x00, 0x00, + 0x20, 0x02, 0x41, 0x02, 0x6a, 0x21, 0x02, 0x20, 0x01, 0x41, 0x02, 0x6a, + 0x21, 0x01, 0x0b, 0x20, 0x03, 0x41, 0x01, 0x71, 0x45, 0x0d, 0x00, 0x20, + 0x02, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x0b, 0x20, 0x00, + 0x0b, 0x88, 0x03, 0x02, 0x03, 0x7f, 0x01, 0x7e, 0x02, 0x40, 0x20, 0x02, + 0x41, 0x21, 0x49, 0x0d, 0x00, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0xfc, + 0x0b, 0x00, 0x20, 0x00, 0x0f, 0x0b, 0x02, 0x40, 0x20, 0x02, 0x45, 0x0d, + 0x00, 0x20, 0x00, 0x20, 0x01, 0x3a, 0x00, 0x00, 0x20, 0x02, 0x20, 0x00, + 0x6a, 0x22, 0x03, 0x41, 0x7f, 0x6a, 0x20, 0x01, 0x3a, 0x00, 0x00, 0x20, + 0x02, 0x41, 0x03, 0x49, 0x0d, 0x00, 0x20, 0x00, 0x20, 0x01, 0x3a, 0x00, + 0x02, 0x20, 0x00, 0x20, 0x01, 0x3a, 0x00, 0x01, 0x20, 0x03, 0x41, 0x7d, + 0x6a, 0x20, 0x01, 0x3a, 0x00, 0x00, 0x20, 0x03, 0x41, 0x7e, 0x6a, 0x20, + 0x01, 0x3a, 0x00, 0x00, 0x20, 0x02, 0x41, 0x07, 0x49, 0x0d, 0x00, 0x20, + 0x00, 0x20, 0x01, 0x3a, 0x00, 0x03, 0x20, 0x03, 0x41, 0x7c, 0x6a, 0x20, + 0x01, 0x3a, 0x00, 0x00, 0x20, 0x02, 0x41, 0x09, 0x49, 0x0d, 0x00, 0x20, + 0x00, 0x41, 0x00, 0x20, 0x00, 0x6b, 0x41, 0x03, 0x71, 0x22, 0x04, 0x6a, + 0x22, 0x05, 0x20, 0x01, 0x41, 0xff, 0x01, 0x71, 0x41, 0x81, 0x82, 0x84, + 0x08, 0x6c, 0x22, 0x03, 0x36, 0x02, 0x00, 0x20, 0x05, 0x20, 0x02, 0x20, + 0x04, 0x6b, 0x41, 0x7c, 0x71, 0x22, 0x01, 0x6a, 0x22, 0x02, 0x41, 0x7c, + 0x6a, 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, 0x01, 0x41, 0x09, 0x49, 0x0d, + 0x00, 0x20, 0x05, 0x20, 0x03, 0x36, 0x02, 0x08, 0x20, 0x05, 0x20, 0x03, + 0x36, 0x02, 0x04, 0x20, 0x02, 0x41, 0x78, 0x6a, 0x20, 0x03, 0x36, 0x02, + 0x00, 0x20, 0x02, 0x41, 0x74, 0x6a, 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, + 0x01, 0x41, 0x19, 0x49, 0x0d, 0x00, 0x20, 0x05, 0x20, 0x03, 0x36, 0x02, + 0x18, 0x20, 0x05, 0x20, 0x03, 0x36, 0x02, 0x14, 0x20, 0x05, 0x20, 0x03, + 0x36, 0x02, 0x10, 0x20, 0x05, 0x20, 0x03, 0x36, 0x02, 0x0c, 0x20, 0x02, + 0x41, 0x70, 0x6a, 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, 0x02, 0x41, 0x6c, + 0x6a, 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, 0x02, 0x41, 0x68, 0x6a, 0x20, + 0x03, 0x36, 0x02, 0x00, 0x20, 0x02, 0x41, 0x64, 0x6a, 0x20, 0x03, 0x36, + 0x02, 0x00, 0x20, 0x01, 0x20, 0x05, 0x41, 0x04, 0x71, 0x41, 0x18, 0x72, + 0x22, 0x02, 0x6b, 0x22, 0x01, 0x41, 0x20, 0x49, 0x0d, 0x00, 0x20, 0x03, + 0xad, 0x42, 0x81, 0x80, 0x80, 0x80, 0x10, 0x7e, 0x21, 0x06, 0x20, 0x05, + 0x20, 0x02, 0x6a, 0x21, 0x02, 0x03, 0x40, 0x20, 0x02, 0x20, 0x06, 0x37, + 0x03, 0x18, 0x20, 0x02, 0x20, 0x06, 0x37, 0x03, 0x10, 0x20, 0x02, 0x20, + 0x06, 0x37, 0x03, 0x08, 0x20, 0x02, 0x20, 0x06, 0x37, 0x03, 0x00, 0x20, + 0x02, 0x41, 0x20, 0x6a, 0x21, 0x02, 0x20, 0x01, 0x41, 0x60, 0x6a, 0x22, + 0x01, 0x41, 0x1f, 0x4b, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x00, 0x0b, 0xcc, + 0x01, 0x01, 0x03, 0x7f, 0x20, 0x00, 0x21, 0x01, 0x02, 0x40, 0x02, 0x40, + 0x20, 0x00, 0x41, 0x03, 0x71, 0x45, 0x0d, 0x00, 0x02, 0x40, 0x20, 0x00, + 0x2d, 0x00, 0x00, 0x0d, 0x00, 0x20, 0x00, 0x20, 0x00, 0x6b, 0x0f, 0x0b, + 0x20, 0x00, 0x41, 0x01, 0x6a, 0x22, 0x01, 0x41, 0x03, 0x71, 0x45, 0x0d, + 0x00, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x45, 0x0d, 0x01, 0x20, 0x00, 0x41, + 0x02, 0x6a, 0x22, 0x01, 0x41, 0x03, 0x71, 0x45, 0x0d, 0x00, 0x20, 0x01, + 0x2d, 0x00, 0x00, 0x45, 0x0d, 0x01, 0x20, 0x00, 0x41, 0x03, 0x6a, 0x22, + 0x01, 0x41, 0x03, 0x71, 0x45, 0x0d, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x00, + 0x45, 0x0d, 0x01, 0x20, 0x00, 0x41, 0x04, 0x6a, 0x22, 0x01, 0x41, 0x03, + 0x71, 0x0d, 0x01, 0x0b, 0x20, 0x01, 0x41, 0x7c, 0x6a, 0x21, 0x02, 0x20, + 0x01, 0x41, 0x7b, 0x6a, 0x21, 0x01, 0x03, 0x40, 0x20, 0x01, 0x41, 0x04, + 0x6a, 0x21, 0x01, 0x20, 0x02, 0x41, 0x04, 0x6a, 0x22, 0x02, 0x28, 0x02, + 0x00, 0x22, 0x03, 0x41, 0x7f, 0x73, 0x20, 0x03, 0x41, 0xff, 0xfd, 0xfb, + 0x77, 0x6a, 0x71, 0x41, 0x80, 0x81, 0x82, 0x84, 0x78, 0x71, 0x45, 0x0d, + 0x00, 0x0b, 0x03, 0x40, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, + 0x02, 0x2d, 0x00, 0x00, 0x21, 0x03, 0x20, 0x02, 0x41, 0x01, 0x6a, 0x21, + 0x02, 0x20, 0x03, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x01, 0x20, 0x00, 0x6b, + 0x0b, 0x44, 0x00, 0x02, 0x40, 0x20, 0x00, 0x41, 0xff, 0xff, 0x07, 0x4b, + 0x0d, 0x00, 0x20, 0x00, 0x41, 0x08, 0x76, 0x41, 0x80, 0x80, 0x84, 0x80, + 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0x05, 0x74, 0x20, 0x00, 0x41, 0x03, + 0x76, 0x41, 0x1f, 0x71, 0x72, 0x41, 0x80, 0x80, 0x84, 0x80, 0x00, 0x6a, + 0x2d, 0x00, 0x00, 0x20, 0x00, 0x41, 0x07, 0x71, 0x76, 0x41, 0x01, 0x71, + 0x0f, 0x0b, 0x20, 0x00, 0x41, 0xfe, 0xff, 0x0b, 0x49, 0x0b, 0x49, 0x01, + 0x03, 0x7f, 0x41, 0x00, 0x21, 0x03, 0x02, 0x40, 0x20, 0x02, 0x45, 0x0d, + 0x00, 0x02, 0x40, 0x03, 0x40, 0x20, 0x00, 0x2d, 0x00, 0x00, 0x22, 0x04, + 0x20, 0x01, 0x2d, 0x00, 0x00, 0x22, 0x05, 0x47, 0x0d, 0x01, 0x20, 0x01, + 0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, 0x00, 0x41, 0x01, 0x6a, 0x21, 0x00, + 0x20, 0x02, 0x41, 0x7f, 0x6a, 0x22, 0x02, 0x0d, 0x00, 0x0c, 0x02, 0x0b, + 0x0b, 0x20, 0x04, 0x20, 0x05, 0x6b, 0x21, 0x03, 0x0b, 0x20, 0x03, 0x0b, + 0xf2, 0x02, 0x01, 0x03, 0x7f, 0x20, 0x02, 0x41, 0x00, 0x47, 0x21, 0x03, + 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x00, 0x41, 0x03, + 0x71, 0x45, 0x0d, 0x00, 0x20, 0x02, 0x45, 0x0d, 0x00, 0x02, 0x40, 0x20, + 0x00, 0x2d, 0x00, 0x00, 0x20, 0x01, 0x41, 0xff, 0x01, 0x71, 0x47, 0x0d, + 0x00, 0x20, 0x00, 0x21, 0x04, 0x20, 0x02, 0x21, 0x05, 0x0c, 0x03, 0x0b, + 0x20, 0x02, 0x41, 0x7f, 0x6a, 0x22, 0x05, 0x41, 0x00, 0x47, 0x21, 0x03, + 0x20, 0x00, 0x41, 0x01, 0x6a, 0x22, 0x04, 0x41, 0x03, 0x71, 0x45, 0x0d, + 0x01, 0x20, 0x05, 0x45, 0x0d, 0x01, 0x20, 0x04, 0x2d, 0x00, 0x00, 0x20, + 0x01, 0x41, 0xff, 0x01, 0x71, 0x46, 0x0d, 0x02, 0x20, 0x02, 0x41, 0x7e, + 0x6a, 0x22, 0x05, 0x41, 0x00, 0x47, 0x21, 0x03, 0x20, 0x00, 0x41, 0x02, + 0x6a, 0x22, 0x04, 0x41, 0x03, 0x71, 0x45, 0x0d, 0x01, 0x20, 0x05, 0x45, + 0x0d, 0x01, 0x20, 0x04, 0x2d, 0x00, 0x00, 0x20, 0x01, 0x41, 0xff, 0x01, + 0x71, 0x46, 0x0d, 0x02, 0x20, 0x02, 0x41, 0x7d, 0x6a, 0x22, 0x05, 0x41, + 0x00, 0x47, 0x21, 0x03, 0x20, 0x00, 0x41, 0x03, 0x6a, 0x22, 0x04, 0x41, + 0x03, 0x71, 0x45, 0x0d, 0x01, 0x20, 0x05, 0x45, 0x0d, 0x01, 0x20, 0x04, + 0x2d, 0x00, 0x00, 0x20, 0x01, 0x41, 0xff, 0x01, 0x71, 0x46, 0x0d, 0x02, + 0x20, 0x00, 0x41, 0x04, 0x6a, 0x21, 0x04, 0x20, 0x02, 0x41, 0x7c, 0x6a, + 0x22, 0x05, 0x41, 0x00, 0x47, 0x21, 0x03, 0x0c, 0x01, 0x0b, 0x20, 0x02, + 0x21, 0x05, 0x20, 0x00, 0x21, 0x04, 0x0b, 0x20, 0x03, 0x45, 0x0d, 0x01, + 0x02, 0x40, 0x20, 0x04, 0x2d, 0x00, 0x00, 0x20, 0x01, 0x41, 0xff, 0x01, + 0x71, 0x46, 0x0d, 0x00, 0x20, 0x05, 0x41, 0x04, 0x49, 0x0d, 0x00, 0x20, + 0x01, 0x41, 0xff, 0x01, 0x71, 0x41, 0x81, 0x82, 0x84, 0x08, 0x6c, 0x21, + 0x00, 0x03, 0x40, 0x20, 0x04, 0x28, 0x02, 0x00, 0x20, 0x00, 0x73, 0x22, + 0x02, 0x41, 0x7f, 0x73, 0x20, 0x02, 0x41, 0xff, 0xfd, 0xfb, 0x77, 0x6a, + 0x71, 0x41, 0x80, 0x81, 0x82, 0x84, 0x78, 0x71, 0x0d, 0x02, 0x20, 0x04, + 0x41, 0x04, 0x6a, 0x21, 0x04, 0x20, 0x05, 0x41, 0x7c, 0x6a, 0x22, 0x05, + 0x41, 0x03, 0x4b, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x05, 0x45, 0x0d, 0x01, + 0x0b, 0x20, 0x01, 0x41, 0xff, 0x01, 0x71, 0x21, 0x02, 0x03, 0x40, 0x02, + 0x40, 0x20, 0x04, 0x2d, 0x00, 0x00, 0x20, 0x02, 0x47, 0x0d, 0x00, 0x20, + 0x04, 0x0f, 0x0b, 0x20, 0x04, 0x41, 0x01, 0x6a, 0x21, 0x04, 0x20, 0x05, + 0x41, 0x7f, 0x6a, 0x22, 0x05, 0x0d, 0x00, 0x0b, 0x0b, 0x41, 0x00, 0x0b, + 0x67, 0x01, 0x02, 0x7f, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x21, 0x02, 0x02, + 0x40, 0x20, 0x00, 0x2d, 0x00, 0x00, 0x22, 0x03, 0x45, 0x0d, 0x00, 0x20, + 0x03, 0x20, 0x02, 0x41, 0xff, 0x01, 0x71, 0x47, 0x0d, 0x00, 0x20, 0x00, + 0x41, 0x01, 0x6a, 0x21, 0x00, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, + 0x03, 0x40, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x21, 0x02, 0x20, 0x00, 0x2d, + 0x00, 0x00, 0x22, 0x03, 0x45, 0x0d, 0x01, 0x20, 0x00, 0x41, 0x01, 0x6a, + 0x21, 0x00, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, 0x03, 0x20, + 0x02, 0x41, 0xff, 0x01, 0x71, 0x46, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x03, + 0x20, 0x02, 0x41, 0xff, 0x01, 0x71, 0x6b, 0x0b, 0x0c, 0x00, 0x20, 0x00, + 0x41, 0x00, 0x10, 0x9b, 0x80, 0x80, 0x80, 0x00, 0x0b, 0xbc, 0x02, 0x01, + 0x06, 0x7f, 0x02, 0x40, 0x20, 0x00, 0x41, 0xff, 0xff, 0x07, 0x4b, 0x0d, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x41, 0xff, 0x01, 0x71, 0x22, 0x02, 0x41, + 0x03, 0x6e, 0x22, 0x03, 0x41, 0x03, 0x6c, 0x6b, 0x41, 0xff, 0x01, 0x71, + 0x41, 0x02, 0x74, 0x41, 0xc0, 0x9e, 0x84, 0x80, 0x00, 0x6a, 0x28, 0x02, + 0x00, 0x20, 0x00, 0x41, 0x08, 0x76, 0x22, 0x04, 0x41, 0xa0, 0xa9, 0x84, + 0x80, 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0xd6, 0x00, 0x6c, 0x20, 0x03, + 0x6a, 0x41, 0xa0, 0xa9, 0x84, 0x80, 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x6c, + 0x41, 0x0b, 0x76, 0x41, 0x06, 0x70, 0x20, 0x04, 0x41, 0x90, 0xbe, 0x84, + 0x80, 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x6a, 0x41, 0x02, 0x74, 0x41, 0xd0, + 0x9e, 0x84, 0x80, 0x00, 0x6a, 0x28, 0x02, 0x00, 0x22, 0x03, 0x41, 0x08, + 0x75, 0x21, 0x04, 0x02, 0x40, 0x20, 0x03, 0x41, 0xff, 0x01, 0x71, 0x22, + 0x03, 0x41, 0x01, 0x4b, 0x0d, 0x00, 0x20, 0x04, 0x41, 0x00, 0x20, 0x03, + 0x20, 0x01, 0x73, 0x6b, 0x71, 0x20, 0x00, 0x6a, 0x0f, 0x0b, 0x20, 0x04, + 0x41, 0xff, 0x01, 0x71, 0x22, 0x03, 0x45, 0x0d, 0x00, 0x20, 0x04, 0x41, + 0x08, 0x76, 0x21, 0x04, 0x03, 0x40, 0x02, 0x40, 0x20, 0x02, 0x20, 0x03, + 0x41, 0x01, 0x76, 0x22, 0x05, 0x20, 0x04, 0x6a, 0x22, 0x06, 0x41, 0x01, + 0x74, 0x41, 0x90, 0xa6, 0x84, 0x80, 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x22, + 0x07, 0x47, 0x0d, 0x00, 0x02, 0x40, 0x20, 0x06, 0x41, 0x01, 0x74, 0x41, + 0x91, 0xa6, 0x84, 0x80, 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0x02, 0x74, + 0x41, 0xd0, 0x9e, 0x84, 0x80, 0x00, 0x6a, 0x28, 0x02, 0x00, 0x22, 0x03, + 0x41, 0xff, 0x01, 0x71, 0x22, 0x04, 0x41, 0x01, 0x4b, 0x0d, 0x00, 0x20, + 0x03, 0x41, 0x08, 0x75, 0x41, 0x00, 0x20, 0x04, 0x20, 0x01, 0x73, 0x6b, + 0x71, 0x20, 0x00, 0x6a, 0x0f, 0x0b, 0x41, 0x7f, 0x41, 0x01, 0x20, 0x01, + 0x1b, 0x20, 0x00, 0x6a, 0x0f, 0x0b, 0x20, 0x04, 0x20, 0x06, 0x20, 0x02, + 0x20, 0x07, 0x49, 0x22, 0x07, 0x1b, 0x21, 0x04, 0x20, 0x05, 0x20, 0x03, + 0x20, 0x05, 0x6b, 0x20, 0x07, 0x1b, 0x22, 0x03, 0x0d, 0x00, 0x0b, 0x0b, + 0x20, 0x00, 0x0b, 0x0c, 0x00, 0x20, 0x00, 0x41, 0x01, 0x10, 0x9b, 0x80, + 0x80, 0x80, 0x00, 0x0b, 0x7b, 0x01, 0x02, 0x7f, 0x02, 0x40, 0x20, 0x02, + 0x0d, 0x00, 0x41, 0x00, 0x0f, 0x0b, 0x02, 0x40, 0x02, 0x40, 0x20, 0x00, + 0x2d, 0x00, 0x00, 0x22, 0x03, 0x45, 0x0d, 0x00, 0x20, 0x00, 0x41, 0x01, + 0x6a, 0x21, 0x00, 0x20, 0x02, 0x41, 0x7f, 0x6a, 0x21, 0x02, 0x03, 0x40, + 0x20, 0x03, 0x41, 0xff, 0x01, 0x71, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x22, + 0x04, 0x47, 0x0d, 0x02, 0x20, 0x04, 0x45, 0x0d, 0x02, 0x20, 0x02, 0x41, + 0x00, 0x46, 0x0d, 0x02, 0x20, 0x02, 0x41, 0x7f, 0x6a, 0x21, 0x02, 0x20, + 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, 0x00, 0x2d, 0x00, 0x00, 0x21, + 0x03, 0x20, 0x00, 0x41, 0x01, 0x6a, 0x21, 0x00, 0x20, 0x03, 0x0d, 0x00, + 0x0b, 0x0b, 0x41, 0x00, 0x21, 0x03, 0x0b, 0x20, 0x03, 0x41, 0xff, 0x01, + 0x71, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x6b, 0x0b, 0x0d, 0x00, 0x20, 0x00, + 0x10, 0x9a, 0x80, 0x80, 0x80, 0x00, 0x20, 0x00, 0x47, 0x0b, 0xbf, 0x09, + 0x01, 0x04, 0x7f, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x02, 0x41, + 0x21, 0x4f, 0x0d, 0x00, 0x20, 0x00, 0x20, 0x01, 0x46, 0x0d, 0x02, 0x20, + 0x01, 0x20, 0x00, 0x20, 0x02, 0x6a, 0x22, 0x03, 0x6b, 0x41, 0x00, 0x20, + 0x02, 0x41, 0x01, 0x74, 0x6b, 0x4b, 0x0d, 0x01, 0x0b, 0x20, 0x00, 0x20, + 0x01, 0x20, 0x02, 0xfc, 0x0a, 0x00, 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x01, + 0x20, 0x00, 0x73, 0x41, 0x03, 0x71, 0x21, 0x04, 0x02, 0x40, 0x02, 0x40, + 0x02, 0x40, 0x20, 0x00, 0x20, 0x01, 0x4f, 0x0d, 0x00, 0x02, 0x40, 0x20, + 0x04, 0x45, 0x0d, 0x00, 0x20, 0x02, 0x21, 0x05, 0x20, 0x00, 0x21, 0x03, + 0x0c, 0x03, 0x0b, 0x02, 0x40, 0x20, 0x00, 0x41, 0x03, 0x71, 0x0d, 0x00, + 0x20, 0x02, 0x21, 0x05, 0x20, 0x00, 0x21, 0x03, 0x0c, 0x02, 0x0b, 0x20, + 0x02, 0x45, 0x0d, 0x03, 0x20, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x3a, + 0x00, 0x00, 0x20, 0x02, 0x41, 0x7f, 0x6a, 0x21, 0x05, 0x02, 0x40, 0x20, + 0x00, 0x41, 0x01, 0x6a, 0x22, 0x03, 0x41, 0x03, 0x71, 0x0d, 0x00, 0x20, + 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x0c, 0x02, 0x0b, 0x20, 0x05, 0x45, + 0x0d, 0x03, 0x20, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x01, 0x3a, 0x00, 0x01, + 0x20, 0x02, 0x41, 0x7e, 0x6a, 0x21, 0x05, 0x02, 0x40, 0x20, 0x00, 0x41, + 0x02, 0x6a, 0x22, 0x03, 0x41, 0x03, 0x71, 0x0d, 0x00, 0x20, 0x01, 0x41, + 0x02, 0x6a, 0x21, 0x01, 0x0c, 0x02, 0x0b, 0x20, 0x05, 0x45, 0x0d, 0x03, + 0x20, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x02, 0x3a, 0x00, 0x02, 0x20, 0x02, + 0x41, 0x7d, 0x6a, 0x21, 0x05, 0x02, 0x40, 0x20, 0x00, 0x41, 0x03, 0x6a, + 0x22, 0x03, 0x41, 0x03, 0x71, 0x0d, 0x00, 0x20, 0x01, 0x41, 0x03, 0x6a, + 0x21, 0x01, 0x0c, 0x02, 0x0b, 0x20, 0x05, 0x45, 0x0d, 0x03, 0x20, 0x00, + 0x20, 0x01, 0x2d, 0x00, 0x03, 0x3a, 0x00, 0x03, 0x20, 0x00, 0x41, 0x04, + 0x6a, 0x21, 0x03, 0x20, 0x01, 0x41, 0x04, 0x6a, 0x21, 0x01, 0x20, 0x02, + 0x41, 0x7c, 0x6a, 0x21, 0x05, 0x0c, 0x01, 0x0b, 0x02, 0x40, 0x20, 0x04, + 0x0d, 0x00, 0x02, 0x40, 0x20, 0x03, 0x41, 0x03, 0x71, 0x45, 0x0d, 0x00, + 0x20, 0x02, 0x45, 0x0d, 0x04, 0x20, 0x00, 0x20, 0x02, 0x41, 0x7f, 0x6a, + 0x22, 0x03, 0x6a, 0x22, 0x04, 0x20, 0x01, 0x20, 0x03, 0x6a, 0x2d, 0x00, + 0x00, 0x3a, 0x00, 0x00, 0x02, 0x40, 0x20, 0x04, 0x41, 0x03, 0x71, 0x0d, + 0x00, 0x20, 0x03, 0x21, 0x02, 0x0c, 0x01, 0x0b, 0x20, 0x03, 0x45, 0x0d, + 0x04, 0x20, 0x00, 0x20, 0x02, 0x41, 0x7e, 0x6a, 0x22, 0x03, 0x6a, 0x22, + 0x04, 0x20, 0x01, 0x20, 0x03, 0x6a, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, + 0x02, 0x40, 0x20, 0x04, 0x41, 0x03, 0x71, 0x0d, 0x00, 0x20, 0x03, 0x21, + 0x02, 0x0c, 0x01, 0x0b, 0x20, 0x03, 0x45, 0x0d, 0x04, 0x20, 0x00, 0x20, + 0x02, 0x41, 0x7d, 0x6a, 0x22, 0x03, 0x6a, 0x22, 0x04, 0x20, 0x01, 0x20, + 0x03, 0x6a, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x02, 0x40, 0x20, 0x04, + 0x41, 0x03, 0x71, 0x0d, 0x00, 0x20, 0x03, 0x21, 0x02, 0x0c, 0x01, 0x0b, + 0x20, 0x03, 0x45, 0x0d, 0x04, 0x20, 0x00, 0x20, 0x02, 0x41, 0x7c, 0x6a, + 0x22, 0x02, 0x6a, 0x20, 0x01, 0x20, 0x02, 0x6a, 0x2d, 0x00, 0x00, 0x3a, + 0x00, 0x00, 0x0b, 0x20, 0x02, 0x41, 0x04, 0x49, 0x0d, 0x00, 0x02, 0x40, + 0x20, 0x02, 0x41, 0x7c, 0x6a, 0x22, 0x06, 0x41, 0x02, 0x76, 0x41, 0x01, + 0x6a, 0x41, 0x03, 0x71, 0x22, 0x03, 0x45, 0x0d, 0x00, 0x20, 0x01, 0x41, + 0x7c, 0x6a, 0x21, 0x04, 0x20, 0x00, 0x41, 0x7c, 0x6a, 0x21, 0x05, 0x03, + 0x40, 0x20, 0x05, 0x20, 0x02, 0x6a, 0x20, 0x04, 0x20, 0x02, 0x6a, 0x28, + 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x02, 0x41, 0x7c, 0x6a, 0x21, 0x02, + 0x20, 0x03, 0x41, 0x7f, 0x6a, 0x22, 0x03, 0x0d, 0x00, 0x0b, 0x0b, 0x20, + 0x06, 0x41, 0x0c, 0x49, 0x0d, 0x00, 0x20, 0x01, 0x41, 0x70, 0x6a, 0x21, + 0x05, 0x20, 0x00, 0x41, 0x70, 0x6a, 0x21, 0x06, 0x03, 0x40, 0x20, 0x06, + 0x20, 0x02, 0x6a, 0x22, 0x03, 0x41, 0x0c, 0x6a, 0x20, 0x05, 0x20, 0x02, + 0x6a, 0x22, 0x04, 0x41, 0x0c, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, + 0x20, 0x03, 0x41, 0x08, 0x6a, 0x20, 0x04, 0x41, 0x08, 0x6a, 0x28, 0x02, + 0x00, 0x36, 0x02, 0x00, 0x20, 0x03, 0x41, 0x04, 0x6a, 0x20, 0x04, 0x41, + 0x04, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x03, 0x20, 0x04, + 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x02, 0x41, 0x70, 0x6a, 0x22, + 0x02, 0x41, 0x03, 0x4b, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x02, 0x45, 0x0d, + 0x02, 0x20, 0x02, 0x21, 0x03, 0x02, 0x40, 0x20, 0x02, 0x41, 0x03, 0x71, + 0x22, 0x04, 0x45, 0x0d, 0x00, 0x20, 0x01, 0x41, 0x7f, 0x6a, 0x21, 0x05, + 0x20, 0x00, 0x41, 0x7f, 0x6a, 0x21, 0x06, 0x20, 0x02, 0x21, 0x03, 0x03, + 0x40, 0x20, 0x06, 0x20, 0x03, 0x6a, 0x20, 0x05, 0x20, 0x03, 0x6a, 0x2d, + 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x03, 0x41, 0x7f, 0x6a, 0x21, 0x03, + 0x20, 0x04, 0x41, 0x7f, 0x6a, 0x22, 0x04, 0x0d, 0x00, 0x0b, 0x0b, 0x20, + 0x02, 0x41, 0x04, 0x49, 0x0d, 0x02, 0x20, 0x01, 0x41, 0x7c, 0x6a, 0x21, + 0x04, 0x20, 0x00, 0x41, 0x7c, 0x6a, 0x21, 0x05, 0x03, 0x40, 0x20, 0x05, + 0x20, 0x03, 0x6a, 0x22, 0x01, 0x41, 0x03, 0x6a, 0x20, 0x04, 0x20, 0x03, + 0x6a, 0x22, 0x02, 0x41, 0x03, 0x6a, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, + 0x20, 0x01, 0x41, 0x02, 0x6a, 0x20, 0x02, 0x41, 0x02, 0x6a, 0x2d, 0x00, + 0x00, 0x3a, 0x00, 0x00, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x20, 0x02, 0x41, + 0x01, 0x6a, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x01, 0x20, 0x02, + 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x03, 0x41, 0x7c, 0x6a, 0x22, + 0x03, 0x0d, 0x00, 0x0c, 0x03, 0x0b, 0x0b, 0x20, 0x05, 0x41, 0x04, 0x49, + 0x0d, 0x00, 0x02, 0x40, 0x20, 0x05, 0x41, 0x7c, 0x6a, 0x22, 0x04, 0x41, + 0x02, 0x76, 0x41, 0x01, 0x6a, 0x41, 0x07, 0x71, 0x22, 0x02, 0x45, 0x0d, + 0x00, 0x20, 0x05, 0x20, 0x02, 0x41, 0x02, 0x74, 0x6b, 0x21, 0x05, 0x03, + 0x40, 0x20, 0x03, 0x20, 0x01, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, + 0x01, 0x41, 0x04, 0x6a, 0x21, 0x01, 0x20, 0x03, 0x41, 0x04, 0x6a, 0x21, + 0x03, 0x20, 0x02, 0x41, 0x7f, 0x6a, 0x22, 0x02, 0x0d, 0x00, 0x0b, 0x0b, + 0x20, 0x04, 0x41, 0x1c, 0x49, 0x0d, 0x00, 0x03, 0x40, 0x20, 0x03, 0x20, + 0x01, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x03, 0x20, 0x01, 0x28, + 0x02, 0x04, 0x36, 0x02, 0x04, 0x20, 0x03, 0x20, 0x01, 0x28, 0x02, 0x08, + 0x36, 0x02, 0x08, 0x20, 0x03, 0x20, 0x01, 0x28, 0x02, 0x0c, 0x36, 0x02, + 0x0c, 0x20, 0x03, 0x20, 0x01, 0x28, 0x02, 0x10, 0x36, 0x02, 0x10, 0x20, + 0x03, 0x20, 0x01, 0x28, 0x02, 0x14, 0x36, 0x02, 0x14, 0x20, 0x03, 0x20, + 0x01, 0x28, 0x02, 0x18, 0x36, 0x02, 0x18, 0x20, 0x03, 0x20, 0x01, 0x28, + 0x02, 0x1c, 0x36, 0x02, 0x1c, 0x20, 0x01, 0x41, 0x20, 0x6a, 0x21, 0x01, + 0x20, 0x03, 0x41, 0x20, 0x6a, 0x21, 0x03, 0x20, 0x05, 0x41, 0x60, 0x6a, + 0x22, 0x05, 0x41, 0x03, 0x4b, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x05, 0x45, + 0x0d, 0x00, 0x02, 0x40, 0x02, 0x40, 0x20, 0x05, 0x41, 0x07, 0x71, 0x22, + 0x02, 0x0d, 0x00, 0x20, 0x05, 0x21, 0x04, 0x0c, 0x01, 0x0b, 0x20, 0x05, + 0x41, 0x78, 0x71, 0x21, 0x04, 0x03, 0x40, 0x20, 0x03, 0x20, 0x01, 0x2d, + 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x03, 0x41, 0x01, 0x6a, 0x21, 0x03, + 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, 0x02, 0x41, 0x7f, 0x6a, + 0x22, 0x02, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x05, 0x41, 0x08, 0x49, 0x0d, + 0x00, 0x03, 0x40, 0x20, 0x03, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x3a, 0x00, + 0x00, 0x20, 0x03, 0x20, 0x01, 0x2d, 0x00, 0x01, 0x3a, 0x00, 0x01, 0x20, + 0x03, 0x20, 0x01, 0x2d, 0x00, 0x02, 0x3a, 0x00, 0x02, 0x20, 0x03, 0x20, + 0x01, 0x2d, 0x00, 0x03, 0x3a, 0x00, 0x03, 0x20, 0x03, 0x20, 0x01, 0x2d, + 0x00, 0x04, 0x3a, 0x00, 0x04, 0x20, 0x03, 0x20, 0x01, 0x2d, 0x00, 0x05, + 0x3a, 0x00, 0x05, 0x20, 0x03, 0x20, 0x01, 0x2d, 0x00, 0x06, 0x3a, 0x00, + 0x06, 0x20, 0x03, 0x20, 0x01, 0x2d, 0x00, 0x07, 0x3a, 0x00, 0x07, 0x20, + 0x03, 0x41, 0x08, 0x6a, 0x21, 0x03, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x21, + 0x01, 0x20, 0x04, 0x41, 0x78, 0x6a, 0x22, 0x04, 0x0d, 0x00, 0x0b, 0x0b, + 0x20, 0x00, 0x0b, 0x0d, 0x00, 0x20, 0x00, 0x10, 0x9c, 0x80, 0x80, 0x80, + 0x00, 0x20, 0x00, 0x47, 0x0b, 0x0d, 0x00, 0x20, 0x00, 0x41, 0x20, 0x46, + 0x20, 0x00, 0x41, 0x09, 0x46, 0x72, 0x0b, 0x0a, 0x00, 0x20, 0x00, 0x10, + 0xa1, 0x80, 0x80, 0x80, 0x00, 0x0b, 0x0a, 0x00, 0x20, 0x00, 0x41, 0x50, + 0x6a, 0x41, 0x0a, 0x49, 0x0b, 0x4d, 0x01, 0x02, 0x7f, 0x20, 0x00, 0x20, + 0x00, 0x10, 0x95, 0x80, 0x80, 0x80, 0x00, 0x6a, 0x21, 0x03, 0x02, 0x40, + 0x20, 0x02, 0x45, 0x0d, 0x00, 0x03, 0x40, 0x20, 0x01, 0x2d, 0x00, 0x00, + 0x22, 0x04, 0x45, 0x0d, 0x01, 0x20, 0x03, 0x20, 0x04, 0x3a, 0x00, 0x00, + 0x20, 0x03, 0x41, 0x01, 0x6a, 0x21, 0x03, 0x20, 0x01, 0x41, 0x01, 0x6a, + 0x21, 0x01, 0x20, 0x02, 0x41, 0x7f, 0x6a, 0x22, 0x02, 0x0d, 0x00, 0x0b, + 0x0b, 0x20, 0x03, 0x41, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x00, 0x0b, 0xef, + 0x03, 0x01, 0x04, 0x7f, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, + 0x02, 0x40, 0x20, 0x01, 0x20, 0x00, 0x73, 0x41, 0x03, 0x71, 0x45, 0x0d, + 0x00, 0x20, 0x00, 0x21, 0x03, 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x41, 0x00, + 0x47, 0x21, 0x04, 0x02, 0x40, 0x02, 0x40, 0x20, 0x01, 0x41, 0x03, 0x71, + 0x0d, 0x00, 0x20, 0x00, 0x21, 0x03, 0x0c, 0x01, 0x0b, 0x02, 0x40, 0x20, + 0x02, 0x0d, 0x00, 0x20, 0x00, 0x21, 0x03, 0x0c, 0x01, 0x0b, 0x20, 0x00, + 0x20, 0x01, 0x2d, 0x00, 0x00, 0x22, 0x03, 0x3a, 0x00, 0x00, 0x02, 0x40, + 0x20, 0x03, 0x0d, 0x00, 0x20, 0x00, 0x21, 0x03, 0x20, 0x02, 0x21, 0x05, + 0x0c, 0x05, 0x0b, 0x20, 0x00, 0x41, 0x01, 0x6a, 0x21, 0x03, 0x20, 0x02, + 0x41, 0x7f, 0x6a, 0x22, 0x05, 0x41, 0x00, 0x47, 0x21, 0x04, 0x02, 0x40, + 0x20, 0x01, 0x41, 0x01, 0x6a, 0x22, 0x06, 0x41, 0x03, 0x71, 0x45, 0x0d, + 0x00, 0x20, 0x05, 0x45, 0x0d, 0x00, 0x20, 0x03, 0x20, 0x06, 0x2d, 0x00, + 0x00, 0x22, 0x04, 0x3a, 0x00, 0x00, 0x20, 0x04, 0x45, 0x0d, 0x05, 0x20, + 0x00, 0x41, 0x02, 0x6a, 0x21, 0x03, 0x20, 0x02, 0x41, 0x7e, 0x6a, 0x22, + 0x05, 0x41, 0x00, 0x47, 0x21, 0x04, 0x02, 0x40, 0x20, 0x01, 0x41, 0x02, + 0x6a, 0x22, 0x06, 0x41, 0x03, 0x71, 0x45, 0x0d, 0x00, 0x20, 0x05, 0x45, + 0x0d, 0x00, 0x20, 0x03, 0x20, 0x06, 0x2d, 0x00, 0x00, 0x22, 0x04, 0x3a, + 0x00, 0x00, 0x20, 0x04, 0x45, 0x0d, 0x06, 0x20, 0x00, 0x41, 0x03, 0x6a, + 0x21, 0x03, 0x20, 0x02, 0x41, 0x7d, 0x6a, 0x22, 0x05, 0x41, 0x00, 0x47, + 0x21, 0x04, 0x02, 0x40, 0x20, 0x01, 0x41, 0x03, 0x6a, 0x22, 0x06, 0x41, + 0x03, 0x71, 0x45, 0x0d, 0x00, 0x20, 0x05, 0x45, 0x0d, 0x00, 0x20, 0x03, + 0x20, 0x06, 0x2d, 0x00, 0x00, 0x22, 0x04, 0x3a, 0x00, 0x00, 0x20, 0x04, + 0x45, 0x0d, 0x07, 0x20, 0x00, 0x41, 0x04, 0x6a, 0x21, 0x03, 0x20, 0x01, + 0x41, 0x04, 0x6a, 0x21, 0x01, 0x20, 0x02, 0x41, 0x7c, 0x6a, 0x22, 0x02, + 0x41, 0x00, 0x47, 0x21, 0x04, 0x0c, 0x03, 0x0b, 0x20, 0x06, 0x21, 0x01, + 0x20, 0x05, 0x21, 0x02, 0x0c, 0x02, 0x0b, 0x20, 0x06, 0x21, 0x01, 0x20, + 0x05, 0x21, 0x02, 0x0c, 0x01, 0x0b, 0x20, 0x06, 0x21, 0x01, 0x20, 0x05, + 0x21, 0x02, 0x0b, 0x20, 0x04, 0x45, 0x0d, 0x02, 0x02, 0x40, 0x20, 0x01, + 0x2d, 0x00, 0x00, 0x0d, 0x00, 0x20, 0x02, 0x21, 0x05, 0x0c, 0x04, 0x0b, + 0x20, 0x02, 0x41, 0x04, 0x49, 0x0d, 0x00, 0x03, 0x40, 0x20, 0x01, 0x28, + 0x02, 0x00, 0x22, 0x00, 0x41, 0x7f, 0x73, 0x20, 0x00, 0x41, 0xff, 0xfd, + 0xfb, 0x77, 0x6a, 0x71, 0x41, 0x80, 0x81, 0x82, 0x84, 0x78, 0x71, 0x0d, + 0x02, 0x20, 0x03, 0x20, 0x00, 0x36, 0x02, 0x00, 0x20, 0x03, 0x41, 0x04, + 0x6a, 0x21, 0x03, 0x20, 0x01, 0x41, 0x04, 0x6a, 0x21, 0x01, 0x20, 0x02, + 0x41, 0x7c, 0x6a, 0x22, 0x02, 0x41, 0x03, 0x4b, 0x0d, 0x00, 0x0b, 0x0b, + 0x20, 0x02, 0x45, 0x0d, 0x01, 0x0b, 0x03, 0x40, 0x20, 0x03, 0x20, 0x01, + 0x2d, 0x00, 0x00, 0x22, 0x00, 0x3a, 0x00, 0x00, 0x02, 0x40, 0x20, 0x00, + 0x0d, 0x00, 0x20, 0x02, 0x21, 0x05, 0x0c, 0x03, 0x0b, 0x20, 0x03, 0x41, + 0x01, 0x6a, 0x21, 0x03, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, + 0x02, 0x41, 0x7f, 0x6a, 0x22, 0x02, 0x0d, 0x00, 0x0b, 0x0b, 0x41, 0x00, + 0x21, 0x05, 0x0b, 0x20, 0x03, 0x41, 0x00, 0x20, 0x05, 0x10, 0x94, 0x80, + 0x80, 0x80, 0x00, 0x0b, 0x11, 0x00, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, + 0x10, 0xa5, 0x80, 0x80, 0x80, 0x00, 0x1a, 0x20, 0x00, 0x0b, 0x17, 0x00, + 0x20, 0x00, 0x41, 0x50, 0x6a, 0x41, 0x0a, 0x49, 0x20, 0x00, 0x41, 0x20, + 0x72, 0x41, 0x9f, 0x7f, 0x6a, 0x41, 0x06, 0x49, 0x72, 0x0b, 0x2a, 0x01, + 0x03, 0x7f, 0x41, 0x00, 0x21, 0x01, 0x03, 0x40, 0x20, 0x00, 0x20, 0x01, + 0x6a, 0x21, 0x02, 0x20, 0x01, 0x41, 0x04, 0x6a, 0x22, 0x03, 0x21, 0x01, + 0x20, 0x02, 0x28, 0x02, 0x00, 0x0d, 0x00, 0x0b, 0x20, 0x03, 0x41, 0x7c, + 0x6a, 0x41, 0x02, 0x75, 0x0b, 0x45, 0x01, 0x01, 0x7f, 0x02, 0x40, 0x20, + 0x01, 0x45, 0x0d, 0x00, 0x20, 0x00, 0x41, 0x7c, 0x6a, 0x21, 0x00, 0x02, + 0x40, 0x03, 0x40, 0x20, 0x00, 0x41, 0x04, 0x6a, 0x22, 0x00, 0x28, 0x02, + 0x00, 0x22, 0x02, 0x45, 0x0d, 0x01, 0x20, 0x02, 0x20, 0x01, 0x47, 0x0d, + 0x00, 0x0b, 0x0b, 0x20, 0x00, 0x41, 0x00, 0x20, 0x02, 0x1b, 0x0f, 0x0b, + 0x20, 0x00, 0x20, 0x00, 0x10, 0xa8, 0x80, 0x80, 0x80, 0x00, 0x41, 0x02, + 0x74, 0x6a, 0x0b, 0x1d, 0x00, 0x02, 0x40, 0x20, 0x00, 0x0d, 0x00, 0x41, + 0x00, 0x0f, 0x0b, 0x41, 0x90, 0xc2, 0x84, 0x80, 0x00, 0x20, 0x00, 0x10, + 0xa9, 0x80, 0x80, 0x80, 0x00, 0x41, 0x00, 0x47, 0x0b, 0x24, 0x01, 0x01, + 0x7f, 0x41, 0x01, 0x21, 0x01, 0x02, 0x40, 0x20, 0x00, 0x41, 0x50, 0x6a, + 0x41, 0x0a, 0x49, 0x0d, 0x00, 0x20, 0x00, 0x10, 0x96, 0x80, 0x80, 0x80, + 0x00, 0x41, 0x00, 0x47, 0x21, 0x01, 0x0b, 0x20, 0x01, 0x0b, 0x0b, 0xf1, + 0x42, 0x01, 0x00, 0x41, 0x80, 0x80, 0x04, 0x0b, 0xe8, 0x42, 0x12, 0x11, + 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, + 0x1f, 0x20, 0x21, 0x11, 0x22, 0x23, 0x24, 0x11, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x11, 0x2d, 0x2e, 0x2f, 0x10, 0x10, 0x30, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x31, 0x32, 0x33, 0x10, 0x34, 0x35, + 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x36, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x37, 0x11, 0x11, 0x11, 0x11, 0x38, 0x11, 0x39, 0x3a, 0x3b, 0x3c, + 0x3d, 0x3e, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x3f, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x40, 0x41, 0x11, 0x42, + 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x11, 0x4b, 0x4c, 0x4d, + 0x4e, 0x4f, 0x50, 0x51, 0x10, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, + 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x10, 0x5e, 0x5f, 0x60, 0x10, 0x11, 0x11, + 0x11, 0x61, 0x62, 0x63, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x64, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, + 0x65, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, + 0x66, 0x67, 0x10, 0x10, 0x68, 0x69, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x6a, 0x11, 0x11, 0x6b, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x6c, + 0x6d, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x6e, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x6f, 0x70, + 0x71, 0x72, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x73, 0x74, + 0x75, 0x10, 0x10, 0x10, 0x10, 0x10, 0x76, 0x77, 0x10, 0x10, 0x10, 0x10, + 0x78, 0x10, 0x10, 0x79, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x07, 0xfe, 0xff, + 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x20, 0x04, 0xff, 0xff, + 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, 0x03, 0x00, 0x1f, 0x50, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xdf, 0xbc, 0x40, 0xd7, 0xff, 0xff, 0xfb, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x03, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xbf, 0xb6, 0x00, 0xff, 0xff, 0xff, 0x87, + 0x07, 0x00, 0x00, 0x00, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfe, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0x1f, 0xfe, 0xe1, 0xff, 0x9f, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x07, 0x30, 0x04, 0xff, 0xff, 0xff, 0xfc, 0xff, 0x1f, + 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xdf, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xf8, 0x03, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xdf, + 0xe1, 0xff, 0xcf, 0xff, 0xfe, 0xff, 0xef, 0x9f, 0xf9, 0xff, 0xff, 0xfd, + 0xc5, 0xe3, 0x9f, 0x59, 0x80, 0xb0, 0xcf, 0xff, 0x03, 0x10, 0xee, 0x87, + 0xf9, 0xff, 0xff, 0xfd, 0x6d, 0xc3, 0x87, 0x19, 0x02, 0x5e, 0xc0, 0xff, + 0x3f, 0x00, 0xee, 0xbf, 0xfb, 0xff, 0xff, 0xfd, 0xed, 0xe3, 0xbf, 0x1b, + 0x01, 0x00, 0xcf, 0xff, 0x00, 0x1e, 0xee, 0x9f, 0xf9, 0xff, 0xff, 0xfd, + 0xed, 0xe3, 0x9f, 0x19, 0xc0, 0xb0, 0xcf, 0xff, 0x02, 0x00, 0xec, 0xc7, + 0x3d, 0xd6, 0x18, 0xc7, 0xff, 0xc3, 0xc7, 0x1d, 0x81, 0x00, 0xc0, 0xff, + 0x00, 0x00, 0xef, 0xdf, 0xfd, 0xff, 0xff, 0xfd, 0xff, 0xe3, 0xdf, 0x1d, + 0x60, 0x07, 0xcf, 0xff, 0x00, 0x00, 0xef, 0xdf, 0xfd, 0xff, 0xff, 0xfd, + 0xef, 0xe3, 0xdf, 0x1d, 0x60, 0x40, 0xcf, 0xff, 0x06, 0x00, 0xef, 0xdf, + 0xfd, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xdf, 0x5d, 0xf0, 0x80, 0xcf, 0xff, + 0x00, 0xfc, 0xec, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xfb, 0x2f, 0x7f, 0x80, + 0x5f, 0xff, 0xc0, 0xff, 0x0c, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, + 0xff, 0x07, 0x3f, 0x20, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xf7, + 0xff, 0xff, 0xaf, 0xff, 0xff, 0x3b, 0x5f, 0x20, 0xff, 0xf3, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0xfe, + 0xff, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0x03, 0xff, 0xff, 0xfe, 0xff, 0xff, + 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf9, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x20, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x3d, 0x7f, 0x3d, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3d, + 0xff, 0xff, 0xff, 0xff, 0x3d, 0x7f, 0x3d, 0xff, 0x7f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0xfe, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xfe, 0xff, + 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, + 0xff, 0x01, 0xff, 0xdf, 0x0f, 0x00, 0xff, 0xff, 0x0f, 0x00, 0xff, 0xff, + 0x0f, 0x00, 0xff, 0xdf, 0x0d, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xcf, 0xff, 0xff, 0x01, 0x80, 0x10, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x0f, + 0xff, 0x01, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x1f, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0x03, 0xff, 0x03, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0xfe, 0xff, 0x1f, 0x00, 0xff, 0x03, 0xff, 0x03, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xef, 0x0f, 0xff, 0x03, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xbf, 0xff, 0x03, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x00, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0x01, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, + 0x6f, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x1f, 0x00, 0xff, 0xff, + 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0xff, 0xaa, 0xff, 0xff, + 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x5f, 0xdc, 0x1f, + 0xcf, 0x0f, 0xff, 0x1f, 0xdc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, + 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x84, 0xfc, 0x2f, 0x3e, 0x50, 0xbd, 0xff, 0xf3, 0xe0, 0x43, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x78, + 0x0c, 0x00, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x20, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x00, 0x7f, 0x7f, + 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xfe, 0x03, + 0x3e, 0x1f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0xe0, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf7, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xff, 0xff, + 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0x1f, + 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, + 0xf0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xfc, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x2f, 0x00, 0xff, 0x03, 0x00, 0x00, 0xfc, 0xe8, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0xff, 0xff, + 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x00, 0x80, + 0xff, 0x03, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x00, 0xff, 0x3f, 0xff, 0x03, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x05, 0x00, 0x00, 0x38, 0xff, 0xff, + 0x3c, 0x00, 0x7e, 0x7e, 0x7e, 0x00, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf7, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0x03, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xff, 0xff, 0x7f, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0x00, 0xf8, 0xe0, 0xff, 0xfd, 0x7f, 0x5f, 0xdb, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x03, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x1f, 0x00, 0x00, 0xff, 0x03, 0xfe, 0xff, 0xff, 0x07, 0xfe, 0xff, + 0xff, 0x07, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0xfc, 0xfc, 0xfc, 0x1c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xef, + 0xff, 0xff, 0x7f, 0xff, 0xff, 0xb7, 0xff, 0x3f, 0xff, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x07, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x3f, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, + 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xff, 0xff, 0x3f, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfd, 0xff, 0xff, 0xff, 0xff, + 0xbf, 0x91, 0xff, 0xff, 0x3f, 0x00, 0xff, 0xff, 0x7f, 0x00, 0xff, 0xff, + 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x37, 0x00, 0xff, 0xff, 0x3f, 0x00, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xf0, + 0xef, 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0x1f, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, + 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x00, 0xff, 0xff, 0x3f, 0x00, 0xff, 0xff, 0x07, 0x00, 0xff, 0xff, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x07, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x1f, 0x80, 0x00, + 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x7f, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, + 0x00, 0x00, 0xc0, 0xff, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0x03, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0x70, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x47, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1e, 0x00, + 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, + 0x9f, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xbd, + 0xff, 0xbf, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, + 0xff, 0x03, 0xef, 0x9f, 0xf9, 0xff, 0xff, 0xfd, 0xed, 0xe3, 0x9f, 0x19, + 0x81, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0x07, 0xff, 0x83, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb3, 0x00, + 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x11, 0x00, + 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x01, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xe7, 0xff, 0x07, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xe7, 0x7f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x7f, 0x01, 0x00, 0xff, 0x03, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, + 0xfc, 0xff, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xb4, 0xcb, 0x00, + 0xff, 0x03, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0x7b, 0x01, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x7f, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x0f, 0x00, 0xff, 0x03, 0xf8, 0xff, 0xff, 0xe0, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0xff, 0xff, + 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0xf0, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x07, 0xff, 0x1f, 0xff, 0x01, 0xff, 0x43, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x64, 0xde, 0xff, 0xeb, 0xef, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xe7, 0xdf, 0xdf, 0xff, 0xff, + 0xff, 0x7b, 0x5f, 0xfc, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, + 0xff, 0xff, 0xfd, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, + 0xdf, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, + 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xf7, 0xcf, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf9, 0xdb, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x80, 0x3f, 0xff, 0x43, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x08, + 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0xff, + 0xff, 0xff, 0x96, 0xfe, 0xf7, 0x0a, 0x84, 0xea, 0x96, 0xaa, 0x96, 0xf7, + 0xf7, 0x5e, 0xff, 0xfb, 0xff, 0x0f, 0xee, 0xfb, 0xff, 0x0f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x56, 0x01, 0x00, 0x00, 0x39, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, + 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x00, 0xbf, 0x1d, 0x00, 0x00, 0xe7, + 0x02, 0x00, 0x00, 0x79, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x01, 0x01, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, + 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x01, 0x39, 0xff, 0xff, 0x00, 0x18, + 0xff, 0xff, 0x01, 0x87, 0xff, 0xff, 0x00, 0xd4, 0xfe, 0xff, 0x00, 0xc3, + 0x00, 0x00, 0x01, 0xd2, 0x00, 0x00, 0x01, 0xce, 0x00, 0x00, 0x01, 0xcd, + 0x00, 0x00, 0x01, 0x4f, 0x00, 0x00, 0x01, 0xca, 0x00, 0x00, 0x01, 0xcb, + 0x00, 0x00, 0x01, 0xcf, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x01, 0xd3, + 0x00, 0x00, 0x01, 0xd1, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x01, 0xd5, + 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x01, 0xd6, 0x00, 0x00, 0x01, 0xda, + 0x00, 0x00, 0x01, 0xd9, 0x00, 0x00, 0x01, 0xdb, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xb1, 0xff, 0xff, 0x01, 0x9f, + 0xff, 0xff, 0x01, 0xc8, 0xff, 0xff, 0x02, 0x28, 0x24, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x33, + 0xff, 0xff, 0x00, 0x26, 0xff, 0xff, 0x01, 0x7e, 0xff, 0xff, 0x01, 0x2b, + 0x2a, 0x00, 0x01, 0x5d, 0xff, 0xff, 0x01, 0x28, 0x2a, 0x00, 0x00, 0x3f, + 0x2a, 0x00, 0x01, 0x3d, 0xff, 0xff, 0x01, 0x45, 0x00, 0x00, 0x01, 0x47, + 0x00, 0x00, 0x00, 0x1f, 0x2a, 0x00, 0x00, 0x1c, 0x2a, 0x00, 0x00, 0x1e, + 0x2a, 0x00, 0x00, 0x2e, 0xff, 0xff, 0x00, 0x32, 0xff, 0xff, 0x00, 0x36, + 0xff, 0xff, 0x00, 0x35, 0xff, 0xff, 0x00, 0x4f, 0xa5, 0x00, 0x00, 0x4b, + 0xa5, 0x00, 0x00, 0x31, 0xff, 0xff, 0x00, 0x28, 0xa5, 0x00, 0x00, 0x44, + 0xa5, 0x00, 0x00, 0x2f, 0xff, 0xff, 0x00, 0x2d, 0xff, 0xff, 0x00, 0xf7, + 0x29, 0x00, 0x00, 0x41, 0xa5, 0x00, 0x00, 0xfd, 0x29, 0x00, 0x00, 0x2b, + 0xff, 0xff, 0x00, 0x2a, 0xff, 0xff, 0x00, 0xe7, 0x29, 0x00, 0x00, 0x43, + 0xa5, 0x00, 0x00, 0x2a, 0xa5, 0x00, 0x00, 0xbb, 0xff, 0xff, 0x00, 0x27, + 0xff, 0xff, 0x00, 0xb9, 0xff, 0xff, 0x00, 0x25, 0xff, 0xff, 0x00, 0x15, + 0xa5, 0x00, 0x00, 0x12, 0xa5, 0x00, 0x02, 0x24, 0x4c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x01, 0x01, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x54, 0x00, 0x00, 0x01, 0x74, + 0x00, 0x00, 0x01, 0x26, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x01, 0x40, + 0x00, 0x00, 0x01, 0x3f, 0x00, 0x00, 0x00, 0xda, 0xff, 0xff, 0x00, 0xdb, + 0xff, 0xff, 0x00, 0xe1, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0x00, 0xc1, + 0xff, 0xff, 0x01, 0x08, 0x00, 0x00, 0x00, 0xc2, 0xff, 0xff, 0x00, 0xc7, + 0xff, 0xff, 0x00, 0xd1, 0xff, 0xff, 0x00, 0xca, 0xff, 0xff, 0x00, 0xf8, + 0xff, 0xff, 0x00, 0xaa, 0xff, 0xff, 0x00, 0xb0, 0xff, 0xff, 0x00, 0x07, + 0x00, 0x00, 0x00, 0x8c, 0xff, 0xff, 0x01, 0xc4, 0xff, 0xff, 0x00, 0xa0, + 0xff, 0xff, 0x01, 0xf9, 0xff, 0xff, 0x02, 0x1a, 0x70, 0x00, 0x01, 0x01, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x20, 0x00, 0x00, 0x00, 0xe0, + 0xff, 0xff, 0x01, 0x50, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x00, 0xf1, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x00, 0xd0, + 0xff, 0xff, 0x01, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xc0, 0x0b, 0x00, 0x01, 0x60, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xd0, 0x97, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0xf8, + 0xff, 0xff, 0x02, 0x05, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, + 0xf4, 0xff, 0x00, 0x9e, 0xe7, 0xff, 0x00, 0xc2, 0x89, 0x00, 0x00, 0xdb, + 0xe7, 0xff, 0x00, 0x92, 0xe7, 0xff, 0x00, 0x93, 0xe7, 0xff, 0x00, 0x9c, + 0xe7, 0xff, 0x00, 0x9d, 0xe7, 0xff, 0x00, 0xa4, 0xe7, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x8a, 0x00, 0x00, 0x04, 0x8a, 0x00, 0x00, 0xe6, + 0x0e, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xc5, 0xff, 0xff, 0x01, 0x41, 0xe2, 0xff, 0x02, 0x1d, + 0x8f, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0xf8, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x01, 0xaa, 0xff, 0xff, 0x00, 0x4a, + 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x70, + 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0xb6, + 0xff, 0xff, 0x01, 0xf7, 0xff, 0xff, 0x00, 0xdb, 0xe3, 0xff, 0x01, 0x9c, + 0xff, 0xff, 0x01, 0x90, 0xff, 0xff, 0x01, 0x80, 0xff, 0xff, 0x01, 0x82, + 0xff, 0xff, 0x02, 0x05, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, + 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x01, 0x1c, 0x00, 0x00, 0x01, 0x01, + 0x00, 0x00, 0x01, 0xa3, 0xe2, 0xff, 0x01, 0x41, 0xdf, 0xff, 0x01, 0xba, + 0xdf, 0xff, 0x00, 0xe4, 0xff, 0xff, 0x02, 0x0b, 0xb1, 0x00, 0x01, 0x01, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x30, 0x00, 0x00, 0x00, 0xd0, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0xd6, 0xff, 0x01, 0x1a, + 0xf1, 0xff, 0x01, 0x19, 0xd6, 0xff, 0x00, 0xd5, 0xd5, 0xff, 0x00, 0xd8, + 0xd5, 0xff, 0x01, 0xe4, 0xd5, 0xff, 0x01, 0x03, 0xd6, 0xff, 0x01, 0xe1, + 0xd5, 0xff, 0x01, 0xe2, 0xd5, 0xff, 0x01, 0xc1, 0xd5, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xa0, 0xe3, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x02, 0x0c, 0xbc, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xbc, + 0x5a, 0xff, 0x01, 0xa0, 0x03, 0x00, 0x01, 0xfc, 0x75, 0xff, 0x01, 0xd8, + 0x5a, 0xff, 0x00, 0x30, 0x00, 0x00, 0x01, 0xb1, 0x5a, 0xff, 0x01, 0xb5, + 0x5a, 0xff, 0x01, 0xbf, 0x5a, 0xff, 0x01, 0xee, 0x5a, 0xff, 0x01, 0xd6, + 0x5a, 0xff, 0x01, 0xeb, 0x5a, 0xff, 0x01, 0xd0, 0xff, 0xff, 0x01, 0xbd, + 0x5a, 0xff, 0x01, 0xc8, 0x75, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, + 0x68, 0xff, 0x00, 0x60, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, + 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x28, + 0x00, 0x00, 0x00, 0xd8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, + 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, + 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, + 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, + 0x00, 0x00, 0x00, 0xde, 0xff, 0xff, 0x30, 0x0c, 0x31, 0x0d, 0x78, 0x0e, + 0x7f, 0x0f, 0x80, 0x10, 0x81, 0x11, 0x86, 0x12, 0x89, 0x13, 0x8a, 0x13, + 0x8e, 0x14, 0x8f, 0x15, 0x90, 0x16, 0x93, 0x13, 0x94, 0x17, 0x95, 0x18, + 0x96, 0x19, 0x97, 0x1a, 0x9a, 0x1b, 0x9c, 0x19, 0x9d, 0x1c, 0x9e, 0x1d, + 0x9f, 0x1e, 0xa6, 0x1f, 0xa9, 0x1f, 0xae, 0x1f, 0xb1, 0x20, 0xb2, 0x20, + 0xb7, 0x21, 0xbf, 0x22, 0xc5, 0x23, 0xc8, 0x23, 0xcb, 0x23, 0xdd, 0x24, + 0xf2, 0x23, 0xf6, 0x25, 0xf7, 0x26, 0x20, 0x2d, 0x3a, 0x2e, 0x3d, 0x2f, + 0x3e, 0x30, 0x3f, 0x31, 0x40, 0x31, 0x43, 0x32, 0x44, 0x33, 0x45, 0x34, + 0x50, 0x35, 0x51, 0x36, 0x52, 0x37, 0x53, 0x38, 0x54, 0x39, 0x59, 0x3a, + 0x5b, 0x3b, 0x5c, 0x3c, 0x61, 0x3d, 0x63, 0x3e, 0x65, 0x3f, 0x66, 0x40, + 0x68, 0x41, 0x69, 0x42, 0x6a, 0x40, 0x6b, 0x43, 0x6c, 0x44, 0x6f, 0x42, + 0x71, 0x45, 0x72, 0x46, 0x75, 0x47, 0x7d, 0x48, 0x82, 0x49, 0x87, 0x4a, + 0x89, 0x4b, 0x8a, 0x4c, 0x8b, 0x4c, 0x8c, 0x4d, 0x92, 0x4e, 0x9d, 0x4f, + 0x9e, 0x50, 0x45, 0x57, 0x7b, 0x1d, 0x7c, 0x1d, 0x7d, 0x1d, 0x7f, 0x58, + 0x86, 0x59, 0x88, 0x5a, 0x89, 0x5a, 0x8a, 0x5a, 0x8c, 0x5b, 0x8e, 0x5c, + 0x8f, 0x5c, 0xac, 0x5d, 0xad, 0x5e, 0xae, 0x5e, 0xaf, 0x5e, 0xc2, 0x5f, + 0xcc, 0x60, 0xcd, 0x61, 0xce, 0x61, 0xcf, 0x62, 0xd0, 0x63, 0xd1, 0x64, + 0xd5, 0x65, 0xd6, 0x66, 0xd7, 0x67, 0xf0, 0x68, 0xf1, 0x69, 0xf2, 0x6a, + 0xf3, 0x6b, 0xf4, 0x6c, 0xf5, 0x6d, 0xf9, 0x6e, 0xfd, 0x2d, 0xfe, 0x2d, + 0xff, 0x2d, 0x50, 0x69, 0x51, 0x69, 0x52, 0x69, 0x53, 0x69, 0x54, 0x69, + 0x55, 0x69, 0x56, 0x69, 0x57, 0x69, 0x58, 0x69, 0x59, 0x69, 0x5a, 0x69, + 0x5b, 0x69, 0x5c, 0x69, 0x5d, 0x69, 0x5e, 0x69, 0x5f, 0x69, 0x82, 0x00, + 0x83, 0x00, 0x84, 0x00, 0x85, 0x00, 0x86, 0x00, 0x87, 0x00, 0x88, 0x00, + 0x89, 0x00, 0xc0, 0x75, 0xcf, 0x76, 0x80, 0x89, 0x81, 0x8a, 0x82, 0x8b, + 0x85, 0x8c, 0x86, 0x8d, 0x70, 0x9d, 0x71, 0x9d, 0x76, 0x9e, 0x77, 0x9e, + 0x78, 0x9f, 0x79, 0x9f, 0x7a, 0xa0, 0x7b, 0xa0, 0x7c, 0xa1, 0x7d, 0xa1, + 0xb3, 0xa2, 0xba, 0xa3, 0xbb, 0xa3, 0xbc, 0xa4, 0xbe, 0xa5, 0xc3, 0xa2, + 0xcc, 0xa4, 0xda, 0xa6, 0xdb, 0xa6, 0xe5, 0x6a, 0xea, 0xa7, 0xeb, 0xa7, + 0xec, 0x6e, 0xf3, 0xa2, 0xf8, 0xa8, 0xf9, 0xa8, 0xfa, 0xa9, 0xfb, 0xa9, + 0xfc, 0xa4, 0x26, 0xb0, 0x2a, 0xb1, 0x2b, 0xb2, 0x4e, 0xb3, 0x84, 0x08, + 0x62, 0xba, 0x63, 0xbb, 0x64, 0xbc, 0x65, 0xbd, 0x66, 0xbe, 0x6d, 0xbf, + 0x6e, 0xc0, 0x6f, 0xc1, 0x70, 0xc2, 0x7e, 0xc3, 0x7f, 0xc3, 0x7d, 0xcf, + 0x8d, 0xd0, 0x94, 0xd1, 0xab, 0xd2, 0xac, 0xd3, 0xad, 0xd4, 0xb0, 0xd5, + 0xb1, 0xd6, 0xb2, 0xd7, 0xc4, 0xd8, 0xc5, 0xd9, 0xc6, 0xda, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x0d, 0x06, 0x06, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x0f, 0x10, 0x11, 0x12, 0x06, 0x13, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x14, 0x15, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x16, 0x17, 0x06, 0x06, + 0x06, 0x18, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x19, 0x06, 0x06, 0x06, 0x06, 0x1a, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x1b, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x1c, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x1d, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1e, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x01, 0x00, 0x54, 0x56, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x07, + 0x2b, 0x2b, 0x5b, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x4a, 0x56, + 0x56, 0x05, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x24, 0x50, 0x79, 0x31, 0x50, 0x31, + 0x50, 0x31, 0x38, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x4e, 0x31, 0x02, 0x4e, 0x0d, 0x0d, + 0x4e, 0x03, 0x4e, 0x00, 0x24, 0x6e, 0x00, 0x4e, 0x31, 0x26, 0x6e, 0x51, + 0x4e, 0x24, 0x50, 0x4e, 0x39, 0x14, 0x81, 0x1b, 0x1d, 0x1d, 0x53, 0x31, + 0x50, 0x31, 0x50, 0x0d, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x1b, 0x53, + 0x24, 0x50, 0x31, 0x02, 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x7b, + 0x5c, 0x7b, 0x14, 0x79, 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x2d, 0x2b, 0x49, + 0x03, 0x48, 0x03, 0x78, 0x5c, 0x7b, 0x14, 0x00, 0x96, 0x0a, 0x01, 0x2b, + 0x28, 0x06, 0x06, 0x00, 0x2a, 0x06, 0x2a, 0x2a, 0x2b, 0x07, 0xbb, 0xb5, + 0x2b, 0x1e, 0x00, 0x2b, 0x07, 0x2b, 0x2b, 0x2b, 0x01, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x01, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2a, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0xcd, 0x46, 0xcd, 0x2b, 0x00, + 0x25, 0x2b, 0x07, 0x01, 0x06, 0x01, 0x55, 0x56, 0x56, 0x56, 0x56, 0x56, + 0x55, 0x56, 0x56, 0x02, 0x24, 0x81, 0x81, 0x81, 0x81, 0x81, 0x15, 0x81, + 0x81, 0x81, 0x00, 0x00, 0x2b, 0x00, 0xb2, 0xd1, 0xb2, 0xd1, 0xb2, 0xd1, + 0xb2, 0xd1, 0x00, 0x00, 0xcd, 0xcc, 0x01, 0x00, 0xd7, 0xd7, 0xd7, 0xd7, + 0xd7, 0x83, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, + 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x02, 0x00, 0x00, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x4e, 0x31, 0x50, 0x31, 0x50, 0x4e, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x02, 0x87, 0xa6, + 0x87, 0xa6, 0x87, 0xa6, 0x87, 0xa6, 0x87, 0xa6, 0x87, 0xa6, 0x87, 0xa6, + 0x87, 0xa6, 0x2a, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x00, 0x00, 0x00, 0x54, 0x56, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0c, 0x00, 0x0c, 0x2a, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x07, + 0x2a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x56, 0x56, + 0x6c, 0x81, 0x15, 0x00, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x07, 0x6c, + 0x03, 0x41, 0x2b, 0x2b, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x2c, 0x56, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x6c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x25, 0x06, 0x25, + 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, + 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, + 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, + 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x56, 0x7a, + 0x9e, 0x26, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, + 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, + 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x01, 0x2b, 0x2b, + 0x4f, 0x56, 0x56, 0x2c, 0x2b, 0x7f, 0x56, 0x56, 0x39, 0x2b, 0x2b, 0x55, + 0x56, 0x56, 0x2b, 0x2b, 0x4f, 0x56, 0x56, 0x2c, 0x2b, 0x7f, 0x56, 0x56, + 0x81, 0x37, 0x75, 0x5b, 0x7b, 0x5c, 0x2b, 0x2b, 0x4f, 0x56, 0x56, 0x02, + 0xac, 0x04, 0x00, 0x00, 0x39, 0x2b, 0x2b, 0x55, 0x56, 0x56, 0x2b, 0x2b, + 0x4f, 0x56, 0x56, 0x2c, 0x2b, 0x2b, 0x56, 0x56, 0x32, 0x13, 0x81, 0x57, + 0x00, 0x6f, 0x81, 0x7e, 0xc9, 0xd7, 0x7e, 0x2d, 0x81, 0x81, 0x0e, 0x7e, + 0x39, 0x7f, 0x6f, 0x57, 0x00, 0x81, 0x81, 0x7e, 0x15, 0x00, 0x7e, 0x03, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x07, 0x2b, 0x24, 0x2b, 0x97, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2a, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x80, 0x81, 0x81, 0x81, 0x81, 0x39, 0xbb, 0x2a, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x01, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, + 0x81, 0x81, 0x81, 0x81, 0x81, 0xc9, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, + 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xd0, 0x0d, 0x00, + 0x4e, 0x31, 0x02, 0xb4, 0xc1, 0xc1, 0xd7, 0xd7, 0x24, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0xd7, 0xd7, 0x53, 0xc1, 0x47, 0xd4, + 0xd7, 0xd7, 0xd7, 0x05, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x07, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x4e, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x24, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x79, 0x5c, 0x7b, 0x5c, 0x7b, + 0x4f, 0x7b, 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x7b, + 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x2d, 0x2b, 0x2b, + 0x79, 0x14, 0x5c, 0x7b, 0x5c, 0x2d, 0x79, 0x2a, 0x5c, 0x27, 0x5c, 0x7b, + 0x5c, 0x7b, 0x5c, 0x7b, 0xa4, 0x00, 0x0a, 0xb4, 0x5c, 0x7b, 0x5c, 0x7b, + 0x4f, 0x03, 0x2a, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x07, 0x00, 0x48, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x55, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x24, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x07, 0x00, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x07, 0x00, 0x00, 0x00, 0x00, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x56, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x55, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x27, 0x51, 0x6f, 0x77, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, + 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x8e, + 0x92, 0x97, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xb4, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc9, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, + 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xed, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x20, + 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x04, 0x20, + 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x06, 0x20, 0x00, 0x00, 0x08, 0x20, + 0x00, 0x00, 0x09, 0x20, 0x00, 0x00, 0x0a, 0x20, 0x00, 0x00, 0x28, 0x20, + 0x00, 0x00, 0x29, 0x20, 0x00, 0x00, 0x5f, 0x20, 0x00, 0x00, 0x00, 0x30, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x05, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x01, 0xc9, 0x04, 0x2c, 0x00, 0x2a, 0x5f, 0x5f, 0x69, 0x6d, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x77, 0x61, 0x73, 0x69, 0x5f, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x70, 0x72, 0x65, + 0x76, 0x69, 0x65, 0x77, 0x31, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x5f, 0x67, + 0x65, 0x74, 0x01, 0x30, 0x5f, 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x65, 0x64, 0x5f, 0x77, 0x61, 0x73, 0x69, 0x5f, 0x73, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, + 0x31, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, + 0x5f, 0x67, 0x65, 0x74, 0x02, 0x2b, 0x5f, 0x5f, 0x69, 0x6d, 0x70, 0x6f, + 0x72, 0x74, 0x65, 0x64, 0x5f, 0x77, 0x61, 0x73, 0x69, 0x5f, 0x73, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x31, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x5f, 0x65, 0x78, 0x69, + 0x74, 0x03, 0x11, 0x5f, 0x5f, 0x77, 0x61, 0x73, 0x6d, 0x5f, 0x63, 0x61, + 0x6c, 0x6c, 0x5f, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x04, 0x13, 0x75, 0x6e, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x77, 0x65, 0x61, 0x6b, + 0x3a, 0x6d, 0x61, 0x69, 0x6e, 0x05, 0x12, 0x5f, 0x5f, 0x77, 0x61, 0x73, + 0x6d, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x06, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x07, 0x0a, 0x72, + 0x65, 0x73, 0x65, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x08, 0x06, 0x6d, + 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x09, 0x04, 0x66, 0x72, 0x65, 0x65, 0x0a, + 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x0b, 0x07, 0x72, 0x65, 0x61, + 0x6c, 0x6c, 0x6f, 0x63, 0x0c, 0x05, 0x5f, 0x45, 0x78, 0x69, 0x74, 0x0d, + 0x0b, 0x5f, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x76, 0x6f, 0x69, 0x64, + 0x0e, 0x0f, 0x5f, 0x5f, 0x77, 0x61, 0x73, 0x69, 0x5f, 0x61, 0x72, 0x67, + 0x73, 0x5f, 0x67, 0x65, 0x74, 0x0f, 0x15, 0x5f, 0x5f, 0x77, 0x61, 0x73, + 0x69, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, + 0x5f, 0x67, 0x65, 0x74, 0x10, 0x10, 0x5f, 0x5f, 0x77, 0x61, 0x73, 0x69, + 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x11, 0x05, + 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x12, 0x11, 0x5f, 0x5f, 0x77, 0x61, 0x73, + 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x74, 0x6f, 0x72, 0x73, + 0x13, 0x06, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x14, 0x06, 0x6d, 0x65, + 0x6d, 0x73, 0x65, 0x74, 0x15, 0x06, 0x73, 0x74, 0x72, 0x6c, 0x65, 0x6e, + 0x16, 0x08, 0x69, 0x73, 0x77, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x17, 0x06, + 0x6d, 0x65, 0x6d, 0x63, 0x6d, 0x70, 0x18, 0x06, 0x6d, 0x65, 0x6d, 0x63, + 0x68, 0x72, 0x19, 0x06, 0x73, 0x74, 0x72, 0x63, 0x6d, 0x70, 0x1a, 0x08, + 0x74, 0x6f, 0x77, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x1b, 0x07, 0x63, 0x61, + 0x73, 0x65, 0x6d, 0x61, 0x70, 0x1c, 0x08, 0x74, 0x6f, 0x77, 0x75, 0x70, + 0x70, 0x65, 0x72, 0x1d, 0x07, 0x73, 0x74, 0x72, 0x6e, 0x63, 0x6d, 0x70, + 0x1e, 0x08, 0x69, 0x73, 0x77, 0x75, 0x70, 0x70, 0x65, 0x72, 0x1f, 0x07, + 0x6d, 0x65, 0x6d, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x08, 0x69, 0x73, 0x77, + 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x21, 0x07, 0x69, 0x73, 0x62, 0x6c, 0x61, + 0x6e, 0x6b, 0x22, 0x08, 0x69, 0x73, 0x77, 0x62, 0x6c, 0x61, 0x6e, 0x6b, + 0x23, 0x08, 0x69, 0x73, 0x77, 0x64, 0x69, 0x67, 0x69, 0x74, 0x24, 0x07, + 0x73, 0x74, 0x72, 0x6e, 0x63, 0x61, 0x74, 0x25, 0x09, 0x5f, 0x5f, 0x73, + 0x74, 0x70, 0x6e, 0x63, 0x70, 0x79, 0x26, 0x07, 0x73, 0x74, 0x72, 0x6e, + 0x63, 0x70, 0x79, 0x27, 0x09, 0x69, 0x73, 0x77, 0x78, 0x64, 0x69, 0x67, + 0x69, 0x74, 0x28, 0x06, 0x77, 0x63, 0x73, 0x6c, 0x65, 0x6e, 0x29, 0x06, + 0x77, 0x63, 0x73, 0x63, 0x68, 0x72, 0x2a, 0x08, 0x69, 0x73, 0x77, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2b, 0x08, 0x69, 0x73, 0x77, 0x61, 0x6c, 0x6e, + 0x75, 0x6d, 0x07, 0x33, 0x02, 0x00, 0x0f, 0x5f, 0x5f, 0x73, 0x74, 0x61, + 0x63, 0x6b, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x01, 0x1f, + 0x47, 0x4f, 0x54, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x5f, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x09, 0x0a, 0x01, 0x00, 0x07, + 0x2e, 0x72, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x00, 0x76, 0x09, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x73, 0x01, 0x0c, 0x70, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x2d, 0x62, 0x79, 0x01, 0x05, 0x63, + 0x6c, 0x61, 0x6e, 0x67, 0x56, 0x31, 0x37, 0x2e, 0x30, 0x2e, 0x36, 0x20, + 0x28, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x6c, 0x76, 0x6d, + 0x2f, 0x6c, 0x6c, 0x76, 0x6d, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x20, 0x36, 0x30, 0x30, 0x39, 0x37, 0x30, 0x38, 0x62, 0x34, 0x33, + 0x36, 0x37, 0x31, 0x37, 0x31, 0x63, 0x63, 0x64, 0x62, 0x66, 0x34, 0x62, + 0x35, 0x39, 0x30, 0x35, 0x63, 0x62, 0x36, 0x61, 0x38, 0x30, 0x33, 0x37, + 0x35, 0x33, 0x66, 0x65, 0x31, 0x38, 0x29, 0x00, 0x39, 0x0f, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x03, 0x2b, 0x0b, 0x62, 0x75, 0x6c, 0x6b, 0x2d, 0x6d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x2b, 0x0f, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x2d, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x73, 0x2b, 0x08, 0x73, 0x69, + 0x67, 0x6e, 0x2d, 0x65, 0x78, 0x74 +}; +unsigned int STDLIB_WASM_LEN = 15582; diff --git a/parser/nnsrc/wasm_store.c b/parser/nnsrc/wasm_store.c new file mode 100644 index 00000000..37523818 --- /dev/null +++ b/parser/nnsrc/wasm_store.c @@ -0,0 +1,1847 @@ +#include "api.h" +#include "./parser.h" +#include + +#ifdef TREE_SITTER_FEATURE_WASM + +#include "./alloc.h" +#include "./array.h" +#include "./atomic.h" +#include "./language.h" +#include "./lexer.h" +#include "./wasm/wasm-stdlib.h" +#include "./wasm_store.h" + +#include +#include +#include + +#define array_len(a) (sizeof(a) / sizeof(a[0])) + +// The following symbols from the C and C++ standard libraries are available +// for external scanners to use. +const char *STDLIB_SYMBOLS[] = { + #include "./stdlib-symbols.txt" +}; + +// The contents of the `dylink.0` custom section of a wasm module, +// as specified by the current WebAssembly dynamic linking ABI proposal. +typedef struct { + uint32_t memory_size; + uint32_t memory_align; + uint32_t table_size; + uint32_t table_align; +} WasmDylinkInfo; + +// WasmLanguageId - A pointer used to identify a language. This language id is +// reference-counted, so that its ownership can be shared between the language +// itself and the instances of the language that are held in wasm stores. +typedef struct { + volatile uint32_t ref_count; + volatile uint32_t is_language_deleted; +} WasmLanguageId; + +// LanguageWasmModule - Additional data associated with a wasm-backed +// `TSLanguage`. This data is read-only and does not reference a particular +// wasm store, so it can be shared by all users of a `TSLanguage`. A pointer to +// this is stored on the language itself. +typedef struct { + volatile uint32_t ref_count; + WasmLanguageId *language_id; + wasmtime_module_t *module; + const char *name; + char *symbol_name_buffer; + char *field_name_buffer; + WasmDylinkInfo dylink_info; +} LanguageWasmModule; + +// LanguageWasmInstance - Additional data associated with an instantiation of +// a `TSLanguage` in a particular wasm store. The wasm store holds one of +// these structs for each language that it has instantiated. +typedef struct { + WasmLanguageId *language_id; + wasmtime_instance_t instance; + int32_t external_states_address; + int32_t lex_main_fn_index; + int32_t lex_keyword_fn_index; + int32_t scanner_create_fn_index; + int32_t scanner_destroy_fn_index; + int32_t scanner_serialize_fn_index; + int32_t scanner_deserialize_fn_index; + int32_t scanner_scan_fn_index; +} LanguageWasmInstance; + +typedef struct { + uint32_t reset_heap; + uint32_t proc_exit; + uint32_t abort; + uint32_t assert_fail; + uint32_t notify_memory_growth; + uint32_t debug_message; + uint32_t at_exit; + uint32_t args_get; + uint32_t args_sizes_get; +} BuiltinFunctionIndices; + +// TSWasmStore - A struct that allows a given `Parser` to use wasm-backed +// languages. This struct is mutable, and can only be used by one parser at a +// time. +struct TSWasmStore { + wasm_engine_t *engine; + wasmtime_store_t *store; + wasmtime_table_t function_table; + wasmtime_memory_t memory; + TSLexer *current_lexer; + LanguageWasmInstance *current_instance; + Array(LanguageWasmInstance) language_instances; + uint32_t current_memory_offset; + uint32_t current_function_table_offset; + uint32_t *stdlib_fn_indices; + BuiltinFunctionIndices builtin_fn_indices; + wasmtime_global_t stack_pointer_global; + wasm_globaltype_t *const_i32_type; + bool has_error; + uint32_t lexer_address; +}; + +typedef Array(char) StringData; + +// LanguageInWasmMemory - The memory layout of a `TSLanguage` when compiled to +// wasm32. This is used to copy static language data out of the wasm memory. +typedef struct { + uint32_t version; + uint32_t symbol_count; + uint32_t alias_count; + uint32_t token_count; + uint32_t external_token_count; + uint32_t state_count; + uint32_t large_state_count; + uint32_t production_id_count; + uint32_t field_count; + uint16_t max_alias_sequence_length; + int32_t parse_table; + int32_t small_parse_table; + int32_t small_parse_table_map; + int32_t parse_actions; + int32_t symbol_names; + int32_t field_names; + int32_t field_map_slices; + int32_t field_map_entries; + int32_t symbol_metadata; + int32_t public_symbol_map; + int32_t alias_map; + int32_t alias_sequences; + int32_t lex_modes; + int32_t lex_fn; + int32_t keyword_lex_fn; + TSSymbol keyword_capture_token; + struct { + int32_t states; + int32_t symbol_map; + int32_t create; + int32_t destroy; + int32_t scan; + int32_t serialize; + int32_t deserialize; + } external_scanner; + int32_t primary_state_ids; +} LanguageInWasmMemory; + +// LexerInWasmMemory - The memory layout of a `TSLexer` when compiled to wasm32. +// This is used to copy mutable lexing state in and out of the wasm memory. +typedef struct { + int32_t lookahead; + TSSymbol result_symbol; + int32_t advance; + int32_t mark_end; + int32_t get_column; + int32_t is_at_included_range_start; + int32_t eof; +} LexerInWasmMemory; + +static volatile uint32_t NEXT_LANGUAGE_ID; + +// Linear memory layout: +// [ <-- stack | stdlib statics | lexer | language statics --> | serialization_buffer | heap --> ] +#define MAX_MEMORY_SIZE (128 * 1024 * 1024 / MEMORY_PAGE_SIZE) + +/************************ + * WasmDylinkMemoryInfo + ***********************/ + +static uint8_t read_u8(const uint8_t **p, const uint8_t *end) { + return *(*p)++; +} + +static inline uint64_t read_uleb128(const uint8_t **p, const uint8_t *end) { + uint64_t value = 0; + unsigned shift = 0; + do { + if (*p == end) return UINT64_MAX; + value += (uint64_t)(**p & 0x7f) << shift; + shift += 7; + } while (*((*p)++) >= 128); + return value; +} + +static bool wasm_dylink_info__parse( + const uint8_t *bytes, + size_t length, + WasmDylinkInfo *info +) { + const uint8_t WASM_MAGIC_NUMBER[4] = {0, 'a', 's', 'm'}; + const uint8_t WASM_VERSION[4] = {1, 0, 0, 0}; + const uint8_t WASM_CUSTOM_SECTION = 0x0; + const uint8_t WASM_DYLINK_MEM_INFO = 0x1; + + const uint8_t *p = bytes; + const uint8_t *end = bytes + length; + + if (length < 8) return false; + if (memcmp(p, WASM_MAGIC_NUMBER, 4) != 0) return false; + p += 4; + if (memcmp(p, WASM_VERSION, 4) != 0) return false; + p += 4; + + while (p < end) { + uint8_t section_id = read_u8(&p, end); + uint32_t section_length = read_uleb128(&p, end); + const uint8_t *section_end = p + section_length; + if (section_end > end) return false; + + if (section_id == WASM_CUSTOM_SECTION) { + uint32_t name_length = read_uleb128(&p, section_end); + const uint8_t *name_end = p + name_length; + if (name_end > section_end) return false; + + if (name_length == 8 && memcmp(p, "dylink.0", 8) == 0) { + p = name_end; + while (p < section_end) { + uint8_t subsection_type = read_u8(&p, section_end); + uint32_t subsection_size = read_uleb128(&p, section_end); + const uint8_t *subsection_end = p + subsection_size; + if (subsection_end > section_end) return false; + if (subsection_type == WASM_DYLINK_MEM_INFO) { + info->memory_size = read_uleb128(&p, subsection_end); + info->memory_align = read_uleb128(&p, subsection_end); + info->table_size = read_uleb128(&p, subsection_end); + info->table_align = read_uleb128(&p, subsection_end); + return true; + } + p = subsection_end; + } + } + } + p = section_end; + } + return false; +} + +/******************************************* + * Native callbacks exposed to wasm modules + *******************************************/ + + static wasm_trap_t *callback__abort( + void *env, + wasmtime_caller_t* caller, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + return wasmtime_trap_new("wasm module called abort", 24); +} + +static wasm_trap_t *callback__debug_message( + void *env, + wasmtime_caller_t* caller, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + wasmtime_context_t *context = wasmtime_caller_context(caller); + TSWasmStore *store = env; + assert(args_and_results_len == 2); + uint32_t string_address = args_and_results[0].i32; + uint32_t value = args_and_results[1].i32; + uint8_t *memory = wasmtime_memory_data(context, &store->memory); + printf("DEBUG: %s %u\n", &memory[string_address], value); + return NULL; +} + +static wasm_trap_t *callback__noop( + void *env, + wasmtime_caller_t* caller, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + return NULL; +} + +static wasm_trap_t *callback__lexer_advance( + void *env, + wasmtime_caller_t* caller, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + wasmtime_context_t *context = wasmtime_caller_context(caller); + assert(args_and_results_len == 2); + + TSWasmStore *store = env; + TSLexer *lexer = store->current_lexer; + bool skip = args_and_results[1].i32; + lexer->advance(lexer, skip); + + uint8_t *memory = wasmtime_memory_data(context, &store->memory); + memcpy(&memory[store->lexer_address], &lexer->lookahead, sizeof(lexer->lookahead)); + return NULL; +} + +static wasm_trap_t *callback__lexer_mark_end( + void *env, + wasmtime_caller_t* caller, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + TSWasmStore *store = env; + TSLexer *lexer = store->current_lexer; + lexer->mark_end(lexer); + return NULL; +} + +static wasm_trap_t *callback__lexer_get_column( + void *env, + wasmtime_caller_t* caller, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + TSWasmStore *store = env; + TSLexer *lexer = store->current_lexer; + uint32_t result = lexer->get_column(lexer); + args_and_results[0].i32 = result; + return NULL; +} + +static wasm_trap_t *callback__lexer_is_at_included_range_start( + void *env, + wasmtime_caller_t* caller, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + TSWasmStore *store = env; + TSLexer *lexer = store->current_lexer; + bool result = lexer->is_at_included_range_start(lexer); + args_and_results[0].i32 = result; + return NULL; +} + +static wasm_trap_t *callback__lexer_eof( + void *env, + wasmtime_caller_t* caller, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + TSWasmStore *store = env; + TSLexer *lexer = store->current_lexer; + bool result = lexer->eof(lexer); + args_and_results[0].i32 = result; + return NULL; +} + +typedef struct { + uint32_t *storage_location; + wasmtime_func_unchecked_callback_t callback; + wasm_functype_t *type; +} FunctionDefinition; + +static void *copy(const void *data, size_t size) { + void *result = ts_malloc(size); + memcpy(result, data, size); + return result; +} + +static void *copy_unsized_static_array( + const uint8_t *data, + int32_t start_address, + const int32_t all_addresses[], + size_t address_count +) { + int32_t end_address = 0; + for (unsigned i = 0; i < address_count; i++) { + if (all_addresses[i] > start_address) { + if (!end_address || all_addresses[i] < end_address) { + end_address = all_addresses[i]; + } + } + } + + if (!end_address) return NULL; + size_t size = end_address - start_address; + void *result = ts_malloc(size); + memcpy(result, &data[start_address], size); + return result; +} + +static void *copy_strings( + const uint8_t *data, + int32_t array_address, + size_t count, + StringData *string_data +) { + const char **result = ts_malloc(count * sizeof(char *)); + for (unsigned i = 0; i < count; i++) { + int32_t address; + memcpy(&address, &data[array_address + i * sizeof(address)], sizeof(address)); + if (address == 0) { + result[i] = (const char *)-1; + } else { + const uint8_t *string = &data[address]; + uint32_t len = strlen((const char *)string); + result[i] = (const char *)(uintptr_t)string_data->size; + array_extend(string_data, len + 1, string); + } + } + for (unsigned i = 0; i < count; i++) { + if (result[i] == (const char *)-1) { + result[i] = NULL; + } else { + result[i] = string_data->contents + (uintptr_t)result[i]; + } + } + return result; +} + +static bool name_eq(const wasm_name_t *name, const char *string) { + return strncmp(string, name->data, name->size) == 0; +} + +static inline wasm_functype_t* wasm_functype_new_4_0( + wasm_valtype_t* p1, + wasm_valtype_t* p2, + wasm_valtype_t* p3, + wasm_valtype_t* p4 +) { + wasm_valtype_t* ps[4] = {p1, p2, p3, p4}; + wasm_valtype_vec_t params, results; + wasm_valtype_vec_new(¶ms, 4, ps); + wasm_valtype_vec_new_empty(&results); + return wasm_functype_new(¶ms, &results); +} + +#define format(output, ...) \ + do { \ + size_t message_length = snprintf((char *)NULL, 0, __VA_ARGS__); \ + *output = ts_malloc(message_length + 1); \ + snprintf(*output, message_length + 1, __VA_ARGS__); \ + } while (0) + +WasmLanguageId *language_id_new() { + WasmLanguageId *self = ts_malloc(sizeof(WasmLanguageId)); + self->is_language_deleted = false; + self->ref_count = 1; + return self; +} + +WasmLanguageId *language_id_clone(WasmLanguageId *self) { + atomic_inc(&self->ref_count); + return self; +} + +void language_id_delete(WasmLanguageId *self) { + if (atomic_dec(&self->ref_count) == 0) { + ts_free(self); + } +} + +static wasmtime_extern_t get_builtin_extern( + wasmtime_table_t *table, + unsigned index +) { + return (wasmtime_extern_t) { + .kind = WASMTIME_EXTERN_FUNC, + .of.func = (wasmtime_func_t) { + .store_id = table->store_id, + .__private = index + } + }; +} + +static bool ts_wasm_store__provide_builtin_import( + TSWasmStore *self, + const wasm_name_t *import_name, + wasmtime_extern_t *import +) { + wasmtime_error_t *error = NULL; + wasmtime_context_t *context = wasmtime_store_context(self->store); + + // Dynamic linking parameters + if (name_eq(import_name, "__memory_base")) { + wasmtime_val_t value = WASM_I32_VAL(self->current_memory_offset); + wasmtime_global_t global; + error = wasmtime_global_new(context, self->const_i32_type, &value, &global); + assert(!error); + *import = (wasmtime_extern_t) {.kind = WASMTIME_EXTERN_GLOBAL, .of.global = global}; + } else if (name_eq(import_name, "__table_base")) { + wasmtime_val_t value = WASM_I32_VAL(self->current_function_table_offset); + wasmtime_global_t global; + error = wasmtime_global_new(context, self->const_i32_type, &value, &global); + assert(!error); + *import = (wasmtime_extern_t) {.kind = WASMTIME_EXTERN_GLOBAL, .of.global = global}; + } else if (name_eq(import_name, "__stack_pointer")) { + *import = (wasmtime_extern_t) {.kind = WASMTIME_EXTERN_GLOBAL, .of.global = self->stack_pointer_global}; + } else if (name_eq(import_name, "__indirect_function_table")) { + *import = (wasmtime_extern_t) {.kind = WASMTIME_EXTERN_TABLE, .of.table = self->function_table}; + } else if (name_eq(import_name, "memory")) { + *import = (wasmtime_extern_t) {.kind = WASMTIME_EXTERN_MEMORY, .of.memory = self->memory}; + } + + // Builtin functions + else if (name_eq(import_name, "__assert_fail")) { + *import = get_builtin_extern(&self->function_table, self->builtin_fn_indices.assert_fail); + } else if (name_eq(import_name, "__cxa_atexit")) { + *import = get_builtin_extern(&self->function_table, self->builtin_fn_indices.at_exit); + } else if (name_eq(import_name, "args_get")) { + *import = get_builtin_extern(&self->function_table, self->builtin_fn_indices.args_get); + } else if (name_eq(import_name, "args_sizes_get")) { + *import = get_builtin_extern(&self->function_table, self->builtin_fn_indices.args_sizes_get); + } else if (name_eq(import_name, "abort")) { + *import = get_builtin_extern(&self->function_table, self->builtin_fn_indices.abort); + } else if (name_eq(import_name, "proc_exit")) { + *import = get_builtin_extern(&self->function_table, self->builtin_fn_indices.proc_exit); + } else if (name_eq(import_name, "emscripten_notify_memory_growth")) { + *import = get_builtin_extern(&self->function_table, self->builtin_fn_indices.notify_memory_growth); + } else if (name_eq(import_name, "tree_sitter_debug_message")) { + *import = get_builtin_extern(&self->function_table, self->builtin_fn_indices.debug_message); + } else { + return false; + } + + return true; +} + +static bool ts_wasm_store__call_module_initializer( + TSWasmStore *self, + const wasm_name_t *export_name, + wasmtime_extern_t *export, + wasm_trap_t **trap +) { + if ( + name_eq(export_name, "_initialize") || + name_eq(export_name, "__wasm_apply_data_relocs") || + name_eq(export_name, "__wasm_call_ctors") + ) { + wasmtime_context_t *context = wasmtime_store_context(self->store); + wasmtime_func_t initialization_func = export->of.func; + wasmtime_error_t *error = wasmtime_func_call(context, &initialization_func, NULL, 0, NULL, 0, trap); + assert(!error); + return true; + } else { + return false; + } +} + +TSWasmStore *ts_wasm_store_new(TSWasmEngine *engine, TSWasmError *wasm_error) { + TSWasmStore *self = ts_calloc(1, sizeof(TSWasmStore)); + wasmtime_store_t *store = wasmtime_store_new(engine, self, NULL); + wasmtime_context_t *context = wasmtime_store_context(store); + wasmtime_error_t *error = NULL; + wasm_trap_t *trap = NULL; + wasm_message_t message = WASM_EMPTY_VEC; + wasm_exporttype_vec_t export_types = WASM_EMPTY_VEC; + wasmtime_extern_t *imports = NULL; + wasmtime_module_t *stdlib_module = NULL; + wasm_memorytype_t *memory_type = NULL; + wasm_tabletype_t *table_type = NULL; + + // Define functions called by scanners via function pointers on the lexer. + LexerInWasmMemory lexer = { + .lookahead = 0, + .result_symbol = 0, + }; + FunctionDefinition lexer_definitions[] = { + { + (uint32_t *)&lexer.advance, + callback__lexer_advance, + wasm_functype_new_2_0(wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + { + (uint32_t *)&lexer.mark_end, + callback__lexer_mark_end, + wasm_functype_new_1_0(wasm_valtype_new_i32()) + }, + { + (uint32_t *)&lexer.get_column, + callback__lexer_get_column, + wasm_functype_new_1_1(wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + { + (uint32_t *)&lexer.is_at_included_range_start, + callback__lexer_is_at_included_range_start, + wasm_functype_new_1_1(wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + { + (uint32_t *)&lexer.eof, + callback__lexer_eof, + wasm_functype_new_1_1(wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + }; + + // Define builtin functions that can be imported by scanners. + BuiltinFunctionIndices builtin_fn_indices; + FunctionDefinition builtin_definitions[] = { + { + &builtin_fn_indices.proc_exit, + callback__abort, + wasm_functype_new_1_0(wasm_valtype_new_i32()) + }, + { + &builtin_fn_indices.abort, + callback__abort, + wasm_functype_new_0_0() + }, + { + &builtin_fn_indices.assert_fail, + callback__abort, + wasm_functype_new_4_0(wasm_valtype_new_i32(), wasm_valtype_new_i32(), wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + { + &builtin_fn_indices.notify_memory_growth, + callback__noop, + wasm_functype_new_1_0(wasm_valtype_new_i32()) + }, + { + &builtin_fn_indices.debug_message, + callback__debug_message, + wasm_functype_new_2_0(wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + { + &builtin_fn_indices.at_exit, + callback__noop, + wasm_functype_new_3_1(wasm_valtype_new_i32(), wasm_valtype_new_i32(), wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + { + &builtin_fn_indices.args_get, + callback__noop, + wasm_functype_new_2_1(wasm_valtype_new_i32(), wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + { + &builtin_fn_indices.args_sizes_get, + callback__noop, + wasm_functype_new_2_1(wasm_valtype_new_i32(), wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + }; + + // Create all of the wasm functions. + unsigned builtin_definitions_len = array_len(builtin_definitions); + unsigned lexer_definitions_len = array_len(lexer_definitions); + for (unsigned i = 0; i < builtin_definitions_len; i++) { + FunctionDefinition *definition = &builtin_definitions[i]; + wasmtime_func_t func; + wasmtime_func_new_unchecked(context, definition->type, definition->callback, self, NULL, &func); + *definition->storage_location = func.__private; + wasm_functype_delete(definition->type); + } + for (unsigned i = 0; i < lexer_definitions_len; i++) { + FunctionDefinition *definition = &lexer_definitions[i]; + wasmtime_func_t func; + wasmtime_func_new_unchecked(context, definition->type, definition->callback, self, NULL, &func); + *definition->storage_location = func.__private; + wasm_functype_delete(definition->type); + } + + // Compile the stdlib module. + error = wasmtime_module_new(engine, STDLIB_WASM, STDLIB_WASM_LEN, &stdlib_module); + if (error) { + wasmtime_error_message(error, &message); + wasm_error->kind = TSWasmErrorKindCompile; + format( + &wasm_error->message, + "failed to compile wasm stdlib: %.*s", + (int)message.size, message.data + ); + goto error; + } + + // Retrieve the stdlib module's imports. + wasm_importtype_vec_t import_types = WASM_EMPTY_VEC; + wasmtime_module_imports(stdlib_module, &import_types); + + // Find the initial number of memory pages needed by the stdlib. + const wasm_memorytype_t *stdlib_memory_type; + for (unsigned i = 0; i < import_types.size; i++) { + wasm_importtype_t *import_type = import_types.data[i]; + const wasm_name_t *import_name = wasm_importtype_name(import_type); + if (name_eq(import_name, "memory")) { + const wasm_externtype_t *type = wasm_importtype_type(import_type); + stdlib_memory_type = wasm_externtype_as_memorytype_const(type); + } + } + if (!stdlib_memory_type) { + wasm_error->kind = TSWasmErrorKindCompile; + format( + &wasm_error->message, + "wasm stdlib is missing the 'memory' import" + ); + goto error; + } + + // Initialize store's memory + uint64_t initial_memory_pages = wasmtime_memorytype_minimum(stdlib_memory_type); + wasm_limits_t memory_limits = {.min = initial_memory_pages, .max = MAX_MEMORY_SIZE}; + memory_type = wasm_memorytype_new(&memory_limits); + wasmtime_memory_t memory; + error = wasmtime_memory_new(context, memory_type, &memory); + if (error) { + wasmtime_error_message(error, &message); + wasm_error->kind = TSWasmErrorKindAllocate; + format( + &wasm_error->message, + "failed to allocate wasm memory: %.*s", + (int)message.size, message.data + ); + goto error; + } + wasm_memorytype_delete(memory_type); + memory_type = NULL; + + // Initialize store's function table + wasm_limits_t table_limits = {.min = 1, .max = wasm_limits_max_default}; + table_type = wasm_tabletype_new(wasm_valtype_new(WASM_FUNCREF), &table_limits); + wasmtime_val_t initializer = {.kind = WASMTIME_FUNCREF}; + wasmtime_table_t function_table; + error = wasmtime_table_new(context, table_type, &initializer, &function_table); + if (error) { + wasmtime_error_message(error, &message); + wasm_error->kind = TSWasmErrorKindAllocate; + format( + &wasm_error->message, + "failed to allocate wasm table: %.*s", + (int)message.size, message.data + ); + goto error; + } + wasm_tabletype_delete(table_type); + table_type = NULL; + + unsigned stdlib_symbols_len = array_len(STDLIB_SYMBOLS); + + // Define globals for the stack and heap start addresses. + wasm_globaltype_t *const_i32_type = wasm_globaltype_new(wasm_valtype_new_i32(), WASM_CONST); + wasm_globaltype_t *var_i32_type = wasm_globaltype_new(wasm_valtype_new_i32(), WASM_VAR); + + wasmtime_val_t stack_pointer_value = WASM_I32_VAL(0); + wasmtime_global_t stack_pointer_global; + error = wasmtime_global_new(context, var_i32_type, &stack_pointer_value, &stack_pointer_global); + assert(!error); + + *self = (TSWasmStore) { + .engine = engine, + .store = store, + .memory = memory, + .function_table = function_table, + .language_instances = array_new(), + .stdlib_fn_indices = ts_calloc(stdlib_symbols_len, sizeof(uint32_t)), + .builtin_fn_indices = builtin_fn_indices, + .stack_pointer_global = stack_pointer_global, + .current_memory_offset = 0, + .current_function_table_offset = 0, + .const_i32_type = const_i32_type, + }; + + // Set up the imports for the stdlib module. + imports = ts_calloc(import_types.size, sizeof(wasmtime_extern_t)); + for (unsigned i = 0; i < import_types.size; i++) { + wasm_importtype_t *type = import_types.data[i]; + const wasm_name_t *import_name = wasm_importtype_name(type); + if (!ts_wasm_store__provide_builtin_import(self, import_name, &imports[i])) { + wasm_error->kind = TSWasmErrorKindInstantiate; + format( + &wasm_error->message, + "unexpected import in wasm stdlib: %.*s\n", + (int)import_name->size, import_name->data + ); + goto error; + } + } + + // Instantiate the stdlib module. + wasmtime_instance_t instance; + error = wasmtime_instance_new(context, stdlib_module, imports, import_types.size, &instance, &trap); + ts_free(imports); + imports = NULL; + if (error) { + wasmtime_error_message(error, &message); + wasm_error->kind = TSWasmErrorKindInstantiate; + format( + &wasm_error->message, + "failed to instantiate wasm stdlib module: %.*s", + (int)message.size, message.data + ); + goto error; + } + if (trap) { + wasm_trap_message(trap, &message); + wasm_error->kind = TSWasmErrorKindInstantiate; + format( + &wasm_error->message, + "trapped when instantiating wasm stdlib module: %.*s", + (int)message.size, message.data + ); + goto error; + } + wasm_importtype_vec_delete(&import_types); + + // Process the stdlib module's exports. + for (unsigned i = 0; i < stdlib_symbols_len; i++) { + self->stdlib_fn_indices[i] = UINT32_MAX; + } + wasmtime_module_exports(stdlib_module, &export_types); + for (unsigned i = 0; i < export_types.size; i++) { + wasm_exporttype_t *export_type = export_types.data[i]; + const wasm_name_t *name = wasm_exporttype_name(export_type); + + char *export_name; + size_t name_len; + wasmtime_extern_t export = {.kind = WASM_EXTERN_GLOBAL}; + bool exists = wasmtime_instance_export_nth(context, &instance, i, &export_name, &name_len, &export); + assert(exists); + + if (export.kind == WASMTIME_EXTERN_GLOBAL) { + if (name_eq(name, "__stack_pointer")) { + self->stack_pointer_global = export.of.global; + } + } + + if (export.kind == WASMTIME_EXTERN_FUNC) { + if (ts_wasm_store__call_module_initializer(self, name, &export, &trap)) { + if (trap) { + wasm_trap_message(trap, &message); + wasm_error->kind = TSWasmErrorKindInstantiate; + format( + &wasm_error->message, + "trap when calling stdlib relocation function: %.*s\n", + (int)message.size, message.data + ); + goto error; + } + continue; + } + + if (name_eq(name, "reset_heap")) { + self->builtin_fn_indices.reset_heap = export.of.func.__private; + continue; + } + + for (unsigned j = 0; j < stdlib_symbols_len; j++) { + if (name_eq(name, STDLIB_SYMBOLS[j])) { + self->stdlib_fn_indices[j] = export.of.func.__private; + break; + } + } + } + } + + if (self->builtin_fn_indices.reset_heap == UINT32_MAX) { + wasm_error->kind = TSWasmErrorKindInstantiate; + format( + &wasm_error->message, + "missing malloc reset function in wasm stdlib" + ); + goto error; + } + + for (unsigned i = 0; i < stdlib_symbols_len; i++) { + if (self->stdlib_fn_indices[i] == UINT32_MAX) { + wasm_error->kind = TSWasmErrorKindInstantiate; + format( + &wasm_error->message, + "missing exported symbol in wasm stdlib: %s", + STDLIB_SYMBOLS[i] + ); + goto error; + } + } + + wasm_exporttype_vec_delete(&export_types); + wasmtime_module_delete(stdlib_module); + + // Add all of the lexer callback functions to the function table. Store their function table + // indices on the in-memory lexer. + uint32_t table_index; + error = wasmtime_table_grow(context, &function_table, lexer_definitions_len, &initializer, &table_index); + if (error) { + wasmtime_error_message(error, &message); + wasm_error->kind = TSWasmErrorKindAllocate; + format( + &wasm_error->message, + "failed to grow wasm table to initial size: %.*s", + (int)message.size, message.data + ); + goto error; + } + for (unsigned i = 0; i < lexer_definitions_len; i++) { + FunctionDefinition *definition = &lexer_definitions[i]; + wasmtime_func_t func = {function_table.store_id, *definition->storage_location}; + wasmtime_val_t func_val = {.kind = WASMTIME_FUNCREF, .of.funcref = func}; + error = wasmtime_table_set(context, &function_table, table_index, &func_val); + assert(!error); + *(int32_t *)(definition->storage_location) = table_index; + table_index++; + } + + self->current_function_table_offset = table_index; + self->lexer_address = initial_memory_pages * MEMORY_PAGE_SIZE; + self->current_memory_offset = self->lexer_address + sizeof(LexerInWasmMemory); + + // Grow the memory enough to hold the builtin lexer and serialization buffer. + uint32_t new_pages_needed = (self->current_memory_offset - self->lexer_address - 1) / MEMORY_PAGE_SIZE + 1; + uint64_t prev_memory_size; + wasmtime_memory_grow(context, &memory, new_pages_needed, &prev_memory_size); + + uint8_t *memory_data = wasmtime_memory_data(context, &memory); + memcpy(&memory_data[self->lexer_address], &lexer, sizeof(lexer)); + return self; + +error: + ts_free(self); + if (stdlib_module) wasmtime_module_delete(stdlib_module); + if (store) wasmtime_store_delete(store); + if (import_types.size) wasm_importtype_vec_delete(&import_types); + if (memory_type) wasm_memorytype_delete(memory_type); + if (table_type) wasm_tabletype_delete(table_type); + if (trap) wasm_trap_delete(trap); + if (error) wasmtime_error_delete(error); + if (message.size) wasm_byte_vec_delete(&message); + if (export_types.size) wasm_exporttype_vec_delete(&export_types); + if (imports) ts_free(imports); + return NULL; +} + +void ts_wasm_store_delete(TSWasmStore *self) { + if (!self) return; + ts_free(self->stdlib_fn_indices); + wasm_globaltype_delete(self->const_i32_type); + wasmtime_store_delete(self->store); + wasm_engine_delete(self->engine); + for (unsigned i = 0; i < self->language_instances.size; i++) { + LanguageWasmInstance *instance = &self->language_instances.contents[i]; + language_id_delete(instance->language_id); + } + array_delete(&self->language_instances); + ts_free(self); +} + +size_t ts_wasm_store_language_count(const TSWasmStore *self) { + size_t result = 0; + for (unsigned i = 0; i < self->language_instances.size; i++) { + const WasmLanguageId *id = self->language_instances.contents[i].language_id; + if (!id->is_language_deleted) { + result++; + } + } + return result; +} + +static uint32_t ts_wasm_store__heap_address(TSWasmStore *self) { + return self->current_memory_offset + TREE_SITTER_SERIALIZATION_BUFFER_SIZE; +} + +static uint32_t ts_wasm_store__serialization_buffer_address(TSWasmStore *self) { + return self->current_memory_offset; +} + +static bool ts_wasm_store__instantiate( + TSWasmStore *self, + wasmtime_module_t *module, + const char *language_name, + const WasmDylinkInfo *dylink_info, + wasmtime_instance_t *result, + int32_t *language_address, + char **error_message +) { + wasmtime_error_t *error = NULL; + wasm_trap_t *trap = NULL; + wasm_message_t message = WASM_EMPTY_VEC; + char *language_function_name = NULL; + wasmtime_extern_t *imports = NULL; + wasmtime_context_t *context = wasmtime_store_context(self->store); + + // Grow the function table to make room for the new functions. + wasmtime_val_t initializer = {.kind = WASMTIME_FUNCREF}; + uint32_t prev_table_size; + error = wasmtime_table_grow(context, &self->function_table, dylink_info->table_size, &initializer, &prev_table_size); + if (error) { + format(error_message, "invalid function table size %u", dylink_info->table_size); + goto error; + } + + // Grow the memory to make room for the new data. + uint32_t needed_memory_size = ts_wasm_store__heap_address(self) + dylink_info->memory_size; + uint32_t current_memory_size = wasmtime_memory_data_size(context, &self->memory); + if (needed_memory_size > current_memory_size) { + uint32_t pages_to_grow = ( + needed_memory_size - current_memory_size + MEMORY_PAGE_SIZE - 1) / + MEMORY_PAGE_SIZE; + uint64_t prev_memory_size; + error = wasmtime_memory_grow(context, &self->memory, pages_to_grow, &prev_memory_size); + if (error) { + format(error_message, "invalid memory size %u", dylink_info->memory_size); + goto error; + } + } + + // Construct the language function name as string. + format(&language_function_name, "tree_sitter_%s", language_name); + + const uint64_t store_id = self->function_table.store_id; + + // Build the imports list for the module. + wasm_importtype_vec_t import_types = WASM_EMPTY_VEC; + wasmtime_module_imports(module, &import_types); + imports = ts_calloc(import_types.size, sizeof(wasmtime_extern_t)); + + for (unsigned i = 0; i < import_types.size; i++) { + const wasm_importtype_t *import_type = import_types.data[i]; + const wasm_name_t *import_name = wasm_importtype_name(import_type); + if (import_name->size == 0) { + format(error_message, "empty import name"); + goto error; + } + + if (ts_wasm_store__provide_builtin_import(self, import_name, &imports[i])) { + continue; + } + + bool defined_in_stdlib = false; + for (unsigned j = 0; j < array_len(STDLIB_SYMBOLS); j++) { + if (name_eq(import_name, STDLIB_SYMBOLS[j])) { + uint16_t address = self->stdlib_fn_indices[j]; + imports[i] = (wasmtime_extern_t) {.kind = WASMTIME_EXTERN_FUNC, .of.func = {store_id, address}}; + defined_in_stdlib = true; + break; + } + } + + if (!defined_in_stdlib) { + format( + error_message, + "invalid import '%.*s'\n", + (int)import_name->size, import_name->data + ); + goto error; + } + } + + wasmtime_instance_t instance; + error = wasmtime_instance_new(context, module, imports, import_types.size, &instance, &trap); + wasm_importtype_vec_delete(&import_types); + ts_free(imports); + imports = NULL; + if (error) { + wasmtime_error_message(error, &message); + format( + error_message, + "error instantiating wasm module: %.*s\n", + (int)message.size, message.data + ); + goto error; + } + if (trap) { + wasm_trap_message(trap, &message); + format( + error_message, + "trap when instantiating wasm module: %.*s\n", + (int)message.size, message.data + ); + goto error; + } + + self->current_memory_offset += dylink_info->memory_size; + self->current_function_table_offset += dylink_info->table_size; + + // Process the module's exports. + bool found_language = false; + wasmtime_extern_t language_extern; + wasm_exporttype_vec_t export_types = WASM_EMPTY_VEC; + wasmtime_module_exports(module, &export_types); + for (unsigned i = 0; i < export_types.size; i++) { + wasm_exporttype_t *export_type = export_types.data[i]; + const wasm_name_t *name = wasm_exporttype_name(export_type); + + size_t name_len; + char *export_name; + wasmtime_extern_t export = {.kind = WASM_EXTERN_GLOBAL}; + bool exists = wasmtime_instance_export_nth(context, &instance, i, &export_name, &name_len, &export); + assert(exists); + + // If the module exports an initialization or data-relocation function, call it. + if (ts_wasm_store__call_module_initializer(self, name, &export, &trap)) { + if (trap) { + wasm_trap_message(trap, &message); + format( + error_message, + "trap when calling data relocation function: %.*s\n", + (int)message.size, message.data + ); + goto error; + } + } + + // Find the main language function for the module. + else if (name_eq(name, language_function_name)) { + language_extern = export; + found_language = true; + } + } + wasm_exporttype_vec_delete(&export_types); + + if (!found_language) { + format( + error_message, + "module did not contain language function: %s", + language_function_name + ); + goto error; + } + + // Invoke the language function to get the static address of the language object. + wasmtime_func_t language_func = language_extern.of.func; + wasmtime_val_t language_address_val; + error = wasmtime_func_call(context, &language_func, NULL, 0, &language_address_val, 1, &trap); + assert(!error); + if (trap) { + wasm_trap_message(trap, &message); + format( + error_message, + "trapped when calling language function: %s: %.*s\n", + language_function_name, (int)message.size, message.data + ); + goto error; + } + + if (language_address_val.kind != WASMTIME_I32) { + format( + error_message, + "language function did not return an integer: %s\n", + language_function_name + ); + goto error; + } + + ts_free(language_function_name); + *result = instance; + *language_address = language_address_val.of.i32; + return true; + +error: + if (language_function_name) ts_free(language_function_name); + if (message.size) wasm_byte_vec_delete(&message); + if (error) wasmtime_error_delete(error); + if (trap) wasm_trap_delete(trap); + if (imports) ts_free(imports); + return false; +} + +static bool ts_wasm_store__sentinel_lex_fn(TSLexer *_lexer, TSStateId state) { + return false; +} + +const TSLanguage *ts_wasm_store_load_language( + TSWasmStore *self, + const char *language_name, + const char *wasm, + uint32_t wasm_len, + TSWasmError *wasm_error +) { + WasmDylinkInfo dylink_info; + wasmtime_module_t *module = NULL; + wasmtime_error_t *error = NULL; + wasm_error->kind = TSWasmErrorKindNone; + + if (!wasm_dylink_info__parse((const unsigned char *)wasm, wasm_len, &dylink_info)) { + wasm_error->kind = TSWasmErrorKindParse; + format(&wasm_error->message, "failed to parse dylink section of wasm module"); + goto error; + } + + // Compile the wasm code. + error = wasmtime_module_new(self->engine, (const uint8_t *)wasm, wasm_len, &module); + if (error) { + wasm_message_t message; + wasmtime_error_message(error, &message); + wasm_error->kind = TSWasmErrorKindCompile; + format(&wasm_error->message, "error compiling wasm module: %.*s", (int)message.size, message.data); + wasm_byte_vec_delete(&message); + goto error; + } + + // Instantiate the module in this store. + wasmtime_instance_t instance; + int32_t language_address; + if (!ts_wasm_store__instantiate( + self, + module, + language_name, + &dylink_info, + &instance, + &language_address, + &wasm_error->message + )) { + wasm_error->kind = TSWasmErrorKindInstantiate; + goto error; + } + + // Copy all of the static data out of the language object in wasm memory, + // constructing a native language object. + LanguageInWasmMemory wasm_language; + wasmtime_context_t *context = wasmtime_store_context(self->store); + const uint8_t *memory = wasmtime_memory_data(context, &self->memory); + memcpy(&wasm_language, &memory[language_address], sizeof(LanguageInWasmMemory)); + + if (wasm_language.version < LANGUAGE_VERSION_USABLE_VIA_WASM) { + wasm_error->kind = TSWasmErrorKindInstantiate; + format(&wasm_error->message, "language version %u is too old for wasm", wasm_language.version); + goto error; + } + + int32_t addresses[] = { + wasm_language.alias_map, + wasm_language.alias_sequences, + wasm_language.field_map_entries, + wasm_language.field_map_slices, + wasm_language.field_names, + wasm_language.keyword_lex_fn, + wasm_language.lex_fn, + wasm_language.lex_modes, + wasm_language.parse_actions, + wasm_language.parse_table, + wasm_language.primary_state_ids, + wasm_language.primary_state_ids, + wasm_language.public_symbol_map, + wasm_language.small_parse_table, + wasm_language.small_parse_table_map, + wasm_language.symbol_metadata, + wasm_language.symbol_metadata, + wasm_language.symbol_names, + wasm_language.external_token_count > 0 ? wasm_language.external_scanner.states : 0, + wasm_language.external_token_count > 0 ? wasm_language.external_scanner.symbol_map : 0, + wasm_language.external_token_count > 0 ? wasm_language.external_scanner.create : 0, + wasm_language.external_token_count > 0 ? wasm_language.external_scanner.destroy : 0, + wasm_language.external_token_count > 0 ? wasm_language.external_scanner.scan : 0, + wasm_language.external_token_count > 0 ? wasm_language.external_scanner.serialize : 0, + wasm_language.external_token_count > 0 ? wasm_language.external_scanner.deserialize : 0, + language_address, + self->current_memory_offset, + }; + uint32_t address_count = array_len(addresses); + + TSLanguage *language = ts_calloc(1, sizeof(TSLanguage)); + StringData symbol_name_buffer = array_new(); + StringData field_name_buffer = array_new(); + + *language = (TSLanguage) { + .version = wasm_language.version, + .symbol_count = wasm_language.symbol_count, + .alias_count = wasm_language.alias_count, + .token_count = wasm_language.token_count, + .external_token_count = wasm_language.external_token_count, + .state_count = wasm_language.state_count, + .large_state_count = wasm_language.large_state_count, + .production_id_count = wasm_language.production_id_count, + .field_count = wasm_language.field_count, + .max_alias_sequence_length = wasm_language.max_alias_sequence_length, + .keyword_capture_token = wasm_language.keyword_capture_token, + .parse_table = copy( + &memory[wasm_language.parse_table], + wasm_language.large_state_count * wasm_language.symbol_count * sizeof(uint16_t) + ), + .parse_actions = copy_unsized_static_array( + memory, + wasm_language.parse_actions, + addresses, + address_count + ), + .symbol_names = copy_strings( + memory, + wasm_language.symbol_names, + wasm_language.symbol_count + wasm_language.alias_count, + &symbol_name_buffer + ), + .symbol_metadata = copy( + &memory[wasm_language.symbol_metadata], + (wasm_language.symbol_count + wasm_language.alias_count) * sizeof(TSSymbolMetadata) + ), + .public_symbol_map = copy( + &memory[wasm_language.public_symbol_map], + (wasm_language.symbol_count + wasm_language.alias_count) * sizeof(TSSymbol) + ), + .lex_modes = copy( + &memory[wasm_language.lex_modes], + wasm_language.state_count * sizeof(TSLexMode) + ), + }; + + if (language->field_count > 0 && language->production_id_count > 0) { + language->field_map_slices = copy( + &memory[wasm_language.field_map_slices], + wasm_language.production_id_count * sizeof(TSFieldMapSlice) + ); + + // Determine the number of field map entries by finding the greatest index + // in any of the slices. + uint32_t field_map_entry_count = 0; + for (uint32_t i = 0; i < wasm_language.production_id_count; i++) { + TSFieldMapSlice slice = language->field_map_slices[i]; + uint32_t slice_end = slice.index + slice.length; + if (slice_end > field_map_entry_count) { + field_map_entry_count = slice_end; + } + } + + language->field_map_entries = copy( + &memory[wasm_language.field_map_entries], + field_map_entry_count * sizeof(TSFieldMapEntry) + ); + language->field_names = copy_strings( + memory, + wasm_language.field_names, + wasm_language.field_count + 1, + &field_name_buffer + ); + } + + if (language->max_alias_sequence_length > 0 && language->production_id_count > 0) { + // The alias map contains symbols, alias counts, and aliases, terminated by a null symbol. + int32_t alias_map_size = 0; + for (;;) { + TSSymbol symbol; + memcpy(&symbol, &memory[wasm_language.alias_map + alias_map_size], sizeof(symbol)); + alias_map_size += sizeof(TSSymbol); + if (symbol == 0) break; + uint16_t value_count; + memcpy(&value_count, &memory[wasm_language.alias_map + alias_map_size], sizeof(value_count)); + alias_map_size += value_count * sizeof(TSSymbol); + } + language->alias_map = copy( + &memory[wasm_language.alias_map], + alias_map_size * sizeof(TSSymbol) + ); + language->alias_sequences = copy( + &memory[wasm_language.alias_sequences], + wasm_language.production_id_count * wasm_language.max_alias_sequence_length * sizeof(TSSymbol) + ); + } + + if (language->state_count > language->large_state_count) { + uint32_t small_state_count = wasm_language.state_count - wasm_language.large_state_count; + language->small_parse_table_map = copy( + &memory[wasm_language.small_parse_table_map], + small_state_count * sizeof(uint32_t) + ); + language->small_parse_table = copy_unsized_static_array( + memory, + wasm_language.small_parse_table, + addresses, + address_count + ); + } + + if (language->version >= LANGUAGE_VERSION_WITH_PRIMARY_STATES) { + language->primary_state_ids = copy( + &memory[wasm_language.primary_state_ids], + wasm_language.state_count * sizeof(TSStateId) + ); + } + + if (language->external_token_count > 0) { + language->external_scanner.symbol_map = copy( + &memory[wasm_language.external_scanner.symbol_map], + wasm_language.external_token_count * sizeof(TSSymbol) + ); + language->external_scanner.states = (void *)(uintptr_t)wasm_language.external_scanner.states; + } + + unsigned name_len = strlen(language_name); + char *name = ts_malloc(name_len + 1); + memcpy(name, language_name, name_len); + name[name_len] = '\0'; + + LanguageWasmModule *language_module = ts_malloc(sizeof(LanguageWasmModule)); + *language_module = (LanguageWasmModule) { + .language_id = language_id_new(), + .module = module, + .name = name, + .symbol_name_buffer = symbol_name_buffer.contents, + .field_name_buffer = field_name_buffer.contents, + .dylink_info = dylink_info, + .ref_count = 1, + }; + + // The lex functions are not used for wasm languages. Use those two fields + // to mark this language as WASM-based and to store the language's + // WASM-specific data. + language->lex_fn = ts_wasm_store__sentinel_lex_fn; + language->keyword_lex_fn = (void *)language_module; + + // Clear out any instances of languages that have been deleted. + for (unsigned i = 0; i < self->language_instances.size; i++) { + WasmLanguageId *id = self->language_instances.contents[i].language_id; + if (id->is_language_deleted) { + language_id_delete(id); + array_erase(&self->language_instances, i); + i--; + } + } + + // Store this store's instance of this language module. + array_push(&self->language_instances, ((LanguageWasmInstance) { + .language_id = language_id_clone(language_module->language_id), + .instance = instance, + .external_states_address = wasm_language.external_scanner.states, + .lex_main_fn_index = wasm_language.lex_fn, + .lex_keyword_fn_index = wasm_language.keyword_lex_fn, + .scanner_create_fn_index = wasm_language.external_scanner.create, + .scanner_destroy_fn_index = wasm_language.external_scanner.destroy, + .scanner_serialize_fn_index = wasm_language.external_scanner.serialize, + .scanner_deserialize_fn_index = wasm_language.external_scanner.deserialize, + .scanner_scan_fn_index = wasm_language.external_scanner.scan, + })); + + return language; + +error: + if (module) wasmtime_module_delete(module); + return NULL; +} + +bool ts_wasm_store_add_language( + TSWasmStore *self, + const TSLanguage *language, + uint32_t *index +) { + wasmtime_context_t *context = wasmtime_store_context(self->store); + const LanguageWasmModule *language_module = (void *)language->keyword_lex_fn; + + // Search for this store's instance of the language module. Also clear out any + // instances of languages that have been deleted. + bool exists = false; + for (unsigned i = 0; i < self->language_instances.size; i++) { + WasmLanguageId *id = self->language_instances.contents[i].language_id; + if (id->is_language_deleted) { + language_id_delete(id); + array_erase(&self->language_instances, i); + i--; + } else if (id == language_module->language_id) { + exists = true; + *index = i; + } + } + + // If the language module has not been instantiated in this store, then add + // it to this store. + if (!exists) { + *index = self->language_instances.size; + char *message; + wasmtime_instance_t instance; + int32_t language_address; + if (!ts_wasm_store__instantiate( + self, + language_module->module, + language_module->name, + &language_module->dylink_info, + &instance, + &language_address, + &message + )) { + ts_free(message); + return false; + } + + LanguageInWasmMemory wasm_language; + const uint8_t *memory = wasmtime_memory_data(context, &self->memory); + memcpy(&wasm_language, &memory[language_address], sizeof(LanguageInWasmMemory)); + array_push(&self->language_instances, ((LanguageWasmInstance) { + .language_id = language_id_clone(language_module->language_id), + .instance = instance, + .external_states_address = wasm_language.external_scanner.states, + .lex_main_fn_index = wasm_language.lex_fn, + .lex_keyword_fn_index = wasm_language.keyword_lex_fn, + .scanner_create_fn_index = wasm_language.external_scanner.create, + .scanner_destroy_fn_index = wasm_language.external_scanner.destroy, + .scanner_serialize_fn_index = wasm_language.external_scanner.serialize, + .scanner_deserialize_fn_index = wasm_language.external_scanner.deserialize, + .scanner_scan_fn_index = wasm_language.external_scanner.scan, + })); + } + + return true; +} + +void ts_wasm_store_reset_heap(TSWasmStore *self) { + wasmtime_context_t *context = wasmtime_store_context(self->store); + wasmtime_func_t func = { + self->function_table.store_id, + self->builtin_fn_indices.reset_heap + }; + wasm_trap_t *trap = NULL; + wasmtime_val_t args[1] = { + {.of.i32 = ts_wasm_store__heap_address(self), .kind = WASMTIME_I32}, + }; + + wasmtime_error_t *error = wasmtime_func_call(context, &func, args, 1, NULL, 0, &trap); + assert(!error); + assert(!trap); +} + +bool ts_wasm_store_start(TSWasmStore *self, TSLexer *lexer, const TSLanguage *language) { + uint32_t instance_index; + if (!ts_wasm_store_add_language(self, language, &instance_index)) return false; + self->current_lexer = lexer; + self->current_instance = &self->language_instances.contents[instance_index]; + self->has_error = false; + ts_wasm_store_reset_heap(self); + return true; +} + +void ts_wasm_store_reset(TSWasmStore *self) { + self->current_lexer = NULL; + self->current_instance = NULL; + self->has_error = false; + ts_wasm_store_reset_heap(self); +} + +static void ts_wasm_store__call( + TSWasmStore *self, + int32_t function_index, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + wasmtime_context_t *context = wasmtime_store_context(self->store); + wasmtime_val_t value; + bool succeeded = wasmtime_table_get(context, &self->function_table, function_index, &value); + assert(succeeded); + assert(value.kind == WASMTIME_FUNCREF); + wasmtime_func_t func = value.of.funcref; + + wasm_trap_t *trap = NULL; + wasmtime_error_t *error = wasmtime_func_call_unchecked(context, &func, args_and_results, args_and_results_len, &trap); + if (error) { + // wasm_message_t message; + // wasmtime_error_message(error, &message); + // fprintf( + // stderr, + // "error in wasm module: %.*s\n", + // (int)message.size, message.data + // ); + wasmtime_error_delete(error); + self->has_error = true; + } else if (trap) { + // wasm_message_t message; + // wasm_trap_message(trap, &message); + // fprintf( + // stderr, + // "trap in wasm module: %.*s\n", + // (int)message.size, message.data + // ); + wasm_trap_delete(trap); + self->has_error = true; + } +} + +static bool ts_wasm_store__call_lex_function(TSWasmStore *self, unsigned function_index, TSStateId state) { + wasmtime_context_t *context = wasmtime_store_context(self->store); + uint8_t *memory_data = wasmtime_memory_data(context, &self->memory); + memcpy( + &memory_data[self->lexer_address], + &self->current_lexer->lookahead, + sizeof(self->current_lexer->lookahead) + ); + + wasmtime_val_raw_t args[2] = { + {.i32 = self->lexer_address}, + {.i32 = state}, + }; + ts_wasm_store__call(self, function_index, args, 2); + if (self->has_error) return false; + bool result = args[0].i32; + + memcpy( + &self->current_lexer->lookahead, + &memory_data[self->lexer_address], + sizeof(self->current_lexer->lookahead) + sizeof(self->current_lexer->result_symbol) + ); + return result; +} + +bool ts_wasm_store_call_lex_main(TSWasmStore *self, TSStateId state) { + return ts_wasm_store__call_lex_function( + self, + self->current_instance->lex_main_fn_index, + state + ); +} + +bool ts_wasm_store_call_lex_keyword(TSWasmStore *self, TSStateId state) { + return ts_wasm_store__call_lex_function( + self, + self->current_instance->lex_keyword_fn_index, + state + ); +} + +uint32_t ts_wasm_store_call_scanner_create(TSWasmStore *self) { + wasmtime_val_raw_t args[1] = {{.i32 = 0}}; + ts_wasm_store__call(self, self->current_instance->scanner_create_fn_index, args, 1); + if (self->has_error) return 0; + return args[0].i32; +} + +void ts_wasm_store_call_scanner_destroy(TSWasmStore *self, uint32_t scanner_address) { + if (self->current_instance) { + wasmtime_val_raw_t args[1] = {{.i32 = scanner_address}}; + ts_wasm_store__call(self, self->current_instance->scanner_destroy_fn_index, args, 1); + } +} + +bool ts_wasm_store_call_scanner_scan( + TSWasmStore *self, + uint32_t scanner_address, + uint32_t valid_tokens_ix +) { + wasmtime_context_t *context = wasmtime_store_context(self->store); + uint8_t *memory_data = wasmtime_memory_data(context, &self->memory); + + memcpy( + &memory_data[self->lexer_address], + &self->current_lexer->lookahead, + sizeof(self->current_lexer->lookahead) + ); + + uint32_t valid_tokens_address = + self->current_instance->external_states_address + + (valid_tokens_ix * sizeof(bool)); + wasmtime_val_raw_t args[3] = { + {.i32 = scanner_address}, + {.i32 = self->lexer_address}, + {.i32 = valid_tokens_address} + }; + ts_wasm_store__call(self, self->current_instance->scanner_scan_fn_index, args, 3); + if (self->has_error) return false; + + memcpy( + &self->current_lexer->lookahead, + &memory_data[self->lexer_address], + sizeof(self->current_lexer->lookahead) + sizeof(self->current_lexer->result_symbol) + ); + return args[0].i32; +} + +uint32_t ts_wasm_store_call_scanner_serialize( + TSWasmStore *self, + uint32_t scanner_address, + char *buffer +) { + wasmtime_context_t *context = wasmtime_store_context(self->store); + uint8_t *memory_data = wasmtime_memory_data(context, &self->memory); + uint32_t serialization_buffer_address = ts_wasm_store__serialization_buffer_address(self); + + wasmtime_val_raw_t args[2] = { + {.i32 = scanner_address}, + {.i32 = serialization_buffer_address}, + }; + ts_wasm_store__call(self, self->current_instance->scanner_serialize_fn_index, args, 2); + if (self->has_error) return 0; + + uint32_t length = args[0].i32; + if (length > TREE_SITTER_SERIALIZATION_BUFFER_SIZE) { + self->has_error = true; + return 0; + } + + if (length > 0) { + memcpy( + ((Lexer *)self->current_lexer)->debug_buffer, + &memory_data[serialization_buffer_address], + length + ); + } + return length; +} + +void ts_wasm_store_call_scanner_deserialize( + TSWasmStore *self, + uint32_t scanner_address, + const char *buffer, + unsigned length +) { + wasmtime_context_t *context = wasmtime_store_context(self->store); + uint8_t *memory_data = wasmtime_memory_data(context, &self->memory); + uint32_t serialization_buffer_address = ts_wasm_store__serialization_buffer_address(self); + + if (length > 0) { + memcpy( + &memory_data[serialization_buffer_address], + buffer, + length + ); + } + + wasmtime_val_raw_t args[3] = { + {.i32 = scanner_address}, + {.i32 = serialization_buffer_address}, + {.i32 = length}, + }; + ts_wasm_store__call(self, self->current_instance->scanner_deserialize_fn_index, args, 3); +} + +bool ts_wasm_store_has_error(const TSWasmStore *self) { + return self->has_error; +} + +bool ts_language_is_wasm(const TSLanguage *self) { + return self->lex_fn == ts_wasm_store__sentinel_lex_fn; +} + +static inline LanguageWasmModule *ts_language__wasm_module(const TSLanguage *self) { + return (LanguageWasmModule *)self->keyword_lex_fn; +} + +void ts_wasm_language_retain(const TSLanguage *self) { + LanguageWasmModule *module = ts_language__wasm_module(self); + assert(module->ref_count > 0); + atomic_inc(&module->ref_count); +} + +void ts_wasm_language_release(const TSLanguage *self) { + LanguageWasmModule *module = ts_language__wasm_module(self); + assert(module->ref_count > 0); + if (atomic_dec(&module->ref_count) == 0) { + // Update the language id to reflect that the language is deleted. This allows any wasm stores + // that hold wasm instances for this language to delete those instances. + atomic_inc(&module->language_id->is_language_deleted); + language_id_delete(module->language_id); + + ts_free((void *)module->field_name_buffer); + ts_free((void *)module->symbol_name_buffer); + ts_free((void *)module->name); + wasmtime_module_delete(module->module); + ts_free(module); + + ts_free((void *)self->alias_map); + ts_free((void *)self->alias_sequences); + ts_free((void *)self->external_scanner.symbol_map); + ts_free((void *)self->field_map_entries); + ts_free((void *)self->field_map_slices); + ts_free((void *)self->field_names); + ts_free((void *)self->lex_modes); + ts_free((void *)self->parse_actions); + ts_free((void *)self->parse_table); + ts_free((void *)self->primary_state_ids); + ts_free((void *)self->public_symbol_map); + ts_free((void *)self->small_parse_table); + ts_free((void *)self->small_parse_table_map); + ts_free((void *)self->symbol_metadata); + ts_free((void *)self->symbol_names); + ts_free((void *)self); + } +} + +#else + +// If the WASM feature is not enabled, define dummy versions of all of the +// wasm-related functions. + +void ts_wasm_store_delete(TSWasmStore *self) { + (void)self; +} + +bool ts_wasm_store_start( + TSWasmStore *self, + TSLexer *lexer, + const TSLanguage *language +) { + (void)self; + (void)lexer; + (void)language; + return false; +} + +void ts_wasm_store_reset(TSWasmStore *self) { + (void)self; +} + +bool ts_wasm_store_call_lex_main(TSWasmStore *self, TSStateId state) { + (void)self; + (void)state; + return false; +} + +bool ts_wasm_store_call_lex_keyword(TSWasmStore *self, TSStateId state) { + (void)self; + (void)state; + return false; +} + +uint32_t ts_wasm_store_call_scanner_create(TSWasmStore *self) { + (void)self; + return 0; +} + +void ts_wasm_store_call_scanner_destroy( + TSWasmStore *self, + uint32_t scanner_address +) { + (void)self; + (void)scanner_address; +} + +bool ts_wasm_store_call_scanner_scan( + TSWasmStore *self, + uint32_t scanner_address, + uint32_t valid_tokens_ix +) { + (void)self; + (void)scanner_address; + (void)valid_tokens_ix; + return false; +} + +uint32_t ts_wasm_store_call_scanner_serialize( + TSWasmStore *self, + uint32_t scanner_address, + char *buffer +) { + (void)self; + (void)scanner_address; + (void)buffer; + return 0; +} + +void ts_wasm_store_call_scanner_deserialize( + TSWasmStore *self, + uint32_t scanner_address, + const char *buffer, + unsigned length +) { + (void)self; + (void)scanner_address; + (void)buffer; + (void)length; +} + +bool ts_wasm_store_has_error(const TSWasmStore *self) { + (void)self; + return false; +} + +bool ts_language_is_wasm(const TSLanguage *self) { + (void)self; + return false; +} + +void ts_wasm_language_retain(const TSLanguage *self) { + (void)self; +} + +void ts_wasm_language_release(const TSLanguage *self) { + (void)self; +} + +#endif diff --git a/parser/nnsrc/wasm_store.h b/parser/nnsrc/wasm_store.h new file mode 100644 index 00000000..1ad2ae57 --- /dev/null +++ b/parser/nnsrc/wasm_store.h @@ -0,0 +1,31 @@ +#ifndef TREE_SITTER_WASM_H_ +#define TREE_SITTER_WASM_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "api.h" +#include "./parser.h" + +bool ts_wasm_store_start(TSWasmStore *, TSLexer *, const TSLanguage *); +void ts_wasm_store_reset(TSWasmStore *); +bool ts_wasm_store_has_error(const TSWasmStore *); + +bool ts_wasm_store_call_lex_main(TSWasmStore *, TSStateId); +bool ts_wasm_store_call_lex_keyword(TSWasmStore *, TSStateId); + +uint32_t ts_wasm_store_call_scanner_create(TSWasmStore *); +void ts_wasm_store_call_scanner_destroy(TSWasmStore *, uint32_t); +bool ts_wasm_store_call_scanner_scan(TSWasmStore *, uint32_t, uint32_t); +uint32_t ts_wasm_store_call_scanner_serialize(TSWasmStore *, uint32_t, char *); +void ts_wasm_store_call_scanner_deserialize(TSWasmStore *, uint32_t, const char *, unsigned); + +void ts_wasm_language_retain(const TSLanguage *); +void ts_wasm_language_release(const TSLanguage *); + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_WASM_H_ diff --git a/parser/static/symbols_metadata/symbols_metadata_1.c b/parser/static/symbols_metadata/symbols_metadata_1.c index 88bc3c06..380863c6 100644 --- a/parser/static/symbols_metadata/symbols_metadata_1.c +++ b/parser/static/symbols_metadata/symbols_metadata_1.c @@ -6,13 +6,13 @@ /* By: maiboyer +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/14 19:17:54 by maiboyer #+# #+# */ -/* Updated: 2024/04/14 19:18:20 by maiboyer ### ########.fr */ +/* Updated: 2024/06/30 17:29:56 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ #include "./symbols_metadata.h" -void symbols_metadata_5(t_symbols_metadata_array *v) +void symbols_metadata_5(t_symbols_metadata_array *v) { v->a[sym_heredoc_start] = sym_metadata(true, true, false); v->a[sym_simple_heredoc_body] = sym_metadata(true, true, false); @@ -37,7 +37,7 @@ void symbols_metadata_5(t_symbols_metadata_array *v) symbols_metadata_6(v); } -void symbols_metadata_6(t_symbols_metadata_array *v) +void symbols_metadata_6(t_symbols_metadata_array *v) { v->a[sym_for_statement] = sym_metadata(true, true, false); v->a[sym_while_statement] = sym_metadata(true, true, false); @@ -62,7 +62,7 @@ void symbols_metadata_6(t_symbols_metadata_array *v) symbols_metadata_7(v); } -void symbols_metadata_7(t_symbols_metadata_array *v) +void symbols_metadata_7(t_symbols_metadata_array *v) { v->a[sym_heredoc_redirect] = sym_metadata(true, true, false); v->a[sym__heredoc_pipeline] = sym_metadata(true, true, false); @@ -78,8 +78,7 @@ void symbols_metadata_7(t_symbols_metadata_array *v) v->a[sym_arithmetic_ternary_expression] = sym_metadata(true, true, false); v->a[sym_arithmetic_unary_expression] = sym_metadata(true, true, false); v->a[sym_arithmetic_postfix_expression] = sym_metadata(true, true, false); - v->a[sym_arithmetic_parenthesized_expression] \ - = sym_metadata(true, true, false); + v->a[sym_arithmetic_parenthesized_expression] = sym_metadata(true, true, false); v->a[sym_concatenation] = sym_metadata(true, true, false); v->a[sym_string] = sym_metadata(true, true, false); v->a[sym_simple_expansion] = sym_metadata(true, true, false); @@ -88,7 +87,7 @@ void symbols_metadata_7(t_symbols_metadata_array *v) symbols_metadata_8(v); } -void symbols_metadata_8(t_symbols_metadata_array *v) +void symbols_metadata_8(t_symbols_metadata_array *v) { v->a[sym_expansion_expression] = sym_metadata(true, true, false); v->a[sym_expansion_regex] = sym_metadata(true, true, false); @@ -97,10 +96,8 @@ void symbols_metadata_8(t_symbols_metadata_array *v) v->a[sym__extglob_blob] = sym_metadata(false, true, false); v->a[sym_terminator] = sym_metadata(true, true, false); v->a[aux_sym__statements_repeat1] = sym_metadata(false, false, false); - v->a[aux_sym_redirected_statement_repeat1] \ - = sym_metadata(false, false, false); - v->a[aux_sym_redirected_statement_repeat2] \ - = sym_metadata(false, false, false); + v->a[aux_sym_redirected_statement_repeat1] = sym_metadata(false, false, false); + v->a[aux_sym_redirected_statement_repeat2] = sym_metadata(false, false, false); v->a[aux_sym_for_statement_repeat1] = sym_metadata(false, false, false); v->a[aux_sym_if_statement_repeat1] = sym_metadata(false, false, false); v->a[aux_sym_case_statement_repeat1] = sym_metadata(false, false, false); @@ -109,20 +106,18 @@ void symbols_metadata_8(t_symbols_metadata_array *v) v->a[aux_sym_pipeline_repeat1] = sym_metadata(false, false, false); v->a[aux_sym_command_repeat1] = sym_metadata(false, false, false); v->a[aux_sym_command_repeat2] = sym_metadata(false, false, false); - v->a[aux_sym__variable_assignments_repeat1] \ - = sym_metadata(false, false, false); + v->a[aux_sym__variable_assignments_repeat1] = sym_metadata(false, false, false); v->a[aux_sym_heredoc_body_repeat1] = sym_metadata(false, false, false); v->a[aux_sym_concatenation_repeat1] = sym_metadata(false, false, false); symbols_metadata_9(v); } -void symbols_metadata_9(t_symbols_metadata_array *v) +void symbols_metadata_9(t_symbols_metadata_array *v) { v->a[aux_sym_string_repeat1] = sym_metadata(false, false, false); v->a[aux_sym_expansion_regex_repeat1] = sym_metadata(false, false, false); - v->a[aux_sym__concatenation_in_expansion_repeat1] \ - = sym_metadata(false, false, false); - v->a[alias_sym_statements] = sym_metadata(false, true, false); + v->a[aux_sym__concatenation_in_expansion_repeat1] = sym_metadata(false, false, false); + v->a[alias_sym_statements] = sym_metadata(true, true, false); } /* EOF symbols_metadata_1.c */ diff --git a/parser/static/types/type_small_parse_table.h b/parser/static/types/type_small_parse_table.h index 98c5aef5..20052630 100644 --- a/parser/static/types/type_small_parse_table.h +++ b/parser/static/types/type_small_parse_table.h @@ -6,7 +6,7 @@ /* By: maiboyer +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/14 19:17:54 by maiboyer #+# #+# */ -/* Updated: 2024/04/14 19:18:20 by maiboyer ### ########.fr */ +/* Updated: 2024/06/30 17:22:33 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,7 +21,7 @@ typedef struct s_small_parse_table_array { - uint16_t a[96672]; + uint16_t a[96671]; } t_small_parse_table_array; #endif // TYPE_SMALL_PARSE_TABLE_H diff --git a/sources/main.c b/sources/main.c index 6217774b..608fb038 100644 --- a/sources/main.c +++ b/sources/main.c @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/28 14:40:38 by rparodi #+# #+# */ -/* Updated: 2024/06/21 13:53:27 by maiboyer ### ########.fr */ +/* Updated: 2024/06/30 16:44:34 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ @@ -139,14 +139,14 @@ void ft_take_args(t_utils *shcat) } } -t_language *tree_sitter_bash(void); +t_language *tree_sitter_sh(void); t_parser create_myparser(void) { t_language *lang; t_first_parser *parser; - lang = tree_sitter_bash(); + lang = tree_sitter_sh(); parser = ts_parser_new(); ts_parser_set_language(parser, lang); return ((t_parser){.parser = parser});