user: 请将以下的汇编代码转换成C语言代码:

```asm
<decode>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x20(%rbp)
  movl   $0x0,-0x1c(%rbp)
  movl   $0x0,-0x18(%rbp)
  mov    -0x28(%rbp),%rax
  mov    $0x8,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,-0x20(%rbp)
  mov    -0x30(%rbp),%rax
  lea    D382(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  cmpl   $0x5,-0x20(%rbp)
  jne    L577
  mov    -0x30(%rbp),%rax
  lea    D611(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x1,%edx
  mov    $0xc,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  test   %eax,%eax
  je     L4
  mov    -0x30(%rbp),%rax
  lea    D738(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L4:
  mov    -0x28(%rbp),%rax
  mov    $0x1,%edx
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  test   %eax,%eax
  je     L402
  mov    -0x30(%rbp),%rax
  lea    D48(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L402:
  mov    -0x28(%rbp),%rax
  mov    $0x1,%edx
  mov    $0xe,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  test   %eax,%eax
  je     L70
  mov    -0x30(%rbp),%rax
  lea    D241(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L70:
  mov    -0x28(%rbp),%rax
  mov    $0x1,%edx
  mov    $0xf,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  test   %eax,%eax
  je     L152
  mov    -0x30(%rbp),%rax
  lea    D748(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L152:
  mov    -0x28(%rbp),%rax
  mov    $0x1,%edx
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  test   %eax,%eax
  je     L50
  mov    -0x30(%rbp),%rax
  lea    D337(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L577:
  cmpl   $0xa5,-0x20(%rbp)
  jne    L906
  mov    -0x28(%rbp),%rax
  mov    $0x4,%edx
  mov    $0x9,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,%edx
  lea    -0x14(%rbp),%rax
  lea    D389(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x4,%edx
  mov    $0xd,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,%edx
  lea    -0x12(%rbp),%rax
  lea    D389(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x4,%edx
  mov    $0x13,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,%edx
  lea    -0x10(%rbp),%rax
  lea    D389(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x5,%edx
  mov    $0x17,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,%edx
  lea    -0xe(%rbp),%rax
  lea    D389(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x5,%edx
  mov    $0x1c,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,%edx
  lea    -0xc(%rbp),%rax
  lea    D389(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x6,%edx
  mov    $0x21,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,%edx
  lea    -0xa(%rbp),%rax
  lea    D389(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    -0x30(%rbp),%rax
  lea    D223(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x14(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0x12(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x30(%rbp),%rax
  lea    D260(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0x10(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x30(%rbp),%rax
  lea    D260(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0xe(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x30(%rbp),%rax
  lea    D3(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0xc(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x30(%rbp),%rax
  lea    D761(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0xa(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L906:
  cmpl   $0x27,-0x20(%rbp)
  jne    L621
  mov    -0x30(%rbp),%rax
  lea    D358(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x8,%edx
  mov    $0x29,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L401
  mov    -0x30(%rbp),%rax
  lea    D257(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L401:
  mov    -0x1c(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L165
  mov    -0x30(%rbp),%rax
  lea    D15(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L165:
  mov    -0x1c(%rbp),%eax
  and    $0x4,%eax
  test   %eax,%eax
  je     L705
  mov    -0x30(%rbp),%rax
  lea    D522(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L705:
  mov    -0x1c(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L671
  mov    -0x30(%rbp),%rax
  lea    D560(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L671:
  mov    -0x1c(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L763
  mov    -0x30(%rbp),%rax
  lea    D476(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L763:
  mov    -0x1c(%rbp),%eax
  and    $0x20,%eax
  test   %eax,%eax
  je     L28
  mov    -0x30(%rbp),%rax
  lea    D762(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L28:
  mov    -0x1c(%rbp),%eax
  and    $0x40,%eax
  test   %eax,%eax
  je     L754
  mov    -0x30(%rbp),%rax
  lea    D88(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L754:
  mov    -0x1c(%rbp),%eax
  and    $0x80,%eax
  test   %eax,%eax
  je     L50
  mov    -0x30(%rbp),%rax
  lea    D155(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L621:
  cmpl   $0x2d,-0x20(%rbp)
  jne    L5
  mov    -0x30(%rbp),%rax
  lea    D104(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x8,%edx
  mov    $0x29,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L483
  mov    -0x30(%rbp),%rax
  lea    D383(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L483:
  mov    -0x1c(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L231
  mov    -0x30(%rbp),%rax
  lea    D671(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L231:
  mov    -0x1c(%rbp),%eax
  and    $0x4,%eax
  test   %eax,%eax
  je     L703
  mov    -0x30(%rbp),%rax
  lea    D179(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L703:
  mov    -0x1c(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L620
  mov    -0x30(%rbp),%rax
  lea    D153(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L620:
  mov    -0x1c(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L661
  mov    -0x30(%rbp),%rax
  lea    D290(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L661:
  mov    -0x1c(%rbp),%eax
  and    $0x20,%eax
  test   %eax,%eax
  je     L211
  mov    -0x30(%rbp),%rax
  lea    D544(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L211:
  mov    -0x1c(%rbp),%eax
  and    $0x40,%eax
  test   %eax,%eax
  je     L350
  mov    -0x30(%rbp),%rax
  lea    D431(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L350:
  mov    -0x1c(%rbp),%eax
  and    $0x80,%eax
  test   %eax,%eax
  je     L50
  mov    -0x30(%rbp),%rax
  lea    D440(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L5:
  cmpl   $0x34,-0x20(%rbp)
  jne    L627
  mov    -0x30(%rbp),%rax
  lea    D130(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x8,%edx
  mov    $0x29,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L237
  mov    -0x30(%rbp),%rax
  lea    D383(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L237:
  mov    -0x1c(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L603
  mov    -0x30(%rbp),%rax
  lea    D671(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L603:
  mov    -0x1c(%rbp),%eax
  and    $0x4,%eax
  test   %eax,%eax
  je     L358
  mov    -0x30(%rbp),%rax
  lea    D179(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L358:
  mov    -0x1c(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L571
  mov    -0x30(%rbp),%rax
  lea    D153(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L571:
  mov    -0x1c(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L182
  mov    -0x30(%rbp),%rax
  lea    D290(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L182:
  mov    -0x1c(%rbp),%eax
  and    $0x20,%eax
  test   %eax,%eax
  je     L331
  mov    -0x30(%rbp),%rax
  lea    D544(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L331:
  mov    -0x1c(%rbp),%eax
  and    $0x40,%eax
  test   %eax,%eax
  je     L505
  mov    -0x30(%rbp),%rax
  lea    D431(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L505:
  mov    -0x1c(%rbp),%eax
  and    $0x80,%eax
  test   %eax,%eax
  je     L50
  mov    -0x30(%rbp),%rax
  lea    D440(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L627:
  cmpl   $0x3e,-0x20(%rbp)
  jne    L901
  mov    -0x30(%rbp),%rax
  lea    D372(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x8,%edx
  mov    $0x29,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L318
  mov    -0x30(%rbp),%rax
  lea    D383(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L318:
  mov    -0x1c(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L572
  mov    -0x30(%rbp),%rax
  lea    D671(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L572:
  mov    -0x1c(%rbp),%eax
  and    $0x4,%eax
  test   %eax,%eax
  je     L33
  mov    -0x30(%rbp),%rax
  lea    D179(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L33:
  mov    -0x1c(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L305
  mov    -0x30(%rbp),%rax
  lea    D153(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L305:
  mov    -0x1c(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L767
  mov    -0x30(%rbp),%rax
  lea    D290(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L767:
  mov    -0x1c(%rbp),%eax
  and    $0x20,%eax
  test   %eax,%eax
  je     L352
  mov    -0x30(%rbp),%rax
  lea    D544(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L352:
  mov    -0x1c(%rbp),%eax
  and    $0x40,%eax
  test   %eax,%eax
  je     L325
  mov    -0x30(%rbp),%rax
  lea    D431(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L325:
  mov    -0x1c(%rbp),%eax
  and    $0x80,%eax
  test   %eax,%eax
  je     L50
  mov    -0x30(%rbp),%rax
  lea    D440(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L901:
  cmpl   $0xa,-0x20(%rbp)
  jne    L35
  mov    -0x30(%rbp),%rax
  lea    D351(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L50
L35:
  cmpl   $0x63,-0x20(%rbp)
  jne    L625
  mov    -0x30(%rbp),%rax
  lea    D593(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L50
L625:
  cmpl   $0x64,-0x20(%rbp)
  jne    L503
  mov    -0x30(%rbp),%rax
  lea    D593(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L50
L503:
  cmpl   $0x69,-0x20(%rbp)
  jne    L92
  mov    -0x30(%rbp),%rax
  lea    D593(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L50
L92:
  cmpl   $0x5d,-0x20(%rbp)
  jne    L720
  mov    -0x30(%rbp),%rax
  lea    D593(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L50
L720:
  cmpl   $0x39,-0x20(%rbp)
  jne    L337
  mov    -0x30(%rbp),%rax
  lea    D537(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L50
L337:
  cmpl   $0x11,-0x20(%rbp)
  jne    L113
  mov    -0x30(%rbp),%rax
  lea    D537(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L50
L113:
  cmpl   $0xff,-0x20(%rbp)
  jne    L513
  mov    -0x30(%rbp),%rax
  lea    D262(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x28(%rbp),%rax
  mov    $0x20,%edx
  mov    $0x8,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  cmp    $0xffffffff,%eax
  jne    L363
  mov    -0x30(%rbp),%rax
  lea    D540(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L363:
  mov    -0x28(%rbp),%rax
  mov    $0x14,%edx
  mov    $0x8,%esi
  mov    %rax,%rdi
  call   <getBinaryData@plt>
  mov    %eax,-0x18(%rbp)
  cmpl   $0x947ff,-0x18(%rbp)
  jne    L649
  mov    -0x30(%rbp),%rax
  lea    D463(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L649:
  cmpl   $0x96fff,-0x18(%rbp)
  jne    L744
  mov    -0x30(%rbp),%rax
  lea    D273(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L744:
  cmpl   $0x807ff,-0x18(%rbp)
  jne    L794
  mov    -0x30(%rbp),%rax
  lea    D659(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L794:
  cmpl   $0x82fff,-0x18(%rbp)
  jne    L761
  mov    -0x30(%rbp),%rax
  lea    D177(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L761:
  cmpl   $0x857ff,-0x18(%rbp)
  jne    L224
  mov    -0x30(%rbp),%rax
  lea    D623(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L224:
  cmpl   $0x87fff,-0x18(%rbp)
  jne    L805
  mov    -0x30(%rbp),%rax
  lea    D107(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L805:
  cmpl   $0x88fff,-0x18(%rbp)
  jne    L474
  mov    -0x30(%rbp),%rax
  lea    D252(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L474:
  cmpl   $0x8b7ff,-0x18(%rbp)
  jne    L87
  mov    -0x30(%rbp),%rax
  lea    D71(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L87:
  cmpl   $0x8dfff,-0x18(%rbp)
  jne    L674
  mov    -0x30(%rbp),%rax
  lea    D464(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L674:
  cmpl   $0x8e7ff,-0x18(%rbp)
  jne    L301
  mov    -0x30(%rbp),%rax
  lea    D148(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L301:
  cmpl   $0x917ff,-0x18(%rbp)
  jne    L362
  mov    -0x30(%rbp),%rax
  lea    D688(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L362:
  cmpl   $0x93fff,-0x18(%rbp)
  jne    L320
  mov    -0x30(%rbp),%rax
  lea    D429(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L320:
  mov    -0x30(%rbp),%rax
  lea    D471(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L50
L513:
  mov    -0x30(%rbp),%rax
  lea    D711(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
L50:
  mov    -0x20(%rbp),%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L336
  call   <__stack_chk_fail@plt>
L336:
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D382
type: string
name: parse_data
arguments: label: D611
type: string
name: parse_data
arguments: label: D738
type: string
name: parse_data
arguments: label: D48
type: string
name: parse_data
arguments: label: D241
type: string
name: parse_data
arguments: label: D748
type: string
name: parse_data
arguments: label: D337
type: string
name: parse_data
arguments: label: D389
type: string
name: parse_data
arguments: label: D223
type: string
name: parse_data
arguments: label: D260
type: string
name: parse_data
arguments: label: D3
type: string
name: parse_data
arguments: label: D761
type: string
name: parse_data
arguments: label: D358
type: string
name: parse_data
arguments: label: D257
type: string
name: parse_data
arguments: label: D15
type: string
name: parse_data
arguments: label: D522
type: string
name: parse_data
arguments: label: D560
type: string
name: parse_data
arguments: label: D476
type: string
name: parse_data
arguments: label: D762
type: string
name: parse_data
arguments: label: D88
type: string
name: parse_data
arguments: label: D155
type: string
name: parse_data
arguments: label: D104
type: string
name: parse_data
arguments: label: D383
type: string
name: parse_data
arguments: label: D671
type: string
name: parse_data
arguments: label: D179
type: string
name: parse_data
arguments: label: D153
type: string
name: parse_data
arguments: label: D290
type: string
name: parse_data
arguments: label: D544
type: string
name: parse_data
arguments: label: D431
type: string
name: parse_data
arguments: label: D440
type: string
name: parse_data
arguments: label: D130
type: string
name: parse_data
arguments: label: D372
type: string
name: parse_data
arguments: label: D351
type: string
name: parse_data
arguments: label: D593
type: string
name: parse_data
arguments: label: D537
type: string
name: parse_data
arguments: label: D262
type: string
name: parse_data
arguments: label: D540
type: string
name: parse_data
arguments: label: D463
type: string
name: parse_data
arguments: label: D273
type: string
name: parse_data
arguments: label: D659
type: string
name: parse_data
arguments: label: D177
type: string
name: parse_data
arguments: label: D623
type: string
name: parse_data
arguments: label: D107
type: string
name: parse_data
arguments: label: D252
type: string
name: parse_data
arguments: label: D71
type: string
name: parse_data
arguments: label: D464
type: string
name: parse_data
arguments: label: D148
type: string
name: parse_data
arguments: label: D688
type: string
name: parse_data
arguments: label: D429
type: string
name: parse_data
arguments: label: D471
type: string
name: parse_data
arguments: label: D711
type: string

tool: 

tool: D611: p->k LED Status: 

tool: D738: Error 

tool: D48: Bypass 

tool: D241: Memory 

tool: D748: Armed 

tool: D337: Ready 

tool: D389: %d

tool: D223: p->k Date: 20

tool: D260: -

tool: D3:  

tool: D761: :

tool: D358: p->k Zone1: 

tool: D257: 1 

tool: D15: 2 

tool: D522: 3 

tool: D560: 4 

tool: D476: 5 

tool: D762: 6 

tool: D88: 7 

tool: D155: 8 

tool: D104: p->k Zone2: 

tool: D383: 9 

tool: D671: 10 

tool: D179: 11 

tool: D153: 12 

tool: D290: 13 

tool: D544: 14 

tool: D431: 15 

tool: D440: 16 

tool: D130: p->k Zone3: 

tool: D372: p->k Zone4: 

tool: D351: p->k panel in program mode

tool: D593: p->k undefined command

tool: D537: p->k Keypad query

tool: D262: k->p 

tool: D540: idle

tool: D463: button * pressed

tool: D273: button # pressed

tool: D659: button 0 pressed

tool: D177: button 1 pressed

tool: D623: button 2 pressed

tool: D107: button 3 pressed

tool: D252: button 4 pressed

tool: D71: button 5 pressed

tool: D464: button 6 pressed

tool: D148: button 7 pressed

tool: D688: button 8 pressed

tool: D429: button 9 pressed

tool: D471: unknown keypad msg

tool: D711: p->k unknown command.

assistant: ```c
int decode(char *word, char *msg) {
  int cmd = 0, zones = 0, button = 0;
  char year3[2], year4[2], month[2], day[2], hour[2], minute[2];
  cmd = getBinaryData(word, 0, 8);
  strcpy(msg, "");
  if (cmd == 0x05) {
    strcpy(msg, "p->k LED Status: ");
    if (getBinaryData(word, 12, 1))
      strcat(msg, "Error ");
    if (getBinaryData(word, 13, 1))
      strcat(msg, "Bypass ");
    if (getBinaryData(word, 14, 1))
      strcat(msg, "Memory ");
    if (getBinaryData(word, 15, 1))
      strcat(msg, "Armed ");
    if (getBinaryData(word, 16, 1))
      strcat(msg, "Ready ");
  } else if (cmd == 0xa5) {
    sprintf(year3, "%d", getBinaryData(word, 9, 4));
    sprintf(year4, "%d", getBinaryData(word, 13, 4));
    sprintf(month, "%d", getBinaryData(word, 19, 4));
    sprintf(day, "%d", getBinaryData(word, 23, 5));
    sprintf(hour, "%d", getBinaryData(word, 28, 5));
    sprintf(minute, "%d", getBinaryData(word, 33, 6));
    strcpy(msg, "p->k Date: 20");
    strcat(msg, year3);
    strcat(msg, year4);
    strcat(msg, "-");
    strcat(msg, month);
    strcat(msg, "-");
    strcat(msg, day);
    strcat(msg, " ");
    strcat(msg, hour);
    strcat(msg, ":");
    strcat(msg, minute);
  } else if (cmd == 0x27) {
    strcpy(msg, "p->k Zone1: ");
    zones = getBinaryData(word, 41, 8);
    if (zones & 1)
      strcat(msg, "1 ");
    if (zones & 2)
      strcat(msg, "2 ");
    if (zones & 4)
      strcat(msg, "3 ");
    if (zones & 8)
      strcat(msg, "4 ");
    if (zones & 16)
      strcat(msg, "5 ");
    if (zones & 32)
      strcat(msg, "6 ");
    if (zones & 64)
      strcat(msg, "7 ");
    if (zones & 128)
      strcat(msg, "8 ");
  } else if (cmd == 0x2d) {
    strcpy(msg, "p->k Zone2: ");
    zones = getBinaryData(word, 41, 8);
    if (zones & 1)
      strcat(msg, "9 ");
    if (zones & 2)
      strcat(msg, "10 ");
    if (zones & 4)
      strcat(msg, "11 ");
    if (zones & 8)
      strcat(msg, "12 ");
    if (zones & 16)
      strcat(msg, "13 ");
    if (zones & 32)
      strcat(msg, "14 ");
    if (zones & 64)
      strcat(msg, "15 ");
    if (zones & 128)
      strcat(msg, "16 ");
  } else if (cmd == 0x34) {
    strcpy(msg, "p->k Zone3: ");
    zones = getBinaryData(word, 41, 8);
    if (zones & 1)
      strcat(msg, "9 ");
    if (zones & 2)
      strcat(msg, "10 ");
    if (zones & 4)
      strcat(msg, "11 ");
    if (zones & 8)
      strcat(msg, "12 ");
    if (zones & 16)
      strcat(msg, "13 ");
    if (zones & 32)
      strcat(msg, "14 ");
    if (zones & 64)
      strcat(msg, "15 ");
    if (zones & 128)
      strcat(msg, "16 ");
  } else if (cmd == 0x3e) {
    strcpy(msg, "p->k Zone4: ");
    zones = getBinaryData(word, 41, 8);
    if (zones & 1)
      strcat(msg, "9 ");
    if (zones & 2)
      strcat(msg, "10 ");
    if (zones & 4)
      strcat(msg, "11 ");
    if (zones & 8)
      strcat(msg, "12 ");
    if (zones & 16)
      strcat(msg, "13 ");
    if (zones & 32)
      strcat(msg, "14 ");
    if (zones & 64)
      strcat(msg, "15 ");
    if (zones & 128)
      strcat(msg, "16 ");
  } else if (cmd == 0x0a)
    strcpy(msg, "p->k panel in program mode");
  else if (cmd == 0x63)
    strcpy(msg, "p->k undefined command");
  else if (cmd == 0x64)
    strcpy(msg, "p->k undefined command");
  else if (cmd == 0x69)
    strcpy(msg, "p->k undefined command");
  else if (cmd == 0x5d)
    strcpy(msg, "p->k undefined command");
  else if (cmd == 0x39)
    strcpy(msg, "p->k Keypad query");
  else if (cmd == 0x11)
    strcpy(msg, "p->k Keypad query");
  else if (cmd == 0xff) {
    strcpy(msg, "k->p ");
    if (getBinaryData(word, 8, 32) == 0xffffffff)
      strcat(msg, "idle");
    else {
      button = getBinaryData(word, 8, 20);
      if (button == 0x947ff)
        strcat(msg, "button * pressed");
      else if (button == 0x96fff)
        strcat(msg, "button # pressed");
      else if (button == 0x807ff)
        strcat(msg, "button 0 pressed");
      else if (button == 0x82fff)
        strcat(msg, "button 1 pressed");
      else if (button == 0x857ff)
        strcat(msg, "button 2 pressed");
      else if (button == 0x87fff)
        strcat(msg, "button 3 pressed");
      else if (button == 0x88fff)
        strcat(msg, "button 4 pressed");
      else if (button == 0x8b7ff)
        strcat(msg, "button 5 pressed");
      else if (button == 0x8dfff)
        strcat(msg, "button 6 pressed");
      else if (button == 0x8e7ff)
        strcat(msg, "button 7 pressed");
      else if (button == 0x917ff)
        strcat(msg, "button 8 pressed");
      else if (button == 0x93fff)
        strcat(msg, "button 9 pressed");
      else
        strcat(msg, "unknown keypad msg");
    }
  } else
    strcpy(msg, "p->k unknown command.");
  return cmd;
}
```