// File: /workspace/github_c_makefile_star2_O0/gplessis[P]dotdeb-redis/src/lzf_c.c
// Function: lzf_compress
unsigned int
lzf_compress (const void *const in_data, unsigned int in_len,
	      void *out_data, unsigned int out_len
#if LZF_STATE_ARG
              , LZF_STATE htab
#endif
              )
{
#if !LZF_STATE_ARG
  LZF_STATE htab;
#endif
  const u8 *ip = (const u8 *)in_data;
        u8 *op = (u8 *)out_data;
  const u8 *in_end  = ip + in_len;
        u8 *out_end = op + out_len;
  const u8 *ref;

  /* off requires a type wide enough to hold a general pointer difference.
   * ISO C doesn't have that (size_t might not be enough and ptrdiff_t only
   * works for differences within a single object). We also assume that no
   * no bit pattern traps. Since the only platform that is both non-POSIX
   * and fails to support both assumptions is windows 64 bit, we make a
   * special workaround for it.
   */
#if defined (WIN32) && defined (_M_X64)
  unsigned _int64 off; /* workaround for missing POSIX compliance */
#else
  unsigned long off;
#endif
  unsigned int hval;
  int lit;

  if (!in_len || !out_len)
    return 0;

#if INIT_HTAB
  memset (htab, 0, sizeof (htab));
#endif

  lit = 0; op++; /* start run */

  hval = FRST (ip);
  while (ip < in_end - 2)
    {
      LZF_HSLOT *hslot;

      hval = NEXT (hval, ip);
      hslot = htab + IDX (hval);
      ref = *hslot + LZF_HSLOT_BIAS; *hslot = ip - LZF_HSLOT_BIAS;

      if (1
#if INIT_HTAB
          && ref < ip /* the next test will actually take care of this, but this is faster */
#endif
          && (off = ip - ref - 1) < MAX_OFF
          && ref > (u8 *)in_data
          && ref[2] == ip[2]
#if STRICT_ALIGN
          && ((ref[1] << 8) | ref[0]) == ((ip[1] << 8) | ip[0])
#else
          && *(u16 *)ref == *(u16 *)ip
#endif
        )
        {
          /* match found at *ref++ */
          unsigned int len = 2;
          unsigned int maxlen = in_end - ip - len;
          maxlen = maxlen > MAX_REF ? MAX_REF : maxlen;

          if (expect_false (op + 3 + 1 >= out_end)) /* first a faster conservative test */
            if (op - !lit + 3 + 1 >= out_end) /* second the exact but rare test */
              return 0;

          op [- lit - 1] = lit - 1; /* stop run */
          op -= !lit; /* undo run if length is zero */

          for (;;)
            {
              if (expect_true (maxlen > 16))
                {
                  len++; if (ref [len] != ip [len]) break;
                  len++; if (ref [len] != ip [len]) break;
                  len++; if (ref [len] != ip [len]) break;
                  len++; if (ref [len] != ip [len]) break;

                  len++; if (ref [len] != ip [len]) break;
                  len++; if (ref [len] != ip [len]) break;
                  len++; if (ref [len] != ip [len]) break;
                  len++; if (ref [len] != ip [len]) break;

                  len++; if (ref [len] != ip [len]) break;
                  len++; if (ref [len] != ip [len]) break;
                  len++; if (ref [len] != ip [len]) break;
                  len++; if (ref [len] != ip [len]) break;

                  len++; if (ref [len] != ip [len]) break;
                  len++; if (ref [len] != ip [len]) break;
                  len++; if (ref [len] != ip [len]) break;
                  len++; if (ref [len] != ip [len]) break;
                }

              do
                len++;
              while (len < maxlen && ref[len] == ip[len]);

              break;
            }

          len -= 2; /* len is now #octets - 1 */
          ip++;

          if (len < 7)
            {
              *op++ = (off >> 8) + (len << 5);
            }
          else
            {
              *op++ = (off >> 8) + (  7 << 5);
              *op++ = len - 7;
            }

          *op++ = off;

          lit = 0; op++; /* start run */

          ip += len + 1;

          if (expect_false (ip >= in_end - 2))
            break;

#if ULTRA_FAST || VERY_FAST
          --ip;
# if VERY_FAST && !ULTRA_FAST
          --ip;
# endif
          hval = FRST (ip);

          hval = NEXT (hval, ip);
          htab[IDX (hval)] = ip - LZF_HSLOT_BIAS;
          ip++;

# if VERY_FAST && !ULTRA_FAST
          hval = NEXT (hval, ip);
          htab[IDX (hval)] = ip - LZF_HSLOT_BIAS;
          ip++;
# endif
#else
          ip -= len + 1;

          do
            {
              hval = NEXT (hval, ip);
              htab[IDX (hval)] = ip - LZF_HSLOT_BIAS;
              ip++;
            }
          while (len--);
#endif
        }
      else
        {
          /* one more literal byte we must copy */
          if (expect_false (op >= out_end))
            return 0;

          lit++; *op++ = *ip++;

          if (expect_false (lit == MAX_LIT))
            {
              op [- lit - 1] = lit - 1; /* stop run */
              lit = 0; op++; /* start run */
            }
        }
    }

  if (op + 3 > out_end) /* at most 3 bytes can be missing here */
    return 0;

  while (ip < in_end)
    {
      lit++; *op++ = *ip++;

      if (expect_false (lit == MAX_LIT))
        {
          op [- lit - 1] = lit - 1; /* stop run */
          lit = 0; op++; /* start run */
        }
    }

  op [- lit - 1] = lit - 1; /* end run */
  op -= !lit; /* undo run if length is zero */

  return op - (u8 *)out_data;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40000, %rsp          # imm = 0x40000
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movq %rdx, -0x20(%rbp)
movl %ecx, -0x24(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x40038(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x40040(%rbp)
movq -0x40038(%rbp), %rax
movl -0x14(%rbp), %ecx
addq %rcx, %rax
movq %rax, -0x40048(%rbp)
movq -0x40040(%rbp), %rax
movl -0x24(%rbp), %ecx
addq %rcx, %rax
movq %rax, -0x40050(%rbp)
cmpl $0x0, -0x14(%rbp)
je 0x3b5a3
cmpl $0x0, -0x24(%rbp)
jne 0x3b5af
movl $0x0, -0x4(%rbp)
jmp 0x3c085
movl $0x0, -0x40068(%rbp)
movq -0x40040(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40040(%rbp)
movq -0x40038(%rbp), %rax
movzbl (%rax), %eax
shll $0x8, %eax
movq -0x40038(%rbp), %rcx
movzbl 0x1(%rcx), %ecx
orl %ecx, %eax
movl %eax, -0x40064(%rbp)
movq -0x40038(%rbp), %rax
movq -0x40048(%rbp), %rcx
addq $-0x2, %rcx
cmpq %rcx, %rax
jae 0x3bf4e
movl -0x40064(%rbp), %eax
shll $0x8, %eax
movq -0x40038(%rbp), %rcx
movzbl 0x2(%rcx), %ecx
orl %ecx, %eax
movl %eax, -0x40064(%rbp)
leaq -0x40030(%rbp), %rax
movl -0x40064(%rbp), %ecx
shrl $0x8, %ecx
imull $0x5, -0x40064(%rbp), %edx
subl %edx, %ecx
andl $0xffff, %ecx           # imm = 0xFFFF
movl %ecx, %ecx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, -0x40070(%rbp)
movq -0x40070(%rbp), %rax
movl (%rax), %ecx
movq -0x10(%rbp), %rax
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0x40058(%rbp)
movq -0x40038(%rbp), %rax
movq -0x10(%rbp), %rcx
subq %rcx, %rax
movl %eax, %ecx
movq -0x40070(%rbp), %rax
movl %ecx, (%rax)
movq -0x40038(%rbp), %rax
movq -0x40058(%rbp), %rcx
subq %rcx, %rax
subq $0x1, %rax
movq %rax, -0x40060(%rbp)
cmpq $0x2000, %rax           # imm = 0x2000
jae 0x3be74
movq -0x40058(%rbp), %rax
cmpq -0x10(%rbp), %rax
jbe 0x3be74
movq -0x40058(%rbp), %rax
movzbl 0x2(%rax), %eax
movq -0x40038(%rbp), %rcx
movzbl 0x2(%rcx), %ecx
cmpl %ecx, %eax
jne 0x3be74
movq -0x40058(%rbp), %rax
movzwl (%rax), %eax
movq -0x40038(%rbp), %rcx
movzwl (%rcx), %ecx
cmpl %ecx, %eax
jne 0x3be74
movl $0x2, -0x40074(%rbp)
movq -0x40048(%rbp), %rax
movq -0x40038(%rbp), %rcx
subq %rcx, %rax
movl -0x40074(%rbp), %ecx
subq %rcx, %rax
movl %eax, -0x40078(%rbp)
cmpl $0x108, -0x40078(%rbp)  # imm = 0x108
jbe 0x3b739
movl $0x108, %eax            # imm = 0x108
movl %eax, -0x4007c(%rbp)
jmp 0x3b745
movl -0x40078(%rbp), %eax
movl %eax, -0x4007c(%rbp)
movl -0x4007c(%rbp), %eax
movl %eax, -0x40078(%rbp)
movq -0x40040(%rbp), %rax
addq $0x3, %rax
addq $0x1, %rax
cmpq -0x40050(%rbp), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3b7c6
movq -0x40040(%rbp), %rax
cmpl $0x0, -0x40068(%rbp)
setne %cl
xorb $-0x1, %cl
andb $0x1, %cl
movzbl %cl, %ecx
movslq %ecx, %rdx
xorl %ecx, %ecx
subq %rdx, %rcx
addq %rcx, %rax
addq $0x3, %rax
addq $0x1, %rax
cmpq -0x40050(%rbp), %rax
jb 0x3b7c4
movl $0x0, -0x4(%rbp)
jmp 0x3c085
jmp 0x3b7c6
movl -0x40068(%rbp), %eax
subl $0x1, %eax
movb %al, %dl
movq -0x40040(%rbp), %rax
xorl %ecx, %ecx
subl -0x40068(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
cmpl $0x0, -0x40068(%rbp)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %ecx
movq -0x40040(%rbp), %rax
movslq %ecx, %rdx
xorl %ecx, %ecx
subq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0x40040(%rbp)
cmpl $0x10, -0x40078(%rbp)
seta %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3bbd8
movl -0x40074(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40074(%rbp)
movq -0x40058(%rbp), %rax
movl -0x40074(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movq -0x40038(%rbp), %rcx
movl -0x40074(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
je 0x3b873
jmp 0x3bc38
movl -0x40074(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40074(%rbp)
movq -0x40058(%rbp), %rax
movl -0x40074(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movq -0x40038(%rbp), %rcx
movl -0x40074(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
je 0x3b8ad
jmp 0x3bc38
movl -0x40074(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40074(%rbp)
movq -0x40058(%rbp), %rax
movl -0x40074(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movq -0x40038(%rbp), %rcx
movl -0x40074(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
je 0x3b8e7
jmp 0x3bc38
movl -0x40074(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40074(%rbp)
movq -0x40058(%rbp), %rax
movl -0x40074(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movq -0x40038(%rbp), %rcx
movl -0x40074(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
je 0x3b921
jmp 0x3bc38
movl -0x40074(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40074(%rbp)
movq -0x40058(%rbp), %rax
movl -0x40074(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movq -0x40038(%rbp), %rcx
movl -0x40074(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
je 0x3b95b
jmp 0x3bc38
movl -0x40074(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40074(%rbp)
movq -0x40058(%rbp), %rax
movl -0x40074(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movq -0x40038(%rbp), %rcx
movl -0x40074(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
je 0x3b995
jmp 0x3bc38
movl -0x40074(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40074(%rbp)
movq -0x40058(%rbp), %rax
movl -0x40074(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movq -0x40038(%rbp), %rcx
movl -0x40074(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
je 0x3b9cf
jmp 0x3bc38
movl -0x40074(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40074(%rbp)
movq -0x40058(%rbp), %rax
movl -0x40074(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movq -0x40038(%rbp), %rcx
movl -0x40074(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
je 0x3ba09
jmp 0x3bc38
movl -0x40074(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40074(%rbp)
movq -0x40058(%rbp), %rax
movl -0x40074(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movq -0x40038(%rbp), %rcx
movl -0x40074(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
je 0x3ba43
jmp 0x3bc38
movl -0x40074(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40074(%rbp)
movq -0x40058(%rbp), %rax
movl -0x40074(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movq -0x40038(%rbp), %rcx
movl -0x40074(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
je 0x3ba7d
jmp 0x3bc38
movl -0x40074(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40074(%rbp)
movq -0x40058(%rbp), %rax
movl -0x40074(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movq -0x40038(%rbp), %rcx
movl -0x40074(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
je 0x3bab7
jmp 0x3bc38
movl -0x40074(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40074(%rbp)
movq -0x40058(%rbp), %rax
movl -0x40074(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movq -0x40038(%rbp), %rcx
movl -0x40074(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
je 0x3baf1
jmp 0x3bc38
movl -0x40074(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40074(%rbp)
movq -0x40058(%rbp), %rax
movl -0x40074(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movq -0x40038(%rbp), %rcx
movl -0x40074(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
je 0x3bb2b
jmp 0x3bc38
movl -0x40074(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40074(%rbp)
movq -0x40058(%rbp), %rax
movl -0x40074(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movq -0x40038(%rbp), %rcx
movl -0x40074(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
je 0x3bb65
jmp 0x3bc38
movl -0x40074(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40074(%rbp)
movq -0x40058(%rbp), %rax
movl -0x40074(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movq -0x40038(%rbp), %rcx
movl -0x40074(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
je 0x3bb9f
jmp 0x3bc38
movl -0x40074(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40074(%rbp)
movq -0x40058(%rbp), %rax
movl -0x40074(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movq -0x40038(%rbp), %rcx
movl -0x40074(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
je 0x3bbd6
jmp 0x3bc38
jmp 0x3bbd8
jmp 0x3bbda
movl -0x40074(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40074(%rbp)
movl -0x40074(%rbp), %ecx
xorl %eax, %eax
cmpl -0x40078(%rbp), %ecx
movb %al, -0x4007d(%rbp)
jae 0x3bc2c
movq -0x40058(%rbp), %rax
movl -0x40074(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movq -0x40038(%rbp), %rcx
movl -0x40074(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
sete %al
movb %al, -0x4007d(%rbp)
movb -0x4007d(%rbp), %al
testb $0x1, %al
jne 0x3bbda
jmp 0x3bc38
movl -0x40074(%rbp), %eax
subl $0x2, %eax
movl %eax, -0x40074(%rbp)
movq -0x40038(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40038(%rbp)
cmpl $0x7, -0x40074(%rbp)
jae 0x3bc96
movq -0x40060(%rbp), %rax
shrq $0x8, %rax
movl -0x40074(%rbp), %ecx
shll $0x5, %ecx
movl %ecx, %ecx
addq %rcx, %rax
movb %al, %cl
movq -0x40040(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40040(%rbp)
movb %cl, (%rax)
jmp 0x3bce2
movq -0x40060(%rbp), %rax
shrq $0x8, %rax
addq $0xe0, %rax
movb %al, %cl
movq -0x40040(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40040(%rbp)
movb %cl, (%rax)
movl -0x40074(%rbp), %eax
subl $0x7, %eax
movb %al, %cl
movq -0x40040(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40040(%rbp)
movb %cl, (%rax)
movq -0x40060(%rbp), %rax
movb %al, %cl
movq -0x40040(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40040(%rbp)
movb %cl, (%rax)
movl $0x0, -0x40068(%rbp)
movq -0x40040(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40040(%rbp)
movl -0x40074(%rbp), %ecx
addl $0x1, %ecx
movq -0x40038(%rbp), %rax
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0x40038(%rbp)
movq -0x40038(%rbp), %rax
movq -0x40048(%rbp), %rcx
addq $-0x2, %rcx
cmpq %rcx, %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3bd6f
jmp 0x3bf4e
movq -0x40038(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x40038(%rbp)
movq -0x40038(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x40038(%rbp)
movq -0x40038(%rbp), %rax
movzbl (%rax), %eax
shll $0x8, %eax
movq -0x40038(%rbp), %rcx
movzbl 0x1(%rcx), %ecx
orl %ecx, %eax
movl %eax, -0x40064(%rbp)
movl -0x40064(%rbp), %eax
shll $0x8, %eax
movq -0x40038(%rbp), %rcx
movzbl 0x2(%rcx), %ecx
orl %ecx, %eax
movl %eax, -0x40064(%rbp)
movq -0x40038(%rbp), %rax
movq -0x10(%rbp), %rcx
subq %rcx, %rax
movl %eax, %ecx
movl -0x40064(%rbp), %eax
shrl $0x8, %eax
imull $0x5, -0x40064(%rbp), %edx
subl %edx, %eax
andl $0xffff, %eax           # imm = 0xFFFF
movl %eax, %eax
movl %ecx, -0x40030(%rbp,%rax,4)
movq -0x40038(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40038(%rbp)
movl -0x40064(%rbp), %eax
shll $0x8, %eax
movq -0x40038(%rbp), %rcx
movzbl 0x2(%rcx), %ecx
orl %ecx, %eax
movl %eax, -0x40064(%rbp)
movq -0x40038(%rbp), %rax
movq -0x10(%rbp), %rcx
subq %rcx, %rax
movl %eax, %ecx
movl -0x40064(%rbp), %eax
shrl $0x8, %eax
imull $0x5, -0x40064(%rbp), %edx
subl %edx, %eax
andl $0xffff, %eax           # imm = 0xFFFF
movl %eax, %eax
movl %ecx, -0x40030(%rbp,%rax,4)
movq -0x40038(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40038(%rbp)
jmp 0x3bf49
movq -0x40040(%rbp), %rax
cmpq -0x40050(%rbp), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3bea9
movl $0x0, -0x4(%rbp)
jmp 0x3c085
movl -0x40068(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40068(%rbp)
movq -0x40038(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x40038(%rbp)
movb (%rax), %cl
movq -0x40040(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40040(%rbp)
movb %cl, (%rax)
cmpl $0x20, -0x40068(%rbp)
sete %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3bf47
movl -0x40068(%rbp), %eax
subl $0x1, %eax
movb %al, %dl
movq -0x40040(%rbp), %rax
xorl %ecx, %ecx
subl -0x40068(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
movl $0x0, -0x40068(%rbp)
movq -0x40040(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40040(%rbp)
jmp 0x3bf49
jmp 0x3b5eb
movq -0x40040(%rbp), %rax
addq $0x3, %rax
cmpq -0x40050(%rbp), %rax
jbe 0x3bf6e
movl $0x0, -0x4(%rbp)
jmp 0x3c085
jmp 0x3bf70
movq -0x40038(%rbp), %rax
cmpq -0x40048(%rbp), %rax
jae 0x3c027
movl -0x40068(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40068(%rbp)
movq -0x40038(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x40038(%rbp)
movb (%rax), %cl
movq -0x40040(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40040(%rbp)
movb %cl, (%rax)
cmpl $0x20, -0x40068(%rbp)
sete %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3c022
movl -0x40068(%rbp), %eax
subl $0x1, %eax
movb %al, %dl
movq -0x40040(%rbp), %rax
xorl %ecx, %ecx
subl -0x40068(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
movl $0x0, -0x40068(%rbp)
movq -0x40040(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40040(%rbp)
jmp 0x3bf70
movl -0x40068(%rbp), %eax
subl $0x1, %eax
movb %al, %dl
movq -0x40040(%rbp), %rax
xorl %ecx, %ecx
subl -0x40068(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
cmpl $0x0, -0x40068(%rbp)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %ecx
movq -0x40040(%rbp), %rax
movslq %ecx, %rdx
xorl %ecx, %ecx
subq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0x40040(%rbp)
movq -0x40040(%rbp), %rax
movq -0x20(%rbp), %rcx
subq %rcx, %rax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x40000, %rsp          # imm = 0x40000
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)