user: 请从给定的汇编指令推导出C源代码:

```asm
<Create_Campaign>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x1,-0x54(%rbp)
  movl   $0x0,-0x50(%rbp)
  mov    $0x0,%eax
  call   <Create_Campaign_File@plt>
  mov    %rax,-0x30(%rbp)
  cmpq   $0x0,-0x30(%rbp)
  jne    L221
  mov    $0x0,%eax
  jmp    L174
L221:
  lea    -0x20(%rbp),%rax
  mov    $0x14,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  mov    $0x0,%eax
  call   <Create_Campaign_Start_Point@plt>
  mov    %eax,-0x44(%rbp)
  mov    $0x0,%eax
  call   <rand@plt>
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%edx
  mov    %edx,%ecx
  add    %ecx,%ecx
  add    %edx,%ecx
  sub    %ecx,%eax
  mov    %eax,%edx
  lea    0x3(%rdx),%eax
  mov    %eax,-0x40(%rbp)
  movl   $0x0,-0x4c(%rbp)
  jmp    L171
L86:
  mov    -0x40(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x4c(%rbp)
  jge    L72
  mov    $0x0,%eax
  call   <rand@plt>
  cltd
  shr    $0x1f,%edx
  add    %edx,%eax
  and    $0x1,%eax
  sub    %edx,%eax
  mov    %eax,-0x58(%rbp)
  jmp    L128
L72:
  movl   $0x0,-0x58(%rbp)
L128:
  cmpl   $0x0,-0x58(%rbp)
  jne    L279
L62:
  mov    $0x0,%eax
  call   <rand@plt>
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    %edx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%edx
  mov    %edx,%ecx
  shl    $0x2,%ecx
  add    %edx,%ecx
  sub    %ecx,%eax
  mov    %eax,%edx
  lea    0x1(%rdx),%eax
  mov    %eax,-0x3c(%rbp)
  cmpl   $0x0,-0x4c(%rbp)
  jne    L201
  mov    -0x3c(%rbp),%eax
  cmp    -0x44(%rbp),%eax
  jne    L201
  movl   $0x0,-0x48(%rbp)
  jmp    L82
L201:
  cmpl   $0x0,-0x4c(%rbp)
  jle    L178
  mov    -0x4c(%rbp),%eax
  sub    $0x1,%eax
  cltq
  mov    -0x20(%rbp,%rax,4),%eax
  cmp    %eax,-0x3c(%rbp)
  jne    L178
  movl   $0x0,-0x48(%rbp)
  jmp    L82
L178:
  movl   $0x1,-0x48(%rbp)
L82:
  cmpl   $0x0,-0x48(%rbp)
  je     L62
  mov    -0x4c(%rbp),%eax
  cltq
  mov    -0x3c(%rbp),%edx
  mov    %edx,-0x20(%rbp,%rax,4)
  jmp    L211
L279:
  mov    -0x4c(%rbp),%eax
  cltq
  movl   $0x6,-0x20(%rbp,%rax,4)
L211:
  addl   $0x1,-0x4c(%rbp)
L171:
  mov    -0x4c(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jl     L86
  movl   $0x0,-0x4c(%rbp)
  jmp    L25
L284:
  mov    -0x4c(%rbp),%eax
  cltq
  mov    -0x20(%rbp,%rax,4),%eax
  cmp    $0x6,%eax
  jne    L60
  mov    -0x4c(%rbp),%eax
  add    $0x1,%eax
  cltq
  mov    -0x20(%rbp,%rax,4),%eax
  mov    %eax,%edi
  call   <Create_Campaign_Pickup_Objective@plt>
  mov    %rax,-0x38(%rbp)
  movl   $0x0,-0x54(%rbp)
  jmp    L9
L60:
  mov    -0x4c(%rbp),%eax
  add    $0x1,%eax
  cltq
  mov    -0x20(%rbp,%rax,4),%edx
  mov    -0x4c(%rbp),%eax
  cltq
  mov    -0x20(%rbp,%rax,4),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <Create_Campaign_Arrive_Objective@plt>
  mov    %rax,-0x38(%rbp)
L9:
  cmpl   $0x0,-0x50(%rbp)
  jne    L156
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <Create_Campaign_Description@plt>
  mov    %rax,-0x28(%rbp)
  cmpq   $0x0,-0x28(%rbp)
  je     L246
  mov    -0x28(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  lea    D60(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
L246:
  mov    $0x0,%eax
  call   <Create_Campaign_Weather@plt>
  mov    %rax,-0x28(%rbp)
  cmpq   $0x0,-0x28(%rbp)
  je     L90
  mov    -0x28(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  lea    D60(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
L90:
  mov    $0x0,%eax
  call   <Create_Campaign_Scenery@plt>
  mov    %rax,-0x28(%rbp)
  cmpq   $0x0,-0x28(%rbp)
  je     L38
  mov    -0x28(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  lea    D60(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
L38:
  mov    $0x0,%eax
  call   <Place_Campaign_Ship@plt>
  mov    %rax,-0x28(%rbp)
  cmpq   $0x0,-0x28(%rbp)
  je     L188
  mov    -0x28(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  lea    D60(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
L188:
  mov    -0x44(%rbp),%eax
  mov    %eax,%edi
  call   <Get_Location_Symbol@plt>
  mov    %rax,-0x28(%rbp)
  cmpq   $0x0,-0x28(%rbp)
  je     L263
  mov    -0x28(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  lea    D13(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
L263:
  movl   $0x1,-0x50(%rbp)
L156:
  cmpq   $0x0,-0x38(%rbp)
  je     L159
  mov    -0x38(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  lea    D60(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
L159:
  addl   $0x1,-0x4c(%rbp)
L25:
  mov    -0x4c(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jl     L284
  lea    -0x20(%rbp),%rdx
  mov    -0x44(%rbp),%eax
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <Place_Campaign_Humans@plt>
  mov    %rax,-0x28(%rbp)
  cmpq   $0x0,-0x28(%rbp)
  je     L52
  mov    -0x28(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  lea    D60(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
L52:
  mov    -0x54(%rbp),%eax
  mov    %eax,%edi
  call   <Create_Campaign_Aircraft@plt>
  mov    %rax,-0x28(%rbp)
  cmpq   $0x0,-0x28(%rbp)
  je     L77
  mov    -0x28(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  lea    D60(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
L77:
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  mov    $0x1,%eax
L174:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L50
  call   <__stack_chk_fail@plt>
L50:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D60
type: string
name: parse_data
arguments: data_label: D13
type: string

tool: D60: %s


tool: D13: mission_begin_at %s


assistant: ```c
int Create_Campaign() {
  FILE *camp_file;
  char *objective_string, *temp_string;
  int start_point;
  int objective_type, all_arrivals = 1;
  int number_of_objectives;
  int done_description = 0;
  int destination[5];
  int count;
  camp_file = Create_Campaign_File();
  if (!camp_file)
    return 0;
  memset(destination, 0, 5 * sizeof(int));
  start_point = Create_Campaign_Start_Point();
  number_of_objectives = (rand() % 3) + 3;
  count = 0;
  while (count < number_of_objectives) {
    if (count < (number_of_objectives - 1))
      objective_type = rand() % 2;
    else
      objective_type = 0;
    if (objective_type == 0) {
      int done;
      int temp_place;
      do {
        temp_place = (rand() % 5) + 1;
        if ((count == 0) && (temp_place == start_point))
          done = 0;
        else if ((count > 0) && (temp_place == destination[count - 1]))
          done = 0;
        else
          done = 1;
      } while (!done);
      destination[count] = temp_place;
    } else
      destination[count] = 6;
    count++;
  }
  count = 0;
  while (count < number_of_objectives) {
    if (destination[count] == 6) {
      objective_string = Create_Campaign_Pickup_Objective(destination[count + 1]);
      all_arrivals = 0;
    } else
      objective_string = Create_Campaign_Arrive_Objective(destination[count], destination[count + 1]);
    if (!done_description) {
      temp_string = Create_Campaign_Description(destination[0]);
      if (temp_string) {
        fprintf(camp_file, "%s\n", temp_string);
        free(temp_string);
      }
      temp_string = Create_Campaign_Weather();
      if (temp_string) {
        fprintf(camp_file, "%s\n", temp_string);
        free(temp_string);
      }
      temp_string = Create_Campaign_Scenery();
      if (temp_string) {
        fprintf(camp_file, "%s\n", temp_string);
        free(temp_string);
      }
      temp_string = Place_Campaign_Ship();
      if (temp_string) {
        fprintf(camp_file, "%s\n", temp_string);
        free(temp_string);
      }
      temp_string = Get_Location_Symbol(start_point);
      if (temp_string) {
        fprintf(camp_file, "mission_begin_at %s\n", temp_string);
        free(temp_string);
      }
      done_description = 1;
    }
    if (objective_string) {
      fprintf(camp_file, "%s\n", objective_string);
      free(objective_string);
    }
    count++;
  }
  temp_string = Place_Campaign_Humans(start_point, destination);
  if (temp_string) {
    fprintf(camp_file, "%s\n", temp_string);
    free(temp_string);
  }
  temp_string = Create_Campaign_Aircraft(all_arrivals);
  if (temp_string) {
    fprintf(camp_file, "%s\n", temp_string);
    free(temp_string);
  }
  fclose(camp_file);
  return 1;
}
```