(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dashless) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<basename>} {(DQ ($ Id.VSub_Number '$0'))}) (C {<sed>} {<-e>} {(SQ <'s/-/ /'>)}) ] negated: F ) ) } spids: [7] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:USAGE) op: assign_op.Equal rhs: { (DQ <'list [<options>]\n'> <' or: '> ($ Id.VSub_DollarName '$dashless') <' show [<stash>]\n'> <' or: '> ($ Id.VSub_DollarName '$dashless') <' drop [-q|--quiet] [<stash>]\n'> <' or: '> ($ Id.VSub_DollarName '$dashless') <' ( pop | apply ) [--index] [-q|--quiet] [<stash>]\n'> <' or: '> ($ Id.VSub_DollarName '$dashless') <' branch <branchname> [<stash>]\n'> <' or: '> ($ Id.VSub_DollarName '$dashless') <' [save [--patch] [-k|--[no-]keep-index] [-q|--quiet]\n'> <'\t\t [-u|--include-untracked] [-a|--all] [<message>]]\n'> <' or: '> ($ Id.VSub_DollarName '$dashless') <' clear'> ) } spids: [26] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SUBDIRECTORY_OK) op: assign_op.Equal rhs: {<Yes>} spids: [51] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OPTIONS_SPEC) op: assign_op.Equal rhs: (word.Empty) spids: [54] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:START_DIR) op: assign_op.Equal rhs: {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<pwd>}))} spids: [56] ) ] ) (C {<.>} {<git-sh-setup>}) (C {<require_work_tree>}) (C {<cd_to_toplevel>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TMP) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$GIT_DIR') <'/.git-stash.'> ($ Id.VSub_Dollar '$$'))} spids: [70] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TMPindex) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name GIT_INDEX_FILE> suffix_op: (suffix_op.Unary op_id: Id.VTest_Hyphen arg_word: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<rev-parse>} {<--git-path>} {<index>}) ) ) } ) ) <.stash.> ($ Id.VSub_Dollar '$$') } spids: [77] ) ] ) (C {<trap>} {(SQ <'rm -f "$TMP-"* "$TMPindex"'>)} {<0>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ref_stash) op: assign_op.Equal rhs: {<'refs/stash'>} spids: [105] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<git>} {<config>} {<--get-colorbool>} {<color.interactive>}) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:help_color) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<config>} {<--get-color>} {<color.interactive.help>} {(SQ <'red bold'>)} ) ) ) } spids: [123] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:reset_color) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<config>} {<--get-color>} {(SQ )} {<reset>}) ) ) } spids: [141] ) ] ) ] spids: [109 120] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:help_color) op: assign_op.Equal rhs: (word.Empty) spids: [160] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:reset_color) op: assign_op.Equal rhs: (word.Empty) spids: [163] ) ] ) ] ) (command.ShFunction name: no_changes body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {<git>} {<diff-index>} {<--quiet>} {<--cached>} {<HEAD>} {<--ignore-submodules>} {<-->}) (C {<git>} {<diff-files>} {<--quiet>} {<--ignore-submodules>}) (command.Subshell child: (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$untracked'))}) (C {<test>} {<-z>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<untracked_files>}) ) ) } ) ] ) ) ] ) ] ) ) (command.ShFunction name: untracked_files body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:excl_opt) op: assign_op.Equal rhs: {<--exclude-standard>} spids: [237] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {(DQ ($ Id.VSub_DollarName '$untracked'))} {<Id.Lit_Equals '='>} {(DQ <all>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:excl_opt) op: assign_op.Equal rhs: (word.Empty) spids: [255] ) ] ) ] ) (C {<git>} {<ls-files>} {<-o>} {<-z>} {($ Id.VSub_DollarName '$excl_opt')}) ] ) ) (command.ShFunction name: clear_stash body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (C {<test>} {($ Id.VSub_Pound '$#')} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<0>}) ] ) action: [ (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'git stash clear with parameters is unimplemented'>)}) ) ) } ) ] spids: [279 291] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:current) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<rev-parse>} {<--verify>} {<--quiet>} {($ Id.VSub_DollarName '$ref_stash')} ) ) } spids: [312] ) ] ) ] ) action: [ (C {<git>} {<update-ref>} {<-d>} {($ Id.VSub_DollarName '$ref_stash')} {($ Id.VSub_DollarName '$current')} ) ] spids: [310 326] ) ] ) ] ) ) (command.ShFunction name: create_stash body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:stash_msg) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [353] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:untracked) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [359] ) ] ) (C {<git>} {<update-index>} {<-q>} {<--refresh>}) (command.If arms: [ (if_arm cond: (condition.Shell commands:[(C {<no_changes>})]) action: [(command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})] spids: [375 380] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:b_commit) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<rev-parse>} {<--verify>} {<HEAD>}) ) } spids: [398] ) ] ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:head) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<rev-list>} {<--oneline>} {<-n>} {<1>} {<HEAD>} {<-->}) ) } spids: [413] ) ] ) ] spids: [396 410] ) ] else_action: [ (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'You do not have the initial commit yet'>)}) ) ) } ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:branch) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<symbolic-ref>} {<-q>} {<HEAD>}) ) } spids: [453] ) ] ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:branch) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name branch> suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: {<refs> <Id.Lit_Slash '/'> <heads> <Id.Lit_Slash '/'>} ) ) } spids: [468] ) ] ) ] spids: [451 465] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:branch) op: assign_op.Equal rhs: {(SQ <'(no branch)'>)} spids: [482] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:msg) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<printf>} {(SQ <'%s: %s'>)} {(DQ ($ Id.VSub_DollarName '$branch'))} {(DQ ($ Id.VSub_DollarName '$head'))} ) ) } spids: [491] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:i_tree) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<write-tree>}) ) } spids: [514] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:i_commit) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<printf>} {(SQ <'index on %s\\n'>)} {(DQ ($ Id.VSub_DollarName '$msg'))} ) (C {<git>} {<commit-tree>} {($ Id.VSub_DollarName '$i_tree')} {<-p>} {($ Id.VSub_DollarName '$b_commit')} ) ] negated: F ) ) } spids: [524] ) ] ) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'Cannot save the current index state'>)}) ) ) } ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [(C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$untracked'))})] ) action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:u_commit) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<untracked_files>}) (command.Subshell child: (command.AndOr ops: [ Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp ] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_INDEX_FILE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$TMPindex'))} spids: [600] ) ] ) (C {<export>} {<GIT_INDEX_FILE>}) (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$TMPindex'))} ) (C {<git>} {<update-index>} {<-z>} {<--add>} {<--remove>} {<--stdin>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:u_tree) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<write-tree>}) ) } spids: [641] ) ] ) (command.Pipeline children: [ (C {<printf>} {(SQ <'untracked files on %s\\n'>)} {(DQ ($ Id.VSub_DollarName '$msg'))} ) (C {<git>} {<commit-tree>} {($ Id.VSub_DollarName '$u_tree')} ) ] negated: F ) (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$TMPindex'))} ) ] ) ) ] negated: F ) ) } spids: [589] ) ] ) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'Cannot save the untracked files'>)}) ) ) } ) ] ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:untracked_commit_option) op: assign_op.Equal rhs: {(DQ <'-p '> ($ Id.VSub_DollarName '$u_commit'))} spids: [701] ) ] ) terminator: <Id.Op_Semi _> ) ] spids: [567 578] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:untracked_commit_option) op: assign_op.Equal rhs: (word.Empty) spids: [712] ) ] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [(C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$patch_mode'))})] ) action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:w_tree) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Subshell child: (command.AndOr ops: [ Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp ] children: [ (C {<git>} {<read-tree>} {<--index-output> <Id.Lit_Equals '='> (DQ ($ Id.VSub_DollarName '$TMPindex')) } {<-m>} {($ Id.VSub_DollarName '$i_tree')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_INDEX_FILE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$TMPindex'))} spids: [761] ) ] ) (C {<export>} {<GIT_INDEX_FILE>}) (command.Simple words: [ {<git>} {<diff>} {<--name-only>} {<-z>} {<HEAD>} {<-->} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: { (DQ ($ Id.VSub_DollarName '$TMP') <-stagenames> ) } ) ] do_fork: T ) (command.Simple words: [ {<git>} {<update-index>} {<-z>} {<--add>} {<--remove>} {<--stdin>} ] redirects: [ (redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: { (DQ ($ Id.VSub_DollarName '$TMP') <-stagenames> ) } ) ] do_fork: T ) (C {<git>} {<write-tree>}) (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$TMPindex'))}) ] ) ) ) } spids: [738] ) ] ) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'Cannot save the current worktree state'>)}) ) ) } ) ] ) ] spids: [719 730] ) ] else_action: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe] children: [ (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$TMP') <-index>)}) (command.Simple words: [{<git>} {<read-tree>} {<HEAD>}] more_env: [ (env_pair name: GIT_INDEX_FILE val: {(DQ ($ Id.VSub_DollarName '$TMP') <-index>)} spids: [871] ) ] do_fork: T ) (command.Simple words: [{<git>} {<add--interactive>} {<--patch> <Id.Lit_Equals '='> <stash>} {<-->}] more_env: [ (env_pair name: GIT_INDEX_FILE val: {(DQ ($ Id.VSub_DollarName '$TMP') <-index>)} spids: [891] ) ] do_fork: T ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:w_tree) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Simple words: [{<git>} {<write-tree>}] more_env: [ (env_pair name: GIT_INDEX_FILE val: {(DQ ($ Id.VSub_DollarName '$TMP') <-index>)} spids: [919] ) ] do_fork: T ) ) } spids: [917] ) ] ) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'Cannot save the current worktree state'>)}) ) ) } ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (command.Simple words: [ {<git>} {<diff-tree>} {<-p>} {<HEAD>} {($ Id.VSub_DollarName '$w_tree')} {<-->} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$TMP') <-patch>)} ) ] do_fork: T ) (C {<test>} {<-s>} {(DQ ($ Id.VSub_DollarName '$TMP') <-patch>)}) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'No changes selected'>)}) ) ) } ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$TMP') <-index>)}) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'Cannot remove temporary index (can\'t happen)'>)}) ) ) } ) ] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [(C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$stash_msg'))})] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:stash_msg) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<printf>} {(SQ <'WIP on %s'>)} {(DQ ($ Id.VSub_DollarName '$msg'))}) ) } spids: [1042] ) ] ) ] spids: [1028 1039] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:stash_msg) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<printf>} {(SQ <'On %s: %s'>)} {(DQ ($ Id.VSub_DollarName '$branch'))} {(DQ ($ Id.VSub_DollarName '$stash_msg'))} ) ) } spids: [1059] ) ] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:w_commit) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<printf>} {(SQ <'%s\\n'>)} {(DQ ($ Id.VSub_DollarName '$stash_msg'))} ) (C {<git>} {<commit-tree>} {($ Id.VSub_DollarName '$w_tree')} {<-p>} {($ Id.VSub_DollarName '$b_commit')} {<-p>} {($ Id.VSub_DollarName '$i_commit')} {($ Id.VSub_DollarName '$untracked_commit_option')} ) ] negated: F ) ) } spids: [1080] ) ] ) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'Cannot record working tree state'>)}) ) ) } ) ] ) ] ) ) (command.ShFunction name: store_stash body: (BraceGroup children: [ (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (C {<test>} {($ Id.VSub_Pound '$#')} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<0>}) ] ) body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [{<-m>} {<--message>}] action: [ (C {<shift>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:stash_msg) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [1171] ) ] ) ] spids: [1162 1165 1177 -1] ) (case_arm pat_list: [{<-q>} {<--quiet>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:quiet) op: assign_op.Equal rhs: {<t>} spids: [1186] ) ] ) ] spids: [1180 1183 1190 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [(command.ControlFlow token:<Id.ControlFlow_Break break>)] spids: [1193 1194 1200 -1] ) ] ) (C {<shift>}) ] ) ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<test>} {($ Id.VSub_Pound '$#')} {<Id.Lit_Equals '='>} {<1>}) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<eval_gettext>} { (DQ (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) ($ Id.VSub_DollarName '$dashless') <' store'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' requires one <commit> argument'> ) } ) ) ) } ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:w_commit) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [1241] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [(C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$stash_msg'))})] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:stash_msg) op: assign_op.Equal rhs: { (DQ <'Created via '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) <'git stash store'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <.> ) } spids: [1261] ) ] ) ] spids: [1247 1258] ) ] ) (C {<git>} {<update-ref>} {<--create-reflog>} {<-m>} {(DQ ($ Id.VSub_DollarName '$stash_msg'))} {($ Id.VSub_DollarName '$ref_stash')} {($ Id.VSub_DollarName '$w_commit')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ret) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [1292] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {<test>} {($ Id.VSub_DollarName '$ret')} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<0>}) (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$quiet'))}) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<eval_gettext>} { (DQ <'Cannot update '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ) <'ref_stash with '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <w_commit> ) } ) ) ) } ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName '$ret')} ) ] ) ) (command.ShFunction name: save_stash body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:keep_index) op: assign_op.Equal rhs: (word.Empty) spids: [1350] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:patch_mode) op: assign_op.Equal rhs: (word.Empty) spids: [1353] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:untracked) op: assign_op.Equal rhs: (word.Empty) spids: [1356] ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (C {<test>} {($ Id.VSub_Pound '$#')} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<0>}) ] ) body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [{<-k>} {<--keep-index>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:keep_index) op: assign_op.Equal rhs: {<t>} spids: [1389] ) ] ) ] spids: [1383 1386 1393 -1] ) (case_arm pat_list: [{<--no-keep-index>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:keep_index) op: assign_op.Equal rhs: {<n>} spids: [1400] ) ] ) ] spids: [1396 1397 1404 -1] ) (case_arm pat_list: [{<-p>} {<--patch>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:patch_mode) op: assign_op.Equal rhs: {<t>} spids: [1413] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$keep_index'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:keep_index) op: assign_op.Equal rhs: {<t>} spids: [1431] ) ] ) ] ) ] spids: [1407 1410 1435 -1] ) (case_arm pat_list: [{<-q>} {<--quiet>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_QUIET) op: assign_op.Equal rhs: {<t>} spids: [1444] ) ] ) ] spids: [1438 1441 1448 -1] ) (case_arm pat_list: [{<-u>} {<--include-untracked>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:untracked) op: assign_op.Equal rhs: {<untracked>} spids: [1457] ) ] ) ] spids: [1451 1454 1461 -1] ) (case_arm pat_list: [{<-a>} {<--all>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:untracked) op: assign_op.Equal rhs: {<all>} spids: [1470] ) ] ) ] spids: [1464 1467 1474 -1] ) (case_arm pat_list: [{<--help>}] action: [(C {<show_help>})] spids: [1477 1478 1484 -1] ) (case_arm pat_list: [{<-->}] action: [ (C {<shift>}) (command.ControlFlow token: <Id.ControlFlow_Break break> ) ] spids: [1487 1488 1497 -1] ) (case_arm pat_list: [{<-> <Id.Lit_Star '*'>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:option) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [1505] ) ] ) (C {<eval_gettextln>} { (DQ <'error: unknown option for \'stash save\': '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ) <'option\n'> <' To provide a message, use git stash save -- \''> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ) <'option\''> ) } ) (C {<usage>}) ] spids: [1500 1502 1566 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [(command.ControlFlow token:<Id.ControlFlow_Break break>)] spids: [1569 1570 1576 -1] ) ] ) (C {<shift>}) ] ) ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$patch_mode'))}) (C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$untracked'))}) ] ) ] ) action: [ (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} { (DQ < 'Can\'t use --patch and --include-untracked or --all at the same time' > ) } ) ) ) } ) ] spids: [1589 1610] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:stash_msg) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Star '$*'))} spids: [1630] ) ] ) (C {<git>} {<update-index>} {<-q>} {<--refresh>}) (command.If arms: [ (if_arm cond: (condition.Shell commands:[(C {<no_changes>})]) action: [ (C {<say>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'No local changes to save'>)}) ) ) } ) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<0>} ) ] spids: [1646 1651] ) ] ) (command.AndOr ops: [Id.Op_DPipe Id.Op_DPipe] children: [ (C {<git>} {<reflog>} {<exists>} {($ Id.VSub_DollarName '$ref_stash')}) (C {<clear_stash>}) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'Cannot initialize stash'>)}) ) ) } ) ] ) (C {<create_stash>} {(DQ ($ Id.VSub_DollarName '$stash_msg'))} {($ Id.VSub_DollarName '$untracked')} ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<store_stash>} {<-m>} {(DQ ($ Id.VSub_DollarName '$stash_msg'))} {<-q>} {($ Id.VSub_DollarName '$w_commit')} ) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'Cannot save the current status'>)}) ) ) } ) ] ) (C {<say>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<eval_gettext>} { (DQ <'Saved working directory and index state '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ) <stash_msg> ) } ) ) ) } ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [(C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$patch_mode'))})] ) action: [ (C {<git>} {<reset>} {<--hard>} { (braced_var_sub token: <Id.VSub_Name GIT_QUIET> suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonPlus arg_word:{<-q>}) ) } ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (C {<test>} {(DQ ($ Id.VSub_DollarName '$untracked'))} {<Id.Lit_Equals '='>} {(DQ <all>)} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CLEAN_X_OPTION) op: assign_op.Equal rhs: {<-x>} spids: [1798] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CLEAN_X_OPTION) op: assign_op.Equal rhs: (word.Empty) spids: [1803] ) ] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [(C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$untracked'))})] ) action: [ (C {<git>} {<clean>} {<--force>} {<--quiet>} {<-d>} {($ Id.VSub_DollarName '$CLEAN_X_OPTION')} ) ] spids: [1806 1817] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {(DQ ($ Id.VSub_DollarName '$keep_index'))} {<Id.Lit_Equals '='>} {(DQ <t>)} ) (C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$i_tree'))}) ] ) ] ) action: [ (C {<git>} {<read-tree>} {<--reset>} {<-u>} {($ Id.VSub_DollarName '$i_tree')}) ] spids: [1837 1862] ) ] ) ] spids: [1757 1768] ) ] else_action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{<git>} {<apply>} {<-R>}] redirects: [ (redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {(DQ ($ Id.VSub_DollarName '$TMP') <-patch>)} ) ] do_fork: T ) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'Cannot remove worktree changes'>)}) ) ) } ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (C {<test>} {(DQ ($ Id.VSub_DollarName '$keep_index'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <t>)} ) ] ) action: [(C {<git>} {<reset>})] spids: [1912 1928] ) ] ) ] ) ] ) ) (command.ShFunction name: have_stash body: (BraceGroup children: [ (command.Simple words: [{<git>} {<rev-parse>} {<--verify>} {<--quiet>} {($ Id.VSub_DollarName '$ref_stash')}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})] do_fork: T ) ] ) ) (command.ShFunction name: list_stash body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<have_stash>}) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] ) (C {<git>} {<log>} {<--format> <Id.Lit_Equals '='> (DQ <'%gd: %gs'>)} {<-g>} {<--first-parent>} {<-m>} {(DQ ($ Id.VSub_At '$@'))} {($ Id.VSub_DollarName '$ref_stash')} {<-->} ) ] ) ) (command.ShFunction name: show_stash body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ALLOW_UNKNOWN_FLAGS) op: assign_op.Equal rhs: {<t>} spids: [2020] ) ] ) (C {<assert_stash_like>} {(DQ ($ Id.VSub_At '$@'))}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [(C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$FLAGS'))})] ) action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (C {<test>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<git>} {<config>} {<--bool>} {<stash.showStat>}) (C {<echo>} {<true>}) ] ) ) ) } {<Id.Lit_Equals '='>} {(DQ <true>)} ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FLAGS) op: assign_op.Equal rhs: {<--stat>} spids: [2078] ) ] ) ] spids: [2046 2075] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (C {<test>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<git>} {<config>} {<--bool>} {<stash.showPatch>}) (C {<echo>} {<false>}) ] ) ) ) } {<Id.Lit_Equals '='>} {(DQ <true>)} ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FLAGS) op: assign_op.Equal rhs: {(${ Id.VSub_Name FLAGS) (braced_var_sub token: <Id.VSub_Name FLAGS> suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonPlus arg_word: {<' '>} ) ) <-p> } spids: [2118] ) ] ) ] spids: [2086 2115] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [(C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$FLAGS'))})] ) action: [ (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [2134 2145] ) ] ) ] spids: [2032 2043] ) ] ) (C {<git>} {<diff>} {(${ Id.VSub_Name FLAGS)} {($ Id.VSub_DollarName '$b_commit')} {($ Id.VSub_DollarName '$w_commit')} ) ] ) ) (command.ShFunction name: show_help body: (BraceGroup children: [ (C {<exec>} {<git>} {<help>} {<stash>}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ) (command.ShFunction name: parse_flags_and_rev body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {(DQ ($ Id.VSub_DollarName '$PARSE_CACHE'))} {<Id.Lit_Equals '='>} {(DQ ($ Id.VSub_Star '$*'))} ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSE_CACHE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Star '$*'))} spids: [2334] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IS_STASH_LIKE) op: assign_op.Equal rhs: (word.Empty) spids: [2341] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IS_STASH_REF) op: assign_op.Equal rhs: (word.Empty) spids: [2344] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:INDEX_OPTION) op: assign_op.Equal rhs: (word.Empty) spids: [2347] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:s) op: assign_op.Equal rhs: (word.Empty) spids: [2350] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:w_commit) op: assign_op.Equal rhs: (word.Empty) spids: [2353] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:b_commit) op: assign_op.Equal rhs: (word.Empty) spids: [2356] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:i_commit) op: assign_op.Equal rhs: (word.Empty) spids: [2359] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:u_commit) op: assign_op.Equal rhs: (word.Empty) spids: [2362] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:w_tree) op: assign_op.Equal rhs: (word.Empty) spids: [2365] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:b_tree) op: assign_op.Equal rhs: (word.Empty) spids: [2368] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:i_tree) op: assign_op.Equal rhs: (word.Empty) spids: [2371] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:u_tree) op: assign_op.Equal rhs: (word.Empty) spids: [2374] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:REV) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<rev-parse>} {<--no-flags>} {<--symbolic>} {<--sq>} {(DQ ($ Id.VSub_At '$@'))} ) ) } spids: [2378] ) ] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FLAGS) op: assign_op.Equal rhs: (word.Empty) spids: [2403] ) ] ) (command.ForEach iter_name: opt do_arg_iter: T body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$opt'))} arms: [ (case_arm pat_list: [{<-q>} {<--quiet>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_QUIET) op: assign_op.Equal rhs: {<-t>} spids: [2429] ) ] ) ] spids: [2423 2426 2433 -1] ) (case_arm pat_list: [{<--index>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:INDEX_OPTION) op: assign_op.Equal rhs: {<--index>} spids: [2440] ) ] ) ] spids: [2436 2437 2444 -1] ) (case_arm pat_list: [{<--help>}] action: [(C {<show_help>})] spids: [2447 2448 2454 -1] ) (case_arm pat_list: [{<-> <Id.Lit_Star '*'>}] action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<test>} {(DQ ($ Id.VSub_DollarName '$ALLOW_UNKNOWN_FLAGS'))} {<Id.Lit_Equals '='>} {<t>} ) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<eval_gettext>} { (DQ <'unknown option: '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ) <opt> ) } ) ) ) } ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FLAGS) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name FLAGS) (braced_var_sub token: <Id.VSub_Name FLAGS> suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonPlus arg_word: {<' '>} ) ) ($ Id.VSub_DollarName '$opt') ) } spids: [2490] ) ] ) ] spids: [2457 2459 2504 -1] ) ] ) ] ) ) (C {<eval>} {<Id.KW_Set set>} {<-->} {($ Id.VSub_DollarName '$REV')}) (command.Case to_match: {($ Id.VSub_Pound '$#')} arms: [ (case_arm pat_list: [{<0>}] action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<have_stash>}) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'No stash found.'>)}) ) ) } ) ] ) (C {<Id.KW_Set set>} {<-->} {(${ Id.VSub_Name ref_stash) <Id.Lit_At '@'> <Id.Lit_LBrace '{'> <0> <Id.Lit_RBrace '}'> } ) ] spids: [2531 2532 2565 -1] ) (case_arm pat_list: [{<1>}] action: [(C {<Id.Lit_Colon ':'>})] spids: [2568 2569 2575 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [ (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<eval_gettext>} { (DQ <'Too many revisions specified: '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ) <REV> ) } ) ) ) } ) ] spids: [2578 2579 2597 -1] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:REV) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<rev-parse>} {<--symbolic>} {<--verify>} {<--quiet>} {(DQ ($ Id.VSub_Number '$1'))} ) ) } spids: [2604] ) ] ) (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:reference) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [2626] ) ] ) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<eval_gettext>} { (DQ (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'reference is not a valid reference'> ) } ) ) ) } ) ] ) ] ) (command.AndOr ops: [ Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp ] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:i_commit) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<rev-parse>} {<--verify>} {<--quiet>} {(DQ ($ Id.VSub_DollarName '$REV') <'^2'>)} ) ) } spids: [2650] ) ] ) (C {<Id.KW_Set set>} {<-->} { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Simple words: [ {<git>} {<rev-parse>} {(DQ ($ Id.VSub_DollarName '$REV'))} {(DQ ($ Id.VSub_DollarName '$REV') <'^1'>)} {(DQ ($ Id.VSub_DollarName '$REV') <':'>)} {(DQ ($ Id.VSub_DollarName '$REV') <'^1:'>)} {(DQ ($ Id.VSub_DollarName '$REV') <'^2:'>)} ] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:s) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [2709] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:w_commit) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [2715] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:b_commit) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [2721] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:w_tree) op: assign_op.Equal rhs: {($ Id.VSub_Number '$3')} spids: [2727] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:b_tree) op: assign_op.Equal rhs: {($ Id.VSub_Number '$4')} spids: [2733] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:i_tree) op: assign_op.Equal rhs: {($ Id.VSub_Number '$5')} spids: [2739] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IS_STASH_LIKE) op: assign_op.Equal rhs: {<t>} spids: [2745] ) ] ) (C {<test>} {(DQ ($ Id.VSub_DollarName '$ref_stash'))} {<Id.Lit_Equals '='>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<rev-parse>} {<--symbolic-full-name>} { (DQ (braced_var_sub token: <Id.VSub_Name REV> suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<'@*'>}) ) ) } ) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IS_STASH_REF) op: assign_op.Equal rhs: {<t>} spids: [2780] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:u_commit) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<rev-parse>} {<--verify>} {<--quiet>} {(DQ ($ Id.VSub_DollarName '$REV') <'^3'>)} ) ) } spids: [2785] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:u_tree) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Simple words: [ {<git>} {<rev-parse>} {(DQ ($ Id.VSub_DollarName '$REV') <'^3:'>)} ] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) ) } spids: [2804] ) ] ) ] ) ] ) ) (command.ShFunction name: is_stash_like body: (BraceGroup children: [ (C {<parse_flags_and_rev>} {(DQ ($ Id.VSub_At '$@'))}) (C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$IS_STASH_LIKE'))}) ] ) ) (command.ShFunction name: assert_stash_like body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<is_stash_like>} {(DQ ($ Id.VSub_At '$@'))}) (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:args) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Star '$*'))} spids: [2865] ) ] ) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<eval_gettext>} { (DQ <'\''> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ) <'args\' is not a stash-like commit'> ) } ) ) ) } ) ] ) ] ) ] ) ) (command.ShFunction name: is_stash_ref body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<is_stash_like>} {(DQ ($ Id.VSub_At '$@'))}) (C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$IS_STASH_REF'))}) ] ) ] ) ) (command.ShFunction name: assert_stash_ref body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<is_stash_ref>} {(DQ ($ Id.VSub_At '$@'))}) (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:args) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Star '$*'))} spids: [2935] ) ] ) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<eval_gettext>} { (DQ <'\''> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ) <'args\' is not a stash reference'> ) } ) ) ) } ) ] ) ] ) ] ) ) (command.ShFunction name: apply_stash body: (BraceGroup children: [ (C {<assert_stash_like>} {(DQ ($ Id.VSub_At '$@'))}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<git>} {<update-index>} {<-q>} {<--refresh>}) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'unable to refresh index'>)}) ) ) } ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:c_tree) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<write-tree>}) ) } spids: [3006] ) ] ) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'Cannot apply a stash in the middle of a merge'>)}) ) ) } ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:unstashed_index_tree) op: assign_op.Equal rhs: (word.Empty) spids: [3030] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$INDEX_OPTION'))}) (C {<test>} {(DQ ($ Id.VSub_DollarName '$b_tree'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$i_tree'))} ) (C {<test>} {(DQ ($ Id.VSub_DollarName '$c_tree'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$i_tree'))} ) ] ) ] ) action: [ (command.Pipeline children: [ (C {<git>} {<diff-tree>} {<--binary>} {($ Id.VSub_DollarName '$s') <Id.Lit_Other '^'> <2> <Id.Lit_Other '^'> <..> ($ Id.VSub_DollarName '$s') <Id.Lit_Other '^'> <2> } ) (C {<git>} {<apply>} {<--cached>}) ] negated: F ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {($ Id.VSub_QMark '$?')} {<-ne>} {<0>}) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'Conflicts in index. Try without --index.'>)}) ) ) } ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:unstashed_index_tree) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<write-tree>}) ) } spids: [3126] ) ] ) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'Could not save index tree'>)}) ) ) } ) ] ) (C {<git>} {<reset>}) ] spids: [3033 3075] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [(C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$u_tree'))})] ) action: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe] children: [ (command.Simple words: [{<git-read-tree>} {(DQ ($ Id.VSub_DollarName '$u_tree'))}] more_env: [ (env_pair name: GIT_INDEX_FILE val: {(DQ ($ Id.VSub_DollarName '$TMPindex'))} spids: [3172] ) ] do_fork: T ) (command.Simple words: [{<git>} {<checkout-index>} {<--all>}] more_env: [ (env_pair name: GIT_INDEX_FILE val: {(DQ ($ Id.VSub_DollarName '$TMPindex'))} spids: [3186] ) ] do_fork: T ) (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$TMPindex'))}) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'Could not restore untracked files from stash'>)}) ) ) } ) ] ) ] spids: [3158 3169] ) ] ) (C {<eval>} { (DQ <'\n'> <'\t\tGITHEAD_'> ($ Id.VSub_DollarName '$w_tree') <'=\'Stashed changes\' &&\n'> <'\t\tGITHEAD_'> ($ Id.VSub_DollarName '$c_tree') <'=\'Updated upstream\' &&\n'> <'\t\tGITHEAD_'> ($ Id.VSub_DollarName '$b_tree') <'=\'Version stash was based on\' &&\n'> <'\t\texport GITHEAD_'> ($ Id.VSub_DollarName '$w_tree') <' GITHEAD_'> ($ Id.VSub_DollarName '$c_tree') <' GITHEAD_'> ($ Id.VSub_DollarName '$b_tree') <'\n'> <'\t'> ) } ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [(C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$GIT_QUIET'))})] ) action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_MERGE_VERBOSITY) op: assign_op.Equal rhs: {<0>} spids: [3267] ) ] ) (C {<export>} {<GIT_MERGE_VERBOSITY>}) ] ) ] spids: [3253 3264] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (C {<git>} {<merge-recursive>} {($ Id.VSub_DollarName '$b_tree')} {<-->} {($ Id.VSub_DollarName '$c_tree')} {($ Id.VSub_DollarName '$w_tree')} ) ] ) action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$unstashed_index_tree'))}) ] ) action: [ (C {<git>} {<read-tree>} {(DQ ($ Id.VSub_DollarName '$unstashed_index_tree'))} ) ] spids: [3302 3313] ) ] else_action: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:a) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$TMP') <-added>)} spids: [3328] ) ] ) (command.Simple words: [ {<git>} {<diff-index>} {<--cached>} {<--name-only>} {<--diff-filter> <Id.Lit_Equals '='> <A>} {($ Id.VSub_DollarName '$c_tree')} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$a'))} ) ] do_fork: T ) (C {<git>} {<read-tree>} {<--reset>} {($ Id.VSub_DollarName '$c_tree')}) (command.Simple words: [{<git>} {<update-index>} {<--add>} {<--stdin>}] redirects: [ (redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {(DQ ($ Id.VSub_DollarName '$a'))} ) ] do_fork: T ) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'Cannot unstage modified files'>)}) ) ) } ) ] ) (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$a'))}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:squelch) op: assign_op.Equal rhs: (word.Empty) spids: [3411] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [(C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$GIT_QUIET'))})] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:squelch) op: assign_op.Equal rhs: {(SQ <'>/dev/null 2>&1'>)} spids: [3428] ) ] ) ] spids: [3414 3425] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Subshell child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<cd>} {(DQ ($ Id.VSub_DollarName '$START_DIR'))}) (C {<eval>} {(DQ <'git status '> ($ Id.VSub_DollarName '$squelch'))}) ] ) ) (C {<Id.Lit_Colon ':'>}) ] ) ] spids: [3280 3295] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:status) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [3466] ) ] ) (C {<git>} {<rerere>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [(C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$INDEX_OPTION'))})] ) action: [ (command.Simple words: [{<gettextln>} {(DQ <'Index was not unstashed.'>)}] redirects: [ (redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] spids: [3475 3486] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {($ Id.VSub_DollarName '$status')} ) ] ) ] ) ) (command.ShFunction name: pop_stash body: (BraceGroup children: [ (C {<assert_stash_ref>} {(DQ ($ Id.VSub_At '$@'))}) (command.If arms: [ (if_arm cond: (condition.Shell commands:[(C {<apply_stash>} {(DQ ($ Id.VSub_At '$@'))})]) action: [(C {<drop_stash>} {(DQ ($ Id.VSub_At '$@'))})] spids: [3527 3536] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:status) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [3549] ) ] ) (C {<say>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'The stash is kept in case you need it again.'>)}) ) ) } ) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {($ Id.VSub_DollarName '$status')} ) ] ) ] ) ) (command.ShFunction name: drop_stash body: (BraceGroup children: [ (C {<assert_stash_ref>} {(DQ ($ Id.VSub_At '$@'))}) (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (C {<git>} {<reflog>} {<delete>} {<--updateref>} {<--rewrite>} {(DQ (${ Id.VSub_Name REV))}) (C {<say>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<eval_gettext>} { (DQ <'Dropped '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ) <'{REV} ('> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'s)'> ) } ) ) ) } ) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<eval_gettext>} { (DQ (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'{REV}: Could not drop stash entry'> ) } ) ) ) } ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [ {<git>} {<rev-parse>} {<--verify>} {<--quiet>} {(DQ ($ Id.VSub_DollarName '$ref_stash') <'@{0}'>)} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) ] do_fork: T ) (C {<clear_stash>}) ] ) ] ) ) (command.ShFunction name: apply_to_branch body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<test>} {<-n>} {(DQ ($ Id.VSub_Number '$1'))}) (C {<die>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} {(DQ <'No branch name specified'>)}) ) ) } ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:branch) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [3704] ) ] ) (C {<shift>} {<1>}) (C {<Id.KW_Set set>} {<-->} {<--index>} {(DQ ($ Id.VSub_At '$@'))}) (C {<assert_stash_like>} {(DQ ($ Id.VSub_At '$@'))}) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {<git>} {<checkout>} {<-b>} {($ Id.VSub_DollarName '$branch')} {($ Id.VSub_DollarName '$REV') <Id.Lit_Other '^'>} ) (C {<apply_stash>} {(DQ ($ Id.VSub_At '$@'))}) (BraceGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$IS_STASH_REF'))}) (C {<drop_stash>} {(DQ ($ Id.VSub_At '$@'))}) ] ) ] ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSE_CACHE) op: assign_op.Equal rhs: {(SQ <--not-parsed>)} spids: [3780] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:seen_non_option) op: assign_op.Equal rhs: (word.Empty) spids: [3788] ) ] ) (command.ForEach iter_name: opt do_arg_iter: T body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$opt'))} arms: [ (case_arm pat_list: [{<-> <Id.Lit_Star '*'>}] spids: [3806 3808 3810 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:seen_non_option) op: assign_op.Equal rhs: {<t>} spids: [3816] ) ] ) terminator: <Id.Op_Semi _> ) (command.ControlFlow token:<Id.ControlFlow_Break break>) ] spids: [3813 3814 3822 -1] ) ] ) ] ) ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$seen_non_option'))}) (C {<Id.KW_Set set>} {(DQ <save>)} {(DQ ($ Id.VSub_At '$@'))}) ] ) (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [{<list>}] action: [(C {<shift>}) (C {<list_stash>} {(DQ ($ Id.VSub_At '$@'))})] spids: [3862 3863 3876 -1] ) (case_arm pat_list: [{<show>}] action: [(C {<shift>}) (C {<show_stash>} {(DQ ($ Id.VSub_At '$@'))})] spids: [3878 3879 3892 -1] ) (case_arm pat_list: [{<save>}] action: [(C {<shift>}) (C {<save_stash>} {(DQ ($ Id.VSub_At '$@'))})] spids: [3894 3895 3908 -1] ) (case_arm pat_list: [{<apply>}] action: [(C {<shift>}) (C {<apply_stash>} {(DQ ($ Id.VSub_At '$@'))})] spids: [3910 3911 3924 -1] ) (case_arm pat_list: [{<clear>}] action: [(C {<shift>}) (C {<clear_stash>} {(DQ ($ Id.VSub_At '$@'))})] spids: [3926 3927 3940 -1] ) (case_arm pat_list: [{<create>}] action: [ (C {<shift>}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<create_stash>} {(DQ ($ Id.VSub_Star '$*'))}) (C {<echo>} {(DQ ($ Id.VSub_DollarName '$w_commit'))}) ] ) ] spids: [3942 3943 3964 -1] ) (case_arm pat_list: [{<store>}] action: [(C {<shift>}) (C {<store_stash>} {(DQ ($ Id.VSub_At '$@'))})] spids: [3966 3967 3980 -1] ) (case_arm pat_list: [{<drop>}] action: [(C {<shift>}) (C {<drop_stash>} {(DQ ($ Id.VSub_At '$@'))})] spids: [3982 3983 3996 -1] ) (case_arm pat_list: [{<pop>}] action: [(C {<shift>}) (C {<pop_stash>} {(DQ ($ Id.VSub_At '$@'))})] spids: [3998 3999 4012 -1] ) (case_arm pat_list: [{<branch>}] action: [(C {<shift>}) (C {<apply_to_branch>} {(DQ ($ Id.VSub_At '$@'))})] spids: [4014 4015 4028 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [ (command.Case to_match: {($ Id.VSub_Pound '$#')} arms: [ (case_arm pat_list: [{<0>}] action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<save_stash>}) (C {<say>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<gettext>} { (DQ <'(To restore them type '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) <'git stash apply'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <')'> ) } ) ) ) } ) ] ) ] spids: [4041 4042 4067 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [(C {<usage>})] spids: [4070 4071 -1 4077] ) ] ) ] spids: [4030 4031 4080 -1] ) ] ) ] )