user: 下面的汇编指令对应的C源代码是什么:

```asm
<wpa_supplicant_cipher_txt>:
  endbr64
  push   %r15
  xor    %eax,%eax
  push   %r14
  push   %r13
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  mov    %rsi,%rbp
  sub    %edi,%esi
  push   %rbx
  mov    %edx,%ebx
  lea    D129(%rip),%rdx
  mov    %ebx,%r13d
  mov    %ebx,%r14d
  mov    %ebx,%r15d
  and    $0x10,%r13d
  and    $0x8,%r14d
  and    $0x4,%r15d
  sub    $0x18,%rsp
  call   <snprintf@plt>
  mov    %ebx,%r8d
  cltq
  and    $0x2,%r8d
  add    %rax,%r12
  and    $0x1,%ebx
  jne    L140
  test   %r8d,%r8d
  je     L156
  lea    D52(%rip),%rcx
L107:
  mov    %ebp,%esi
  mov    %r12,%rdi
  lea    D13(%rip),%rdx
  xor    %eax,%eax
  sub    %r12d,%esi
  call   <snprintf@plt>
  cltq
  add    %rax,%r12
  test   %r15d,%r15d
  jne    L167
  test   %r14d,%r14d
  jne    L88
  test   %r13d,%r13d
  je     L137
L123:
  lea    D42(%rip),%rcx
L22:
  mov    %ebp,%esi
  mov    %r12,%rdi
  lea    D116(%rip),%rdx
  xor    %eax,%eax
  sub    %r12d,%esi
  call   <snprintf@plt>
  cltq
  add    %rax,%r12
  jmp    L137
  cs nopw 0x0(%rax,%rax,1)
L156:
  lea    D52(%rip),%rcx
  test   %r15d,%r15d
  je     L8
L134:
  mov    %ebp,%esi
  mov    %r12,%rdi
  lea    D58(%rip),%rdx
  xor    %eax,%eax
  sub    %r12d,%esi
  call   <snprintf@plt>
  cltq
  add    %rax,%r12
  test   %r14d,%r14d
  jne    L88
L68:
  test   %r13d,%r13d
  jne    L123
L137:
  add    $0x18,%rsp
  mov    %r12,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L140:
  mov    %ebp,%esi
  lea    D52(%rip),%rcx
  mov    %r12,%rdi
  xor    %eax,%eax
  sub    %r12d,%esi
  lea    D78(%rip),%rdx
  mov    %r8d,0xc(%rsp)
  call   <snprintf@plt>
  mov    0xc(%rsp),%r8d
  lea    D42(%rip),%rcx
  cltq
  add    %rax,%r12
  test   %r8d,%r8d
  jne    L107
  test   %r15d,%r15d
  jne    L167
  test   %r14d,%r14d
  je     L68
L88:
  lea    D42(%rip),%r8
L11:
  mov    %ebp,%esi
  mov    %r12,%rdi
  mov    %r8,%rcx
  xor    %eax,%eax
  sub    %r12d,%esi
  lea    D122(%rip),%rdx
  call   <snprintf@plt>
  cltq
  add    %rax,%r12
  test   %r13d,%r13d
  jne    L123
  jmp    L137
  nopl   0x0(%rax)
L167:
  lea    D42(%rip),%rcx
  jmp    L134
  nopl   0x0(%rax)
L8:
  mov    %rcx,%r8
  test   %r14d,%r14d
  jne    L11
  test   %r13d,%r13d
  jne    L22
  jmp    L137
```

tool_calls: name: unpack_data
arguments: data_tag: D129
type_guessed: string
name: unpack_data
arguments: data_tag: D52
type_guessed: string
name: unpack_data
arguments: data_tag: D13
type_guessed: string
name: unpack_data
arguments: data_tag: D42
type_guessed: string
name: unpack_data
arguments: data_tag: D116
type_guessed: string
name: unpack_data
arguments: data_tag: D58
type_guessed: string
name: unpack_data
arguments: data_tag: D78
type_guessed: string
name: unpack_data
arguments: data_tag: D122
type_guessed: string

tool: D129: -

tool: 

tool: D13: %sWEP40

tool: D42: +

tool: D116: %sCCMP

tool: D58: %sWEP104

tool: D78: %sNONE

tool: D122: %sTKIP

assistant: ```c
char *wpa_supplicant_cipher_txt(char *pos, char *end, int cipher) {
  int first = 1;
  pos += snprintf(pos, end - pos, "-");
  if (cipher & (1 << (0))) {
    pos += snprintf(pos, end - pos, "%sNONE", first ? "" : "+");
    first = 0;
  }
  if (cipher & (1 << (1))) {
    pos += snprintf(pos, end - pos, "%sWEP40", first ? "" : "+");
    first = 0;
  }
  if (cipher & (1 << (2))) {
    pos += snprintf(pos, end - pos, "%sWEP104", first ? "" : "+");
    first = 0;
  }
  if (cipher & (1 << (3))) {
    pos += snprintf(pos, end - pos, "%sTKIP", first ? "" : "+");
    first = 0;
  }
  if (cipher & (1 << (4))) {
    pos += snprintf(pos, end - pos, "%sCCMP", first ? "" : "+");
    first = 0;
  }
  return pos;
}
```