(command.CommandList
  children: [
    (command.ShFunction
      name: on_travis
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$TRAVIS'))} 
                              {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <true>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(C {(DQ ($ Id.VSub_At '$@'))})]
                  spids: [23 41]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: internal_build_cpp
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<-f>} {<'src/protoc'>} {<Id.Lit_RBracket ']'>})
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(command.ControlFlow token:<Id.ControlFlow_Return return>)]
                  spids: [67 78]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.LogicalAnd
                                  left: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobDEqual
                                      left: 
                                        {
                                          (command_sub
                                            left_token: <Id.Left_DollarParen '$('>
                                            child: (C {<uname>} {<-s>})
                                          )
                                        }
                                      right: {(DQ <Linux>)}
                                    )
                                  right: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobDEqual
                                      left: {(DQ ($ Id.VSub_DollarName '$TRAVIS'))}
                                      right: {(DQ <true>)}
                                    )
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<sudo>} {<add-apt-repository>} 
                      {<ppa> <Id.Lit_Colon ':'> <'ubuntu-toolchain-r/test'>} {<-y>}
                    )
                    (C {<sudo>} {<apt-get>} {<update>} {<-qq>})
                    (C {<sudo>} {<apt-get>} {<install>} {<-qq>} 
                      {<g> <Id.Lit_Other '+'> <Id.Lit_Other '+'> <-4.8>}
                    )
                    (C {<export>} {<Id.Lit_VarLike 'CXX='> (DQ <'g++-4.8'>)} 
                      {<Id.Lit_VarLike 'CC='> (DQ <gcc-4.8>)}
                    )
                  ]
                  spids: [92 123]
                )
              ]
            )
            (C {<'./autogen.sh'>})
            (C {<'./configure'>} {<Id.Lit_VarLike 'CXXFLAGS='> (DQ <-fPIC>)})
            (C {<make>} {<-j2>})
          ]
        )
    )
    (command.ShFunction
      name: build_cpp
      body: 
        (BraceGroup
          children: [
            (C {<internal_build_cpp>})
            (C {<make>} {<check>} {<-j2>})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [(C {<cd>} {<conformance>}) (C {<make>} {<test_cpp>}) (C {<cd>} {<..>})]
            )
            (C {<git>} {<submodule>} {<init>})
            (C {<git>} {<submodule>} {<update>})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<cd>} {<'third_party/benchmark'>})
                (C {<cmake>} {<-DCMAKE_BUILD_TYPE> <Id.Lit_Equals '='> <Release>})
                (C {<make>})
                (C {<cd>} {<'../..'>})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<cd>} {<benchmarks>})
                (C {<make>})
                (C {<'./generate-datasets'>})
                (C {<cd>} {<..>})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: build_cpp_distcheck
      body: 
        (BraceGroup
          children: [
            (C {<'./autogen.sh'>})
            (C {<'./configure'>})
            (C {<make>} {<dist>})
            (command.Pipeline
              children: [
                (C {<git>} {<ls-files>})
                (C {<grep>} 
                  {
                    (DQ <'^'> <Id.Lit_BadBackslash '\\'> <'(java'> <Id.Lit_BadBackslash '\\'> <'|python'> 
                      <Id.Lit_BadBackslash '\\'> <'|objectivec'> <Id.Lit_BadBackslash '\\'> <'|csharp'> <Id.Lit_BadBackslash '\\'> <'|js'> 
                      <Id.Lit_BadBackslash '\\'> <'|ruby'> <Id.Lit_BadBackslash '\\'> <'|cmake'> <Id.Lit_BadBackslash '\\'> <'|examples'> 
                      <Id.Lit_BadBackslash '\\'> <')'>
                    )
                  }
                )
                (C {<grep>} {<-v>} {(DQ <.gitignore>)})
                (command.Simple
                  words: [{<grep>} {<-v>} {(DQ <'java/compatibility_tests'>)}]
                  redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<dist.lst>})]
                  do_fork: T
                )
              ]
              negated: F
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:DIST)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: (C {<ls>} {<Id.Lit_Star '*'> <.tar.gz>})
                      )
                    }
                  spids: [390]
                )
              ]
            )
            (C {<tar>} {<-xf>} {($ Id.VSub_DollarName '$DIST')})
            (C {<cd>} 
              {
                (braced_var_sub
                  token: <Id.VSub_Name DIST>
                  suffix_op: (suffix_op.PatSub pat:{<.tar.gz>} replace_mode:Id.Lit_Slash)
                )
              }
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FILES_MISSING)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [422]
                )
              ]
            )
            (command.ForEach
              iter_name: FILE
              iter_words: [
                {
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    child: 
                      (command.Simple
                        redirects: [
                          (redir
                            op: <Id.Redir_Less '<'>
                            loc: (redir_loc.Fd fd:0)
                            arg: {<'../dist.lst'>}
                          )
                        ]
                        do_fork: F
                      )
                  )
                }
              ]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Pipeline
                                      children: [
                                        (command.Simple
                                          words: [{<file>} {($ Id.VSub_DollarName '$FILE')}]
                                          redirects: [
                                            (redir
                                              op: <Id.Redir_AndGreat '&>'>
                                              loc: (redir_loc.Fd fd:1)
                                              arg: {<'/dev/null'>}
                                            )
                                          ]
                                          do_fork: T
                                        )
                                      ]
                                      negated: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<echo>} {(DQ ($ Id.VSub_DollarName '$FILE') <' is not found!'>)})
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:FILES_MISSING)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ ($ Id.VSub_DollarName '$FILE') <' '> 
                                        ($ Id.VSub_DollarName '$FILES_MISSING')
                                      )
                                    }
                                  spids: [465]
                                )
                              ]
                            )
                          ]
                          spids: [442 454]
                        )
                      ]
                    )
                  ]
                )
            )
            (C {<cd>} {<..>})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-z>} 
                              {(DQ ($ Id.VSub_DollarName '$FILES_MISSING'))} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<echo>} 
                      {(DQ <'Missing files in EXTRA_DIST: '> ($ Id.VSub_DollarName '$FILES_MISSING'))}
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [484 499]
                )
              ]
            )
            (C {<make>} {<distcheck>} {<-j2>})
          ]
        )
    )
    (command.ShFunction
      name: build_csharp
      body: 
        (BraceGroup
          children: [
            (C {<internal_build_cpp>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:NUGET)
                  op: assign_op.Equal
                  rhs: {<'/usr/local/bin/nuget.exe'>}
                  spids: [554]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$TRAVIS'))} 
                              {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <true>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<sudo>} {<apt-key>} {<adv>} {<--keyserver>} {<keyserver.ubuntu.com>} 
                      {<--recv-keys>} {<3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF>}
                    )
                    (C {<sudo>} {<apt-key>} {<adv>} {<--keyserver>} {<keyserver.ubuntu.com>} 
                      {<--recv-keys>} {<1397BC53640DB551>}
                    )
                    (command.Pipeline
                      children: [
                        (C {<echo>} 
                          {(DQ <'deb http://download.mono-project.com/repo/debian wheezy main'>)}
                        )
                        (C {<sudo>} {<tee>} {<'/etc/apt/sources.list.d/mono-xamarin.list'>})
                      ]
                      negated: F
                    )
                    (C {<sudo>} {<apt-get>} {<update>} {<-qq>})
                    (C {<sudo>} {<apt-get>} {<install>} {<-qq>} {<mono-devel>} {<referenceassemblies-pcl>} 
                      {<nunit>}
                    )
                    (C {<sudo>} {<sh>} {<-c>} 
                      {
                        (SQ 
                          <
'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list'
                          >
                        )
                      }
                    )
                    (C {<sudo>} {<apt-key>} {<adv>} {<--keyserver>} {<apt-mo.trafficmanager.net>} 
                      {<--recv-keys>} {<417A0893>}
                    )
                    (C {<sudo>} {<apt-get>} {<update>} {<-qq>})
                    (C {<sudo>} {<apt-get>} {<install>} {<-qq>} {<dotnet-dev-1.0.0-preview2-003121>})
                  ]
                  spids: [559 577]
                )
              ]
            )
            (C {<mkdir>} {<dotnettmp>})
            (command.Subshell
              child: 
                (command.CommandList
                  children: [
                    (command.Sentence
                      child: (C {<cd>} {<dotnettmp>})
                      terminator: <Id.Op_Semi _>
                    )
                    (command.Simple
                      words: [{<dotnet>} {<new>}]
                      redirects: [
                        (redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<'/dev/null'>}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                )
            )
            (C {<rm>} {<-rf>} {<dotnettmp>})
            (command.Subshell
              child: 
                (command.CommandList
                  children: [
                    (command.Sentence
                      child: (C {<cd>} {<'csharp/src'>})
                      terminator: <Id.Op_Semi _>
                    )
                    (C {<dotnet>} {<restore>})
                  ]
                )
            )
            (C {<'csharp/buildall.sh'>})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [(C {<cd>} {<conformance>}) (C {<make>} {<test_csharp>}) (C {<cd>} {<..>})]
            )
          ]
        )
    )
    (command.ShFunction
      name: build_golang
      body: 
        (BraceGroup
          children: [
            (C {<internal_build_cpp>})
            (C {<export>} 
              {<Id.Lit_VarLike 'PATH='> 
                (DQ (command_sub left_token:<Id.Left_Backtick '`'> child:(C {<pwd>})) <'/src:'> 
                  ($ Id.VSub_DollarName '$PATH')
                )
              }
            )
            (C {<on_travis>} {<sudo>} {<apt-get>} {<update>} {<-qq>})
            (C {<on_travis>} {<sudo>} {<apt-get>} {<install>} {<-qq>} {<golang>})
            (C {<export>} {<Id.Lit_VarLike 'GOPATH='> (DQ ($ Id.VSub_DollarName '$HOME') <'/gocode'>)})
            (C {<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName '$GOPATH') <'/src/github.com/google'>)})
            (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$GOPATH') <'/src/github.com/google/protobuf'>)})
            (C {<ln>} {<-s>} {(DQ (command_sub left_token:<Id.Left_Backtick '`'> child:(C {<pwd>})))} 
              {(DQ ($ Id.VSub_DollarName '$GOPATH') <'/src/github.com/google/protobuf'>)}
            )
            (C {<export>} 
              {<Id.Lit_VarLike 'PATH='> 
                (DQ ($ Id.VSub_DollarName '$GOPATH') <'/bin:'> ($ Id.VSub_DollarName '$PATH'))
              }
            )
            (C {<go>} {<get>} {<'github.com/golang/protobuf/protoc-gen-go'>})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [(C {<cd>} {<examples>}) (C {<make>} {<gotest>}) (C {<cd>} {<..>})]
            )
          ]
        )
    )
    (command.ShFunction
      name: use_java
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:version)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [941]
                )
              ]
            )
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$version'))}
              arms: [
                (case_arm
                  pat_list: [{<jdk7>}]
                  action: [
                    (C {<on_travis>} {<sudo>} {<apt-get>} {<install>} {<openjdk-7-jdk>})
                    (C {<export>} 
                      {<Id.Lit_VarLike 'PATH='> <'/usr/lib/jvm/java-7-openjdk-amd64/bin'> 
                        <Id.Lit_Colon ':'> ($ Id.VSub_DollarName '$PATH')
                      }
                    )
                    (C {<export>} {<Id.Lit_VarLike 'JAVA_HOME='> <'/usr/lib/jvm/java-7-openjdk-amd64'>})
                  ]
                  spids: [954 955 983 -1]
                )
                (case_arm
                  pat_list: [{<oracle7>}]
                  action: [
                    (command.Sentence
                      child: 
                        (command.If
                          arms: [
                            (if_arm
                              cond: 
                                (condition.Shell
                                  commands: [
                                    (command.Sentence
                                      child: 
                                        (C {<Id.Lit_LBracket '['>} 
                                          {(DQ ($ Id.VSub_DollarName '$TRAVIS'))} {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <true>)} {<Id.Lit_RBracket ']'>}
                                        )
                                      terminator: <Id.Op_Semi _>
                                    )
                                  ]
                                )
                              action: [
                                (C {<sudo>} {<apt-get>} {<install>} {<python-software-properties>})
                                (command.Pipeline
                                  children: [
                                    (C {<echo>} 
                                      {
                                        (DQ 
                                          <
'oracle-java7-installer shared/accepted-oracle-license-v1-1 select true'
                                          >
                                        )
                                      }
                                    )
                                    (C {<sudo>} {<debconf-set-selections>})
                                  ]
                                  negated: F
                                )
                                (command.Pipeline
                                  children: [
                                    (C {<yes>})
                                    (C {<sudo>} {<apt-add-repository>} 
                                      {<ppa> <Id.Lit_Colon ':'> <'webupd8team/java'>}
                                    )
                                  ]
                                  negated: F
                                )
                                (command.Pipeline
                                  children: [
                                    (C {<yes>})
                                    (C {<sudo>} {<apt-get>} {<install>} {<oracle-java7-installer>})
                                  ]
                                  negated: F
                                )
                              ]
                              spids: [990 1008]
                            )
                          ]
                        )
                      terminator: <Id.Op_Semi _>
                    )
                    (C {<export>} 
                      {<Id.Lit_VarLike 'PATH='> <'/usr/lib/jvm/java-7-oracle/bin'> <Id.Lit_Colon ':'> 
                        ($ Id.VSub_DollarName '$PATH')
                      }
                    )
                    (C {<export>} {<Id.Lit_VarLike 'JAVA_HOME='> <'/usr/lib/jvm/java-7-openjdk-amd64'>})
                  ]
                  spids: [986 987 1082 -1]
                )
              ]
            )
            (command.Sentence
              child: 
                (command.If
                  arms: [
                    (if_arm
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$TRAVIS'))} 
                                  {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <true>)} {<Id.Lit_RBracket ']'>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:MAVEN_LOCAL_REPOSITORY)
                              op: assign_op.Equal
                              rhs: {<'/var/maven_local_repository'>}
                              spids: [1110]
                            )
                          ]
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:MVN)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ ($ Id.VSub_DollarName '$MVN') 
                                    <' -e -X --offline -Dmaven.repo.local='> ($ Id.VSub_DollarName '$MAVEN_LOCAL_REPOSITORY')
                                  )
                                }
                              spids: [1114]
                            )
                          ]
                        )
                      ]
                      spids: [1089 1107]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (C {<which>} {<java>})
            (C {<java>} {<-version>})
            (C {($ Id.VSub_DollarName '$MVN')} {<-version>})
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MVN)
          op: assign_op.Equal
          rhs: {(DQ <'mvn --batch-mode'>)}
          spids: [1147]
        )
      ]
    )
    (command.ShFunction
      name: build_java
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:version)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [1160]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:dir)
                  op: assign_op.Equal
                  rhs: {<java_> ($ Id.VSub_DollarName '$version')}
                  spids: [1164]
                )
              ]
            )
            (C {<internal_build_cpp>})
            (C {<cp>} {<-r>} {<java>} {($ Id.VSub_DollarName '$dir')})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<cd>} {($ Id.VSub_DollarName '$dir')})
                (C {($ Id.VSub_DollarName '$MVN')} {<clean>})
                (C {($ Id.VSub_DollarName '$MVN')} {<test>})
              ]
            )
            (C {<cd>} {<'../..'>})
          ]
        )
    )
    (command.ShFunction
      name: build_java_with_conformance_tests
      body: 
        (BraceGroup
          children: [
            (C {<internal_build_cpp>})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<cd>} {<java>})
                (C {($ Id.VSub_DollarName '$MVN')} {<test>})
                (C {($ Id.VSub_DollarName '$MVN')} {<install>})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<cd>} {<util>})
                (C {($ Id.VSub_DollarName '$MVN')} {<package>} {<assembly> <Id.Lit_Colon ':'> <single>})
              ]
            )
            (C {<cd>} {<'../..'>})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [(C {<cd>} {<conformance>}) (C {<make>} {<test_java>}) (C {<cd>} {<..>})]
            )
          ]
        )
    )
    (command.ShFunction
      name: build_javanano
      body: 
        (BraceGroup
          children: [
            (C {<internal_build_cpp>})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<cd>} {<javanano>})
                (C {($ Id.VSub_DollarName '$MVN')} {<test>})
                (C {<cd>} {<..>})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: build_java_jdk7
      body: 
        (BraceGroup
          children: [(C {<use_java>} {<jdk7>}) (C {<build_java_with_conformance_tests>})]
        )
    )
    (command.ShFunction
      name: build_java_oracle7
      body: (BraceGroup children:[(C {<use_java>} {<oracle7>}) (C {<build_java>} {<oracle7>})])
    )
    (command.ShFunction
      name: build_java_compatibility
      body: 
        (BraceGroup
          children: [
            (C {<use_java>} {<jdk7>})
            (C {<internal_build_cpp>})
            (C {<cd>} {<'java/compatibility_tests/v2.5.0'>})
            (C {<'./test.sh'>} {<3.0.0-beta-4>})
          ]
        )
    )
    (command.ShFunction
      name: build_javanano_jdk7
      body: (BraceGroup children:[(C {<use_java>} {<jdk7>}) (C {<build_javanano>})])
    )
    (command.ShFunction
      name: build_javanano_oracle7
      body: (BraceGroup children:[(C {<use_java>} {<oracle7>}) (C {<build_javanano>})])
    )
    (command.ShFunction
      name: internal_install_python_deps
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$TRAVIS'))} 
                              {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <true>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.Sentence
                      child: (command.ControlFlow token:<Id.ControlFlow_Return return>)
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  spids: [1427 1445]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} 
                              {
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: (C {<uname>} {<-s>})
                                )
                              } {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <Darwin>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(C {<sudo>} {<easy_install>} {<tox>})]
                  spids: [1459 1479]
                )
              ]
              else_action: [(C {<sudo>} {<pip>} {<install>} {<tox>})]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} 
                              {
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: (C {<uname>} {<-s>})
                                )
                              } {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <Linux>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<sudo>} {<apt-get>} {<install>} {<-y>} {<python-software-properties>})
                    (C {<sudo>} {<apt-add-repository>} {<-y>} 
                      {<ppa> <Id.Lit_Colon ':'> <'fkrull/deadsnakes'>}
                    )
                    (C {<sudo>} {<apt-get>} {<update>} {<-qq>})
                    (C {<sudo>} {<apt-get>} {<install>} {<-y>} {<python2.6>} {<python2.6-dev>})
                    (C {<sudo>} {<apt-get>} {<install>} {<-y>} {<python3.3>} {<python3.3-dev>})
                    (C {<sudo>} {<apt-get>} {<install>} {<-y>} {<python3.4>} {<python3.4-dev>})
                  ]
                  spids: [1508 1528]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: build_objectivec_ios
      body: 
        (BraceGroup
          children: [
            (C {<'objectivec/DevTools/full_mac_build.sh'>} {<--core-only>} {<--skip-xcode-osx>} 
              {<--skip-objc-conformance>} {(DQ ($ Id.VSub_At '$@'))}
            )
          ]
        )
    )
    (command.ShFunction
      name: build_objectivec_ios_debug
      body: (BraceGroup children:[(C {<build_objectivec_ios>} {<--skip-xcode-release>})])
    )
    (command.ShFunction
      name: build_objectivec_ios_release
      body: (BraceGroup children:[(C {<build_objectivec_ios>} {<--skip-xcode-debug>})])
    )
    (command.ShFunction
      name: build_objectivec_osx
      body: 
        (BraceGroup
          children: [
            (C {<'objectivec/DevTools/full_mac_build.sh'>} {<--core-only>} {<--skip-xcode-ios>})
          ]
        )
    )
    (command.ShFunction
      name: build_objectivec_cocoapods_integration
      body: 
        (BraceGroup
          children: [
            (C {<source>} {(word_part.TildeSub token:<Id.Lit_TildeLike '~'>) <'/.rvm/scripts/rvm'>})
            (C {<rvm>} {<get>} {<head>})
            (C {<rvm>} {<use>} {<2.2.3>} {<--install>} {<--binary>} {<--fuzzy>})
            (C {<gem>} {<install>} {<cocoapods>} {<--no-ri>} {<--no-rdoc>})
            (C {<'objectivec/Tests/CocoaPods/run_tests.sh'>})
          ]
        )
    )
    (command.ShFunction
      name: build_python
      body: 
        (BraceGroup
          children: [
            (C {<internal_build_cpp>})
            (C {<internal_install_python_deps>})
            (C {<cd>} {<python>})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} 
                              {
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: (C {<uname>} {<-s>})
                                )
                              } {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <Linux>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:envlist)
                          op: assign_op.Equal
                          rhs: 
                            {<py> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\{'>) <26> 
                              <Id.Lit_Comma ','> <27> <Id.Lit_Comma ','> <33> <Id.Lit_Comma ','> <34> 
                              (word_part.EscapedLiteral
                                token: <Id.Lit_EscapedChar '\\}'>
                              ) <-python>
                            }
                          spids: [1833]
                        )
                      ]
                    )
                  ]
                  spids: [1810 1830]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:envlist)
                      op: assign_op.Equal
                      rhs: {<py27-python>}
                      spids: [1850]
                    )
                  ]
                )
              ]
            )
            (C {<tox>} {<-e>} {($ Id.VSub_DollarName '$envlist')})
            (C {<cd>} {<..>})
          ]
        )
    )
    (command.ShFunction
      name: build_python_cpp
      body: 
        (BraceGroup
          children: [
            (C {<internal_build_cpp>})
            (C {<internal_install_python_deps>})
            (C {<export>} {<Id.Lit_VarLike 'LD_LIBRARY_PATH='> <'../src/.libs'>})
            (C {<export>} {<Id.Lit_VarLike 'DYLD_LIBRARY_PATH='> <'../src/.libs'>})
            (C {<cd>} {<python>})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} 
                              {
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: (C {<uname>} {<-s>})
                                )
                              } {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <Linux>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:envlist)
                          op: assign_op.Equal
                          rhs: 
                            {<py> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\{'>) <27> 
                              <Id.Lit_Comma ','> <33> <Id.Lit_Comma ','> <34> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\}'>) <-cpp>
                            }
                          spids: [1938]
                        )
                      ]
                    )
                  ]
                  spids: [1911 1931]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:envlist)
                      op: assign_op.Equal
                      rhs: {<py27-cpp>}
                      spids: [1953]
                    )
                  ]
                )
              ]
            )
            (C {<tox>} {<-e>} {($ Id.VSub_DollarName '$envlist')})
            (C {<cd>} {<..>})
          ]
        )
    )
    (command.ShFunction
      name: build_ruby21
      body: 
        (BraceGroup
          children: [
            (C {<internal_build_cpp>})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<cd>} {<ruby>})
                (C {<bash>} {<travis-test.sh>} {<ruby-2.1>})
                (C {<cd>} {<..>})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: build_ruby22
      body: 
        (BraceGroup
          children: [
            (C {<internal_build_cpp>})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<cd>} {<ruby>})
                (C {<bash>} {<travis-test.sh>} {<ruby-2.2>})
                (C {<cd>} {<..>})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: build_jruby
      body: 
        (BraceGroup
          children: [
            (C {<internal_build_cpp>})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<cd>} {<ruby>})
                (C {<bash>} {<travis-test.sh>} {<jruby-1.7>})
                (C {<cd>} {<..>})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: build_ruby_all
      body: (BraceGroup children:[(C {<build_ruby21>}) (C {<build_ruby22>}) (C {<build_jruby>})])
    )
    (command.ShFunction
      name: build_javascript
      body: 
        (BraceGroup
          children: [
            (C {<internal_build_cpp>})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [(C {<cd>} {<js>}) (C {<npm>} {<install>}) (C {<npm>} {<test>}) (C {<cd>} {<..>})]
            )
          ]
        )
    )
    (command.ShFunction
      name: use_php
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:VERSION)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [2141]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PHP)
                  op: assign_op.Equal
                  rhs: {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<which>} {<php>}))}
                  spids: [2145]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PHP_CONFIG)
                  op: assign_op.Equal
                  rhs: 
                    {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<which>} {<php-config>}))}
                  spids: [2155]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PHPIZE)
                  op: assign_op.Equal
                  rhs: {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<which>} {<phpize>}))}
                  spids: [2165]
                )
              ]
            )
            (C {<rm>} {($ Id.VSub_DollarName '$PHP')})
            (C {<rm>} {($ Id.VSub_DollarName '$PHP_CONFIG')})
            (C {<rm>} {($ Id.VSub_DollarName '$PHPIZE')})
            (C {<cp>} {(DQ <'/usr/bin/php'> ($ Id.VSub_DollarName '$VERSION'))} 
              {($ Id.VSub_DollarName '$PHP')}
            )
            (C {<cp>} {(DQ <'/usr/bin/php-config'> ($ Id.VSub_DollarName '$VERSION'))} 
              {($ Id.VSub_DollarName '$PHP_CONFIG')}
            )
            (C {<cp>} {(DQ <'/usr/bin/phpize'> ($ Id.VSub_DollarName '$VERSION'))} 
              {($ Id.VSub_DollarName '$PHPIZE')}
            )
          ]
        )
    )
    (command.ShFunction
      name: use_php_zts
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:VERSION)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [2229]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PHP)
                  op: assign_op.Equal
                  rhs: {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<which>} {<php>}))}
                  spids: [2233]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PHP_CONFIG)
                  op: assign_op.Equal
                  rhs: 
                    {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<which>} {<php-config>}))}
                  spids: [2243]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PHPIZE)
                  op: assign_op.Equal
                  rhs: {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<which>} {<phpize>}))}
                  spids: [2253]
                )
              ]
            )
            (C {<ln>} {<-sfn>} {(DQ <'/usr/local/php-'> (${ Id.VSub_Name VERSION) <'-zts/bin/php'>)} 
              {($ Id.VSub_DollarName '$PHP')}
            )
            (C {<ln>} {<-sfn>} 
              {(DQ <'/usr/local/php-'> (${ Id.VSub_Name VERSION) <'-zts/bin/php-config'>)} {($ Id.VSub_DollarName '$PHP_CONFIG')}
            )
            (C {<ln>} {<-sfn>} {(DQ <'/usr/local/php-'> (${ Id.VSub_Name VERSION) <'-zts/bin/phpize'>)} 
              {($ Id.VSub_DollarName '$PHPIZE')}
            )
          ]
        )
    )
    (command.ShFunction
      name: use_php_bc
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:VERSION)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [2317]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PHP)
                  op: assign_op.Equal
                  rhs: {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<which>} {<php>}))}
                  spids: [2321]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PHP_CONFIG)
                  op: assign_op.Equal
                  rhs: 
                    {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<which>} {<php-config>}))}
                  spids: [2331]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PHPIZE)
                  op: assign_op.Equal
                  rhs: {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<which>} {<phpize>}))}
                  spids: [2341]
                )
              ]
            )
            (C {<ln>} {<-sfn>} {(DQ <'/usr/local/php-'> (${ Id.VSub_Name VERSION) <'-bc/bin/php'>)} 
              {($ Id.VSub_DollarName '$PHP')}
            )
            (C {<ln>} {<-sfn>} 
              {(DQ <'/usr/local/php-'> (${ Id.VSub_Name VERSION) <'-bc/bin/php-config'>)} {($ Id.VSub_DollarName '$PHP_CONFIG')}
            )
            (C {<ln>} {<-sfn>} {(DQ <'/usr/local/php-'> (${ Id.VSub_Name VERSION) <'-bc/bin/phpize'>)} 
              {($ Id.VSub_DollarName '$PHPIZE')}
            )
          ]
        )
    )
    (command.ShFunction
      name: build_php5.5
      body: 
        (BraceGroup
          children: [
            (C {<use_php>} {<5.5>})
            (C {<rm>} {<-rf>} {<vendor>})
            (C {<cp>} {<-r>} {<'/usr/local/vendor-5.5'>} {<vendor>})
            (C {<'./vendor/bin/phpunit'>})
          ]
        )
    )
    (command.ShFunction
      name: build_php5.5_c
      body: 
        (BraceGroup
          children: [
            (C {<use_php>} {<5.5>})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<cd>} {<'php/tests'>})
                (C {<'/bin/bash'>} {<'./test.sh'>})
                (C {<cd>} {<'../..'>})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: build_php5.5_zts_c
      body: 
        (BraceGroup
          children: [
            (C {<use_php_zts>} {<5.5>})
            (C {<wget>} {<https> <Id.Lit_Colon ':'> <'//phar.phpunit.de/phpunit-old.phar'>} {<-O>} 
              {<'/usr/bin/phpunit'>}
            )
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<cd>} {<'php/tests'>})
                (C {<'/bin/bash'>} {<'./test.sh'>})
                (C {<cd>} {<'../..'>})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: build_php5.5_32
      body: 
        (BraceGroup
          children: [
            (C {<use_php_bc>} {<5.5>})
            (C {<rm>} {<-rf>} {<vendor>})
            (C {<cp>} {<-r>} {<'/usr/local/vendor-5.5'>} {<vendor>})
            (C {<'./vendor/bin/phpunit'>})
          ]
        )
    )
    (command.ShFunction
      name: build_php5.6
      body: 
        (BraceGroup
          children: [
            (C {<use_php>} {<5.6>})
            (C {<rm>} {<-rf>} {<vendor>})
            (C {<cp>} {<-r>} {<'/usr/local/vendor-5.6'>} {<vendor>})
            (C {<'./vendor/bin/phpunit'>})
          ]
        )
    )
    (command.ShFunction
      name: build_php5.6_c
      body: 
        (BraceGroup
          children: [
            (C {<use_php>} {<5.6>})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<cd>} {<'php/tests'>})
                (C {<'/bin/bash'>} {<'./test.sh'>})
                (C {<cd>} {<'../..'>})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: build_php5.6_mac
      body: 
        (BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {<curl>} {<-s>} {<https> <Id.Lit_Colon ':'> <'//php-osx.liip.ch/install.sh'>})
                (C {<bash>} {<-s>} {<5.6>})
              ]
              negated: F
            )
            (C {<export>} 
              {<Id.Lit_VarLike 'PATH='> 
                (DQ <'/usr/local/php5-5.6.25-20160831-101628/bin:'> ($ Id.VSub_DollarName '$PATH'))
              }
            )
            (C {<curl>} {<https> <Id.Lit_Colon ':'> <'//phar.phpunit.de/phpunit.phar'>} {<-L>} {<-o>} 
              {<phpunit.phar>}
            )
            (C {<chmod>} {<Id.Lit_Other '+'> <x>} {<phpunit.phar>})
            (C {<sudo>} {<mv>} {<phpunit.phar>} {<'/usr/local/bin/phpunit'>})
            (command.Simple
              words: [{<echo>} {(DQ <'#! /bin/bash'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<valgrind>})]
              do_fork: T
            )
            (C {<chmod>} {<ug> <Id.Lit_Other '+'> <x>} {<valgrind>})
            (C {<sudo>} {<mv>} {<valgrind>} {<'/usr/local/bin/valgrind'>})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<cd>} {<'php/tests'>})
                (C {<'/bin/bash'>} {<'./test.sh'>})
                (C {<cd>} {<'../..'>})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: build_php7.0
      body: 
        (BraceGroup
          children: [
            (C {<use_php>} {<7.0>})
            (C {<rm>} {<-rf>} {<vendor>})
            (C {<cp>} {<-r>} {<'/usr/local/vendor-7.0'>} {<vendor>})
            (C {<'./vendor/bin/phpunit'>})
          ]
        )
    )
    (command.ShFunction
      name: build_php7.0_c
      body: 
        (BraceGroup
          children: [
            (C {<use_php>} {<7.0>})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<cd>} {<'php/tests'>})
                (C {<'/bin/bash'>} {<'./test.sh'>})
                (C {<cd>} {<'../..'>})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: build_php_all
      body: 
        (BraceGroup
          children: [
            (C {<build_php5.5>})
            (C {<build_php5.6>})
            (C {<build_php7.0>})
            (C {<build_php5.5_c>})
            (C {<build_php5.6_c>})
            (C {<build_php5.5_zts_c>})
          ]
        )
    )
    (command.ShFunction
      name: build_php_all_32
      body: (BraceGroup children:[(C {<build_php5.5_32>})])
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Pound '$#'))} {<-ne>} {<1>} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} 
              {
                (DQ <'\n'> <'Usage: '> ($ Id.VSub_Number '$0') <' { cpp |\n'> 
                  <'            cpp_distcheck |\n'> <'            csharp |\n'> <'            java_jdk7 |\n'> <'            java_oracle7 |\n'> 
                  <'            java_compatibility |\n'> <'            javanano_jdk7 |\n'> <'            javanano_oracle7 |\n'> 
                  <'            objectivec_ios |\n'> <'            objectivec_ios_debug |\n'> <'            objectivec_ios_release |\n'> 
                  <'            objectivec_osx |\n'> <'            objectivec_cocoapods_integration |\n'> <'            python |\n'> 
                  <'            python_cpp |\n'> <'            ruby21 |\n'> <'            ruby22 |\n'> <'            jruby |\n'> 
                  <'            ruby_all |\n'> <'            php5.5   |\n'> <'            php5.5_c |\n'> <'            php5.6   |\n'> 
                  <'            php5.6_c |\n'> <'            php7.0   |\n'> <'            php7.0_c |\n'> <'            php_all)\n'>
                )
              }
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [2862 2877]
        )
      ]
    )
    (C {<set>} {<-e>})
    (C {<set>} {<-x>})
    (C {<eval>} {(DQ <build_> ($ Id.VSub_Number '$1'))})
  ]
)