(CommandList
  children: [
    (C {(set)} {(-eu)})
    (FuncDef
      name: make_helper
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:containing_dir)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 1))}
                  spids: [77]
                )
              ]
              spids: [75]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:app_name)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 2))}
                  spids: [87]
                )
              ]
              spids: [85]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:feature)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 3))}
                  spids: [97]
                )
              ]
              spids: [95]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:flags)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 4))}
                  spids: [107]
                )
              ]
              spids: [105]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:helper_name)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name app_name) (' Helper'))}
                  spids: [118]
                )
              ]
              spids: [116]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:helper_stem)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name containing_dir) (/) (${ VSub_Name helper_name))}
                  spids: [129]
                )
              ]
              spids: [127]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:original_helper)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name helper_stem) (.app))}
                  spids: [143]
                )
              ]
              spids: [141]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (LogicalNot
                              child: 
                                (BoolUnary
                                  op_id: BoolUnary_d
                                  child: {(DQ (${ VSub_Name original_helper))}
                                )
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ (${ VSub_Number 0) (': error: ') (${ VSub_Name original_helper) 
                            (' is a required directory')
                          )
                        }
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:16777215 arg_word:{(2)} spids:[185])]
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [16777215 169]
                )
              ]
              spids: [16777215 195]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:original_helper_exe)
                  op: Equal
                  rhs: 
                    {
                      (DQ (${ VSub_Name original_helper) (/Contents/MacOS/) (${ VSub_Name helper_name))
                    }
                  spids: [200]
                )
              ]
              spids: [198]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (LogicalNot
                              child: 
                                (BoolUnary
                                  op_id: BoolUnary_f
                                  child: {(DQ (${ VSub_Name original_helper_exe))}
                                )
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ (${ VSub_Number 0) (': error: ') (${ VSub_Name original_helper_exe) 
                            (' is a required file')
                          )
                        }
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:16777215 arg_word:{(2)} spids:[245])]
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [16777215 229]
                )
              ]
              spids: [16777215 255]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:feature_helper)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name helper_stem) (' ') (${ VSub_Name feature) (.app))}
                  spids: [261]
                )
              ]
              spids: [259]
            )
            (C {(rsync)} {(-acC)} {(--delete)} {(--include)} {(SQ <'*.so'>)} 
              {(DQ (${ VSub_Name original_helper) (/))} {(DQ (${ VSub_Name feature_helper))}
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:helper_feature)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name helper_name) (' ') (${ VSub_Name feature))}
                  spids: [304]
                )
              ]
              spids: [302]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:helper_feature_exe)
                  op: Equal
                  rhs: 
                    {
                      (DQ (${ VSub_Name feature_helper) (/Contents/MacOS/) 
                        (${ VSub_Name helper_feature)
                      )
                    }
                  spids: [318]
                )
              ]
              spids: [316]
            )
            (C {(mv)} {(DQ (${ VSub_Name feature_helper) (/Contents/MacOS/) (${ VSub_Name helper_name))} 
              {(DQ (${ VSub_Name helper_feature_exe))}
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:change_flags)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [(C {(dirname)} {(DQ (${ VSub_Number 0))})]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [354 362]
                        ) (/change_mach_o_flags.py)
                      )
                    }
                  spids: [352]
                )
              ]
              spids: [350]
            )
            (C {(DQ (${ VSub_Name change_flags))} {(${ VSub_Name flags)} 
              {(DQ (${ VSub_Name helper_feature_exe))}
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:feature_info)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name feature_helper) (/Contents/Info))}
                  spids: [387]
                )
              ]
              spids: [385]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:feature_info_plist)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name feature_info) (.plist))}
                  spids: [398]
                )
              ]
              spids: [396]
            )
            (C {(defaults)} {(write)} {(DQ (${ VSub_Name feature_info))} {(DQ (CFBundleDisplayName))} 
              {(DQ (${ VSub_Name helper_feature))}
            )
            (C {(defaults)} {(write)} {(DQ (${ VSub_Name feature_info))} {(DQ (CFBundleExecutable))} 
              {(DQ (${ VSub_Name helper_feature))}
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cfbundleid)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (C {(defaults)} {(read)} {(DQ (${ VSub_Name feature_info))} 
                                  {(DQ (CFBundleIdentifier))}
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [453 467]
                        )
                      )
                    }
                  spids: [451]
                )
              ]
              spids: [451]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:feature_cfbundleid)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name cfbundleid) (.) (${ VSub_Name feature))}
                  spids: [471]
                )
              ]
              spids: [471]
            )
            (C {(defaults)} {(write)} {(DQ (${ VSub_Name feature_info))} {(DQ (CFBundleIdentifier))} 
              {(DQ (${ VSub_Name feature_cfbundleid))}
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cfbundlename)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (C {(defaults)} {(read)} {(DQ (${ VSub_Name feature_info))} 
                                  {(DQ (CFBundleName))}
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [507 521]
                        )
                      )
                    }
                  spids: [505]
                )
              ]
              spids: [505]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:feature_cfbundlename)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name cfbundlename) (' ') (${ VSub_Name feature))}
                  spids: [525]
                )
              ]
              spids: [525]
            )
            (C {(defaults)} {(write)} {(DQ (${ VSub_Name feature_info))} {(DQ (CFBundleName))} 
              {(DQ (${ VSub_Name feature_cfbundlename))}
            )
            (C {(plutil)} {(-convert)} {(xml1)} {(DQ (${ VSub_Name feature_info_plist))})
            (C {(chmod)} {(a) (Lit_Other '+') (r)} {(DQ (${ VSub_Name feature_info_plist))})
          ]
          spids: [72]
        )
      spids: [68 71]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: (BoolBinary op_id:BoolBinary_ne left:{(${ VSub_Pound '#')} right:{(2)})
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (SimpleCommand
              words: [
                {(echo)}
                {(DQ ('usage: ') (${ VSub_Number 0) (' <directory_within_contents> <app_name>'))}
              ]
              redirects: [(Redir op_id:Redir_GreatAnd fd:16777215 arg_word:{(2)} spids:[632])]
            )
            (C {(exit)} {(1)})
          ]
          spids: [16777215 619]
        )
      ]
      spids: [16777215 641]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:DIRECTORY_WITHIN_CONTENTS)
          op: Equal
          rhs: {(DQ (${ VSub_Number 1))}
          spids: [644]
        )
      ]
      spids: [644]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:APP_NAME)
          op: Equal
          rhs: {(DQ (${ VSub_Number 2))}
          spids: [651]
        )
      ]
      spids: [651]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:CONTENTS_DIR)
          op: Equal
          rhs: {(DQ (${ VSub_Name BUILT_PRODUCTS_DIR) (/) (${ VSub_Name CONTENTS_FOLDER_PATH))}
          spids: [659]
        )
      ]
      spids: [659]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:CONTAINING_DIR)
          op: Equal
          rhs: {(DQ (${ VSub_Name CONTENTS_DIR) (/) (${ VSub_Name DIRECTORY_WITHIN_CONTENTS))}
          spids: [670]
        )
      ]
      spids: [670]
    )
    (C {(make_helper)} {(DQ (${ VSub_Name CONTAINING_DIR))} {(DQ (${ VSub_Name APP_NAME))} {(DQ (EH))} 
      {(DQ (--executable-heap))}
    )
    (C {(make_helper)} {(DQ (${ VSub_Name CONTAINING_DIR))} {(DQ (${ VSub_Name APP_NAME))} {(DQ (NP))} 
      {(DQ (--no-pie))}
    )
  ]
)