user: What is the c source code of the assembly code below:

```asm
<fmt2str>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  movl   $0x0,-0x4(%rbp)
  mov    -0x14(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L118
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  lea    D51(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <snprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L12
L118:
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  lea    D78(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <snprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
L12:
  mov    -0x14(%rbp),%eax
  and    $0x38,%eax
  test   %eax,%eax
  je     L54
  mov    -0x14(%rbp),%eax
  and    $0x38,%eax
  cmp    $0x20,%eax
  je     L28
  cmp    $0x20,%eax
  jg     L136
  cmp    $0x18,%eax
  je     L164
  cmp    $0x18,%eax
  jg     L136
  cmp    $0x8,%eax
  je     L2
  cmp    $0x10,%eax
  je     L83
  jmp    L136
L2:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  sub    %rdx,%rax
  mov    %rax,%rcx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D25(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <snprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L136
L83:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  sub    %rdx,%rax
  mov    %rax,%rcx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D6(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <snprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L136
L164:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  sub    %rdx,%rax
  mov    %rax,%rcx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D45(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <snprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L136
L28:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  sub    %rdx,%rax
  mov    %rax,%rcx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D67(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <snprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L136
L54:
  mov    -0x14(%rbp),%eax
  and    $0x4,%eax
  test   %eax,%eax
  je     L168
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x28(%rbp),%rax
  lea    D37(%rip),%rdx
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <snprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L136
L168:
  mov    -0x14(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L113
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  sub    %rdx,%rax
  mov    %rax,%rcx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D8(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <snprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L165
L113:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  sub    %rdx,%rax
  mov    %rax,%rcx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D39(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <snprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
L165:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x28(%rbp),%rax
  lea    D20(%rip),%rdx
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <snprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
L136:
  mov    -0x20(%rbp),%rax
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D51
type_guessed: string
name: disassemble_data
arguments: data_label: D78
type_guessed: string
name: disassemble_data
arguments: data_label: D25
type_guessed: string
name: disassemble_data
arguments: data_label: D6
type_guessed: string
name: disassemble_data
arguments: data_label: D45
type_guessed: string
name: disassemble_data
arguments: data_label: D67
type_guessed: string
name: disassemble_data
arguments: data_label: D37
type_guessed: string
name: disassemble_data
arguments: data_label: D8
type_guessed: string
name: disassemble_data
arguments: data_label: D39
type_guessed: string
name: disassemble_data
arguments: data_label: D20
type_guessed: string

tool: D51: little endian 

tool: D78: big endian 

tool: D25: mu law 

tool: D6: A law 

tool: D45: MPEG 2 

tool: D67: AC3 

tool: D37: float 

tool: D8: unsigned 

tool: D39: signed 

tool: D20: int 

assistant: ```c
char *fmt2str(int format, char *str, size_t size) {
  int i = 0;
  if ((1 << 0) == (format & (1 << 0)))
    i += snprintf(str, size, "little endian ");
  else
    i += snprintf(str, size, "big endian ");
  if (format & (7 << 3)) {
    switch (format & (7 << 3)) {
    case ((1 << 3)):
      i += snprintf(&str[i], size - i, "mu law ");
      break;
    case ((2 << 3)):
      i += snprintf(&str[i], size - i, "A law ");
      break;
    case ((3 << 3)):
      i += snprintf(&str[i], size - i, "MPEG 2 ");
      break;
    case ((4 << 3)):
      i += snprintf(&str[i], size - i, "AC3 ");
      break;
    }
  } else {
    if ((1 << 2) == (format & (1 << 2)))
      i += snprintf(&str[i], size, "float ");
    else {
      if ((1 << 1) == (format & (1 << 1)))
        i += snprintf(&str[i], size - i, "unsigned ");
      else
        i += snprintf(&str[i], size - i, "signed ");
      i += snprintf(&str[i], size, "int ");
    }
  }
  return str;
}
```