(command.CommandList children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id:Id.Op_Less left:{($ Id.VSub_Pound '$#')} right:{(2)}) ) terminator: (Token id:Id.Op_Semi val:';' span_id:21) ) ] action: [ (C {(echo)} {(DQ ('Usage:'))}) (C {(echo)} {(DQ ('\t') ($ Id.VSub_Number '$0') (' [vmlinux] [base path] [modules path]'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:42) arg_word: {(1)} ) ] spids: [10 23] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:vmlinux) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [49] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:basepath) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [52] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:modpath) op: assign_op.Equal rhs: {($ Id.VSub_Number '$3')} spids: [55] ) ] ) (C {(declare)} {(-A)} {(cache)}) (C {(declare)} {(-A)} {(modcache)}) (command.ShFunction name: parse_symbol body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName '$module')} right: {(DQ )} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:112) ) ] action: [ (C {(local)} {(Id.Lit_VarLike 'objfile=') ($ Id.VSub_DollarName '$vmlinux')}) ] spids: [99 114] ) (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:modcache span_id:129) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$module')} ) ) suffix_op: (suffix_op.Unary op_id: Id.VTest_Plus arg_word: {(isset)} ) ) ) } right: {(DQ (isset))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:145) ) ] action: [ (C {(local)} {(Id.Lit_VarLike 'objfile=') (braced_var_sub token: (Token id:Id.VSub_Name val:modcache span_id:154) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$module')}) ) ) } ) ] spids: [123 147] ) ] else_action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName '$modpath')} right: {(DQ )} ) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:177) ) ] ) (C {(local)} {(Id.Lit_VarLike 'objfile=') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:183) command_list: (command.CommandList children: [ (C {(find)} {(DQ ($ Id.VSub_DollarName '$modpath'))} {(-name)} {($ Id.VSub_DollarName '$module') (.ko)} {(-print)} {(-quit)} ) ] ) ) } ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName '$objfile')} right: {(DQ )} ) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:214) ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: modcache index: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$module')}) ) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$objfile')} spids: [217] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:symbol) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:symbol span_id:235) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: { (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\(' span_id:237) ) } ) ) } spids: [233] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:symbol) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:symbol span_id:243) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Percent arg_word: { (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\)' span_id:245) ) } ) ) } spids: [241] ) ] ) (C {(local)} {(Id.Lit_VarLike 'name=') (braced_var_sub token: (Token id:Id.VSub_Name val:symbol span_id:258) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{('+*')}) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:cache span_id:283) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Comma left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$module')} ) right: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$name')} ) ) ) suffix_op: (suffix_op.Unary op_id: Id.VTest_Plus arg_word: {(isset)} ) ) ) } right: {(DQ (isset))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:301) ) ] action: [ (C {(local)} {(Id.Lit_VarLike 'base_addr=') (braced_var_sub token: (Token id:Id.VSub_Name val:cache span_id:310) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Comma left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$module')}) right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$name')}) ) ) ) } ) ] spids: [277 303] ) ] else_action: [ (C {(local)} {(Id.Lit_VarLike 'base_addr=') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:325) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(nm)} {(DQ ($ Id.VSub_DollarName '$objfile'))}) (C {(grep)} {(-i)} {(SQ (Token id:Id.Lit_Chars val:' t ' span_id:339))}) (C {(awk)} { (DQ ('/ ') ($ Id.VSub_DollarName '$name') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:349) ) ('/ {print ') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:351)) ('1}') ) } ) (C {(head)} {(-n1)}) ] negated: F ) ] ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: cache index: (arith_expr.Binary op_id: Id.Arith_Comma left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$module')}) right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$name')}) ) ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$base_addr'))} spids: [363] ) ] ) ] ) (C {(local)} {(Id.Lit_VarLike 'expr=') (braced_var_sub token: (Token id:Id.VSub_Name val:symbol span_id:392) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{(Id.Lit_Slash /) ('*')}) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:expr) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:expr span_id:410) suffix_op: (suffix_op.PatSub pat: {($ Id.VSub_DollarName '$name')} replace: {(0x) ($ Id.VSub_DollarName '$base_addr')} replace_mode: Id.Undefined_Tok ) ) } spids: [408] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:expr) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:expr span_id:426) ) ) } spids: [424] ) ] ) (C {(local)} {(Id.Lit_VarLike 'address=') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:434) command_list: (command.CommandList children: [ (C {(printf)} {(DQ ('%x') (Id.Lit_Other '\\') (n))} {(DQ ($ Id.VSub_DollarName '$expr'))} ) ] ) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:cache span_id:464) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Comma left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$module')} ) right: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$address')} ) ) ) suffix_op: (suffix_op.Unary op_id: Id.VTest_Plus arg_word: {(isset)} ) ) ) } right: {(DQ (isset))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:482) ) ] action: [ (C {(local)} {(Id.Lit_VarLike 'code=') (braced_var_sub token: (Token id:Id.VSub_Name val:cache span_id:491) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Comma left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$module')}) right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$address')}) ) ) ) } ) ] spids: [458 484] ) ] else_action: [ (C {(local)} {(Id.Lit_VarLike 'code=') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:506) command_list: (command.CommandList children: [ (C {(addr2line)} {(-i)} {(-e)} {(DQ ($ Id.VSub_DollarName '$objfile'))} {(DQ ($ Id.VSub_DollarName '$address'))} ) ] ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: cache index: (arith_expr.Binary op_id: Id.Arith_Comma left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$module')}) right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$address')}) ) ) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$code')} spids: [523] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName '$code')} right: {(DQ ('??:0'))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:564) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:569) ) ] spids: [551 566] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:code) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:code span_id:582) suffix_op: (suffix_op.PatSub pat: {($ Id.VSub_DollarName '$basepath')} replace: {(DQ )} replace_mode: Id.Lit_Slash ) ) } spids: [580] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:code) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:code span_id:599) suffix_op: (suffix_op.PatSub pat: { (single_quoted left: (Token id:Id.Left_SingleQuoteC val:"$'" span_id:602) tokens: [(Token id:Id.Char_OneChar val:'\\n' span_id:603)] ) } replace: {(SQ (Token id:Id.Lit_Chars val:' ' span_id:607))} replace_mode: Id.Lit_Slash ) ) } spids: [597] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:symbol) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$name') (' (') ($ Id.VSub_DollarName '$code') (')'))} spids: [617] ) ] ) ] ) ) (command.ShFunction name: decode_code body: (command.BraceGroup children: [ (C {(local)} {(Id.Lit_VarLike 'scripts=') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:638) command_list: (command.CommandList children: [ (C {(dirname)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:BASH_SOURCE span_id:645) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)}) ) ) ) } ) ] ) ) } ) (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_Number '$1'))}) (C {($ Id.VSub_DollarName '$scripts') (/decodecode)}) ] negated: F ) ] ) ) (command.ShFunction name: handle_line body: (command.BraceGroup children: [ (C {(local)} {(words)}) (command.Simple words: [{(read)} {(-a)} {(words)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_TLess val:'<<<' span_id:692) fd: -1 arg_word: {(DQ ($ Id.VSub_Number '$1'))} ) ] ) (C {(local)} {(Id.Lit_VarLike 'last=') (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id:Id.VSub_Name val:words span_id:723) prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) } ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } ) (command.ForEach iter_name: i iter_words: [ { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:words span_id:747) prefix_op: (Id.VSub_Bang) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: { (braced_var_sub token: (Token id:Id.VSub_Name val:words span_id:767) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$i')} ) ) ) } right: {(Id.Lit_RegexMeta '\\[') (word_part.EscapedLiteral token: (Token id: Id.Lit_EscapedChar val: '\\<' span_id: 776 ) ) (Id.Lit_Other '(') (Id.Lit_Other '[') (Id.Lit_Other '^') (Id.Lit_Other ']') (Id.Lit_Other ']') (Id.Lit_Other '+') (Id.Lit_Other ')') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\>' span_id:784)) (Id.Lit_RegexMeta '\\]') } ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:788) ) ] action: [ (C {(unset)} {(Id.Lit_ArrayLhsOpen 'words[') ($ Id.VSub_DollarName '$i') (Id.Lit_RBracket ']') } ) ] spids: [762 790] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalAnd left: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (braced_var_sub token: (Token id:Id.VSub_Name val:words span_id:813) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$i')} ) ) ) } right: { (word_part.EscapedLiteral token: (Token id: Id.Lit_EscapedChar val: '\\[' span_id: 821 ) ) } ) right: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (braced_var_sub token: (Token id:Id.VSub_Name val:words span_id:826) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$i')} ) right: (arith_expr.ArithWord w: {(Id.Lit_Digits 1)} ) ) ) ) } right: {(Id.Lit_Other '*') (word_part.EscapedLiteral token: (Token id: Id.Lit_EscapedChar val: '\\]' span_id: 837 ) ) } ) ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:840) ) ] action: [ (C {(unset)} {(Id.Lit_ArrayLhsOpen 'words[') ($ Id.VSub_DollarName '$i') (Id.Lit_RBracket ']') } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: words index: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$i')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) op: assign_op.Equal rhs: { (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 857 ) command_list: (command.CommandList children: [ (C {(printf)} {(DQ ('[%13s') (Id.Lit_Other '\\') (n))} { (DQ (braced_var_sub token: (Token id: Id.VSub_Name val: words span_id: 868 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$i')} ) right: (arith_expr.ArithWord w: {(Id.Lit_Digits 1)} ) ) ) ) ) } ) ] ) ) } spids: [852] ) ] ) ] spids: [808 842] ) ] ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: { (braced_var_sub token: (Token id:Id.VSub_Name val:words span_id:895) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$last')}) ) ) } right: {(Id.Lit_RegexMeta '\\[') (Id.Lit_Other '(') (Id.Lit_Other '[') (Id.Lit_Other '^') (Id.Lit_Other ']') (Id.Lit_Other ']') (Id.Lit_Other '+') (Id.Lit_Other ')') (Id.Lit_RegexMeta '\\]') } ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:914) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:module) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:words span_id:921) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$last')}) ) ) } spids: [919] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:module) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:module span_id:930) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: { (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\[' span_id:932) ) } ) ) } spids: [928] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:module) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:module span_id:938) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Percent arg_word: { (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\]' span_id:940) ) } ) ) } spids: [936] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:symbol) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:words span_id:946) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$last')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) ) } spids: [944] ) ] ) (C {(unset)} {(Id.Lit_ArrayLhsOpen 'words[') ($ Id.VSub_DollarName '$last') (-1) (Id.Lit_RBracket ']') } ) ] spids: [890 916] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:symbol) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:words span_id:972) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$last')}) ) ) } spids: [970] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:module) op: assign_op.Equal rhs: (word.Empty) spids: [979] ) ] ) ] ) (C {(unset)} {(Id.Lit_ArrayLhsOpen 'words[') ($ Id.VSub_DollarName '$last') (Id.Lit_RBracket ']')} ) (C {(parse_symbol)}) (C {(echo)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:words span_id:1008) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } {(DQ ($ Id.VSub_DollarName '$symbol') (' ') ($ Id.VSub_DollarName '$module'))} ) ] ) ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:1024) cond: [ (command.Sentence child: (C {(read)} {(line)}) terminator: (Token id:Id.Op_Semi val:';' span_id:1029) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: {($ Id.VSub_DollarName '$line')} right: {(Id.Lit_RegexMeta '\\[') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\<' span_id:1047) ) (Id.Lit_Other '(') (Id.Lit_Other '[') (Id.Lit_Other '^') (Id.Lit_Other ']') (Id.Lit_Other ']') (Id.Lit_Other '+') (Id.Lit_Other ')') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\>' span_id:1055) ) (Id.Lit_RegexMeta '\\]') } ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1059) ) ] action: [(C {(handle_line)} {(DQ ($ Id.VSub_DollarName '$line'))})] spids: [1038 1061] ) (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName '$line')} right: {(Id.Lit_Other '*') (Code) (Id.Lit_Other ':') (Id.Lit_Other '*')} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1093) ) ] action: [(C {(decode_code)} {(DQ ($ Id.VSub_DollarName '$line'))})] spids: [1079 1095] ) ] else_action: [(C {(echo)} {(DQ ($ Id.VSub_DollarName '$line'))})] ) ] ) ) ] )