(BraceGroup
  left: <Id.Lit_LBrace '{'>
  children: [
    (C {<.>} {<'/DietPi/dietpi/func/dietpi-globals'>})
    (C {<G_CHECK_ROOT_USER>})
    (C {<export>} {<Id.Lit_VarLike 'G_PROGRAM_NAME='> (SQ <DietPi-Set_userdata>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'EXIT_CODE='> name:EXIT_CODE)
          op: assign_op.Equal
          rhs: {<0>}
          spids: [96]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SOURCE_DIRECTORY='> name:SOURCE_DIRECTORY)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_Number 1))}
          spids: [101]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TARGET_DIRECTORY='> name:TARGET_DIRECTORY)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_Number 2))}
          spids: [107]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: 
            (sh_lhs_expr.Name
              left: <Id.Lit_VarLike 'LOGFILE_OUTPUT_TEXT='>
              name: LOGFILE_OUTPUT_TEXT
            )
          op: assign_op.Equal
          rhs: {(SQ )}
          spids: [114]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'FP_LOGFILE='> name:FP_LOGFILE)
          op: assign_op.Equal
          rhs: {(SQ <'/var/log/dietpi-move_userdata.log'>)}
          spids: [119]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SWAPFILE_SIZE='> name:SWAPFILE_SIZE)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.Pipeline
                    children: [
                      (C {<'/DietPi/dietpi/func/dietpi-set_dphys-swapfile'>})
                      (C {<awk>} {(SQ <'{print $1}'>)})
                    ]
                    negated: F
                    stderr_indices: []
                  )
                right: <Id.Eof_RParen _>
              )
            }
          spids: [126]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: 
            (sh_lhs_expr.Name
              left: <Id.Lit_VarLike 'FREESPACE_AVAILABLE_TARGET='>
              name: FREESPACE_AVAILABLE_TARGET
            )
          op: assign_op.Equal
          rhs: {<0>}
          spids: [141]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: 
            (sh_lhs_expr.Name
              left: <Id.Lit_VarLike 'FREESPACE_REQUIRED_SOURCE='>
              name: FREESPACE_REQUIRED_SOURCE
            )
          op: assign_op.Equal
          rhs: {<0>}
          spids: [145]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RUN_MOVE_DATA='> name:RUN_MOVE_DATA)
          op: assign_op.Equal
          rhs: {<1>}
          spids: [150]
        )
      ]
      redirects: []
    )
    (command.ShFunction
      name: Run_Move_Data
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (C {<'/DietPi/dietpi/dietpi-services'>} {<stop>})
            (C {<'/DietPi/dietpi/func/dietpi-set_dphys-swapfile'>} {<0>} {<'/mnt/.swapfile'>})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<-L>} 
                              {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY))} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(C {<rm>} {<-R>} {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY))})]
                  spids: [187 200]
                )
              ]
              else_action: []
              redirects: []
            )
            (C {<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY))})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<-z>} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: <Id.Left_DollarParen '$('>
                                    child: 
                                      (C {<find>} {($ Id.VSub_DollarName SOURCE_DIRECTORY)} 
                                        {<-maxdepth>} {<0>} {<-empty>}
                                      )
                                    right: <Id.Eof_RParen _>
                                  )
                                )
                              } {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<G_DIETPI-NOTIFY>} {<0>} 
                      {
                        (DQ <'Moving your existing data from '> 
                          ($ Id.VSub_DollarName SOURCE_DIRECTORY) <' to '> ($ Id.VSub_DollarName TARGET_DIRECTORY)
                        )
                      }
                    )
                    (C {<G_DIETPI-NOTIFY>} {<2>} {(DQ <'Please wait...'> <Id.Lit_BadBackslash '\\'> <n>)})
                    (C {<sleep>} {<1>})
                    (C {<local>} 
                      {<Id.Lit_VarLike 'fp_test_target='> 
                        (DQ ($ Id.VSub_DollarName TARGET_DIRECTORY) <'/.permissions_test'>)
                      }
                    )
                    (command.Simple
                      words: [{<rm>} {(DQ ($ Id.VSub_DollarName fp_test_target))}]
                      redirects: [
                        (redir
                          op: <Id.Redir_AndGreat '&>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<'/dev/null'>}
                        )
                      ]
                      more_env: []
                      do_fork: T
                    )
                    (command.Simple
                      words: [{<echo>} {<0>}]
                      redirects: [
                        (redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {(DQ ($ Id.VSub_DollarName fp_test_target))}
                        )
                      ]
                      more_env: []
                      do_fork: T
                    )
                    (command.Simple
                      words: [
                        {<chown>}
                        {<www-data> <Id.Lit_Colon ':'> <www-data>}
                        {(DQ ($ Id.VSub_DollarName fp_test_target))}
                      ]
                      redirects: [
                        (redir
                          op: <Id.Redir_AndGreat '&>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<'/dev/null'>}
                        )
                      ]
                      more_env: []
                      do_fork: T
                    )
                    (C {<local>} {<Id.Lit_VarLike 'cp_options='> (SQ <-vR>)})
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DParen
                                      child: 
                                        {
                                          (command_sub
                                            left_token: <Id.Left_DollarParen '$('>
                                            child: 
                                              (command.Pipeline
                                                children: [
                                                  (C {<ls>} {<-lha>} 
                                                    {(DQ ($ Id.VSub_DollarName fp_test_target))}
                                                  )
                                                  (C {<grep>} {<-ci>} {<-m1>} {(DQ <www-data>)})
                                                ]
                                                negated: F
                                                stderr_indices: []
                                              )
                                            right: <Id.Eof_RParen _>
                                          )
                                        }
                                      redirects: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'cp_options+='>
                                      name: cp_options
                                    )
                                  op: assign_op.PlusEqual
                                  rhs: {(SQ <p>)}
                                  spids: [385]
                                )
                              ]
                              redirects: []
                            )
                            (C {<G_DIETPI-NOTIFY>} {<2>} 
                              {(DQ <'Target filesystem supports user permissions:'>)}
                            )
                            (C {<G_DIETPI-NOTIFY>} {<2>} 
                              {(DQ <' - Attempting to preserve permissions during transfer.'>)}
                            )
                            (C {<sleep>} {<1>})
                          ]
                          spids: [351 381]
                        )
                      ]
                      else_action: []
                      redirects: []
                    )
                    (command.Simple
                      words: [{<rm>} {(DQ ($ Id.VSub_DollarName fp_test_target))}]
                      redirects: [
                        (redir
                          op: <Id.Redir_AndGreat '&>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<'/dev/null'>}
                        )
                      ]
                      more_env: []
                      do_fork: T
                    )
                    (C {<cp>} {(DQ ($ Id.VSub_DollarName cp_options))} 
                      {(DQ ($ Id.VSub_DollarName SOURCE_DIRECTORY)) <'/'> <Id.Lit_Star '*'>} {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY)) <'/'>}
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DParen
                                      child: 
                                        (arith_expr.Binary
                                          op_id: Id.Arith_DEqual
                                          left: {($ Id.VSub_QMark '?')}
                                          right: {<Id.Lit_Digits 0>}
                                        )
                                      redirects: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<rm>} {<-R>} 
                              {(DQ ($ Id.VSub_DollarName SOURCE_DIRECTORY)) <'/'> <Id.Lit_Star '*'>}
                            )
                          ]
                          spids: [459 473]
                        )
                      ]
                      else_action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: 
                                (sh_lhs_expr.Name
                                  left: <Id.Lit_VarLike 'LOGFILE_OUTPUT_TEXT='>
                                  name: LOGFILE_OUTPUT_TEXT
                                )
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ <'ERROR: Failed to copy '> 
                                    ($ Id.VSub_DollarName SOURCE_DIRECTORY) <'/* to '> ($ Id.VSub_DollarName TARGET_DIRECTORY) <.>
                                  )
                                }
                              spids: [493]
                            )
                          ]
                          redirects: []
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: 
                                (sh_lhs_expr.Name
                                  left: <Id.Lit_VarLike 'EXIT_CODE='>
                                  name: EXIT_CODE
                                )
                              op: assign_op.Equal
                              rhs: {<1>}
                              spids: [503]
                            )
                          ]
                          redirects: []
                        )
                        (command.ControlFlow
                          token: <Id.ControlFlow_Break break>
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [232 255]
                )
              ]
              else_action: []
              redirects: []
            )
            (C {<'/DietPi/dietpi/func/dietpi-set_dphys-swapfile'>} 
              {(DQ ($ Id.VSub_DollarName SWAPFILE_SIZE))} {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY)) <'/.swapfile'>}
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<-L>} 
                              {(DQ ($ Id.VSub_DollarName SOURCE_DIRECTORY))} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(C {<rm>} {<-R>} {(DQ ($ Id.VSub_DollarName SOURCE_DIRECTORY))})]
                  spids: [540 553]
                )
              ]
              else_action: []
              redirects: []
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY))} 
                              {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName G_FP_DIETPI_USERDATA))} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.Simple
                      words: [{<rm>} {<-R>} {(DQ ($ Id.VSub_DollarName G_FP_DIETPI_USERDATA))}]
                      redirects: [
                        (redir
                          op: <Id.Redir_AndGreat '&>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<'/dev/null'>}
                        )
                      ]
                      more_env: []
                      do_fork: T
                    )
                    (C {<ln>} {<-sf>} {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY))} 
                      {(DQ ($ Id.VSub_DollarName G_FP_DIETPI_USERDATA))}
                    )
                  ]
                  spids: [575 593]
                )
              ]
              else_action: []
              redirects: []
            )
            (C {<'/DietPi/dietpi/dietpi-software'>} {<setpermissions>})
            (C {<'/DietPi/dietpi/dietpi-services'>} {<start>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-d>} 
                          {(DQ ($ Id.VSub_DollarName G_FP_DIETPI_USERDATA))} {<Id.Lit_RBracket ']'>}
                        )
                        (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-L>} 
                          {(DQ ($ Id.VSub_DollarName G_FP_DIETPI_USERDATA))} {<Id.Lit_RBracket ']'>}
                        )
                      ]
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [(C {<'/DietPi/dietpi/func/dietpi-set_core_environment'>})]
          spids: [673 702]
        )
      ]
      else_action: []
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: 
            (sh_lhs_expr.Name
              left: <Id.Lit_VarLike 'target_to_lowercase='>
              name: target_to_lowercase
            )
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.Pipeline
                    children: [
                      (C {<echo>} {<-e>} {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY))})
                      (C {<tr>} {(SQ <'[:upper:]'>)} {(SQ <'[:lower:]'>)})
                    ]
                    negated: F
                    stderr_indices: []
                  )
                right: <Id.Eof_RParen _>
              )
            }
          spids: [726]
        )
      ]
      redirects: []
    )
    (C {<G_DIETPI-NOTIFY>} {<3>} {<DietPi>} {<Updating>} {<user>} {<Id.KW_Data data>} {<location>})
    (C {<G_DIETPI-NOTIFY>} {<2>} {(DQ <' - From : '> ($ Id.VSub_DollarName SOURCE_DIRECTORY))})
    (C {<G_DIETPI-NOTIFY>} {<2>} {(DQ <' - To   : '> ($ Id.VSub_DollarName TARGET_DIRECTORY))})
    (C {<G_DIETPI-NOTIFY>} {<2>} {(DQ <'Please wait...'>)})
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: 
        (condition.Shell
          commands: [
            (command.Sentence
              child: (command.DParen child:{($ Id.VSub_DollarName RUN_MOVE_DATA)} redirects:[])
              terminator: <Id.Op_Semi _>
            )
          ]
        )
      body: 
        (command.DoGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.AndOr
                              ops: [Id.Op_DPipe]
                              children: [
                                (C {<Id.Lit_LBracket '['>} {<-z>} 
                                  {(DQ ($ Id.VSub_DollarName SOURCE_DIRECTORY))} {<Id.Lit_RBracket ']'>}
                                )
                                (C {<Id.Lit_LBracket '['>} {<-z>} 
                                  {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY))} {<Id.Lit_RBracket ']'>}
                                )
                              ]
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'LOGFILE_OUTPUT_TEXT='>
                              name: LOGFILE_OUTPUT_TEXT
                            )
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ <'ERROR: Please provide a source ('> 
                                ($ Id.VSub_DollarName SOURCE_DIRECTORY) <') and target ('> ($ Id.VSub_DollarName TARGET_DIRECTORY) <') directory for input.'>
                              )
                            }
                          spids: [848]
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'EXIT_CODE='> name:EXIT_CODE)
                          op: assign_op.Equal
                          rhs: {<1>}
                          spids: [858]
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow token:<Id.ControlFlow_Break break>)
                  ]
                  spids: [819 844]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: <Id.Left_DollarParen '$('>
                                    child: 
                                      (C {<readlink>} {<-f>} 
                                        {($ Id.VSub_DollarName G_FP_DIETPI_USERDATA)}
                                      )
                                    right: <Id.Eof_RParen _>
                                  )
                                )
                              } {<Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY))} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'LOGFILE_OUTPUT_TEXT='>
                              name: LOGFILE_OUTPUT_TEXT
                            )
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ ($ Id.VSub_DollarName G_FP_DIETPI_USERDATA) 
                                <' is already symlinked to target directory.'>
                              )
                            }
                          spids: [897]
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'EXIT_CODE='> name:EXIT_CODE)
                          op: assign_op.Equal
                          rhs: {<0>}
                          spids: [904]
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow token:<Id.ControlFlow_Break break>)
                  ]
                  spids: [870 893]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-d>} 
                              {(DQ ($ Id.VSub_DollarName SOURCE_DIRECTORY))} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'LOGFILE_OUTPUT_TEXT='>
                              name: LOGFILE_OUTPUT_TEXT
                            )
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ <'ERROR: source directory '> ($ Id.VSub_DollarName SOURCE_DIRECTORY) 
                                <' does not exist.'>
                              )
                            }
                          spids: [938]
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'EXIT_CODE='> name:EXIT_CODE)
                          op: assign_op.Equal
                          rhs: {<1>}
                          spids: [946]
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow token:<Id.ControlFlow_Break break>)
                  ]
                  spids: [919 934]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DParen
                              child: 
                                (arith_expr.Binary
                                  op_id: Id.Arith_DPipe
                                  left: 
                                    {
                                      (command_sub
                                        left_token: <Id.Left_DollarParen '$('>
                                        child: 
                                          (command.Pipeline
                                            children: [
                                              (C {<echo>} {<-e>} 
                                                {(DQ ($ Id.VSub_DollarName SOURCE_DIRECTORY))}
                                              )
                                              (C {<grep>} {<-ci>} {<-m1>} 
                                                {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY))}
                                              )
                                            ]
                                            negated: F
                                            stderr_indices: []
                                          )
                                        right: <Id.Eof_RParen _>
                                      )
                                    }
                                  right: 
                                    {
                                      (command_sub
                                        left_token: <Id.Left_DollarParen '$('>
                                        child: 
                                          (command.Pipeline
                                            children: [
                                              (C {<echo>} {<-e>} 
                                                {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY))}
                                              )
                                              (C {<grep>} {<-ci>} {<-m1>} 
                                                {(DQ ($ Id.VSub_DollarName SOURCE_DIRECTORY))}
                                              )
                                            ]
                                            negated: F
                                            stderr_indices: []
                                          )
                                        right: <Id.Eof_RParen _>
                                      )
                                    }
                                )
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'LOGFILE_OUTPUT_TEXT='>
                              name: LOGFILE_OUTPUT_TEXT
                            )
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ <'ERROR: '> ($ Id.VSub_DollarName SOURCE_DIRECTORY) <' and '> 
                                ($ Id.VSub_DollarName TARGET_DIRECTORY) <' cannot be within each other. Disallowed directory match.'>
                              )
                            }
                          spids: [1017]
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'EXIT_CODE='> name:EXIT_CODE)
                          op: assign_op.Equal
                          rhs: {<1>}
                          spids: [1027]
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow token:<Id.ControlFlow_Break break>)
                  ]
                  spids: [958 1013]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.AndOr
                              ops: [Id.Op_DPipe]
                              children: [
                                (C {<Id.Lit_LBracket '['>} 
                                  {
                                    (DQ 
                                      (braced_var_sub
                                        left: <Id.Left_DollarBrace '${'>
                                        token: <Id.VSub_Name SOURCE_DIRECTORY>
                                        var_name: SOURCE_DIRECTORY
                                        suffix_op: 
                                          (suffix_op.Slice
                                            begin: {<Id.Lit_Digits 0>}
                                            length: {<Id.Lit_Digits 1>}
                                          )
                                        right: <Id.Arith_RBrace _>
                                      )
                                    )
                                  } {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <'/'>)} {<Id.Lit_RBracket ']'>}
                                )
                                (C {<Id.Lit_LBracket '['>} 
                                  {
                                    (DQ 
                                      (braced_var_sub
                                        left: <Id.Left_DollarBrace '${'>
                                        token: <Id.VSub_Name TARGET_DIRECTORY>
                                        var_name: TARGET_DIRECTORY
                                        suffix_op: 
                                          (suffix_op.Slice
                                            begin: {<Id.Lit_Digits 0>}
                                            length: {<Id.Lit_Digits 1>}
                                          )
                                        right: <Id.Arith_RBrace _>
                                      )
                                    )
                                  } {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <'/'>)} {<Id.Lit_RBracket ']'>}
                                )
                              ]
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'LOGFILE_OUTPUT_TEXT='>
                              name: LOGFILE_OUTPUT_TEXT
                            )
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ <'ERROR: Both source ('> ($ Id.VSub_DollarName SOURCE_DIRECTORY) 
                                <') and target directories ('> ($ Id.VSub_DollarName TARGET_DIRECTORY) <') must contain the full filepath (eg: /mnt/drive1)'>
                              )
                            }
                          spids: [1090]
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'EXIT_CODE='> name:EXIT_CODE)
                          op: assign_op.Equal
                          rhs: {<1>}
                          spids: [1100]
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow token:<Id.ControlFlow_Break break>)
                  ]
                  spids: [1039 1086]
                )
              ]
              else_action: []
              redirects: []
            )
            (command.Simple
              words: [{<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY))}]
              redirects: [
                (redir
                  op: <Id.Redir_AndGreat '&>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {<'/dev/null'>}
                )
              ]
              more_env: []
              do_fork: T
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-d>} 
                              {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY))} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'LOGFILE_OUTPUT_TEXT='>
                              name: LOGFILE_OUTPUT_TEXT
                            )
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ <'ERROR: Unable to create target directory '> 
                                ($ Id.VSub_DollarName TARGET_DIRECTORY) <.>
                              )
                            }
                          spids: [1148]
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'EXIT_CODE='> name:EXIT_CODE)
                          op: assign_op.Equal
                          rhs: {<1>}
                          spids: [1156]
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow token:<Id.ControlFlow_Break break>)
                  ]
                  spids: [1129 1144]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: 
                        (sh_lhs_expr.Name
                          left: <Id.Lit_VarLike 'test_file_name='>
                          name: test_file_name
                        )
                      op: assign_op.Equal
                      rhs: {(DQ <.testfile_dietpi_userdata>)}
                      spids: [1172]
                    )
                  ]
                  redirects: []
                )
                (command.Simple
                  words: [{<echo>} {<0>}]
                  redirects: [
                    (redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: 
                        {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY)) <'/'> 
                          (DQ ($ Id.VSub_DollarName test_file_name))
                        }
                    )
                  ]
                  more_env: []
                  do_fork: T
                )
                (command.If
                  arms: [
                    (if_arm
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (C {<Id.Lit_LBracket '['>} {<-f>} 
                                  {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY)) <'/'> 
                                    (DQ ($ Id.VSub_DollarName test_file_name))
                                  } {<Id.Lit_RBracket ']'>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      action: [
                        (C {<rm>} 
                          {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY)) <'/'> 
                            (DQ ($ Id.VSub_DollarName test_file_name))
                          }
                        )
                      ]
                      spids: [1195 1212]
                    )
                  ]
                  else_action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'LOGFILE_OUTPUT_TEXT='>
                              name: LOGFILE_OUTPUT_TEXT
                            )
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ <'ERROR: Unable to create test file in target directory '> 
                                ($ Id.VSub_DollarName TARGET_DIRECTORY) <'. Check permissions.'>
                              )
                            }
                          spids: [1229]
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'EXIT_CODE='> name:EXIT_CODE)
                          op: assign_op.Equal
                          rhs: {<1>}
                          spids: [1237]
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow token:<Id.ControlFlow_Break break>)
                  ]
                  redirects: []
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: 
                    (sh_lhs_expr.Name
                      left: <Id.Lit_VarLike 'FREESPACE_AVAILABLE_TARGET='>
                      name: FREESPACE_AVAILABLE_TARGET
                    )
                  op: assign_op.Equal
                  rhs: 
                    {
                      (word_part.ArithSub
                        anode: 
                          (arith_expr.Binary
                            op_id: Id.Arith_Star
                            left: 
                              {
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: 
                                    (command.Pipeline
                                      children: [
                                        (C {<df>} {<-Pk>} {(DQ ($ Id.VSub_DollarName TARGET_DIRECTORY))})
                                        (C {<awk>} {(SQ <'{print $4}'>)})
                                        (C {<sed>} {<-n>} {<2p>})
                                      ]
                                      negated: F
                                      stderr_indices: []
                                    )
                                  right: <Id.Eof_RParen _>
                                )
                              }
                            right: {<Id.Lit_Digits 1024>}
                          )
                      )
                    }
                  spids: [1256]
                )
              ]
              redirects: []
            )
            (C {<G_DIETPI-NOTIFY>} {<2>} 
              {(DQ <'Calculating space required for moving data, please wait...'>)}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: 
                    (sh_lhs_expr.Name
                      left: <Id.Lit_VarLike 'FREESPACE_REQUIRED_SOURCE='>
                      name: FREESPACE_REQUIRED_SOURCE
                    )
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Pipeline
                            children: [
                              (C {<du>} {<-cbs>} {(DQ ($ Id.VSub_DollarName SOURCE_DIRECTORY))})
                              (C {<awk>} {(SQ <'{print $1}'>)})
                              (C {<sed>} {<-n>} {<1p>})
                            ]
                            negated: F
                            stderr_indices: []
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                  spids: [1306]
                )
              ]
              redirects: []
            )
            (C {<echo>} {<-e>} 
              {(DQ <' - Available '> ($ Id.VSub_DollarName FREESPACE_AVAILABLE_TARGET) <' bytes'>)}
            )
            (C {<echo>} {<-e>} 
              {(DQ <' - Required  '> ($ Id.VSub_DollarName FREESPACE_REQUIRED_SOURCE) <' bytes'>)}
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DParen
                              child: 
                                (arith_expr.Binary
                                  op_id: Id.Arith_Less
                                  left: {($ Id.VSub_DollarName FREESPACE_AVAILABLE_TARGET)}
                                  right: {($ Id.VSub_DollarName FREESPACE_REQUIRED_SOURCE)}
                                )
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'LOGFILE_OUTPUT_TEXT='>
                              name: LOGFILE_OUTPUT_TEXT
                            )
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ <'ERROR: Not enough free space in target directory '> 
                                ($ Id.VSub_DollarName TARGET_DIRECTORY) <.> <Id.Lit_BadBackslash '\\'> <'n - Available '> ($ Id.VSub_DollarName FREESPACE_AVAILABLE_TARGET) 
                                <Id.Lit_BadBackslash '\\'> <'n - Required '> ($ Id.VSub_DollarName FREESPACE_REQUIRED_SOURCE)
                              )
                            }
                          spids: [1379]
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'EXIT_CODE='> name:EXIT_CODE)
                          op: assign_op.Equal
                          rhs: {<1>}
                          spids: [1393]
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow token:<Id.ControlFlow_Break break>)
                  ]
                  spids: [1361 1375]
                )
              ]
              else_action: []
              redirects: []
            )
            (C {<Run_Move_Data>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RUN_MOVE_DATA='> name:RUN_MOVE_DATA)
                  op: assign_op.Equal
                  rhs: {<0>}
                  spids: [1417]
                )
              ]
              redirects: []
            )
          ]
        )
      redirects: []
    )
    (command.Simple
      words: [{<rm>} {(DQ ($ Id.VSub_DollarName FP_LOGFILE))}]
      redirects: [(redir op:<Id.Redir_AndGreat '&>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})]
      more_env: []
      do_fork: T
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName LOGFILE_OUTPUT_TEXT))} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DParen
                              child: 
                                (arith_expr.Binary
                                  op_id: Id.Arith_DEqual
                                  left: {($ Id.VSub_DollarName EXIT_CODE)}
                                  right: {<Id.Lit_Digits 0>}
                                )
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<G_DIETPI-NOTIFY>} {<2>} {(DQ ($ Id.VSub_DollarName LOGFILE_OUTPUT_TEXT))})
                  ]
                  spids: [1467 1481]
                )
              ]
              else_action: [
                (C {<G_DIETPI-NOTIFY>} {<1>} {(DQ ($ Id.VSub_DollarName LOGFILE_OUTPUT_TEXT))})
              ]
              redirects: []
            )
            (C {<echo>} {<-e>} {(DQ )})
            (command.Simple
              words: [{<echo>} {<-e>} {(DQ ($ Id.VSub_DollarName LOGFILE_OUTPUT_TEXT))}]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName FP_LOGFILE))}
                )
              ]
              more_env: []
              do_fork: T
            )
          ]
          spids: [1445 1458]
        )
      ]
      else_action: [
        (C {<G_DIETPI-NOTIFY>} {<2>} {<User>} {<Id.KW_Data data>} {<location>} {<setup>} {<completed.>})
        (C {<echo>} {<-e>} {(DQ )})
      ]
      redirects: []
    )
    (C {<G_DIETPI-NOTIFY>} {<-1>} 
      {
        (braced_var_sub
          left: <Id.Left_DollarBrace '${'>
          token: <Id.VSub_Name EXIT_CODE>
          var_name: EXIT_CODE
          suffix_op: (suffix_op.Unary op:<Id.VTest_ColonEquals _> arg_word:{<0>})
          right: <Id.Right_DollarBrace '}'>
        )
      }
    )
    (command.ControlFlow
      token: <Id.ControlFlow_Exit exit>
      arg_word: {($ Id.VSub_DollarName EXIT_CODE)}
    )
  ]
  redirects: []
  right: <Id.Lit_RBrace '}'>
)