// File: /workspace/github_c_makefile_star2_O3/genometools[P]genometools/src/extended/diagonalbandalign_affinegapcost.c
// Function: evaluateaffineDBcrosspoints
static GtAffineAlignRnode evaluateaffineDBcrosspoints(
                                             GtLinspaceManagement *spacemanager,
                                             GtAffineDiagAlignentry *Diagcolumn,
                                             const GtScoreHandler *scorehandler,
                                             GtAffineAlignEdge edge,
                                             GtAffineAlignEdge from_edge,
                                             GtAffineAlignEdge to_edge,
                                             GtUword rowoffset,
                                             GtUword coloffset,
                                             const GtUchar *useq,
                                             GtUword ustart,
                                             GtUword ulen,
                                             const GtUchar *vseq,
                                             GtUword vstart,
                                             GtUword vlen,
                                             GtWord left_dist,
                                             GtWord right_dist)
{
  GtUword i,new_ulen, new_vlen, col_start, col_end,
          row_start = 0, row_end;
  GtWord new_left, new_right, diag;
  GtDiagAlignentry cpoint = {0,0,0}, prevcpoint;
  GtAffineDiagAlignentry temp_entry;
  GtAffineAlignRnode rpoint, temprpoint, lastrpoint;
  GtAffineAlignEdge prevcp_type,cp_type;

  diag = GT_DIV2(left_dist+right_dist);
  gt_assert(vstart == coloffset);

  if (ulen == 0)
  {
    switch (edge) {
      case(Affine_R):
      {
        Diagcolumn[0].val_R.currentrowindex = rowoffset;
        Diagcolumn[0].val_R.last_type = from_edge;
        prevcp_type = Affine_R;
        break;
      }
      case(Affine_I):
      {
        Diagcolumn[0].val_I.currentrowindex = rowoffset;
        Diagcolumn[0].val_I.last_type = from_edge;
        prevcp_type = Affine_I;
        break;
      }
      case(Affine_D):
      {
        Diagcolumn[0].val_D.currentrowindex = rowoffset;
        Diagcolumn[0].val_D.last_type = from_edge;
        prevcp_type = Affine_D;
        break;
      }
      default:
      {
        Diagcolumn[0].val_I.currentrowindex = rowoffset;
        Diagcolumn[0].val_I.last_type = from_edge;
        prevcp_type = Affine_I;
      }
    }

    for (i = 1; i <=vlen; i++)
    {
      Diagcolumn[i].val_I.currentrowindex = rowoffset;
      Diagcolumn[i].val_I.last_type = prevcp_type;
      prevcp_type = Affine_I;
    }
    return (GtAffineAlignRnode) {vlen, prevcp_type};

  }

  if (vlen == 0)
  {
    switch (edge) {
      case(Affine_R):
      {
        Diagcolumn[0].val_R.currentrowindex = rowoffset;
        Diagcolumn[0].val_R.last_type = from_edge;
        break;
      }
      case(Affine_I):
      {
        Diagcolumn[0].val_I.currentrowindex = rowoffset;
        Diagcolumn[0].val_I.last_type = from_edge;
        break;
      }
      case(Affine_D):
      {
        Diagcolumn[0].val_D.currentrowindex = rowoffset;
        Diagcolumn[0].val_D.last_type = from_edge;
        break;
      }
      default:
      {
        Diagcolumn[0].val_D.currentrowindex = rowoffset;
        Diagcolumn[0].val_D.last_type = from_edge;
      }
    }
    return (GtAffineAlignRnode) {0, edge};
  }

  if (gt_linspace_management_checksquare(spacemanager, ulen, vlen,
                                         sizeof (GtAffinealignDPentry),
                                         sizeof (GtAffineAlignRtabentry)))
  { /* call square function */
    return affineDtab_in_square_space(spacemanager, Diagcolumn,
                                      useq, ustart, ulen, vseq, vstart, vlen,
                                      left_dist, right_dist, rowoffset,
                                      from_edge, edge, to_edge,scorehandler);
  }

  rpoint = evaluateallaffineDBcolumns(spacemanager, Diagcolumn, scorehandler,
                                      edge, from_edge, to_edge, rowoffset,
                                      useq, ustart, ulen,  vseq, vstart, vlen,
                                      left_dist, right_dist);

  lastrpoint = rpoint;
  col_start = rpoint.idx;
  cp_type = rpoint.edge;

  /* if no crosspoint is found */
  if (col_start == GT_UWORD_MAX)
  {
    gt_assert(diag != 0);
    if (diag < 0)
    {
      return evaluateaffineDBcrosspoints(spacemanager, Diagcolumn, scorehandler,
                                         edge, from_edge, to_edge, rowoffset,
                                         coloffset, useq, ustart, ulen, vseq,
                                         vstart, vlen, diag+1, right_dist);
    } else
    {
      if (diag > 0)
      {
        return evaluateaffineDBcrosspoints(spacemanager, Diagcolumn,
                                           scorehandler,
                                           edge, from_edge, to_edge, rowoffset,
                                           coloffset, useq, ustart, ulen, vseq,
                                           vstart, vlen, left_dist, diag-1);
      }
    }
  }
  else
  {
    switch (cp_type) {
    case Affine_R:
      cpoint = Diagcolumn[col_start].val_R;
      cp_type = Affine_R;
      row_start = Diagcolumn[col_start].val_R.currentrowindex;
      break;
    case Affine_D:
      cpoint = Diagcolumn[col_start].val_D;
      cp_type = Affine_D;
      row_start = Diagcolumn[col_start].val_D.currentrowindex;
      break;
    default:
      gt_assert(cp_type == Affine_I);
      cpoint = Diagcolumn[col_start].val_I;
      cp_type = Affine_I;
      row_start = Diagcolumn[col_start].val_I.currentrowindex;
      break;
    }
  }

  /* exception, if last cpoint != (m+1)entry */
  if (col_start != vlen)
  {
    if (diag + ((GtWord)ulen-(GtWord)vlen) > 0)
    {
      new_ulen = ulen - (row_start+1-rowoffset);
      new_vlen = vlen-col_start;
      new_left = GT_MAX((GtWord)left_dist-diag+1,
                    -(GtWord)new_ulen);
      new_right = 0;
      temp_entry = Diagcolumn[col_start];
      lastrpoint = evaluateaffineDBcrosspoints(spacemanager,
                      Diagcolumn+col_start, scorehandler, Affine_D,
                      cpoint.last_type, to_edge,
                      row_start+1, coloffset+col_start, useq,
                      row_start+1, new_ulen, vseq,
                      vstart+col_start, new_vlen, new_left, new_right);
      Diagcolumn[col_start] = temp_entry;
      Diagcolumn[col_start+1].val_R.last_type = cp_type;
      Diagcolumn[col_start+1].val_D.last_type = cp_type;
      Diagcolumn[col_start+1].val_I.last_type = cp_type;

      lastrpoint.idx += col_start;
    }
    else
    {
      new_ulen = ulen - (row_start - rowoffset);
      new_vlen = vlen-col_start-1;
      new_left = -1;
      new_right = GT_MIN((GtWord)right_dist-((GtWord)diag)-1,new_vlen);

      lastrpoint = evaluateaffineDBcrosspoints(spacemanager,
                            Diagcolumn+col_start+1,scorehandler, Affine_I,
                            cp_type, to_edge, row_start, coloffset+col_start+1,
                            useq, row_start, new_ulen, vseq, vstart+col_start+1,
                            new_vlen, new_left, new_right);
      lastrpoint.idx += (col_start+1);
    }
  }
  /* look at all 'normally' crosspoints */
  while (cpoint.lastcpoint != GT_UWORD_MAX)
  {
    prevcpoint = cpoint;
    prevcp_type = cp_type;
    col_end = col_start;
    row_end = row_start;
    col_start = prevcpoint.lastcpoint;
    switch (prevcpoint.last_type) {
    case Affine_R:
      cpoint = Diagcolumn[col_start].val_R;
      cp_type = Affine_R;
      row_start = Diagcolumn[col_start].val_R.currentrowindex;
      break;
    case Affine_D:
      cpoint = Diagcolumn[col_start].val_D;
      cp_type = Affine_D;
      row_start = Diagcolumn[col_start].val_D.currentrowindex;
      break;
    default:
      gt_assert(prevcpoint.last_type == Affine_I);
      cpoint = Diagcolumn[col_start].val_I;
      cp_type = Affine_I;
      row_start = Diagcolumn[col_start].val_I.currentrowindex;
      break;
    }

    if (prevcp_type == Affine_R ||
       ((prevcp_type == Affine_I) && (col_end-col_start == 1)))
    {
      continue;/* next crosspoint is also on the diagonal*/
    }
    else if (prevcp_type == Affine_D)
    {
      new_ulen = row_end - row_start - 1;
      new_vlen = col_end-col_start-1;
      new_left = -1;
      new_right = GT_MIN(right_dist-diag-1,new_vlen);

      temprpoint = evaluateaffineDBcrosspoints(spacemanager,
                           Diagcolumn+col_start+1, scorehandler,
                           Affine_I, cp_type, Affine_D, row_start,
                           coloffset + col_start + 1, useq, row_start,
                           new_ulen, vseq, vstart + col_start + 1,
                           new_vlen, new_left, new_right);
      if (temprpoint.idx + col_start + 1 < vlen)
      {
        GtUword update_idx = temprpoint.idx+1+col_start+1;
        Diagcolumn[update_idx].val_R.last_type = temprpoint.edge;
        Diagcolumn[update_idx].val_D.last_type = temprpoint.edge;
        Diagcolumn[update_idx].val_I.last_type = temprpoint.edge;
      }
      if (temprpoint.idx + col_start + 1 == lastrpoint.idx)
      {
        lastrpoint = temprpoint;
        lastrpoint.idx += col_start + 1;
      }
    }
    else if (prevcp_type == Affine_I)
    {
      new_ulen = row_end - row_start-1;
      new_left = GT_MAX(left_dist-diag+1,
                        -(GtWord)new_ulen);
      new_right = 0;
      temp_entry = Diagcolumn[col_start];
      temprpoint = evaluateaffineDBcrosspoints(spacemanager,
                            Diagcolumn + col_start, scorehandler,
                            Affine_D, cpoint.last_type, Affine_I, row_start + 1,
                            coloffset + col_start,
                            useq, row_start+1, new_ulen,
                            vseq, vstart+col_start, col_end-col_start-1,
                            new_left, new_right);
      Diagcolumn[col_start] = temp_entry;
      Diagcolumn[col_start+1].val_R.last_type = cp_type;
      Diagcolumn[col_start+1].val_D.last_type = cp_type;
      Diagcolumn[col_start+1].val_I.last_type = cp_type;
      Diagcolumn[col_end].val_I.last_type = temprpoint.edge;
    }
    else
    {
      /* if (Diagcolumn[cpoint].last_type == Linear_X), never reach this line */
      gt_assert(false);
    }
  }
  col_end = col_start;
  row_end = row_start;
  /* exception, if first crosspoint != 0-entry */
   if (vstart-coloffset != col_end)
   {
     switch (cp_type) {
     case Affine_D:
      if (row_end == ustart-1)
         gt_assert(false);
       new_ulen = row_end-ustart-1;
       new_left =  GT_MAX(-new_ulen, diag);
       new_right = GT_MIN(right_dist, (GtWord)col_end);

       rpoint = evaluateaffineDBcrosspoints(spacemanager, Diagcolumn,
                                        scorehandler, edge, from_edge,Affine_D,
                                        rowoffset,coloffset, useq, ustart,
                                        new_ulen, vseq, vstart, col_end,
                                        new_left, new_right);
       if (col_start + 1 <= vlen)
       {
         Diagcolumn[col_start+1].val_R.last_type = rpoint.edge;
         Diagcolumn[col_start+1].val_D.last_type = rpoint.edge;
         Diagcolumn[col_start+1].val_I.last_type = rpoint.edge;
       }
       if (rpoint.idx == lastrpoint.idx)
         lastrpoint = rpoint;
       break;
     case Affine_I:
       new_ulen = row_end-ustart;
       new_vlen = col_end-1;
       new_left = GT_MAX(left_dist,
                 -(GtWord)new_ulen);

       new_right = GT_MIN(diag,new_vlen);
       rpoint = evaluateaffineDBcrosspoints(spacemanager, Diagcolumn,
                               scorehandler,edge, from_edge, Affine_I,rowoffset,
                               coloffset, useq, ustart, new_ulen, vseq, vstart,
                               new_vlen, new_left, new_right);

       Diagcolumn[col_start].val_I.last_type = rpoint.edge;
       break;
     default:
       gt_assert(false);
     }
   }
   else if (cp_type == Affine_D)
   {
     Diagcolumn[1].val_I.last_type = Affine_R;
     Diagcolumn[1].val_D.last_type = Affine_R;
     Diagcolumn[1].val_R.last_type = Affine_R;
     Diagcolumn[0].val_R.currentrowindex = rowoffset;
     Diagcolumn[0].val_R.last_type = from_edge;
   }
  return lastrpoint;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1a8, %rsp            # imm = 0x1A8
movq %rdx, 0x38(%rsp)
movq 0x210(%rsp), %rax
cmpq 0x1e8(%rsp), %rax
jne 0x137126
movl %r8d, %r14d
movl %ecx, %ebx
movq %rsi, %r13
movq 0x218(%rsp), %rdx
movq 0x200(%rsp), %rax
movq 0x1e0(%rsp), %r12
movq %rax, 0x8(%rsp)
testq %rax, %rax
je 0x13588e
testq %rdx, %rdx
je 0x1358fe
movl %r9d, 0x34(%rsp)
movl $0x30, %ecx
movl $0x30, %r8d
movq 0x200(%rsp), %rbp
movq %rbp, %rsi
movq %rdi, %r15
callq 0x15bd8d
testb %al, %al
movq %rbx, 0xd8(%rsp)
movq %r14, 0x50(%rsp)
je 0x135922
testq %r15, %r15
je 0x137130
testq %r13, %r13
je 0x137130
movq 0x200(%rsp), %rax
leaq 0x1(%rax), %rbx
movq 0x218(%rsp), %rbp
leaq 0x1(%rbp), %rax
imulq %rbx, %rax
shlq $0x4, %rax
leaq (%rax,%rax,2), %r14
movq %r15, %rdi
callq 0x15be4e
cmpq %rax, %r14
ja 0x13713a
movq %r15, %rdi
callq 0x15be34
movq %rax, %r14
movq %r15, %rdi
callq 0x15be28
movq %rax, (%r14)
leaq (,%rbp,2), %r15
addq %rbp, %r15
cmpq $0x2, %rbx
movq 0x200(%rsp), %rcx
movq %rbp, %r10
jb 0x1357e7
movq %r15, %rax
shlq $0x4, %rax
addq $0x30, %rax
movq (%r14), %rsi
addq %rax, %rsi
xorl %edx, %edx
movq %rsi, 0x8(%r14,%rdx,8)
addq %rax, %rsi
incq %rdx
cmpq %rdx, %rcx
jne 0x1357d7
movq %r14, %rdi
movq 0x1f0(%rsp), %rsi
movq 0x1f8(%rsp), %rdx
movq 0x208(%rsp), %r8
movq 0x210(%rsp), %r9
movq 0x38(%rsp), %rbx
pushq %rbx
pushq 0xe0(%rsp)
pushq 0x60(%rsp)
pushq 0x240(%rsp)
pushq 0x240(%rsp)
pushq %r10
callq 0x13473e
addq $0x30, %rsp
movq %rbx, %rdi
callq 0x171427
shlq $0x4, %r15
movq 0x200(%rsp), %rcx
addq (%r14,%rcx,8), %r15
movq %r15, %rdi
movl 0x34(%rsp), %esi
movq %rax, %rdx
callq 0x159dd5
movq 0x218(%rsp), %r10
leaq (%r10,%r10,8), %rcx
cmpl $0x1, %eax
je 0x135aee
cmpl $0x2, %eax
jne 0x135b00
leaq 0x30(,%rcx,8), %rcx
addq %r13, %rcx
movl $0x2, %ebx
jmp 0x135b0d
leaq 0x40(%r13), %rax
leaq 0x28(%r13), %rcx
cmpl $0x1, %ebx
cmovneq %rax, %rcx
leaq 0x20(%r13), %rax
leaq 0x38(%r13), %rdi
xorl %esi, %esi
cmpl $0x1, %ebx
setne %sil
cmoveq %rax, %rdi
movl %esi, %ebx
incl %ebx
movq %r12, (%rdi)
movl %r14d, (%rcx)
testq %rdx, %rdx
je 0x135ae6
leaq 0x1(%rdx), %rcx
cmpq $0x3, %rcx
movl $0x2, %eax
cmovaeq %rcx, %rax
decq %rax
addq $0x88, %r13
movq %r12, -0x8(%r13)
movl %ebx, (%r13)
addq $0x48, %r13
movl $0x2, %ebx
decq %rax
jne 0x1358e0
movq %rdx, %r13
jmp 0x1370f6
cmpl $0x1, %ebx
je 0x135acf
cmpl $0x2, %ebx
jne 0x135ade
movq %r12, 0x38(%r13)
movl %r14d, 0x40(%r13)
movl $0x2, %ebx
jmp 0x135ae6
movq %r15, 0x48(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x90(%rsp)
movaps %xmm0, 0x80(%rsp)
movaps %xmm0, 0x70(%rsp)
movq 0x218(%rsp), %rcx
subq %rbp, %rcx
movq %rcx, %rdx
sarq $0x3f, %rdx
andq %rcx, %rdx
xorl %eax, %eax
testq %rcx, %rcx
cmovgq %rcx, %rax
cmpq 0x220(%rsp), %rdx
jl 0x137135
cmpq 0x228(%rsp), %rax
jg 0x137135
movq 0x48(%rsp), %r15
movq %r15, %rdi
callq 0x15be28
movq %rax, %r12
movq %r15, %rdi
callq 0x15be34
movq %rax, %rbp
movq 0x220(%rsp), %rax
negq %rax
movq %rax, 0x18(%rsp)
cmpq 0x200(%rsp), %rax
sete %al
movl %eax, 0x58(%rsp)
movq 0x38(%rsp), %r15
movq %r15, %rdi
callq 0x171427
movq %rax, 0xd0(%rsp)
movq %r15, %rdi
callq 0x171437
movq %rax, 0xc0(%rsp)
movabsq $0x7fffffffffffffff, %rax # imm = 0x7FFFFFFFFFFFFFFF
movq %rax, (%r12)
movq %rax, 0x8(%r12)
movq %r12, 0x28(%rsp)
movq %rax, 0x10(%r12)
testq %r13, %r13
je 0x13713f
movq $-0x1, %rax
movq %rax, 0x8(%r13)
movl $0x3, %ecx
movl %ecx, 0x10(%r13)
movq %rax, (%r13)
movq %rax, 0x20(%r13)
movl %ecx, 0x28(%r13)
movq %rax, 0x18(%r13)
movq %rax, 0x38(%r13)
movl %ecx, 0x40(%r13)
movq %rax, 0x30(%r13)
testq %rbp, %rbp
movq 0x210(%rsp), %r10
movq 0x1f8(%rsp), %r11
movq 0x1e0(%rsp), %rdi
je 0x137144
movq 0x228(%rsp), %rdx
movq 0x220(%rsp), %rsi
addq %rsi, %rdx
movq %rax, (%rbp)
movl %ecx, 0x8(%rbp)
movq %rax, 0x10(%rbp)
movl %ecx, 0x18(%rbp)
movq %rax, 0x20(%rbp)
movq %rbp, 0x10(%rsp)
movl %ecx, 0x28(%rbp)
cmpl $0x2, %ebx
je 0x135c5b
cmpl $0x1, %ebx
jne 0x135c99
movq 0x28(%rsp), %rax
movq $0x0, 0x8(%rax)
movq 0x10(%rsp), %rax
movl %r14d, 0x18(%rax)
cmpq $0x1, %rdx
ja 0x135cff
movq %rdi, 0x20(%r13)
movl %r14d, 0x28(%r13)
movq 0x10(%rsp), %rax
movq $0x0, 0x10(%rax)
movl $0x1, 0x18(%rax)
jmp 0x135cff
movq %r12, 0x20(%r13)
movl %r14d, 0x28(%r13)
movl $0x1, %ebx
jmp 0x135ae6
movq %r12, 0x20(%r13)
movl %r14d, 0x28(%r13)
xorl %r13d, %r13d
jmp 0x1370f6
leaq 0x18(,%rcx,8), %rcx
addq %r13, %rcx
movl $0x1, %ebx
jmp 0x135b0d
leaq (,%rcx,8), %rcx
addq %r13, %rcx
xorl %ebx, %ebx
movq 0x50(%rsp), %r15
movb $0x1, %dil
movabsq $0x7fffffffffffffff, %rdx # imm = 0x7FFFFFFFFFFFFFFF
movb $0x1, %r8b
movq %r10, %rsi
cmpq %r10, %rsi
cmovel %eax, %ebx
cmpl $0x2, %eax
je 0x135bc0
cmpl $0x1, %eax
je 0x135b9d
testl %eax, %eax
jne 0x13710d
movq 0x8(%rsp), %rbp
movq (%r14,%rbp,8), %rax
leaq (%rsi,%rsi,2), %r9
shlq $0x4, %r9
cmpq %rdx, (%rax,%r9)
je 0x137121
leaq (%r12,%rbp), %r11
leaq (%rsi,%rsi,8), %r10
movq %r11, 0x8(%r13,%r10,8)
movl 0x20(%rax,%r9), %eax
movl $0x0, 0x10(%rcx)
andb %dil, %r8b
testb $0x1, %r8b
je 0x13711c
leaq (,%r10,8), %rcx
addq %r13, %rcx
decq %rbp
decq %rsi
movq 0x218(%rsp), %r10
jmp 0x135c06
movq 0x8(%rsp), %rbp
testq %rbp, %rbp
je 0x137112
movq (%r14,%rbp,8), %rax
leaq (%rsi,%rsi,2), %rdi
shlq $0x4, %rdi
movl 0x24(%rax,%rdi), %eax
decq %rbp
jmp 0x135c06
movq 0x8(%rsp), %r8
leaq (%r8,%r12), %rax
leaq (%rsi,%rsi,8), %rdi
movq %rax, 0x38(%r13,%rdi,8)
movq (%r14,%r8,8), %rax
leaq (%rsi,%rsi,2), %r8
shlq $0x4, %r8
movl 0x28(%rax,%r8), %eax
movl $0x2, 0x10(%rcx)
testq %rsi, %rsi
je 0x137117
leaq 0x30(,%rdi,8), %rcx
addq %r13, %rcx
decq %rsi
movq 0x8(%rsp), %rbp
testq %rbp, %rbp
setne %r8b
testq %rsi, %rsi
setne %dil
movq %rbp, 0x8(%rsp)
movq %rbp, %r9
orq %rsi, %r9
jne 0x135b25
movl %eax, 0x10(%rcx)
movq $-0x1, %rax
movq %rax, (%r13)
movq %r12, 0x8(%r13)
movl %r15d, 0x10(%r13)
movq %rax, 0x18(%r13)
movq %r12, 0x20(%r13)
movl %r15d, 0x28(%r13)
movq %rax, 0x30(%r13)
movq %r12, 0x38(%r13)
movl %r15d, 0x40(%r13)
movq %r10, %r13
jmp 0x1370f6
movq 0x28(%rsp), %rax
movq $0x0, 0x10(%rax)
movq 0x10(%rsp), %rax
movl %r14d, 0x28(%rax)
cmpq $0x1, %rdx
ja 0x135cff
movq %rdi, 0x38(%r13)
movl %r14d, 0x40(%r13)
movq 0x10(%rsp), %rax
movq $0x0, 0x20(%rax)
movl $0x2, 0x28(%rax)
jmp 0x135cff
movq 0x28(%rsp), %rcx
movq $0x0, (%rcx)
movq 0xd0(%rsp), %rax
movq %rax, 0x8(%rcx)
movq %rax, 0x10(%rcx)
movq 0x10(%rsp), %rax
movl %r14d, 0x28(%rax)
movl %r14d, 0x8(%rax)
movl %r14d, 0x18(%rax)
cmpq $0x1, %rdx
ja 0x135cff
movq %rdi, 0x8(%r13)
movq %rdi, 0x20(%r13)
movq %rdi, 0x38(%r13)
xorl %eax, %eax
movq 0x10(%rsp), %rcx
movq %rax, (%rcx)
movl $0x0, 0x8(%rcx)
movq %rax, 0x10(%rcx)
movl $0x1, 0x18(%rcx)
movq %rax, 0x20(%rcx)
movl $0x2, 0x28(%rcx)
movq %rdx, 0x158(%rsp)
movq %rdx, %rax
sarq %rax
movq %rax, 0x40(%rsp)
testq %rsi, %rsi
je 0x135df3
movq 0x40(%rsp), %rax
negq %rax
movl $0x1, %ecx
movl $0x40, %edx
movq $-0x1, %rsi
movl $0x3, %edi
movabsq $0x7fffffffffffffff, %r15 # imm = 0x7FFFFFFFFFFFFFFF
movq 0x28(%rsp), %r12
movq %r15, -0x10(%r12,%rdx)
movq -0x38(%r12,%rdx), %r8
movq 0xc0(%rsp), %r9
addq %r8, %r9
cmpq %r15, %r8
cmoveq %r15, %r9
movq %r9, -0x8(%r12,%rdx)
movq %r15, (%r12,%rdx)
cmpq %rcx, %rax
jne 0x135db9
movl %r14d, 0x28(%r13)
movq %rsi, 0x18(%r13)
movq 0x1e0(%rsp), %r8
addq %rcx, %r8
movq %r8, 0x20(%r13)
movq 0x10(%rsp), %r8
movq $0x0, (%r8,%rdx)
movl $0x1, 0x8(%r8,%rdx)
movq %rsi, 0x8(%r13)
movl %edi, 0x10(%r13)
movq %rsi, (%r13)
movq %rsi, 0x38(%r13)
movl %edi, 0x40(%r13)
movq %rsi, 0x30(%r13)
jmp 0x135de1
movq 0x10(%rsp), %r8
movups -0x40(%r8,%rdx), %xmm0
movups -0x30(%r8,%rdx), %xmm1
movups -0x20(%r8,%rdx), %xmm2
movups %xmm2, 0x10(%r8,%rdx)
movups %xmm1, (%r8,%rdx)
movups %xmm0, -0x10(%r8,%rdx)
incq %rcx
addq $0x30, %rdx
cmpq 0x18(%rsp), %rcx
jbe 0x135d48
movq 0x10(%rsp), %rcx
leaq 0x20(%rcx), %rax
movq %rax, 0x168(%rsp)
movq 0x1f0(%rsp), %rax
leaq (%rax,%r11), %rdx
movq %rdx, 0x170(%rsp)
leaq -0x1(%rax,%r11), %rax
movq %rax, 0x178(%rsp)
movq 0x208(%rsp), %rax
leaq -0x1(%rax,%r10), %rax
movq %rax, 0x150(%rsp)
leaq 0x30(%rcx), %rax
movq %rax, 0x160(%rsp)
movq 0xd0(%rsp), %rax
movq 0xc0(%rsp), %rcx
addq %rcx, %rax
movq %rax, 0xf8(%rsp)
movl $0x1, %ecx
xorl %r8d, %r8d
movq 0x40(%rsp), %rax
movq %rax, 0x148(%rsp)
movabsq $0x7fffffffffffffff, %rax # imm = 0x7FFFFFFFFFFFFFFF
movq %rax, %r15
movq %rax, %r12
movq %rax, 0x8(%rsp)
movq %r13, 0x20(%rsp)
movl 0x58(%rsp), %r14d
movq 0x18(%rsp), %r13
movq 0x28(%rsp), %r10
movq (%r10), %rsi
movq 0x8(%r10), %rdx
movq 0x10(%r10), %rax
movq 0x10(%rsp), %r11
movups (%r11), %xmm0
movups 0x10(%r11), %xmm1
movups 0x20(%r11), %xmm2
movaps %xmm2, 0x120(%rsp)
movaps %xmm1, 0x110(%rsp)
movaps %xmm0, 0x100(%rsp)
cmpq 0x228(%rsp), %rcx
movq %rcx, %r9
movq %rax, 0x58(%rsp)
jbe 0x135f32
cmpq %r13, %r8
movq 0x200(%rsp), %rax
je 0x135f2d
movq 0x30(%r10), %r15
movq 0x38(%r10), %r12
movq 0x40(%r10), %rcx
movq %rcx, 0x8(%rsp)
movq 0x160(%rsp), %rcx
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups 0x20(%rcx), %xmm2
movaps %xmm2, 0x90(%rsp)
movaps %xmm1, 0x80(%rsp)
movaps %xmm0, 0x70(%rsp)
incq %r8
jmp 0x135f68
movups (%r11), %xmm0
movups 0x10(%r11), %xmm1
movups 0x20(%r11), %xmm2
movaps %xmm2, 0x90(%rsp)
movaps %xmm1, 0x80(%rsp)
movaps %xmm0, 0x70(%rsp)
movq %rax, 0x8(%rsp)
movq %rdx, %r12
movq %rsi, %r15
movq 0x200(%rsp), %rax
movq %rsi, 0xb8(%rsp)
movq %rdx, 0x68(%rsp)
xorl %ebp, %ebp
cmpq %rax, %r13
setb %bpl
movq %r13, %rax
addq %rbp, %rax
movq %rax, 0xb0(%rsp)
subq %r8, %rax
movq %rax, 0x180(%rsp)
setne %al
orb %r14b, %al
testb $0x1, %al
je 0x135ff4
movq 0xf8(%rsp), %rcx
leaq (%r15,%rcx), %rsi
movabsq $0x7fffffffffffffff, %rdx # imm = 0x7FFFFFFFFFFFFFFF
cmpq %rdx, %r15
movq %rsi, %rdi
cmoveq %rdx, %rdi
leaq (%r12,%rcx), %rax
cmpq %rdx, %r12
cmoveq %rdx, %rax
movq 0xc0(%rsp), %rcx
movq 0x8(%rsp), %rbx
addq %rbx, %rcx
cmpq %rdx, %rbx
cmoveq %rdx, %rcx
cmpq %rax, %rdi
jge 0x136042
cmpq %rcx, %rdi
cmovgeq %rcx, %rdi
movq %rdi, %rdx
jmp 0x13604f
movq $-0x1, %rax
movq %rax, 0x70(%rsp)
movl $0x3, %ecx
movl %ecx, 0x78(%rsp)
movq %rax, 0x80(%rsp)
movl %ecx, 0x88(%rsp)
movq %rax, 0x90(%rsp)
movl %ecx, 0x98(%rsp)
movabsq $0x7fffffffffffffff, %rax # imm = 0x7FFFFFFFFFFFFFFF
movq %rax, %rcx
movq %rax, %rdi
movq %rax, 0x8(%rsp)
movq %rax, %r12
movq %rax, %r15
cmpq %rcx, %rax
movq %rcx, %rdx
cmovlq %rax, %rdx
movq %rdi, %rsi
movq %rdx, 0x10(%r10)
movabsq $0x7fffffffffffffff, %rdi # imm = 0x7FFFFFFFFFFFFFFF
movq %rdi, (%r10)
movq %rdi, 0x8(%r10)
movq %r9, %rbx
subq %r8, %rbx
cmpq %rbx, 0x40(%rsp)
movq %r9, 0xa8(%rsp)
movq %r8, 0x60(%rsp)
jne 0x13613e
leaq (%r9,%r9,8), %rdi
movq 0x20(%rsp), %r8
leaq (%r8,%rdi,8), %rdi
movq $-0x1, %r8
movq %r8, 0x8(%rdi)
movl $0x3, %r9d
movl %r9d, 0x10(%rdi)
movq %r8, (%rdi)
movq %r8, 0x20(%rdi)
movl %r9d, 0x28(%rdi)
movq %r8, 0x18(%rdi)
leaq 0x78(%rsp), %r8
leaq 0x70(%rsp), %r9
cmpq %rsi, %rdx
je 0x1360ec
leaq 0x98(%rsp), %r8
leaq 0x90(%rsp), %r9
cmpq %rcx, %rdx
je 0x1360ec
leaq 0x88(%rsp), %r8
leaq 0x80(%rsp), %r9
cmpq %rax, %rdx
jne 0x1360f9
movl (%r8), %eax
movl %eax, 0x40(%rdi)
movq (%r9), %rax
movq %rax, 0x30(%rdi)
movq 0x1e0(%rsp), %rax
movq 0x60(%rsp), %r8
addq %r8, %rax
movq %rax, 0x38(%rdi)
movq $-0x1, %rax
movq %rax, (%r11)
movl $0x3, %ecx
movl %ecx, 0x8(%r11)
movq %rax, 0x10(%r11)
movl %ecx, 0x18(%r11)
movq 0xa8(%rsp), %r9
movq %r9, 0x20(%r11)
movl $0x2, 0x28(%r11)
jmp 0x13618b
leaq 0x70(%rsp), %rdi
cmpq %rsi, %rdx
je 0x136162
leaq 0x90(%rsp), %rdi
cmpq %rcx, %rdx
je 0x136162
leaq 0x80(%rsp), %rdi
cmpq %rax, %rdx
jne 0x136170
movups (%rdi), %xmm0
movq 0x168(%rsp), %rax
movups %xmm0, (%rax)
movq $-0x1, %rax
movq %rax, 0x10(%r11)
movl $0x3, %ecx
movl %ecx, 0x18(%r11)
movq %rax, (%r11)
movl %ecx, 0x8(%r11)
testq %r8, %r8
movq %r8, %rsi
je 0x136309
movq %r13, 0x18(%rsp)
movq %r12, %r13
movq %r15, %r12
movq 0x178(%rsp), %rax
movzbl (%rax,%rsi), %esi
movq 0x150(%rsp), %rax
movzbl (%rax,%r9), %edx
movq 0x38(%rsp), %rdi
movq %r9, %r15
callq 0x171466
movq 0x28(%rsp), %r10
movq 0xb8(%rsp), %rdi
leaq (%rax,%rdi), %rsi
movabsq $0x7fffffffffffffff, %rdx # imm = 0x7FFFFFFFFFFFFFFF
cmpq %rdx, %rdi
cmoveq %rdx, %rsi
movq 0x68(%rsp), %rdi
leaq (%rax,%rdi), %rcx
cmpq %rdx, %rdi
cmoveq %rdx, %rcx
movq 0x58(%rsp), %rdi
addq %rdi, %rax
cmpq %rdx, %rdi
cmoveq %rdx, %rax
cmpq %rcx, %rsi
movq %rcx, %rdi
cmovlq %rsi, %rdi
cmpq %rax, %rdi
movq %rax, %rdx
cmovlq %rdi, %rdx
movq %rdx, (%r10)
cmpq %rbx, 0x40(%rsp)
jne 0x1362c2
leaq (%r15,%r15,8), %r8
movq 0x20(%rsp), %r9
leaq (%r9,%r8,8), %r8
leaq 0x108(%rsp), %r9
leaq 0x100(%rsp), %r10
cmpq %rsi, %rdx
movq 0x10(%rsp), %r11
je 0x13627c
leaq 0x128(%rsp), %r9
leaq 0x120(%rsp), %r10
cmpq %rdi, %rax
jle 0x13627c
leaq 0x118(%rsp), %r9
leaq 0x110(%rsp), %r10
cmpq %rcx, %rdx
jne 0x136289
movl (%r9), %eax
movl %eax, 0x10(%r8)
movq (%r10), %rax
movq %rax, (%r8)
movq 0x1e0(%rsp), %rax
movq 0x60(%rsp), %rsi
addq %rsi, %rax
movq %rax, 0x8(%r8)
movq 0xa8(%rsp), %r9
movq %r9, (%r11)
movl $0x0, 0x8(%r11)
movq 0x28(%rsp), %r10
movq %r12, %r15
movq %r13, %r12
movq 0x18(%rsp), %r13
jmp 0x136309
leaq 0x100(%rsp), %r8
cmpq %rsi, %rdx
movq 0x10(%rsp), %r11
movq %r15, %r9
movq 0x60(%rsp), %rsi
movq %r12, %r15
movq %r13, %r12
movq 0x18(%rsp), %r13
je 0x136301
leaq 0x120(%rsp), %r8
cmpq %rdi, %rax
jle 0x136301
leaq 0x110(%rsp), %r8
cmpq %rcx, %rdx
jne 0x136309
movups (%r8), %xmm0
movups %xmm0, (%r11)
leaq 0x1(%rsi), %rbx
cmpq 0xb0(%rsp), %rbx
movq %rsi, %r8
ja 0x1368be
leaq (%r9,%r9,8), %rax
movq 0x20(%rsp), %rcx
leaq (%rcx,%rax,8), %rax
addq $0x30, %rax
movq %rax, 0x18(%rsp)
movq 0x170(%rsp), %rax
addq %r8, %rax
movq %rax, 0x1a0(%rsp)
movq 0x200(%rsp), %rax
subq %r8, %rax
movq %rax, 0x188(%rsp)
movq 0x1e0(%rsp), %rax
addq %r8, %rax
movq %rax, 0xf0(%rsp)
movq 0x148(%rsp), %rax
addq %r8, %rax
movq %rax, 0x198(%rsp)
addq %rbp, %r13
negq %r13
leaq (%r8,%r13), %rax
incq %rax
movq %rax, 0x190(%rsp)
movl $0x1, %ebp
movq 0x8(%rsp), %rax
movq %rax, 0xe8(%rsp)
movq %r12, 0xe0(%rsp)
movq %r15, 0xc8(%rsp)
movaps 0x70(%rsp), %xmm0
movaps 0x80(%rsp), %xmm1
movaps 0x90(%rsp), %xmm2
movaps %xmm2, 0x120(%rsp)
movaps %xmm1, 0x110(%rsp)
movaps %xmm0, 0x100(%rsp)
testb $0x1, %r14b
movzbl %r14b, %r14d
jne 0x136474
movq 0x190(%rsp), %rax
addq %rbp, %rax
cmpq $0x1, %rax
jne 0x136474
movq 0xb0(%rsp), %rax
cmpq 0x200(%rsp), %rax
movq $-0x1, %rax
movq %rax, 0x70(%rsp)
movl $0x3, %ecx
movl %ecx, 0x78(%rsp)
movq %rax, 0x80(%rsp)
movl %ecx, 0x88(%rsp)
movq %rax, 0x90(%rsp)
movl $0x1, %eax
cmovel %eax, %r14d
movl %ecx, 0x98(%rsp)
movq %rbp, %r15
movabsq $0x7fffffffffffffff, %rax # imm = 0x7FFFFFFFFFFFFFFF
movq %rax, %rcx
movq %rax, %rdi
movq %rax, 0x8(%rsp)
movq %rax, %r12
movq %rax, 0x68(%rsp)
jmp 0x136539
leaq (%r8,%rbp), %rax
leaq 0x1(%rbp), %rcx
testq %r8, %r8
cmoveq %rax, %rcx
shlq $0x4, %rcx
leaq (%rcx,%rcx,2), %rax
movq (%r10,%rax), %rdi
movq 0x8(%r10,%rax), %r12
movq 0x10(%r10,%rax), %r15
movups (%r11,%rax), %xmm0
movups 0x10(%r11,%rax), %xmm1
movups 0x20(%r11,%rax), %xmm2
movaps %xmm2, 0x90(%rsp)
movaps %xmm1, 0x80(%rsp)
movaps %xmm0, 0x70(%rsp)
cmpq %rbp, 0x188(%rsp)
movl $0x1, %eax
cmovel %eax, %r14d
movq 0xf8(%rsp), %rcx
leaq (%rdi,%rcx), %rsi
movabsq $0x7fffffffffffffff, %rdx # imm = 0x7FFFFFFFFFFFFFFF
movq %rdi, 0x68(%rsp)
cmpq %rdx, %rdi
movq %rsi, %rdi
cmoveq %rdx, %rdi
leaq (%r12,%rcx), %rax
cmpq %rdx, %r12
cmoveq %rdx, %rax
movq 0xc0(%rsp), %rcx
addq %r15, %rcx
movq %r15, 0x8(%rsp)
cmpq %rdx, %r15
cmoveq %rdx, %rcx
cmpq %rax, %rdi
jge 0x136533
movq %r12, 0xb8(%rsp)
cmpq %rcx, %rdi
cmovgeq %rcx, %rdi
movq %rbp, %r15
movq %rdi, %rdx
jmp 0x13654e
movq %rbx, %r15
subq %r8, %r15
movq %r12, 0xb8(%rsp)
cmpq %rcx, %rax
movq %rcx, %rdx
cmovlq %rax, %rdx
movq %rdi, %rsi
leaq (%r15,%r15,2), %r12
shlq $0x4, %r12
movq %rdx, 0x10(%r10,%r12)
movq 0x198(%rsp), %rdi
leaq (%rdi,%rbp), %r13
cmpq $0x1, %r13
movl %r14d, 0x58(%rsp)
jne 0x1365df
leaq 0x78(%rsp), %rdi
leaq 0x70(%rsp), %r8
cmpq %rsi, %rdx
je 0x1365ab
leaq 0x98(%rsp), %rdi
leaq 0x90(%rsp), %r8
cmpq %rcx, %rdx
je 0x1365ab
leaq 0x88(%rsp), %rdi
leaq 0x80(%rsp), %r8
cmpq %rax, %rdx
jne 0x1365bb
movl (%rdi), %eax
movq 0x18(%rsp), %rcx
movl %eax, 0x10(%rcx)
movq (%r8), %rax
movq %rax, (%rcx)
movq 0xf0(%rsp), %rax
addq %rbp, %rax
movq 0x18(%rsp), %rcx
movq %rax, 0x8(%rcx)
movq %r9, 0x20(%r11,%r12)
movl $0x2, 0x28(%r11,%r12)
jmp 0x136611
leaq 0x70(%rsp), %rdi
cmpq %rsi, %rdx
je 0x136603
leaq 0x90(%rsp), %rdi
cmpq %rcx, %rdx
je 0x136603
leaq 0x80(%rsp), %rdi
cmpq %rax, %rdx
jne 0x136611
leaq (%r11,%r12), %rax
addq $0x20, %rax
movups (%rdi), %xmm0
movups %xmm0, (%rax)
leaq (%r10,%r12), %r14
movq 0x1a0(%rsp), %rax
movzbl -0x1(%rax,%rbp), %esi
movq 0x150(%rsp), %rax
movzbl (%rax,%r9), %edx
movq 0x38(%rsp), %rdi
callq 0x171466
movq 0xc8(%rsp), %rdi
leaq (%rax,%rdi), %rsi
movabsq $0x7fffffffffffffff, %rdx # imm = 0x7FFFFFFFFFFFFFFF
cmpq %rdx, %rdi
cmoveq %rdx, %rsi
movq 0xe0(%rsp), %rdi
leaq (%rax,%rdi), %rcx
cmpq %rdx, %rdi
cmoveq %rdx, %rcx
movq 0xe8(%rsp), %rdi
addq %rdi, %rax
cmpq %rdx, %rdi
cmoveq %rdx, %rax
cmpq %rcx, %rsi
movq %rcx, %rdi
cmovlq %rsi, %rdi
cmpq %rax, %rdi
movq %rax, %rdx
cmovlq %rdi, %rdx
movq %rdx, (%r14)
cmpq $0x1, %r13
jne 0x13671d
leaq 0x108(%rsp), %r8
leaq 0x100(%rsp), %r9
cmpq %rsi, %rdx
movq 0x10(%rsp), %r11
movq 0x18(%rsp), %rsi
je 0x1366e5
leaq 0x128(%rsp), %r8
leaq 0x120(%rsp), %r9
cmpq %rdi, %rax
jle 0x1366e5
leaq 0x118(%rsp), %r8
leaq 0x110(%rsp), %r9
cmpq %rcx, %rdx
jne 0x1366f2
movl (%r8), %eax
movl %eax, -0x20(%rsi)
movq (%r9), %rax
movq %rax, -0x30(%rsi)
movq 0xf0(%rsp), %rax
addq %rbp, %rax
movq %rax, -0x28(%rsi)
movq 0xa8(%rsp), %rax
movq %rax, (%r11,%r12)
movl $0x0, 0x8(%r11,%r12)
movq 0x28(%rsp), %r10
jmp 0x136759
leaq 0x100(%rsp), %r8
cmpq %rsi, %rdx
movq 0x10(%rsp), %r11
movq 0x28(%rsp), %r10
je 0x13674e
leaq 0x120(%rsp), %r8
cmpq %rdi, %rax
jle 0x13674e
leaq 0x110(%rsp), %r8
cmpq %rcx, %rdx
jne 0x136759
leaq (%r11,%r12), %rax
movups (%r8), %xmm0
movups %xmm0, (%rax)
decq %r15
leaq (%r15,%r15,2), %rax
shlq $0x4, %rax
movq (%r10,%rax), %rcx
movq 0x8(%r10,%rax), %rsi
movq 0xf8(%rsp), %r9
leaq (%rcx,%r9), %rdx
movabsq $0x7fffffffffffffff, %r8 # imm = 0x7FFFFFFFFFFFFFFF
cmpq %r8, %rcx
cmoveq %r8, %rdx
movq 0xc0(%rsp), %rcx
addq %rsi, %rcx
cmpq %r8, %rsi
cmoveq %r8, %rcx
movq 0x10(%r10,%rax), %rdi
leaq (%rdi,%r9), %rsi
cmpq %r8, %rdi
cmoveq %r8, %rsi
cmpq %rcx, %rdx
movq %rcx, %r8
cmovlq %rdx, %r8
cmpq %rsi, %r8
movq %rsi, %rdi
cmovlq %r8, %rdi
movq %rdi, 0x8(%r14)
addq %r11, %rax
cmpq $0x1, %r13
jne 0x136800
movl $0x8, %r10d
movq %rax, %r9
cmpq %rdx, %rdi
movl 0x58(%rsp), %r14d
movq 0x68(%rsp), %r15
je 0x136840
cmpq %r8, %rsi
jle 0x136836
cmpq %rcx, %rdi
movq 0x18(%rsp), %rcx
jne 0x136853
leaq 0x10(%rax), %r9
movl $0x18, %r10d
jmp 0x136840
cmpq %rdx, %rdi
movl 0x58(%rsp), %r14d
movq 0x68(%rsp), %r15
jne 0x136819
movq 0xa8(%rsp), %r9
jmp 0x136888
cmpq %r8, %rsi
movq 0xa8(%rsp), %r9
jle 0x136884
cmpq %rcx, %rdi
movq 0x60(%rsp), %r8
jne 0x13689b
addq $0x10, %rax
jmp 0x13688d
leaq 0x20(%rax), %r9
movl $0x28, %r10d
movl (%rax,%r10), %eax
movq 0x18(%rsp), %rcx
movl %eax, -0x8(%rcx)
movq (%r9), %rax
movq %rax, -0x18(%rcx)
movq 0xf0(%rsp), %rax
addq %rbp, %rax
movq %rax, -0x10(%rcx)
movq 0xa8(%rsp), %r9
movq %r9, 0x10(%r11,%r12)
movl $0x1, 0x18(%r11,%r12)
movq 0x28(%rsp), %r10
movq 0x60(%rsp), %r8
jmp 0x13689b
addq $0x20, %rax
movq 0x60(%rsp), %r8
leaq (%r11,%r12), %rcx
addq $0x10, %rcx
movups (%rax), %xmm0
movups %xmm0, (%rcx)
incq %rbx
leaq (%r8,%rbp), %rax
incq %rax
incq %rbp
cmpq 0xb0(%rsp), %rax
movq 0xb8(%rsp), %r12
jbe 0x13639a
incq %r9
decq 0x148(%rsp)
movq 0xb0(%rsp), %r13
movq 0x218(%rsp), %r11
cmpq %r11, %r9
movq 0x1e0(%rsp), %r10
movq %r9, %rcx
movq 0x20(%rsp), %r9
jbe 0x135e9a
movq 0x180(%rsp), %rax
leaq (%rax,%rax,2), %rax
shlq $0x4, %rax
movq 0x28(%rsp), %rcx
movq (%rcx,%rax), %rsi
movq 0x8(%rcx,%rax), %rbx
movq 0x10(%rcx,%rax), %rdx
movl 0x34(%rsp), %ecx
cmpl $0x1, %ecx
je 0x13694f
cmpl $0x2, %ecx
jne 0x136979
movabsq $0x7fffffffffffffff, %rcx # imm = 0x7FFFFFFFFFFFFFFF
cmpq %rcx, %rsi
movq 0xd0(%rsp), %rdi
leaq (%rsi,%rdi), %rsi
cmoveq %rcx, %rsi
addq %rbx, %rdi
cmpq %rcx, %rbx
cmoveq %rcx, %rdi
movq %rdi, %rbx
jmp 0x136979
movabsq $0x7fffffffffffffff, %rcx # imm = 0x7FFFFFFFFFFFFFFF
cmpq %rcx, %rsi
movq 0xd0(%rsp), %rdi
leaq (%rsi,%rdi), %rsi
cmoveq %rcx, %rsi
addq %rdx, %rdi
cmpq %rcx, %rdx
cmoveq %rcx, %rdi
movq %rdi, %rdx
cmpq %rbx, %rsi
movq %rbx, %r14
cmovlq %rsi, %r14
cmpq %rdx, %r14
movq %rdx, %rdi
cmovlq %r14, %rdi
cmpq %rsi, %rdi
movq 0xd8(%rsp), %rcx
movq 0x50(%rsp), %r8
jne 0x1369a9
movq 0x10(%rsp), %rdx
addq %rax, %rdx
jmp 0x1369d1
cmpq %r14, %rdx
jle 0x1369c5
cmpq %rbx, %rdi
jne 0x136b4a
movq 0x10(%rsp), %rdx
addq %rax, %rdx
addq $0x10, %rdx
jmp 0x1369d1
movq 0x10(%rsp), %rdx
addq %rax, %rdx
addq $0x20, %rdx
movq 0x200(%rsp), %rbx
movq (%rdx), %r14
cmpq $-0x1, %r14
movq 0x40(%rsp), %rax
je 0x136b57
movl 0x8(%rdx), %r15d
cmpl $0x2, %r15d
je 0x136a1c
cmpl $0x1, %r15d
je 0x136a0e
testl %r15d, %r15d
jne 0x13714e
leaq (%r14,%r14,8), %rax
leaq (%r9,%rax,8), %rax
jmp 0x136a28
leaq (%r14,%r14,8), %rax
leaq (%r9,%rax,8), %rax
addq $0x18, %rax
jmp 0x136a28
leaq (%r14,%r14,8), %rax
leaq (%r9,%rax,8), %rax
addq $0x30, %rax
movq (%rax), %rbx
movq 0x8(%rax), %rbp
movl 0x10(%rax), %r12d
movq 0x218(%rsp), %r13
movq %r13, %rax
movl %r15d, %r9d
subq %r14, %rax
je 0x136c64
movq 0x200(%rsp), %r13
movq %r13, %rcx
movq 0x218(%rsp), %rdx
subq %rdx, %rcx
movq 0x40(%rsp), %r10
addq %r10, %rcx
movq 0x220(%rsp), %rcx
jle 0x136bde
leaq 0x1(%rbp), %rdx
movq %rdx, 0x8(%rsp)
movq 0x1e0(%rsp), %r11
subq %rdx, %r11
addq %r13, %r11
subq %r10, %rcx
movq %r11, %rdx
negq %rdx
leaq 0x1(%rcx), %r13
cmpq %rdx, %rcx
cmovlq %rdx, %r13
leaq (%r14,%r14,8), %rcx
movq 0x20(%rsp), %rdx
leaq (%rdx,%rcx,8), %rdx
movq %rdx, 0x18(%rsp)
leaq 0x100(%rsp), %rdi
movl $0x9, %ecx
movq %rdx, %rsi
rep  movsq (%rsi), %es:(%rdi)
movq 0x210(%rsp), %rcx
leaq (%r14,%rcx), %r10
movq 0x48(%rsp), %rdi
movq %rdx, %rsi
movq 0x38(%rsp), %rdx
movl $0x1, %ecx
movl %r12d, %r8d
movl 0x34(%rsp), %r9d
pushq $0x0
pushq %r13
pushq %rax
pushq %r10
pushq 0x228(%rsp)
pushq %r11
movq 0x38(%rsp), %rax
pushq %rax
pushq 0x228(%rsp)
pushq %r10
pushq %rax
callq 0x1356b0
addq $0x50, %rsp
movq %rax, %r13
movl %edx, %r9d
movl $0x9, %ecx
movq 0x18(%rsp), %rax
movq %rax, %rdi
leaq 0x100(%rsp), %rsi
rep  movsq (%rsi), %es:(%rdi)
movl %r15d, 0x58(%rax)
movl %r15d, 0x70(%rax)
movl %r15d, 0x88(%rax)
addq %r14, %r13
jmp 0x136c64
movq 0x200(%rsp), %rbx
movq 0x40(%rsp), %rax
cmpq $0x1, 0x158(%rsp)
jbe 0x137149
testq %rax, %rax
js 0x136b8a
decq %rax
movq 0x48(%rsp), %rdi
movq %r9, %rsi
movq 0x38(%rsp), %rdx
movl 0x34(%rsp), %r9d
pushq %rax
pushq 0x228(%rsp)
jmp 0x136ba7
incq %rax
movq 0x48(%rsp), %rdi
movq %r9, %rsi
movq 0x38(%rsp), %rdx
movl 0x34(%rsp), %r9d
pushq 0x228(%rsp)
pushq %rax
pushq %r11
movq 0x228(%rsp), %rax
pushq %rax
pushq 0x228(%rsp)
pushq %rbx
pushq 0x228(%rsp)
pushq 0x228(%rsp)
pushq %rax
pushq %r10
callq 0x1356b0
addq $0x50, %rsp
movq %rax, %r13
movl %edx, %ebx
jmp 0x1370f6
addq 0x1e0(%rsp), %r13
subq %rbp, %r13
movq %r14, %rax
notq %rax
addq %rdx, %rax
notq %r10
addq 0x228(%rsp), %r10
cmpq %rax, %r10
cmovaeq %rax, %r10
leaq (%r14,%r14,8), %rcx
movq 0x20(%rsp), %rdx
leaq 0x48(%rdx,%rcx,8), %rsi
movq 0x210(%rsp), %rcx
leaq 0x1(%rcx,%r14), %r11
movq 0x48(%rsp), %rdi
movq 0x38(%rsp), %rdx
movl $0x2, %ecx
movl %r15d, %r8d
movl 0x34(%rsp), %r9d
pushq %r10
pushq $-0x1
pushq %rax
pushq %r11
pushq 0x228(%rsp)
pushq %r13
pushq %rbp
pushq 0x228(%rsp)
pushq %r11
pushq %rbp
callq 0x1356b0
addq $0x50, %rsp
movl %edx, %r9d
leaq (%r14,%rax), %r13
incq %r13
cmpq $-0x1, %rbx
je 0x136f4d
movq 0x20(%rsp), %rax
leaq 0x48(%rax), %r8
movq 0x220(%rsp), %rdi
movq %rdi, %rcx
movq 0x40(%rsp), %rax
subq %rax, %rcx
movq %rcx, 0x18(%rsp)
incq %rcx
movq %rcx, 0x58(%rsp)
notq %rax
addq 0x228(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0x210(%rsp), %r11
leaq 0x1(%r11), %rax
movq %rax, 0xb8(%rsp)
movq %r13, 0x8(%rsp)
movq %r14, %r13
movq %rbp, %rax
movl %r15d, %ecx
movl %r12d, %r15d
movq %rbx, %r14
cmpl $0x2, %r12d
je 0x136d01
cmpl $0x1, %r15d
movq 0x20(%rsp), %rsi
je 0x136cf3
testl %r15d, %r15d
jne 0x13712b
leaq (%r14,%r14,8), %rdx
leaq (%rsi,%rdx,8), %rdx
jmp 0x136d12
leaq (%r14,%r14,8), %rdx
leaq (%rsi,%rdx,8), %rdx
addq $0x18, %rdx
jmp 0x136d12
leaq (%r14,%r14,8), %rdx
movq 0x20(%rsp), %rsi
leaq (%rsi,%rdx,8), %rdx
addq $0x30, %rdx
movq (%rdx), %rbx
movq 0x8(%rdx), %rbp
movl 0x10(%rdx), %r12d
testl %ecx, %ecx
je 0x136d32
cmpl $0x2, %ecx
jne 0x136d46
movq %r13, %rdx
subq %r14, %rdx
cmpq $0x1, %rdx
jne 0x136d46
movq %r14, %r13
movq %rbp, %rax
movl %r15d, %ecx
cmpq $-0x1, %rbx
jne 0x136cc9
jmp 0x136f46
movl %r9d, 0xe8(%rsp)
movq %rbp, %rdx
notq %rdx
addq %rdx, %rax
movq %r14, %r10
notq %r10
cmpl $0x1, %ecx
movq %r8, 0xe0(%rsp)
jne 0x136e39
addq %r10, %r13
movq 0x68(%rsp), %rcx
cmpq %r13, %rcx
movq %r13, %r10
cmovbq %rcx, %r10
leaq (%r14,%r14,8), %rcx
movq %rcx, 0xc8(%rsp)
leaq (%r8,%rcx,8), %rsi
movq 0xb8(%rsp), %rcx
leaq (%rcx,%r14), %r11
movq 0x48(%rsp), %rdi
movq 0x38(%rsp), %rdx
movl $0x2, %ecx
movl %r15d, %r8d
movl $0x1, %r9d
pushq %r10
pushq $-0x1
pushq %r13
pushq %r11
pushq 0x228(%rsp)
pushq %rax
pushq %rbp
pushq 0x228(%rsp)
pushq %r11
pushq %rbp
callq 0x1356b0
movq 0x130(%rsp), %r8
addq $0x50, %rsp
leaq (%r14,%rax), %rcx
incq %rcx
cmpq 0x218(%rsp), %rcx
jae 0x136e10
leaq (%rax,%rax,8), %rax
leaq (%r8,%rax,8), %rax
movq 0xc8(%rsp), %rsi
movl %edx, 0x58(%rax,%rsi,8)
movl %edx, 0x70(%rax,%rsi,8)
movl %edx, 0x88(%rax,%rsi,8)
movq 0x8(%rsp), %r13
cmpq %r13, %rcx
movl 0xe8(%rsp), %r9d
cmovel %edx, %r9d
movq 0x210(%rsp), %r11
movq 0x220(%rsp), %rdi
jmp 0x136f3a
movq %rax, %r11
negq %r11
cmpq %r11, 0x18(%rsp)
cmovgeq 0x58(%rsp), %r11
leaq (%r14,%r14,8), %rcx
movq 0x20(%rsp), %rdx
leaq (%rdx,%rcx,8), %rsi
movl $0x9, %ecx
leaq 0x100(%rsp), %rdi
movq %rsi, %rdx
movq %rsi, 0xc8(%rsp)
rep  movsq (%rsi), %es:(%rdi)
leaq 0x1(%rbp), %rcx
movq %rcx, 0xb0(%rsp)
movq 0x210(%rsp), %rcx
addq %r14, %rcx
movq %rcx, 0x28(%rsp)
addq %r13, %r10
movq 0x48(%rsp), %rdi
movq %rdx, %rsi
movq 0x38(%rsp), %rdx
movl $0x1, %ecx
movl %r12d, %r8d
movl $0x2, %r9d
pushq $0x0
pushq %r11
pushq %r10
movq 0x40(%rsp), %r10
pushq %r10
pushq 0x228(%rsp)
pushq %rax
movq 0xe0(%rsp), %rax
pushq %rax
pushq 0x228(%rsp)
pushq %r10
pushq %rax
callq 0x1356b0
movq 0x130(%rsp), %r8
movq 0x260(%rsp), %r11
addq $0x50, %rsp
movl $0x9, %ecx
movq 0xc8(%rsp), %rax
movq %rax, %rdi
leaq 0x100(%rsp), %rsi
rep  movsq (%rsi), %es:(%rdi)
movl %r15d, 0x58(%rax)
movl %r15d, 0x70(%rax)
movl %r15d, 0x88(%rax)
leaq (%r13,%r13,8), %rax
movq 0x20(%rsp), %rcx
movl %edx, 0x40(%rcx,%rax,8)
movq 0x220(%rsp), %rdi
movq 0x8(%rsp), %r13
movl 0xe8(%rsp), %r9d
cmpq $-0x1, %rbx
jne 0x136cc0
jmp 0x136f5d
movq 0x8(%rsp), %r13
jmp 0x136f5d
movq 0x210(%rsp), %r11
movq 0x220(%rsp), %rdi
testq %r14, %r14
je 0x137037
cmpl $0x2, %r15d
je 0x13706c
cmpl $0x1, %r15d
jne 0x137153
movq 0x1f8(%rsp), %r10
leaq -0x1(%r10), %rax
cmpq %rax, %rbp
movq 0xd8(%rsp), %rcx
movq 0x50(%rsp), %r8
je 0x137158
movl %r9d, %r12d
movq %r10, %rax
notq %rax
addq %rax, %rbp
movq %rbp, %rax
negq %rax
movq 0x40(%rsp), %rdx
cmpq %rax, %rdx
cmovaq %rdx, %rax
movq 0x228(%rsp), %r15
cmpq %r15, %r14
cmovlq %r14, %r15
movq 0x48(%rsp), %rdi
movq 0x20(%rsp), %rbx
movq %rbx, %rsi
movq 0x38(%rsp), %rdx
movl $0x1, %r9d
pushq %r15
pushq %rax
pushq %r14
pushq %r11
pushq 0x228(%rsp)
pushq %rbp
pushq %r10
pushq 0x228(%rsp)
pushq %r11
pushq 0x228(%rsp)
callq 0x1356b0
addq $0x50, %rsp
cmpq 0x218(%rsp), %r14
jae 0x137028
leaq (%r14,%r14,8), %rcx
movl %edx, 0x58(%rbx,%rcx,8)
movl %edx, 0x70(%rbx,%rcx,8)
movl %edx, 0x88(%rbx,%rcx,8)
cmpq %r13, %rax
cmovel %edx, %r12d
movl %r12d, %ebx
jmp 0x1370f6
cmpl $0x1, %r15d
jne 0x137064
xorl %eax, %eax
movq 0x20(%rsp), %rcx
movl %eax, 0x88(%rcx)
movl %eax, 0x70(%rcx)
movl %eax, 0x58(%rcx)
movq 0x1e0(%rsp), %rax
movq %rax, 0x8(%rcx)
movq 0x50(%rsp), %rax
movl %eax, 0x10(%rcx)
movl %r9d, %ebx
jmp 0x1370f6
movq 0x1f8(%rsp), %rax
subq %rax, %rbp
movq %rbp, %rax
negq %rax
cmpq %rdi, %rax
cmovleq %rdi, %rax
leaq -0x1(%r14), %r10
movq 0x40(%rsp), %r12
cmpq %r10, %r12
cmovaeq %r10, %r12
movq 0x48(%rsp), %rdi
movq 0x20(%rsp), %rbx
movq %rbx, %rsi
movq 0x38(%rsp), %rdx
movq 0xd8(%rsp), %rcx
movq 0x50(%rsp), %r8
movl %r9d, %r15d
movl $0x2, %r9d
pushq %r12
pushq %rax
pushq %r10
pushq %r11
pushq 0x228(%rsp)
pushq %rbp
pushq 0x228(%rsp)
pushq 0x228(%rsp)
pushq %r11
pushq 0x228(%rsp)
callq 0x1356b0
addq $0x50, %rsp
leaq (%r14,%r14,8), %rax
movl %edx, 0x40(%rbx,%rax,8)
movl %r15d, %ebx
movq %r13, %rax
movl %ebx, %edx
addq $0x1a8, %rsp            # imm = 0x1A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x3f8fb
callq 0x3f850
callq 0x3f817
callq 0x3f889
callq 0x3f8c2
callq 0x3f5dd
callq 0x3f616
callq 0x3f7de
callq 0x3f7a5
callq 0x3f934
callq 0x3f76c
callq 0x3f733
callq 0x3f6fa
callq 0x3f6c1
callq 0x3f688
callq 0x3f64f
nopl (%rax)