user: 这段汇编代码用C语言表示是什么样的:

```asm
<LzmaDecode>:
  endbr64
  push   %r15
  mov    %ecx,%r11d
  add    %edx,%ecx
  mov    %esi,%esi
  push   %r14
  mov    $0x2,%r10d
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edx,-0x34(%rsp)
  mov    $0x300,%edx
  shl    %cl,%edx
  lea    0x736(%rdx),%eax
  mov    %rax,%rcx
  add    %rax,%rax
  cmp    %rax,%rsi
  jb     L885
  test   %ecx,%ecx
  je     L286
  lea    0x735(%rdx),%eax
  cmp    $0x6,%eax
  jbe    L470
  mov    %ecx,%esi
  movdqa D18(%rip),%xmm0
  mov    %rdi,%rax
  shr    $0x3,%esi
  sub    $0x1,%esi
  shl    $0x4,%rsi
  lea    0x10(%rdi,%rsi,1),%rsi
  xchg   %ax,%ax
L617:
  movups %xmm0,(%rax)
  add    $0x10,%rax
  cmp    %rsi,%rax
  jne    L617
  mov    %ecx,%eax
  and    $0xfffffff8,%eax
  test   $0x7,%cl
  je     L286
L350:
  sub    %eax,%edx
  lea    0x736(%rdx),%esi
  add    $0x735,%edx
  cmp    $0x2,%edx
  jbe    L1397
  mov    D18(%rip),%r10
  mov    %eax,%edx
  mov    %r10,(%rdi,%rdx,2)
  mov    %esi,%edx
  and    $0xfffffffc,%edx
  add    %edx,%eax
  cmp    %esi,%edx
  je     L286
L1397:
  mov    %eax,%edx
  mov    $0x400,%r10d
  mov    %r10w,(%rdi,%rdx,2)
  lea    0x1(%rax),%edx
  cmp    %edx,%ecx
  jbe    L286
  mov    $0x400,%esi
  add    $0x2,%eax
  mov    %si,(%rdi,%rdx,2)
  cmp    %eax,%ecx
  jbe    L286
  mov    $0x400,%edx
  mov    %dx,(%rdi,%rax,2)
L286:
  mov    0x38(%rsp),%esi
  add    %r9,%rsi
  cmp    %rsi,%r9
  je     L1392
  lea    0x1(%r9),%rax
  movzbl (%r9),%edx
  cmp    %rax,%rsi
  je     L1392
  movzbl 0x1(%r9),%eax
  shl    $0x8,%edx
  or     %edx,%eax
  lea    0x2(%r9),%rdx
  cmp    %rdx,%rsi
  je     L1392
  movzbl 0x2(%r9),%edx
  shl    $0x8,%eax
  or     %eax,%edx
  lea    0x3(%r9),%rax
  cmp    %rax,%rsi
  je     L1392
  movzbl 0x3(%r9),%eax
  shl    $0x8,%edx
  or     %edx,%eax
  lea    0x4(%r9),%rdx
  cmp    %rdx,%rsi
  je     L1392
  movzbl 0x4(%r9),%edx
  shl    $0x8,%eax
  lea    0x5(%r9),%r10
  or     %eax,%edx
  mov    0x50(%rsp),%rax
  movl   $0x0,(%rax)
  mov    0x48(%rsp),%eax
  test   %eax,%eax
  je     L769
  mov    $0x1,%eax
  mov    %r8d,%ecx
  movl   $0x0,-0x38(%rsp)
  mov    %rdi,%rbp
  mov    %eax,%ebx
  movl   $0x1,-0x14(%rsp)
  xor    %r9d,%r9d
  xor    %r14d,%r14d
  shl    %cl,%ebx
  mov    %r11d,%ecx
  movl   $0x1,-0x24(%rsp)
  xor    %r11d,%r11d
  shl    %cl,%eax
  movl   $0x1,-0x28(%rsp)
  lea    -0x1(%rbx),%ebx
  mov    %rdi,%r13
  sub    $0x1,%eax
  mov    %ebx,-0x20(%rsp)
  mov    $0xffffffff,%ecx
  xor    %ebx,%ebx
  mov    %eax,-0x1c(%rsp)
  lea    0x644(%rdi),%rax
  mov    $0x800,%r15d
  mov    %rax,-0x8(%rsp)
  mov    $0x8,%eax
  sub    -0x34(%rsp),%eax
  movl   $0x1,-0x30(%rsp)
  mov    %eax,-0x18(%rsp)
L531:
  movzwl 0x0(%rbp),%r8d
  mov    %ecx,%eax
  shr    $0xb,%eax
  imul   %r8d,%eax
  mov    %r8d,%edi
  cmp    %eax,%edx
  jae    L642
  mov    %r15d,%ecx
  mov    -0x1c(%rsp),%edi
  mov    -0x38(%rsp),%ebx
  sub    %r8d,%ecx
  sar    $0x5,%ecx
  and    %ebx,%edi
  add    %r8d,%ecx
  mov    %cx,0x0(%rbp)
  movzbl -0x34(%rsp),%ecx
  shl    %cl,%edi
  movzbl -0x18(%rsp),%ecx
  sar    %cl,%r9d
  lea    (%rdi,%r9,1),%ecx
  lea    (%rcx,%rcx,2),%ecx
  shl    $0x8,%ecx
  lea    0xe6c(%r13,%rcx,2),%rbp
  cmp    $0x6,%r14d
  jle    L1507
  mov    %ebx,%ecx
  mov    0x40(%rsp),%rbx
  sub    -0x30(%rsp),%ecx
  movzbl (%rbx,%rcx,1),%r9d
  mov    $0x1,%ecx
  jmp    L310
  nopw   0x0(%rax,%rax,1)
L1517:
  mov    %r15d,%eax
  add    %ecx,%ecx
  sub    %r12d,%eax
  sar    $0x5,%eax
  add    %r12d,%eax
  mov    %ax,(%rbx)
  mov    %edi,%eax
  test   %r8d,%r8d
  jne    L1405
L1284:
  cmp    $0xff,%ecx
  jg     L321
L310:
  add    %r9d,%r9d
  movslq %ecx,%r11
  mov    %r9d,%r8d
  and    $0x100,%r8d
  lea    0x100(%r8),%edi
  movslq %edi,%rdi
  add    %r11,%rdi
  lea    0x0(%rbp,%rdi,2),%rbx
  cmp    $0xffffff,%eax
  ja     L420
  cmp    %rsi,%r10
  je     L1392
  movzbl (%r10),%edi
  shl    $0x8,%edx
  shl    $0x8,%eax
  add    $0x1,%r10
  or     %edi,%edx
L420:
  movzwl (%rbx),%r12d
  mov    %eax,%edi
  shr    $0xb,%edi
  imul   %r12d,%edi
  mov    %r12d,%r11d
  cmp    %edi,%edx
  jb     L1517
  sub    %edi,%eax
  sub    %edi,%edx
  lea    0x1(%rcx,%rcx,1),%ecx
  mov    %r12d,%edi
  shr    $0x5,%di
  sub    %edi,%r11d
  mov    %r11w,(%rbx)
  test   %r8d,%r8d
  jne    L1284
L1405:
  cmp    $0xff,%ecx
  jle    L427
  nopl   0x0(%rax)
L321:
  mov    -0x38(%rsp),%edi
  mov    0x40(%rsp),%r11
  movzbl %cl,%r9d
  mov    %r10,%r8
  mov    %rdi,%rbx
  mov    %cl,(%r11,%rdi,1)
  add    $0x1,%ebx
  mov    %ebx,-0x38(%rsp)
L222:
  lea    -0x3(%r14),%ecx
  lea    -0x6(%r14),%edi
  cmp    $0x9,%r14d
  cmovg  %edi,%ecx
  mov    %ecx,%r14d
  jmp    L1170
  nopl   (%rax)
L642:
  sub    %eax,%ecx
  sub    %eax,%edx
  mov    %r8d,%eax
  shr    $0x5,%ax
  sub    %eax,%edi
  movslq %r14d,%rax
  lea    0x180(%rax,%rax,1),%r9
  mov    %di,0x0(%rbp)
  lea    0x0(%r13,%r9,1),%rdi
  cmp    $0xffffff,%ecx
  jbe    L525
L661:
  movzwl (%rdi),%ebp
  mov    %ecx,%r8d
  shr    $0xb,%r8d
  imul   %ebp,%r8d
  mov    %ebp,%eax
  cmp    %r8d,%edx
  jb     L1452
  sub    %r8d,%ecx
  sub    %r8d,%edx
  mov    %ebp,%r8d
  shr    $0x5,%r8w
  sub    %r8d,%eax
  mov    %ax,(%rdi)
  lea    0x18(%r13,%r9,1),%rdi
  cmp    $0xffffff,%ecx
  jbe    L318
L1189:
  movzwl (%rdi),%ebp
  mov    %ecx,%r8d
  shr    $0xb,%r8d
  imul   %ebp,%r8d
  mov    %ebp,%eax
  cmp    %r8d,%edx
  jae    L135
  mov    %r15d,%ecx
  sub    %ebp,%ecx
  sar    $0x5,%ecx
  add    %ebp,%ecx
  mov    %cx,(%rdi)
  lea    0x1e0(%r13,%rbx,2),%rdi
  cmp    $0xffffff,%r8d
  ja     L1219
  cmp    %rsi,%r10
  je     L1392
  movzbl (%r10),%eax
  shl    $0x8,%edx
  shl    $0x8,%r8d
  add    $0x1,%r10
  or     %eax,%edx
L1219:
  movzwl (%rdi),%r9d
  mov    %r8d,%eax
  shr    $0xb,%eax
  imul   %r9d,%eax
  mov    %r9d,%ecx
  cmp    %eax,%edx
  jae    L140
  mov    %r15d,%r8d
  mov    -0x38(%rsp),%ebx
  sub    %r9d,%r8d
  sar    $0x5,%r8d
  add    %r8d,%ecx
  mov    %cx,(%rdi)
  test   %ebx,%ebx
  jne    L1132
  nopl   (%rax)
L1392:
  mov    $0x1,%r10d
L885:
  pop    %rbx
  mov    %r10d,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L525:
  cmp    %rsi,%r10
  je     L1392
  movzbl (%r10),%eax
  shl    $0x8,%edx
  shl    $0x8,%ecx
  add    $0x1,%r10
  or     %eax,%edx
  jmp    L661
  nopw   0x0(%rax,%rax,1)
L1507:
  mov    $0x1,%ecx
  nopl   (%rax)
L427:
  movslq %ecx,%rdi
  lea    0x0(%rbp,%rdi,2),%r9
  cmp    $0xffffff,%eax
  ja     L1271
  cmp    %r10,%rsi
  je     L1392
  movzbl (%r10),%edi
  shl    $0x8,%edx
  shl    $0x8,%eax
  add    $0x1,%r10
  or     %edi,%edx
L1271:
  movzwl (%r9),%r11d
  mov    %eax,%edi
  shr    $0xb,%edi
  imul   %r11d,%edi
  mov    %r11d,%r8d
  cmp    %edi,%edx
  jae    L779
  mov    %r15d,%eax
  add    %ecx,%ecx
  sub    %r11d,%eax
  sar    $0x5,%eax
  add    %r11d,%eax
  mov    %ax,(%r9)
  mov    %edi,%eax
  cmp    $0xff,%ecx
  jle    L427
L1108:
  mov    -0x38(%rsp),%r8d
  mov    0x40(%rsp),%rbx
  movzbl %cl,%r9d
  lea    0x1(%r8),%edi
  mov    %cl,(%rbx,%r8,1)
  mov    %r10,%r8
  mov    %edi,-0x38(%rsp)
  cmp    $0x3,%r14d
  jg     L222
  xor    %r14d,%r14d
L1170:
  mov    -0x38(%rsp),%ebx
  cmp    0x48(%rsp),%ebx
  jae    L842
  mov    -0x20(%rsp),%r11d
  and    %ebx,%r11d
  mov    %r14d,%ebx
  shl    $0x4,%ebx
  movslq %r11d,%rcx
  movslq %ebx,%rbx
  add    %rcx,%rbx
  lea    0x0(%r13,%rbx,2),%rbp
  cmp    $0xffffff,%eax
  ja     L882
  cmp    %rsi,%r8
  je     L1392
  shl    $0x8,%eax
  shl    $0x8,%edx
  lea    0x1(%r8),%r10
  mov    %eax,%ecx
  movzbl (%r8),%eax
  or     %eax,%edx
  jmp    L531
  nopw   0x0(%rax,%rax,1)
L1452:
  mov    -0x24(%rsp),%eax
  mov    %r15d,%ecx
  sub    %ebp,%ecx
  mov    %eax,-0x14(%rsp)
  mov    -0x28(%rsp),%eax
  sar    $0x5,%ecx
  add    %ebp,%ecx
  cmp    $0x7,%r14d
  mov    %eax,-0x24(%rsp)
  mov    -0x30(%rsp),%eax
  setge  %r14b
  movzbl %r14b,%r14d
  mov    %cx,(%rdi)
  lea    0x664(%r13),%rdi
  mov    %eax,-0x28(%rsp)
  lea    (%r14,%r14,2),%r14d
L889:
  cmp    $0xffffff,%r8d
  ja     L1025
  cmp    %rsi,%r10
  je     L1392
  movzbl (%r10),%eax
  shl    $0x8,%edx
  shl    $0x8,%r8d
  add    $0x1,%r10
  or     %eax,%edx
L1025:
  movzwl (%rdi),%r9d
  mov    %r8d,%eax
  shr    $0xb,%eax
  imul   %r9d,%eax
  mov    %r9d,%ecx
  cmp    %eax,%edx
  jb     L1290
  sub    %eax,%r8d
  sub    %eax,%edx
  mov    %r9d,%eax
  shr    $0x5,%ax
  sub    %eax,%ecx
  mov    %cx,(%rdi)
  cmp    $0xffffff,%r8d
  ja     L552
  cmp    %rsi,%r10
  je     L1392
  movzbl (%r10),%eax
  shl    $0x8,%edx
  shl    $0x8,%r8d
  add    $0x1,%r10
  or     %eax,%edx
L552:
  movzwl 0x2(%rdi),%r9d
  mov    %r8d,%eax
  shr    $0xb,%eax
  imul   %r9d,%eax
  mov    %r9d,%ecx
  cmp    %eax,%edx
  jae    L400
  mov    %r15d,%r8d
  shl    $0x3,%r11d
  movl   $0x8,-0xc(%rsp)
  sub    %r9d,%r8d
  movl   $0x8,-0x10(%rsp)
  movslq %r11d,%r11
  sar    $0x5,%r8d
  add    %r9d,%r8d
  mov    $0x3,%r9d
  mov    %r8w,0x2(%rdi)
  lea    0x104(%rdi,%r11,2),%rdi
L689:
  cmp    $0xffffff,%eax
  ja     L445
  cmp    %rsi,%r10
  je     L1392
  movzbl (%r10),%ecx
  shl    $0x8,%edx
  shl    $0x8,%eax
  add    $0x1,%r10
  or     %ecx,%edx
L445:
  movzwl 0x2(%rdi),%ebx
  mov    %eax,%ecx
  shr    $0xb,%ecx
  imul   %ebx,%ecx
  mov    %ebx,%r11d
  cmp    %edx,%ecx
  ja     L987
  sub    %ecx,%eax
  sub    %ecx,%edx
  mov    %ebx,%ecx
  shr    $0x5,%cx
  sub    %ecx,%r11d
  mov    $0x3,%ecx
  mov    %r11d,%r8d
L1194:
  mov    %r8w,0x2(%rdi)
  movslq %ecx,%r8
  lea    (%rdi,%r8,2),%rbx
  cmp    $0xffffff,%eax
  ja     L972
  cmp    %r10,%rsi
  je     L1392
  movzbl (%r10),%r8d
  shl    $0x8,%edx
  shl    $0x8,%eax
  add    $0x1,%r10
  or     %r8d,%edx
L972:
  movzwl (%rbx),%r12d
  mov    %eax,%r8d
  shr    $0xb,%r8d
  imul   %r12d,%r8d
  cmp    %edx,%r8d
  ja     L111
  sub    %r8d,%eax
  sub    %r8d,%edx
  mov    %r12d,%r8d
  mov    %r12d,%r11d
  shr    $0x5,%r8w
  lea    0x1(%rcx,%rcx,1),%ecx
  sub    %r8d,%r11d
L827:
  movslq %ecx,%r8
  mov    %r11w,(%rbx)
  lea    (%rdi,%r8,2),%r11
  cmp    $0xffffff,%eax
  ja     L1113
  cmp    %r10,%rsi
  je     L1392
  movzbl (%r10),%r8d
  shl    $0x8,%edx
  shl    $0x8,%eax
  add    $0x1,%r10
  or     %r8d,%edx
L1113:
  movzwl (%r11),%r12d
  mov    %eax,%r8d
  shr    $0xb,%r8d
  imul   %r12d,%r8d
  cmp    %edx,%r8d
  ja     L871
  sub    %r8d,%eax
  sub    %r8d,%edx
  mov    %r12d,%r8d
  mov    %r12d,%ebx
  shr    $0x5,%r8w
  lea    0x1(%rcx,%rcx,1),%ecx
  sub    %r8d,%ebx
L673:
  mov    %bx,(%r11)
  cmp    $0x3,%r9d
  je     L227
  movslq %ecx,%r8
  lea    (%rdi,%r8,2),%r9
  cmp    $0xffffff,%eax
  ja     L1053
  cmp    %r10,%rsi
  je     L1392
  movzbl (%r10),%r8d
  shl    $0x8,%edx
  shl    $0x8,%eax
  add    $0x1,%r10
  or     %r8d,%edx
L1053:
  movzwl (%r9),%ebp
  mov    %eax,%r8d
  shr    $0xb,%r8d
  imul   %ebp,%r8d
  mov    %ebp,%ebx
  cmp    %edx,%r8d
  ja     L1242
  sub    %r8d,%eax
  sub    %r8d,%edx
  lea    0x1(%rcx,%rcx,1),%ecx
  mov    %ebp,%r8d
  shr    $0x5,%r8w
  sub    %r8d,%ebx
  mov    %ebx,%r11d
L118:
  movslq %ecx,%r8
  mov    %r11w,(%r9)
  lea    (%rdi,%r8,2),%r9
  cmp    $0xffffff,%eax
  ja     L499
  cmp    %r10,%rsi
  je     L1392
  movzbl (%r10),%r8d
  shl    $0x8,%edx
  shl    $0x8,%eax
  add    $0x1,%r10
  or     %r8d,%edx
L499:
  movzwl (%r9),%ebp
  mov    %eax,%r8d
  shr    $0xb,%r8d
  imul   %ebp,%r8d
  mov    %ebp,%ebx
  cmp    %edx,%r8d
  ja     L841
  sub    %r8d,%eax
  sub    %r8d,%edx
  lea    0x1(%rcx,%rcx,1),%ecx
  mov    %ebp,%r8d
  shr    $0x5,%r8w
  sub    %r8d,%ebx
  mov    %ebx,%r11d
L214:
  movslq %ecx,%r8
  mov    %r11w,(%r9)
  lea    (%rdi,%r8,2),%r9
  cmp    $0xffffff,%eax
  ja     L1018
  cmp    %r10,%rsi
  je     L1392
  movzbl (%r10),%r8d
  shl    $0x8,%edx
  shl    $0x8,%eax
  add    $0x1,%r10
  or     %r8d,%edx
L1018:
  movzwl (%r9),%ebp
  mov    %eax,%r8d
  shr    $0xb,%r8d
  imul   %ebp,%r8d
  mov    %ebp,%ebx
  cmp    %edx,%r8d
  ja     L332
  sub    %r8d,%eax
  sub    %r8d,%edx
  lea    0x1(%rcx,%rcx,1),%ecx
  mov    %ebp,%r8d
  shr    $0x5,%r8w
  sub    %r8d,%ebx
  mov    %ebx,%r11d
L698:
  movslq %ecx,%r8
  mov    %r11w,(%r9)
  lea    (%rdi,%r8,2),%r11
  cmp    $0xffffff,%eax
  ja     L1278
  cmp    %r10,%rsi
  je     L1392
  movzbl (%r10),%r8d
  shl    $0x8,%edx
  shl    $0x8,%eax
  add    $0x1,%r10
  or     %r8d,%edx
L1278:
  movzwl (%r11),%r9d
  mov    %eax,%r8d
  shr    $0xb,%r8d
  imul   %r9d,%r8d
  mov    %r9d,%ebx
  cmp    %edx,%r8d
  ja     L1320
  sub    %r8d,%eax
  sub    %r8d,%edx
  lea    0x1(%rcx,%rcx,1),%ecx
  mov    %ebx,%r8d
  mov    %eax,%r9d
  shr    $0x5,%r8w
  mov    %ebx,%eax
  sub    %r8d,%eax
L605:
  mov    %ax,(%r11)
  movslq %ecx,%rax
  lea    (%rdi,%rax,2),%r8
  cmp    $0xffffff,%r9d
  ja     L1318
  cmp    %r10,%rsi
  je     L1392
  movzbl (%r10),%eax
  shl    $0x8,%edx
  shl    $0x8,%r9d
  add    $0x1,%r10
  or     %eax,%edx
L1318:
  movzwl (%r8),%r11d
  mov    %r9d,%eax
  shr    $0xb,%eax
  imul   %r11d,%eax
  mov    %r11d,%edi
  cmp    %eax,%edx
  jae    L1378
  mov    %r15d,%r9d
  add    %ecx,%ecx
  sub    %r11d,%r9d
  sar    $0x5,%r9d
  add    %r9d,%edi
L757:
  mov    %di,(%r8)
  mov    %r10,%r8
L154:
  mov    -0x10(%rsp),%ebx
  sub    -0xc(%rsp),%ecx
  add    %ecx,%ebx
  mov    %ebx,-0x10(%rsp)
  cmp    $0x3,%r14d
  jg     L0
  mov    $0x3,%ecx
  add    $0x7,%r14d
  cmp    %ecx,%ebx
  cmovle %ebx,%ecx
  shl    $0x6,%ecx
  movslq %ecx,%rcx
  lea    0x1b0(%rcx),%rdi
  lea    0x362(%r13,%rcx,2),%rcx
  cmp    $0xffffff,%eax
  ja     L967
  cmp    %r10,%rsi
  je     L1392
  movzbl (%r10),%r8d
  shl    $0x8,%edx
  shl    $0x8,%eax
  or     %r8d,%edx
  lea    0x1(%r10),%r8
L967:
  movzwl (%rcx),%r11d
  mov    %eax,%r9d
  shr    $0xb,%r9d
  imul   %r11d,%r9d
  mov    %r11d,%r10d
  cmp    %r9d,%edx
  jb     L1159
  sub    %r9d,%eax
  sub    %r9d,%edx
  mov    %r11d,%r9d
  mov    $0x3,%r11d
  shr    $0x5,%r9w
  sub    %r9d,%r10d
  mov    $0x3,%r9d
L302:
  add    %rdi,%r11
  mov    %r10w,(%rcx)
  lea    0x0(%r13,%r11,2),%r11
  cmp    $0xffffff,%eax
  ja     L85
  cmp    %r8,%rsi
  je     L1392
  movzbl (%r8),%ecx
  shl    $0x8,%edx
  shl    $0x8,%eax
  add    $0x1,%r8
  or     %ecx,%edx
L85:
  movzwl (%r11),%ebp
  mov    %eax,%ecx
  shr    $0xb,%ecx
  imul   %ebp,%ecx
  mov    %ebp,%ebx
  cmp    %ecx,%edx
  jb     L551
  sub    %ecx,%eax
  sub    %ecx,%edx
  lea    0x1(%r9,%r9,1),%r9d
  mov    %ebp,%ecx
  shr    $0x5,%cx
  sub    %ecx,%ebx
  mov    %ebx,%r10d
L727:
  movslq %r9d,%rcx
  mov    %r10w,(%r11)
  add    %rdi,%rcx
  lea    0x0(%r13,%rcx,2),%r11
  cmp    $0xffffff,%eax
  ja     L423
  cmp    %r8,%rsi
  je     L1392
  movzbl (%r8),%ecx
  shl    $0x8,%edx
  shl    $0x8,%eax
  add    $0x1,%r8
  or     %ecx,%edx
L423:
  movzwl (%r11),%ecx
  mov    %eax,%r10d
  shr    $0xb,%r10d
  imul   %ecx,%r10d
  mov    %ecx,%ebp
  cmp    %r10d,%edx
  jb     L1465
  sub    %r10d,%eax
  mov    %ebp,%ebx
  sub    %r10d,%edx
  mov    %eax,%ecx
  mov    %ebp,%eax
  shr    $0x5,%ax
  sub    %eax,%ebx
  lea    0x1(%r9,%r9,1),%eax
L1399:
  movslq %eax,%r9
  mov    %bx,(%r11)
  add    %rdi,%r9
  lea    0x0(%r13,%r9,2),%r10
  cmp    $0xffffff,%ecx
  ja     L725
  cmp    %r8,%rsi
  je     L1392
  movzbl (%r8),%r9d
  shl    $0x8,%edx
  shl    $0x8,%ecx
  add    $0x1,%r8
  or     %r9d,%edx
L725:
  movzwl (%r10),%ebx
  mov    %ecx,%r9d
  shr    $0xb,%r9d
  imul   %ebx,%r9d
  mov    %ebx,%r11d
  cmp    %r9d,%edx
  jb     L547
  sub    %r9d,%ecx
  sub    %r9d,%edx
  lea    0x1(%rax,%rax,1),%eax
  mov    %ebx,%r9d
  shr    $0x5,%r9w
  sub    %r9d,%r11d
L216:
  movslq %eax,%r9
  mov    %r11w,(%r10)
  add    %rdi,%r9
  lea    0x0(%r13,%r9,2),%r11
  cmp    $0xffffff,%ecx
  ja     L75
  cmp    %r8,%rsi
  je     L1392
  movzbl (%r8),%r9d
  shl    $0x8,%edx
  shl    $0x8,%ecx
  add    $0x1,%r8
  or     %r9d,%edx
L75:
  movzwl (%r11),%r9d
  mov    %ecx,%r10d
  shr    $0xb,%r10d
  imul   %r9d,%r10d
  mov    %r9d,%ebp
  cmp    %r10d,%edx
  jb     L357
  sub    %r10d,%ecx
  mov    %ebp,%ebx
  sub    %r10d,%edx
  mov    %ecx,%r9d
  mov    %ebp,%ecx
  shr    $0x5,%cx
  sub    %ecx,%ebx
  lea    0x1(%rax,%rax,1),%ecx
L843:
  movslq %ecx,%rax
  mov    %bx,(%r11)
  add    %rdi,%rax
  lea    0x0(%r13,%rax,2),%r10
  cmp    $0xffffff,%r9d
  ja     L170
  cmp    %r8,%rsi
  je     L1392
  movzbl (%r8),%eax
  shl    $0x8,%edx
  shl    $0x8,%r9d
  add    $0x1,%r8
  or     %eax,%edx
L170:
  movzwl (%r10),%r11d
  mov    %r9d,%eax
  shr    $0xb,%eax
  imul   %r11d,%eax
  mov    %r11d,%edi
  cmp    %eax,%edx
  jae    L537
  mov    %r15d,%r9d
  add    %ecx,%ecx
  sub    %r11d,%r9d
  sar    $0x5,%r9d
  add    %r9d,%edi
L1325:
  mov    %di,(%r10)
  lea    -0x40(%rcx),%edi
  cmp    $0x3,%edi
  jle    L1115
  mov    %edi,%r10d
  mov    %edi,%ecx
  and    $0x1,%r10d
  sar    %ecx
  or     $0x2,%r10d
  cmp    $0xd,%edi
  jg     L1136
  sub    $0x1,%ecx
  movslq %edi,%rdi
  mov    $0x2b0,%r9d
  shl    %cl,%r10d
  sub    %rdi,%r9
  mov    %r10d,%edi
  add    %r9,%rdi
  lea    -0x2(%r13,%rdi,2),%rbx
  mov    %rbx,-0x30(%rsp)
L671:
  mov    $0x1,%r11d
  mov    $0x1,%ebp
  nopl   0x0(%rax)
L391:
  mov    -0x30(%rsp),%rbx
  movslq %r11d,%rdi
  lea    (%rbx,%rdi,2),%rbx
  cmp    $0xffffff,%eax
  ja     L1051
  cmp    %rsi,%r8
  je     L1392
  movzbl (%r8),%edi
  shl    $0x8,%edx
  shl    $0x8,%eax
  add    $0x1,%r8
  or     %edi,%edx
L1051:
  movzwl (%rbx),%r12d
  mov    %eax,%edi
  shr    $0xb,%edi
  imul   %r12d,%edi
  mov    %r12d,%r9d
  cmp    %edi,%edx
  jae    L329
  mov    %r15d,%eax
  add    %r11d,%r11d
  add    %ebp,%ebp
  sub    %r12d,%eax
  sar    $0x5,%eax
  add    %r12d,%eax
  mov    %ax,(%rbx)
  mov    %edi,%eax
  sub    $0x1,%ecx
  jne    L391
L1519:
  add    $0x1,%r10d
  mov    %r10d,-0x30(%rsp)
  je     L842
L0:
  mov    -0x10(%rsp),%ebx
  mov    -0x30(%rsp),%r10d
  mov    -0x38(%rsp),%ecx
  lea    0x2(%rbx),%edi
  cmp    %ecx,%r10d
  ja     L1392
  lea    0x2(%rcx,%rbx,1),%r11d
  mov    0x48(%rsp),%ebp
  mov    0x40(%rsp),%rbx
  sub    %r10d,%r11d
L1088:
  mov    %r11d,%r9d
  mov    %ecx,%r10d
  add    $0x1,%ecx
  sub    %edi,%r9d
  movzbl (%rbx,%r9,1),%r9d
  mov    %r9b,(%rbx,%r10,1)
  sub    $0x1,%edi
  je     L1134
  cmp    %ecx,%ebp
  ja     L1088
L1134:
  mov    %ecx,-0x38(%rsp)
  jmp    L1170
  nopw   0x0(%rax,%rax,1)
L779:
  sub    %edi,%eax
  sub    %edi,%edx
  lea    0x1(%rcx,%rcx,1),%ecx
  mov    %r11d,%edi
  shr    $0x5,%di
  sub    %edi,%r8d
  mov    %r8w,(%r9)
  cmp    $0xff,%ecx
  jle    L427
  jmp    L1108
  nopw   0x0(%rax,%rax,1)
L987:
  mov    %r15d,%r8d
  mov    %ecx,%eax
  mov    $0x2,%ecx
  sub    %ebx,%r8d
  sar    $0x5,%r8d
  add    %ebx,%r8d
  jmp    L1194
  nopl   0x0(%rax)
L111:
  mov    %r15d,%r11d
  add    %ecx,%ecx
  mov    %r8d,%eax
  sub    %r12d,%r11d
  sar    $0x5,%r11d
  add    %r12d,%r11d
  jmp    L827
  nopw   0x0(%rax,%rax,1)
L871:
  mov    %r15d,%ebx
  add    %ecx,%ecx
  mov    %r8d,%eax
  sub    %r12d,%ebx
  sar    $0x5,%ebx
  add    %r12d,%ebx
  jmp    L673
  cs nopw 0x0(%rax,%rax,1)
L1242:
  mov    %r15d,%r11d
  add    %ecx,%ecx
  mov    %r8d,%eax
  sub    %ebp,%r11d
  sar    $0x5,%r11d
  add    %ebp,%r11d
  jmp    L118
  nopw   0x0(%rax,%rax,1)
L400:
  shr    $0x5,%r9w
  sub    %eax,%r8d
  sub    %eax,%edx
  movl   $0x100,-0xc(%rsp)
  sub    %r9d,%ecx
  movl   $0x10,-0x10(%rsp)
  add    $0x204,%rdi
  mov    %r8d,%eax
  mov    %cx,-0x202(%rdi)
  mov    $0x8,%r9d
  jmp    L689
  nopl   0x0(%rax)
L841:
  mov    %r15d,%r11d
  add    %ecx,%ecx
  mov    %r8d,%eax
  sub    %ebp,%r11d
  sar    $0x5,%r11d
  add    %ebp,%r11d
  jmp    L214
  nopw   0x0(%rax,%rax,1)
L332:
  mov    %r15d,%r11d
  add    %ecx,%ecx
  mov    %r8d,%eax
  sub    %ebp,%r11d
  sar    $0x5,%r11d
  add    %ebp,%r11d
  jmp    L698
  nopw   0x0(%rax,%rax,1)
L318:
  cmp    %rsi,%r10
  je     L1392
  movzbl (%r10),%eax
  shl    $0x8,%edx
  shl    $0x8,%ecx
  add    $0x1,%r10
  or     %eax,%edx
  jmp    L1189
  xchg   %ax,%ax
L135:
  sub    %r8d,%ecx
  sub    %r8d,%edx
  mov    %ebp,%r8d
  shr    $0x5,%r8w
  sub    %r8d,%eax
  mov    %ax,(%rdi)
  lea    0x30(%r13,%r9,1),%rdi
  cmp    $0xffffff,%ecx
  ja     L1148
  cmp    %rsi,%r10
  je     L1392
  movzbl (%r10),%eax
  shl    $0x8,%edx
  shl    $0x8,%ecx
  add    $0x1,%r10
  or     %eax,%edx
L1148:
  movzwl (%rdi),%ebx
  mov    %ecx,%r8d
  shr    $0xb,%r8d
  imul   %ebx,%r8d
  mov    %ebx,%eax
  cmp    %r8d,%edx
  jae    L886
  mov    %r15d,%ecx
  sub    %ebx,%ecx
  mov    -0x28(%rsp),%ebx
  sar    $0x5,%ecx
  add    %ecx,%eax
  mov    %ax,(%rdi)
  mov    -0x30(%rsp),%eax
  mov    %ebx,-0x30(%rsp)
  mov    %eax,-0x28(%rsp)
L7:
  cmp    $0x7,%r14d
  lea    0xa68(%r13),%rdi
  setge  %r14b
  movzbl %r14b,%r14d
  lea    0x8(%r14,%r14,2),%r14d
  jmp    L889
  nopl   (%rax)
L329:
  sub    %edi,%eax
  sub    %edi,%edx
  mov    %r12d,%edi
  or     %ebp,%r10d
  shr    $0x5,%di
  lea    0x1(%r11,%r11,1),%r11d
  add    %ebp,%ebp
  sub    %edi,%r9d
  mov    %r9w,(%rbx)
  sub    $0x1,%ecx
  jne    L391
  jmp    L1519
  nopw   0x0(%rax,%rax,1)
L1320:
  mov    %r15d,%eax
  add    %ecx,%ecx
  sub    %r9d,%eax
  sar    $0x5,%eax
  add    %r9d,%eax
  mov    %r8d,%r9d
  jmp    L605
  cs nopw 0x0(%rax,%rax,1)
L1290:
  mov    %r15d,%r8d
  shl    $0x3,%r11d
  movl   $0x8,-0xc(%rsp)
  sub    %r9d,%r8d
  movslq %r11d,%r11
  movl   $0x0,-0x10(%rsp)
  sar    $0x5,%r8d
  add    %r9d,%r8d
  mov    $0x3,%r9d
  mov    %r8w,(%rdi)
  lea    0x4(%rdi,%r11,2),%rdi
  jmp    L689
  nopl   0x0(%rax,%rax,1)
L1378:
  shr    $0x5,%r11w
  sub    %eax,%r9d
  lea    0x1(%rcx,%rcx,1),%ecx
  sub    %eax,%edx
  sub    %r11d,%edi
  mov    %r9d,%eax
  jmp    L757
  nopl   0x0(%rax)
L1159:
  mov    %r15d,%eax
  sub    %r11d,%eax
  mov    $0x2,%r11d
  sar    $0x5,%eax
  add    %eax,%r10d
  mov    %r9d,%eax
  mov    $0x2,%r9d
  jmp    L302
L551:
  mov    %r15d,%r10d
  add    %r9d,%r9d
  mov    %ecx,%eax
  sub    %ebp,%r10d
  sar    $0x5,%r10d
  add    %ebp,%r10d
  jmp    L727
  nopw   0x0(%rax,%rax,1)
L1465:
  mov    %r15d,%ebx
  lea    (%r9,%r9,1),%eax
  sub    %ecx,%ebx
  sar    $0x5,%ebx
  add    %ecx,%ebx
  mov    %r10d,%ecx
  jmp    L1399
  cs nopw 0x0(%rax,%rax,1)
L547:
  mov    %r15d,%ecx
  add    %eax,%eax
  sub    %ebx,%ecx
  sar    $0x5,%ecx
  add    %ecx,%r11d
  mov    %r9d,%ecx
  jmp    L216
  nopl   (%rax)
L140:
  sub    %eax,%r8d
  sub    %eax,%edx
  mov    %r9d,%eax
  shr    $0x5,%ax
  sub    %eax,%ecx
  mov    %cx,(%rdi)
  jmp    L7
  xchg   %ax,%ax
L886:
  sub    %r8d,%ecx
  sub    %r8d,%edx
  lea    0x48(%r13,%r9,1),%r9
  mov    %ebx,%r8d
  shr    $0x5,%r8w
  sub    %r8d,%eax
  mov    %ax,(%rdi)
  cmp    $0xffffff,%ecx
  ja     L405
  cmp    %rsi,%r10
  je     L1392
  movzbl (%r10),%eax
  shl    $0x8,%edx
  shl    $0x8,%ecx
  add    $0x1,%r10
  or     %eax,%edx
L405:
  movzwl (%r9),%r8d
  mov    %ecx,%eax
  shr    $0xb,%eax
  imul   %r8d,%eax
  mov    %r8d,%edi
  cmp    %eax,%edx
  jae    L1112
  mov    %r15d,%ecx
  mov    -0x24(%rsp),%ebx
  sub    %r8d,%ecx
  sar    $0x5,%ecx
  add    %r8d,%ecx
  mov    %eax,%r8d
  mov    -0x30(%rsp),%eax
  mov    %ebx,-0x30(%rsp)
  mov    -0x28(%rsp),%ebx
  mov    %cx,(%r9)
  mov    %eax,-0x28(%rsp)
  mov    %ebx,-0x24(%rsp)
  jmp    L7
  nopw   0x0(%rax,%rax,1)
L357:
  mov    %r15d,%ebx
  lea    (%rax,%rax,1),%ecx
  sub    %r9d,%ebx
  sar    $0x5,%ebx
  add    %r9d,%ebx
  mov    %r10d,%r9d
  jmp    L843
  nop
L537:
  shr    $0x5,%r11w
  sub    %eax,%r9d
  lea    0x1(%rcx,%rcx,1),%ecx
  sub    %eax,%edx
  sub    %r11d,%edi
  mov    %r9d,%eax
  jmp    L1325
L470:
  xor    %eax,%eax
  jmp    L350
L1136:
  sub    $0x5,%ecx
  nopl   0x0(%rax,%rax,1)
L550:
  cmp    $0xffffff,%eax
  ja     L1345
  cmp    %rsi,%r8
  je     L1392
  movzbl (%r8),%edi
  shl    $0x8,%edx
  shl    $0x8,%eax
  add    $0x1,%r8
  or     %edi,%edx
L1345:
  shr    %eax
  add    %r10d,%r10d
  cmp    %eax,%edx
  jb     L692
  sub    %eax,%edx
  or     $0x1,%r10d
L692:
  sub    $0x1,%ecx
  jne    L550
  mov    -0x8(%rsp),%rbx
  shl    $0x4,%r10d
  mov    $0x4,%ecx
  mov    %rbx,-0x30(%rsp)
  jmp    L671
L1112:
  mov    -0x14(%rsp),%ebx
  sub    %eax,%ecx
  sub    %eax,%edx
  mov    %edi,%eax
  shr    $0x5,%ax
  mov    %ecx,%r8d
  sub    %eax,%edi
  mov    -0x30(%rsp),%eax
  mov    %ebx,-0x30(%rsp)
  mov    -0x24(%rsp),%ebx
  mov    %di,(%r9)
  mov    %ebx,-0x14(%rsp)
  mov    -0x28(%rsp),%ebx
  mov    %eax,-0x28(%rsp)
  mov    %ebx,-0x24(%rsp)
  jmp    L7
L1132:
  cmp    $0x7,%r14d
  mov    0x40(%rsp),%rdi
  mov    %ebx,%ecx
  mov    %r10,%r8
  setge  %r14b
  sub    -0x30(%rsp),%ecx
  movzbl (%rdi,%rcx,1),%r9d
  movzbl %r14b,%r14d
  mov    %ebx,%ecx
  add    $0x1,%ebx
  mov    %ebx,-0x38(%rsp)
  lea    0x9(%r14,%r14,1),%r14d
  mov    %r9b,(%rdi,%rcx,1)
  jmp    L1170
L1115:
  lea    -0x3f(%rcx),%ebx
  mov    %ebx,-0x30(%rsp)
  jmp    L0
L882:
  mov    %eax,%ecx
  mov    %r8,%r10
  jmp    L531
L227:
  mov    %r10,%r8
  jmp    L154
L842:
  cmp    $0xffffff,%eax
  ja     L1513
  cmp    %rsi,%r8
  je     L1392
L1513:
  mov    0x50(%rsp),%rax
  mov    -0x38(%rsp),%esi
  xor    %r10d,%r10d
  mov    %esi,(%rax)
  jmp    L885
L769:
  movl   $0x0,-0x38(%rsp)
  jmp    L1513
```

tool_calls: name: unpack_data
arguments: label: D18
datatype: byte[16]

tool: {"D18": [0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04]}

assistant: ```c
int LzmaDecode(unsigned char *buffer, unsigned int bufferSize, int lc, int lp, int pb, unsigned char *inStream, unsigned int inSize, unsigned char *outStream, unsigned int outSize, unsigned int *outSizeProcessed) {
  unsigned int numProbs = (((((((((((0 + (12 << 4)) + 12) + 12) + 12) + 12) + (12 << 4)) + (4 << 6)) + (1 << (14 >> 1)) - 14) + (1 << 4)) + (((((0 + 1) + 1) + ((1 << 4) << 3)) + ((1 << 4) << 3)) + (1 << 8))) + (((((0 + 1) + 1) + ((1 << 4) << 3)) + ((1 << 4) << 3)) + (1 << 8))) + ((unsigned int)768 << (lc + lp));
  unsigned short *p = (unsigned short *)buffer;
  unsigned int i;
  int state = 0;
  unsigned char previousByte = 0;
  unsigned int rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1;
  unsigned int nowPos = 0;
  unsigned int posStateMask = (1 << pb) - 1;
  unsigned int literalPosMask = (1 << lp) - 1;
  int len = 0;
  unsigned char *Buffer;
  unsigned char *BufferLim;
  unsigned int Range;
  unsigned int Code;
  if (bufferSize < numProbs * sizeof(unsigned short))
    return 2;
  for (i = 0; i < numProbs; i++)
    p[i] = (1 << 11) >> 1;
  Buffer = inStream;
  BufferLim = inStream + inSize;
  Code = 0;
  Range = 0xFFFFFFFF;
  {
    int i;
    for (i = 0; i < 5; i++) {
      {
        if (Buffer == BufferLim)
          return 1;
      };
      Code = (Code << 8) | (*Buffer++);
    }
  };
  *outSizeProcessed = 0;
  while (nowPos < outSize) {
    unsigned short *prob;
    unsigned int bound;
    int posState = (int)((nowPos)&posStateMask);
    prob = p + 0 + (state << 4) + posState;
    if (Range < ((unsigned int)1 << 24)) {
      {
        if (Buffer == BufferLim)
          return 1;
      };
      Range <<= 8;
      Code = (Code << 8) | (*Buffer++);
    };
    bound = (Range >> 11) * *(prob);
    if (Code < bound) {
      int symbol = 1;
      Range = bound;
      *(prob) += ((1 << 11) - *(prob)) >> 5;
      prob = p + (((((((((((0 + (12 << 4)) + 12) + 12) + 12) + 12) + (12 << 4)) + (4 << 6)) + (1 << (14 >> 1)) - 14) + (1 << 4)) + (((((0 + 1) + 1) + ((1 << 4) << 3)) + ((1 << 4) << 3)) + (1 << 8))) + (((((0 + 1) + 1) + ((1 << 4) << 3)) + ((1 << 4) << 3)) + (1 << 8))) + (768 * ((((nowPos)&literalPosMask) << lc) + (previousByte >> (8 - lc))));
      if (state >= 7) {
        int matchByte;
        matchByte = outStream[nowPos - rep0];
        do {
          int bit;
          unsigned short *probLit;
          matchByte <<= 1;
          bit = (matchByte & 0x100);
          probLit = prob + 0x100 + bit + symbol;
          if (Range < ((unsigned int)1 << 24)) {
            {
              if (Buffer == BufferLim)
                return 1;
            };
            Range <<= 8;
            Code = (Code << 8) | (*Buffer++);
          };
          bound = (Range >> 11) * *(probLit);
          if (Code < bound) {
            Range = bound;
            *(probLit) += ((1 << 11) - *(probLit)) >> 5;
            ;
            symbol <<= 1;
            if (bit != 0)
              break;
          } else {
            Range -= bound;
            Code -= bound;
            *(probLit) -= (*(probLit)) >> 5;
            ;
            symbol = (symbol + symbol) + 1;
            if (bit == 0)
              break;
          }
        } while (symbol < 0x100);
      }
      while (symbol < 0x100) {
        unsigned short *probLit = prob + symbol;
        if (Range < ((unsigned int)1 << 24)) {
          {
            if (Buffer == BufferLim)
              return 1;
          };
          Range <<= 8;
          Code = (Code << 8) | (*Buffer++);
        };
        bound = (Range >> 11) * *(probLit);
        if (Code < bound) {
          Range = bound;
          *(probLit) += ((1 << 11) - *(probLit)) >> 5;
          ;
          symbol <<= 1;
          ;
          ;
        } else {
          Range -= bound;
          Code -= bound;
          *(probLit) -= (*(probLit)) >> 5;
          ;
          symbol = (symbol + symbol) + 1;
          ;
          ;
        }
      }
      previousByte = (unsigned char)symbol;
      outStream[nowPos++] = previousByte;
      if (state < 4)
        state = 0;
      else if (state < 10)
        state -= 3;
      else
        state -= 6;
    } else {
      Range -= bound;
      Code -= bound;
      *(prob) -= (*(prob)) >> 5;
      ;
      prob = p + (0 + (12 << 4)) + state;
      if (Range < ((unsigned int)1 << 24)) {
        {
          if (Buffer == BufferLim)
            return 1;
        };
        Range <<= 8;
        Code = (Code << 8) | (*Buffer++);
      };
      bound = (Range >> 11) * *(prob);
      if (Code < bound) {
        Range = bound;
        *(prob) += ((1 << 11) - *(prob)) >> 5;
        ;
        rep3 = rep2;
        rep2 = rep1;
        rep1 = rep0;
        state = state < 7 ? 0 : 3;
        prob = p + (((((((((0 + (12 << 4)) + 12) + 12) + 12) + 12) + (12 << 4)) + (4 << 6)) + (1 << (14 >> 1)) - 14) + (1 << 4));
      } else {
        Range -= bound;
        Code -= bound;
        *(prob) -= (*(prob)) >> 5;
        ;
        prob = p + ((0 + (12 << 4)) + 12) + state;
        if (Range < ((unsigned int)1 << 24)) {
          {
            if (Buffer == BufferLim)
              return 1;
          };
          Range <<= 8;
          Code = (Code << 8) | (*Buffer++);
        };
        bound = (Range >> 11) * *(prob);
        if (Code < bound) {
          Range = bound;
          *(prob) += ((1 << 11) - *(prob)) >> 5;
          ;
          prob = p + (((((0 + (12 << 4)) + 12) + 12) + 12) + 12) + (state << 4) + posState;
          if (Range < ((unsigned int)1 << 24)) {
            {
              if (Buffer == BufferLim)
                return 1;
            };
            Range <<= 8;
            Code = (Code << 8) | (*Buffer++);
          };
          bound = (Range >> 11) * *(prob);
          if (Code < bound) {
            Range = bound;
            *(prob) += ((1 << 11) - *(prob)) >> 5;
            ;
            if (nowPos == 0)
              return 1;
            state = state < 7 ? 9 : 11;
            previousByte = outStream[nowPos - rep0];
            outStream[nowPos++] = previousByte;
            continue;
          } else {
            Range -= bound;
            Code -= bound;
            *(prob) -= (*(prob)) >> 5;
            ;
          }
        } else {
          unsigned int distance;
          Range -= bound;
          Code -= bound;
          *(prob) -= (*(prob)) >> 5;
          ;
          prob = p + (((0 + (12 << 4)) + 12) + 12) + state;
          if (Range < ((unsigned int)1 << 24)) {
            {
              if (Buffer == BufferLim)
                return 1;
            };
            Range <<= 8;
            Code = (Code << 8) | (*Buffer++);
          };
          bound = (Range >> 11) * *(prob);
          if (Code < bound) {
            Range = bound;
            *(prob) += ((1 << 11) - *(prob)) >> 5;
            ;
            distance = rep1;
          } else {
            Range -= bound;
            Code -= bound;
            *(prob) -= (*(prob)) >> 5;
            ;
            prob = p + ((((0 + (12 << 4)) + 12) + 12) + 12) + state;
            if (Range < ((unsigned int)1 << 24)) {
              {
                if (Buffer == BufferLim)
                  return 1;
              };
              Range <<= 8;
              Code = (Code << 8) | (*Buffer++);
            };
            bound = (Range >> 11) * *(prob);
            if (Code < bound) {
              Range = bound;
              *(prob) += ((1 << 11) - *(prob)) >> 5;
              ;
              distance = rep2;
            } else {
              Range -= bound;
              Code -= bound;
              *(prob) -= (*(prob)) >> 5;
              ;
              distance = rep3;
              rep3 = rep2;
            }
            rep2 = rep1;
          }
          rep1 = rep0;
          rep0 = distance;
        }
        state = state < 7 ? 8 : 11;
        prob = p + ((((((((((0 + (12 << 4)) + 12) + 12) + 12) + 12) + (12 << 4)) + (4 << 6)) + (1 << (14 >> 1)) - 14) + (1 << 4)) + (((((0 + 1) + 1) + ((1 << 4) << 3)) + ((1 << 4) << 3)) + (1 << 8)));
      }
      {
        int numBits, offset;
        unsigned short *probLen = prob + 0;
        if (Range < ((unsigned int)1 << 24)) {
          {
            if (Buffer == BufferLim)
              return 1;
          };
          Range <<= 8;
          Code = (Code << 8) | (*Buffer++);
        };
        bound = (Range >> 11) * *(probLen);
        if (Code < bound) {
          Range = bound;
          *(probLen) += ((1 << 11) - *(probLen)) >> 5;
          ;
          probLen = prob + ((0 + 1) + 1) + (posState << 3);
          offset = 0;
          numBits = 3;
        } else {
          Range -= bound;
          Code -= bound;
          *(probLen) -= (*(probLen)) >> 5;
          ;
          probLen = prob + (0 + 1);
          if (Range < ((unsigned int)1 << 24)) {
            {
              if (Buffer == BufferLim)
                return 1;
            };
            Range <<= 8;
            Code = (Code << 8) | (*Buffer++);
          };
          bound = (Range >> 11) * *(probLen);
          if (Code < bound) {
            Range = bound;
            *(probLen) += ((1 << 11) - *(probLen)) >> 5;
            ;
            probLen = prob + (((0 + 1) + 1) + ((1 << 4) << 3)) + (posState << 3);
            offset = (1 << 3);
            numBits = 3;
          } else {
            Range -= bound;
            Code -= bound;
            *(probLen) -= (*(probLen)) >> 5;
            ;
            probLen = prob + ((((0 + 1) + 1) + ((1 << 4) << 3)) + ((1 << 4) << 3));
            offset = (1 << 3) + (1 << 3);
            numBits = 8;
          }
        }
        {
          int i = numBits;
          len = 1;
          do {
            unsigned short *p = probLen + len;
            if (Range < ((unsigned int)1 << 24)) {
              {
                if (Buffer == BufferLim)
                  return 1;
              };
              Range <<= 8;
              Code = (Code << 8) | (*Buffer++);
            };
            bound = (Range >> 11) * *(p);
            if (Code < bound) {
              Range = bound;
              *(p) += ((1 << 11) - *(p)) >> 5;
              ;
              len <<= 1;
              ;
              ;
            } else {
              Range -= bound;
              Code -= bound;
              *(p) -= (*(p)) >> 5;
              ;
              len = (len + len) + 1;
              ;
              ;
            }
          } while (--i != 0);
          len -= (1 << numBits);
        };
        len += offset;
      }
      if (state < 4) {
        int posSlot;
        state += 7;
        prob = p + ((((((0 + (12 << 4)) + 12) + 12) + 12) + 12) + (12 << 4)) + ((len < 4 ? len : 4 - 1) << 6);
        {
          int i = 6;
          posSlot = 1;
          do {
            unsigned short *p = prob + posSlot;
            if (Range < ((unsigned int)1 << 24)) {
              {
                if (Buffer == BufferLim)
                  return 1;
              };
              Range <<= 8;
              Code = (Code << 8) | (*Buffer++);
            };
            bound = (Range >> 11) * *(p);
            if (Code < bound) {
              Range = bound;
              *(p) += ((1 << 11) - *(p)) >> 5;
              ;
              posSlot <<= 1;
              ;
              ;
            } else {
              Range -= bound;
              Code -= bound;
              *(p) -= (*(p)) >> 5;
              ;
              posSlot = (posSlot + posSlot) + 1;
              ;
              ;
            }
          } while (--i != 0);
          posSlot -= (1 << 6);
        };
        if (posSlot >= 4) {
          int numDirectBits = ((posSlot >> 1) - 1);
          rep0 = (2 | ((unsigned int)posSlot & 1));
          if (posSlot < 14) {
            rep0 <<= numDirectBits;
            prob = p + (((((((0 + (12 << 4)) + 12) + 12) + 12) + 12) + (12 << 4)) + (4 << 6)) + rep0 - posSlot - 1;
          } else {
            numDirectBits -= 4;
            do {
              if (Range < ((unsigned int)1 << 24)) {
                {
                  if (Buffer == BufferLim)
                    return 1;
                };
                Range <<= 8;
                Code = (Code << 8) | (*Buffer++);
              }
              Range >>= 1;
              rep0 <<= 1;
              if (Code >= Range) {
                Code -= Range;
                rep0 |= 1;
              }
            } while (--numDirectBits != 0);
            prob = p + ((((((((0 + (12 << 4)) + 12) + 12) + 12) + 12) + (12 << 4)) + (4 << 6)) + (1 << (14 >> 1)) - 14);
            rep0 <<= 4;
            numDirectBits = 4;
          }
          {
            int i = 1;
            int mi = 1;
            do {
              unsigned short *prob3 = prob + mi;
              if (Range < ((unsigned int)1 << 24)) {
                {
                  if (Buffer == BufferLim)
                    return 1;
                };
                Range <<= 8;
                Code = (Code << 8) | (*Buffer++);
              };
              bound = (Range >> 11) * *(prob3);
              if (Code < bound) {
                Range = bound;
                *(prob3) += ((1 << 11) - *(prob3)) >> 5;
                ;
                mi <<= 1;
                ;
                ;
              } else {
                Range -= bound;
                Code -= bound;
                *(prob3) -= (*(prob3)) >> 5;
                ;
                mi = (mi + mi) + 1;
                rep0 |= i;
              };
              i <<= 1;
            } while (--numDirectBits != 0);
          }
        } else
          rep0 = posSlot;
        if (++rep0 == (unsigned int)(0)) {
          len = -1;
          break;
        }
      }
      len += 2;
      if (rep0 > nowPos)
        return 1;
      do {
        previousByte = outStream[nowPos - rep0];
        len--;
        outStream[nowPos++] = previousByte;
      } while (len != 0 && nowPos < outSize);
    }
  }
  if (Range < ((unsigned int)1 << 24)) {
    {
      if (Buffer == BufferLim)
        return 1;
    };
    Range <<= 8;
    Code = (Code << 8) | (*Buffer++);
  };
  *outSizeProcessed = nowPos;
  return 0;
}
```