// File: /workspace/github_c_makefile_star2_O1/genometools[P]genometools/src/external/sqlite-3.33.0/sqlite3.c
// Function: multiSelect
static int multiSelect(
  Parse *pParse,        /* Parsing context */
  Select *p,            /* The right-most of SELECTs to be coded */
  SelectDest *pDest     /* What to do with query results */
){
  int rc = SQLITE_OK;   /* Success code from a subroutine */
  Select *pPrior;       /* Another SELECT immediately to our left */
  Vdbe *v;              /* Generate code to this VDBE */
  SelectDest dest;      /* Alternative data destination */
  Select *pDelete = 0;  /* Chain of simple selects to delete */
  sqlite3 *db;          /* Database connection */

  /* Make sure there is no ORDER BY or LIMIT clause on prior SELECTs.  Only
  ** the last (right-most) SELECT in the series may have an ORDER BY or LIMIT.
  */
  assert( p && p->pPrior );  /* Calling function guarantees this much */
  assert( (p->selFlags & SF_Recursive)==0 || p->op==TK_ALL || p->op==TK_UNION );
  assert( p->selFlags & SF_Compound );
  db = pParse->db;
  pPrior = p->pPrior;
  dest = *pDest;
  if( pPrior->pOrderBy || pPrior->pLimit ){
    sqlite3ErrorMsg(pParse,"%s clause should come after %s not before",
      pPrior->pOrderBy!=0 ? "ORDER BY" : "LIMIT", selectOpName(p->op));
    rc = 1;
    goto multi_select_end;
  }

  v = sqlite3GetVdbe(pParse);
  assert( v!=0 );  /* The VDBE already created by calling function */

  /* Create the destination temporary table if necessary
  */
  if( dest.eDest==SRT_EphemTab ){
    assert( p->pEList );
    sqlite3VdbeAddOp2(v, OP_OpenEphemeral, dest.iSDParm, p->pEList->nExpr);
    dest.eDest = SRT_Table;
  }

  /* Special handling for a compound-select that originates as a VALUES clause.
  */
  if( p->selFlags & SF_MultiValue ){
    rc = multiSelectValues(pParse, p, &dest);
    if( rc>=0 ) goto multi_select_end;
    rc = SQLITE_OK;
  }

  /* Make sure all SELECTs in the statement have the same number of elements
  ** in their result sets.
  */
  assert( p->pEList && pPrior->pEList );
  assert( p->pEList->nExpr==pPrior->pEList->nExpr );

#ifndef SQLITE_OMIT_CTE
  if( p->selFlags & SF_Recursive ){
    generateWithRecursiveQuery(pParse, p, &dest);
  }else
#endif

  /* Compound SELECTs that have an ORDER BY clause are handled separately.
  */
  if( p->pOrderBy ){
    return multiSelectOrderBy(pParse, p, pDest);
  }else{

#ifndef SQLITE_OMIT_EXPLAIN
    if( pPrior->pPrior==0 ){
      ExplainQueryPlan((pParse, 1, "COMPOUND QUERY"));
      ExplainQueryPlan((pParse, 1, "LEFT-MOST SUBQUERY"));
    }
#endif

    /* Generate code for the left and right SELECT statements.
    */
    switch( p->op ){
      case TK_ALL: {
        int addr = 0;
        int nLimit;
        assert( !pPrior->pLimit );
        pPrior->iLimit = p->iLimit;
        pPrior->iOffset = p->iOffset;
        pPrior->pLimit = p->pLimit;
        rc = sqlite3Select(pParse, pPrior, &dest);
        p->pLimit = 0;
        if( rc ){
          goto multi_select_end;
        }
        p->pPrior = 0;
        p->iLimit = pPrior->iLimit;
        p->iOffset = pPrior->iOffset;
        if( p->iLimit ){
          addr = sqlite3VdbeAddOp1(v, OP_IfNot, p->iLimit); VdbeCoverage(v);
          VdbeComment((v, "Jump ahead if LIMIT reached"));
          if( p->iOffset ){
            sqlite3VdbeAddOp3(v, OP_OffsetLimit,
                              p->iLimit, p->iOffset+1, p->iOffset);
          }
        }
        ExplainQueryPlan((pParse, 1, "UNION ALL"));
        rc = sqlite3Select(pParse, p, &dest);
        testcase( rc!=SQLITE_OK );
        pDelete = p->pPrior;
        p->pPrior = pPrior;
        p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow);
        if( pPrior->pLimit
         && sqlite3ExprIsInteger(pPrior->pLimit->pLeft, &nLimit)
         && nLimit>0 && p->nSelectRow > sqlite3LogEst((u64)nLimit)
        ){
          p->nSelectRow = sqlite3LogEst((u64)nLimit);
        }
        if( addr ){
          sqlite3VdbeJumpHere(v, addr);
        }
        break;
      }
      case TK_EXCEPT:
      case TK_UNION: {
        int unionTab;    /* Cursor number of the temp table holding result */
        u8 op = 0;       /* One of the SRT_ operations to apply to self */
        int priorOp;     /* The SRT_ operation to apply to prior selects */
        Expr *pLimit;    /* Saved values of p->nLimit  */
        int addr;
        SelectDest uniondest;

        testcase( p->op==TK_EXCEPT );
        testcase( p->op==TK_UNION );
        priorOp = SRT_Union;
        if( dest.eDest==priorOp ){
          /* We can reuse a temporary table generated by a SELECT to our
          ** right.
          */
          assert( p->pLimit==0 );      /* Not allowed on leftward elements */
          unionTab = dest.iSDParm;
        }else{
          /* We will need to create our own temporary table to hold the
          ** intermediate results.
          */
          unionTab = pParse->nTab++;
          assert( p->pOrderBy==0 );
          addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, unionTab, 0);
          assert( p->addrOpenEphm[0] == -1 );
          p->addrOpenEphm[0] = addr;
          findRightmost(p)->selFlags |= SF_UsesEphemeral;
          assert( p->pEList );
        }

        /* Code the SELECT statements to our left
        */
        assert( !pPrior->pOrderBy );
        sqlite3SelectDestInit(&uniondest, priorOp, unionTab);
        rc = sqlite3Select(pParse, pPrior, &uniondest);
        if( rc ){
          goto multi_select_end;
        }

        /* Code the current SELECT statement
        */
        if( p->op==TK_EXCEPT ){
          op = SRT_Except;
        }else{
          assert( p->op==TK_UNION );
          op = SRT_Union;
        }
        p->pPrior = 0;
        pLimit = p->pLimit;
        p->pLimit = 0;
        uniondest.eDest = op;
        ExplainQueryPlan((pParse, 1, "%s USING TEMP B-TREE",
                          selectOpName(p->op)));
        rc = sqlite3Select(pParse, p, &uniondest);
        testcase( rc!=SQLITE_OK );
        assert( p->pOrderBy==0 );
        pDelete = p->pPrior;
        p->pPrior = pPrior;
        p->pOrderBy = 0;
        if( p->op==TK_UNION ){
          p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow);
        }
        sqlite3ExprDelete(db, p->pLimit);
        p->pLimit = pLimit;
        p->iLimit = 0;
        p->iOffset = 0;

        /* Convert the data in the temporary table into whatever form
        ** it is that we currently need.
        */
        assert( unionTab==dest.iSDParm || dest.eDest!=priorOp );
        assert( p->pEList || db->mallocFailed );
        if( dest.eDest!=priorOp && db->mallocFailed==0 ){
          int iCont, iBreak, iStart;
          iBreak = sqlite3VdbeMakeLabel(pParse);
          iCont = sqlite3VdbeMakeLabel(pParse);
          computeLimitRegisters(pParse, p, iBreak);
          sqlite3VdbeAddOp2(v, OP_Rewind, unionTab, iBreak); VdbeCoverage(v);
          iStart = sqlite3VdbeCurrentAddr(v);
          selectInnerLoop(pParse, p, unionTab,
                          0, 0, &dest, iCont, iBreak);
          sqlite3VdbeResolveLabel(v, iCont);
          sqlite3VdbeAddOp2(v, OP_Next, unionTab, iStart); VdbeCoverage(v);
          sqlite3VdbeResolveLabel(v, iBreak);
          sqlite3VdbeAddOp2(v, OP_Close, unionTab, 0);
        }
        break;
      }
      default: assert( p->op==TK_INTERSECT ); {
        int tab1, tab2;
        int iCont, iBreak, iStart;
        Expr *pLimit;
        int addr;
        SelectDest intersectdest;
        int r1;

        /* INTERSECT is different from the others since it requires
        ** two temporary tables.  Hence it has its own case.  Begin
        ** by allocating the tables we will need.
        */
        tab1 = pParse->nTab++;
        tab2 = pParse->nTab++;
        assert( p->pOrderBy==0 );

        addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab1, 0);
        assert( p->addrOpenEphm[0] == -1 );
        p->addrOpenEphm[0] = addr;
        findRightmost(p)->selFlags |= SF_UsesEphemeral;
        assert( p->pEList );

        /* Code the SELECTs to our left into temporary table "tab1".
        */
        sqlite3SelectDestInit(&intersectdest, SRT_Union, tab1);
        rc = sqlite3Select(pParse, pPrior, &intersectdest);
        if( rc ){
          goto multi_select_end;
        }

        /* Code the current SELECT into temporary table "tab2"
        */
        addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab2, 0);
        assert( p->addrOpenEphm[1] == -1 );
        p->addrOpenEphm[1] = addr;
        p->pPrior = 0;
        pLimit = p->pLimit;
        p->pLimit = 0;
        intersectdest.iSDParm = tab2;
        ExplainQueryPlan((pParse, 1, "%s USING TEMP B-TREE",
                          selectOpName(p->op)));
        rc = sqlite3Select(pParse, p, &intersectdest);
        testcase( rc!=SQLITE_OK );
        pDelete = p->pPrior;
        p->pPrior = pPrior;
        if( p->nSelectRow>pPrior->nSelectRow ){
          p->nSelectRow = pPrior->nSelectRow;
        }
        sqlite3ExprDelete(db, p->pLimit);
        p->pLimit = pLimit;

        /* Generate code to take the intersection of the two temporary
        ** tables.
        */
        if( rc ) break;
        assert( p->pEList );
        iBreak = sqlite3VdbeMakeLabel(pParse);
        iCont = sqlite3VdbeMakeLabel(pParse);
        computeLimitRegisters(pParse, p, iBreak);
        sqlite3VdbeAddOp2(v, OP_Rewind, tab1, iBreak); VdbeCoverage(v);
        r1 = sqlite3GetTempReg(pParse);
        iStart = sqlite3VdbeAddOp2(v, OP_RowData, tab1, r1);
        sqlite3VdbeAddOp4Int(v, OP_NotFound, tab2, iCont, r1, 0);
        VdbeCoverage(v);
        sqlite3ReleaseTempReg(pParse, r1);
        selectInnerLoop(pParse, p, tab1,
                        0, 0, &dest, iCont, iBreak);
        sqlite3VdbeResolveLabel(v, iCont);
        sqlite3VdbeAddOp2(v, OP_Next, tab1, iStart); VdbeCoverage(v);
        sqlite3VdbeResolveLabel(v, iBreak);
        sqlite3VdbeAddOp2(v, OP_Close, tab2, 0);
        sqlite3VdbeAddOp2(v, OP_Close, tab1, 0);
        break;
      }
    }

  #ifndef SQLITE_OMIT_EXPLAIN
    if( p->pNext==0 ){
      ExplainQueryPlanPop(pParse);
    }
  #endif
  }
  if( pParse->nErr ) goto multi_select_end;

  /* Compute collating sequences used by
  ** temporary tables needed to implement the compound select.
  ** Attach the KeyInfo structure to all temporary tables.
  **
  ** This section is run by the right-most SELECT statement only.
  ** SELECT statements to the left always skip this part.  The right-most
  ** SELECT might also skip this part if it has no ORDER BY clause and
  ** no temp tables are required.
  */
  if( p->selFlags & SF_UsesEphemeral ){
    int i;                        /* Loop counter */
    KeyInfo *pKeyInfo;            /* Collating sequence for the result set */
    Select *pLoop;                /* For looping through SELECT statements */
    CollSeq **apColl;             /* For looping through pKeyInfo->aColl[] */
    int nCol;                     /* Number of columns in result set */

    assert( p->pNext==0 );
    nCol = p->pEList->nExpr;
    pKeyInfo = sqlite3KeyInfoAlloc(db, nCol, 1);
    if( !pKeyInfo ){
      rc = SQLITE_NOMEM_BKPT;
      goto multi_select_end;
    }
    for(i=0, apColl=pKeyInfo->aColl; i<nCol; i++, apColl++){
      *apColl = multiSelectCollSeq(pParse, p, i);
      if( 0==*apColl ){
        *apColl = db->pDfltColl;
      }
    }

    for(pLoop=p; pLoop; pLoop=pLoop->pPrior){
      for(i=0; i<2; i++){
        int addr = pLoop->addrOpenEphm[i];
        if( addr<0 ){
          /* If [0] is unused then [1] is also unused.  So we can
          ** always safely abort as soon as the first unused slot is found */
          assert( pLoop->addrOpenEphm[1]<0 );
          break;
        }
        sqlite3VdbeChangeP2(v, addr, nCol);
        sqlite3VdbeChangeP4(v, addr, (char*)sqlite3KeyInfoRef(pKeyInfo),
                            P4_KEYINFO);
        pLoop->addrOpenEphm[i] = -1;
      }
    }
    sqlite3KeyInfoUnref(pKeyInfo);
  }

multi_select_end:
  pDest->iSdst = dest.iSdst;
  pDest->nSdst = dest.nSdst;
  sqlite3SelectDelete(db, pDelete);
  return rc;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x118, %rsp            # imm = 0x118
movq %rdx, %r15
movq %rsi, %rbx
movq %rdi, %rbp
movq (%rdi), %r13
movq 0x50(%rsi), %r14
movq 0x20(%rdx), %rax
movq %rax, 0xd0(%rsp)
movups (%rdx), %xmm0
movups 0x10(%rdx), %xmm1
movaps %xmm1, 0xc0(%rsp)
movaps %xmm0, 0xb0(%rsp)
cmpq $0x0, 0x48(%r14)
je 0x2d5b2e
leaq 0x10c3c0(%rip), %rdx    # 0x3e1eec
jmp 0x2d5b40
cmpq $0x0, 0x60(%r14)
je 0x2d5bb9
leaq 0x10c403(%rip), %rdx    # 0x3e1f43
movb (%rbx), %al
addb $0x7b, %al
cmpb $0x2, %al
ja 0x2d5b58
movzbl %al, %eax
leaq 0x1ed7c6(%rip), %rcx    # 0x4c3318
movq (%rcx,%rax,8), %rcx
jmp 0x2d5b5f
leaq 0x10bc3b(%rip), %rcx    # 0x3e179a
leaq 0x10c3b3(%rip), %rsi    # 0x3e1f19
xorl %r14d, %r14d
movq %rbp, %rdi
xorl %eax, %eax
callq 0x284eb8
movl $0x1, %r12d
movl 0xbc(%rsp), %eax
movl %eax, 0xc(%r15)
movl 0xc0(%rsp), %eax
movl %eax, 0x10(%r15)
testq %r14, %r14
je 0x2d5ba4
movq %r13, %rdi
movq %r14, %rsi
movl $0x1, %edx
callq 0x2afecb
movl %r12d, %eax
addq $0x118, %rsp            # imm = 0x118
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rbp, %rdi
callq 0x2c5ddf
cmpb $0xc, 0xb0(%rsp)
movq %rax, 0x18(%rsp)
jne 0x2d5bfc
movl 0xb4(%rsp), %edx
movq 0x20(%rbx), %rax
movl (%rax), %ecx
movq 0x18(%rsp), %rdi
movl $0x64, %esi
xorl %r8d, %r8d
callq 0x2b200c
movq 0x18(%rsp), %rax
movb $0xe, 0xb0(%rsp)
testb $0x4, 0x5(%rbx)
movq %rbp, 0x8(%rsp)
je 0x2d5d12
movq %r13, 0x10(%rsp)
movq 0x60(%rbx), %rdi
xorl %esi, %esi
testq %rdi, %rdi
sete %dl
cmpq $0x0, 0x70(%rbx)
sete %r13b
movl $0xffffffff, %r12d      # imm = 0xFFFFFFFF
jne 0x2d5d00
movq %r15, 0x20(%rsp)
movq 0x50(%rbx), %rcx
testq %rcx, %rcx
je 0x2d5c66
movb %dl, %sil
movl $0x1, %ebp
cmpq $0x0, 0x70(%rcx)
sete %r13b
jne 0x2d5cf6
movq %rcx, %r15
addl %esi, %ebp
movq 0x50(%rcx), %rcx
testq %rcx, %rcx
jne 0x2d5c47
jmp 0x2d5c6e
movl $0x1, %ebp
movq %rbx, %r15
movq %rdi, (%rsp)
cmpl $0x1, %ebp
leaq 0xfdc14(%rip), %rax     # 0x3d3890
leaq 0x10ceca(%rip), %r8     # 0x3e2b4d
cmoveq %rax, %r8
leaq 0x10c2f2(%rip), %rdx    # 0x3e1f80
xorl %r12d, %r12d
movq 0x8(%rsp), %rdi
xorl %esi, %esi
movl %ebp, %ecx
xorl %eax, %eax
callq 0x2cae5e
testq %r15, %r15
je 0x2d5ce5
xorl %r12d, %r12d
movq 0x8(%rsp), %rdi
movq %r15, %rsi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
xorl %ecx, %ecx
xorl %r8d, %r8d
leaq 0xb0(%rsp), %r9
movl $0x1, %eax
pushq %rax
pushq %rax
callq 0x2d9d48
addq $0x10, %rsp
cmpq $0x0, (%rsp)
jne 0x2d5ce5
movw %bp, 0x2(%r15)
movq 0x58(%r15), %r15
jmp 0x2d5ca1
movq 0x8(%rsp), %rbp
movq 0x20(%rsp), %r15
movq 0x18(%rsp), %rax
jmp 0x2d5d00
movq 0x8(%rsp), %rbp
movq 0x20(%rsp), %r15
testb %r13b, %r13b
movq 0x10(%rsp), %r13
je 0x2d5d12
xorl %r14d, %r14d
jmp 0x2d5b79
testb $0x20, 0x5(%rbx)
jne 0x2d5deb
movq 0x48(%rbx), %r12
testq %r12, %r12
je 0x2d5e0c
movq (%rbp), %r13
movq %rbp, %rax
movq 0x10(%rbp), %rbp
movl 0x44(%rax), %ecx
movq %rcx, 0x18(%rsp)
addl $-0x2, %ecx
movl %ecx, 0x40(%rsp)
movl %ecx, 0x44(%rax)
movb (%rbx), %cl
movq 0x50(%rbx), %rax
movq %rax, 0x10(%rsp)
movl (%r12), %r8d
movb %cl, (%rsp)
cmpb $-0x7b, %cl
movq %r15, 0x20(%rsp)
movq %r13, 0x48(%rsp)
je 0x2d5d72
cmpb $0x0, 0x61(%r13)
je 0x2d6700
movslq %r8d, %rax
leaq 0x4(,%rax,4), %rsi
movq %r13, %rdi
movq %r8, %r14
callq 0x28c518
testq %rax, %rax
movq %r14, 0xa8(%rsp)
movq %rax, 0x90(%rsp)
je 0x2d5f65
movl %r14d, (%rax)
testl %r14d, %r14d
jle 0x2d5dce
leal 0x1(%r14), %ecx
movl %ecx, %r8d
leaq 0x1c(%r12), %rcx
movl $0x1, %edx
movzwl (%rcx), %esi
decl %esi
movl %esi, (%rax,%rdx,4)
incq %rdx
addq $0x18, %rcx
cmpq %rdx, %r8
jne 0x2d5dba
movq 0x8(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x2dc9b1
movq %rax, 0x98(%rsp)
jmp 0x2d5f76
cmpq $0x0, 0x70(%rbx)
je 0x2d5eaf
leaq 0x10c19a(%rip), %rsi    # 0x3e1f97
movq %rbp, %rdi
xorl %eax, %eax
callq 0x284eb8
jmp 0x2d6f3f
cmpq $0x0, 0x50(%r14)
jne 0x2d5e44
leaq 0x10c12f(%rip), %rdx    # 0x3e1f49
movq %rbp, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2cae5e
leaq 0x10c128(%rip), %rdx    # 0x3e1f58
movq %rbp, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2cae5e
movq 0x18(%rsp), %rax
movzbl (%rbx), %ecx
cmpl $0x84, %ecx
je 0x2d6500
cmpl $0x86, %ecx
je 0x2d6500
cmpl $0x85, %ecx
jne 0x2d688c
movl 0x8(%rbx), %eax
movl %eax, 0x8(%r14)
movl 0xc(%rbx), %eax
movl %eax, 0xc(%r14)
movq 0x60(%rbx), %rax
movq %rax, 0x60(%r14)
leaq 0xb0(%rsp), %rdx
movq %rbp, %rdi
movq %r14, %rsi
callq 0x2b9266
movq $0x0, 0x60(%rbx)
testl %eax, %eax
je 0x2d6c68
xorl %r14d, %r14d
movl %eax, %r12d
jmp 0x2d7276
movq 0x20(%rbx), %rax
movq 0x28(%rbx), %r14
movq %rbp, %rdi
movl (%rax), %eax
movl %eax, (%rsp)
movq 0x10(%rbp), %r12
movq 0x50(%rbx), %rbp
movl $0x21, %esi
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2cceea
testl %eax, %eax
jne 0x2d6f3f
movq %rbp, 0x48(%rsp)
movq %r12, 0x28(%rsp)
movq 0x8(%rsp), %rdi
movl 0x44(%rdi), %r12d
decl %r12d
movl %r12d, 0x44(%rdi)
movw $0x140, 0x2(%rbx)       # imm = 0x140
movq %rbx, %rsi
movl %r12d, %edx
callq 0x2d76ab
movq 0x60(%rbx), %rax
movq %rax, 0xa0(%rsp)
movl 0x8(%rbx), %esi
movl 0xc(%rbx), %eax
movl %eax, 0x98(%rsp)
xorl %eax, %eax
movq %rax, 0x60(%rbx)
movq %rax, 0x8(%rbx)
movslq (%r14), %rax
testq %rax, %rax
movl $0x0, %edx
movl (%rsp), %r8d
jle 0x2d6903
imulq $0x70, %rax, %rcx
xorl %eax, %eax
testb $0x20, 0x45(%r14,%rax)
jne 0x2d68fe
addq $0x70, %rax
cmpq %rax, %rcx
jne 0x2d5f49
xorl %edx, %edx
jmp 0x2d6903
movq $0x0, 0x98(%rsp)
movq 0x8(%rsp), %r14
movq %r12, 0x48(%rbx)
movq (%r14), %rdi
movq %r12, %rsi
xorl %edx, %edx
callq 0x2cc525
movq 0x10(%rsp), %rcx
movq %rax, 0x48(%rcx)
cmpb $-0x7b, (%rsp)
movq %rbp, 0xe8(%rsp)
jne 0x2d5fb2
movq $0x0, 0xe0(%rsp)
xorl %r14d, %r14d
jmp 0x2d603a
movq 0x20(%rbx), %rax
movl (%rax), %r15d
movl 0x38(%r14), %eax
leal (%rax,%r15), %ecx
incl %ecx
incl %eax
movl %ecx, 0x38(%r14)
movq %rbp, %rdi
movl $0x45, %esi
xorl %edx, %edx
movq %rax, 0xe0(%rsp)
movl %eax, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq %r13, %rdi
movl %r15d, %esi
movl $0x1, %edx
callq 0x2c6339
movq %rax, %r14
testq %rax, %rax
setne %al
testl %r15d, %r15d
setg %cl
andb %al, %cl
cmpb $0x1, %cl
jne 0x2d603a
movl %r15d, %r12d
xorl %r15d, %r15d
movq 0x8(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
movl %r15d, %edx
callq 0x2dc962
movq %rax, 0x20(%r14,%r15,8)
movq 0x18(%r14), %rax
movb $0x0, (%rax,%r15)
incq %r15
cmpq %r15, %r12
jne 0x2d6016
movq 0x18(%rsp), %r12
decl %r12d
xorl %ebp, %ebp
movq %rbp, 0x50(%rbx)
movq 0x10(%rsp), %r15
movq %rbp, 0x58(%r15)
movq 0x48(%rbx), %rdx
leaq 0x10b39c(%rip), %rcx    # 0x3e13f8
movq 0x8(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
callq 0x2d2eb5
movq $0x0, 0x50(%rsp)
cmpq %rbp, 0x50(%r15)
jne 0x2d6093
movq 0x10(%rsp), %rsi
movq 0x48(%rsi), %rdx
leaq 0x10b36d(%rip), %rcx    # 0x3e13f8
movq %r13, %rdi
callq 0x2d2eb5
cmpb $-0x7b, (%rsp)
setne %r15b
movq %r13, %rdi
movq %rbx, %rsi
movq %r12, 0x18(%rsp)
movl %r12d, %edx
callq 0x2d76ab
movl 0x8(%rbx), %eax
testl %eax, %eax
sete %cl
orb %r15b, %cl
movl $0x0, %r15d
movq 0xe8(%rsp), %rbp
jne 0x2d6117
movq 0x8(%rsp), %rcx
movl 0x38(%rcx), %r15d
leal 0x1(%r15), %r12d
addl $0x2, %r15d
movl %r15d, 0x38(%rcx)
movl 0xc(%rbx), %ecx
leal 0x1(%rcx), %edx
testl %ecx, %ecx
cmovel %eax, %edx
movq %rbp, %rdi
movl $0x4d, %esi
movl %r12d, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq %rbp, %rdi
movl $0x4d, %esi
movq %r12, 0x50(%rsp)
movl %r12d, %edx
movl %r15d, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq 0x60(%rbx), %rsi
testq %rsi, %rsi
movq 0x48(%rsp), %rdi
je 0x2d612a
callq 0x2afd54
xorl %eax, %eax
movq %rax, 0x60(%rbx)
movq 0x8(%rsp), %rcx
movl 0x38(%rcx), %r8d
leal 0x1(%r8), %esi
leal 0x2(%r8), %edx
leal 0x4(%r8), %edi
movl %edi, 0x34(%rsp)
movl %edi, 0x38(%rcx)
movb $0xd, %cl
movb %cl, 0x68(%rsp)
movl %esi, 0x28(%rsp)
movl %esi, 0x6c(%rsp)
movl %eax, 0x70(%rsp)
movq %rax, 0x80(%rsp)
movq %rax, 0x74(%rsp)
movb %cl, 0xf0(%rsp)
movl %edx, 0x38(%rsp)
movl %edx, 0xf4(%rsp)
movl %eax, 0xf8(%rsp)
movq %rax, 0x108(%rsp)
movq %rax, 0xfc(%rsp)
movb (%rbx), %al
addb $0x7b, %al
cmpb $0x2, %al
movq %r15, 0x58(%rsp)
ja 0x2d61b1
movzbl %al, %eax
leaq 0x1ed16d(%rip), %rcx    # 0x4c3318
movq (%rcx,%rax,8), %rcx
jmp 0x2d61b8
leaq 0x10b5e2(%rip), %rcx    # 0x3e179a
addl $0x3, %r8d
movq %r8, 0xa0(%rsp)
leaq 0x10be3c(%rip), %rdx    # 0x3e2007
movq 0x8(%rsp), %r13
movq %r13, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2cae5e
movl 0x90(%rbp), %r8d
incl %r8d
movq %rbp, %rdi
movl $0xd, %esi
movl 0x28(%rsp), %r12d
movl %r12d, %edx
xorl %ecx, %ecx
callq 0x2b200c
movl %eax, 0x64(%rsp)
movq 0x10(%rsp), %r15
movq 0x50(%rsp), %rax
movl %eax, 0x8(%r15)
leaq 0x10bdf9(%rip), %rdx    # 0x3e2012
movq %r13, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2cae5e
leaq 0x68(%rsp), %rdx
movq %r13, %rdi
movq %r15, %rsi
callq 0x2b9266
movq %rbp, %rdi
movl $0x42, %esi
movl %r12d, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq 0x18(%rbp), %rax
movb $0x0, 0x1f(%rax)
movl $0x0, 0x28(%rax)
movl 0x90(%rbp), %r8d
movq (%rbp), %rax
cmpb $0x0, 0x61(%rax)
je 0x2d6276
leaq 0x1f3c14(%rip), %rax    # 0x4c9e88
jmp 0x2d6294
leal -0x1(%r8), %eax
movl 0x64(%rsp), %ecx
testl %ecx, %ecx
cmovnsl %ecx, %eax
cltq
leaq (%rax,%rax,2), %rax
shlq $0x3, %rax
addq 0x88(%rbp), %rax
movq 0x58(%rsp), %r12
movl %r8d, 0x8(%rax)
incl %r8d
movq %rbp, %rdi
movl $0xd, %esi
movl 0x38(%rsp), %r13d
movl %r13d, %edx
xorl %ecx, %ecx
callq 0x2b200c
movl %eax, 0x64(%rsp)
movq 0x8(%rbx), %r15
movl %r12d, 0x8(%rbx)
xorl %eax, %eax
movl %eax, 0xc(%rbx)
leaq 0xfc4ca(%rip), %rdx     # 0x3d2799
movq 0x8(%rsp), %r12
movq %r12, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2cae5e
leaq 0xf0(%rsp), %rdx
movq %r12, %rdi
movq %rbx, %rsi
callq 0x2b9266
movq %r15, 0x8(%rbx)
movq %rbp, %rdi
movl $0x42, %esi
movl %r13d, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq 0x18(%rbp), %rax
movb $0x0, 0x1f(%rax)
movl $0x0, 0x50(%rsp)
xorl %ecx, %ecx
movl %ecx, 0x28(%rax)
leaq 0x68(%rsp), %rdx
movq %r12, %rdi
movq %rbx, %rsi
movq 0x20(%rsp), %r12
movq %r12, %rcx
movq 0xa0(%rsp), %r8
movq 0xe0(%rsp), %r13
movl %r13d, %r9d
pushq 0x18(%rsp)
pushq %r14
callq 0x2dca81
addq $0x10, %rsp
movl %eax, 0x58(%rsp)
movb (%rsp), %cl
movl %ecx, %r15d
andb $-0x2, %r15b
cmpb $-0x7c, %r15b
jne 0x2d639f
leaq 0xf0(%rsp), %rdx
movq 0x8(%rsp), %rdi
movq %rbx, %rsi
movq %r12, %rcx
movl 0x34(%rsp), %r8d
movl %r13d, %r9d
pushq 0x18(%rsp)
pushq %r14
callq 0x2dca81
movb 0x10(%rsp), %cl
addq $0x10, %rsp
movl %eax, 0x50(%rsp)
testq %r14, %r14
je 0x2d63b8
decl (%r14)
jne 0x2d63b8
movq 0x10(%r14), %rdi
movq %r14, %rsi
callq 0x28c3e7
movb (%rsp), %cl
movq 0x18(%rsp), %r12
movl %r12d, 0x20(%rsp)
movl %r12d, %r14d
cmpb $-0x7a, %r15b
movq 0xa0(%rsp), %r13
je 0x2d6437
movq %rbp, %rdi
movl $0xc, %esi
movl 0x34(%rsp), %edx
movl 0x50(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2b200c
movl %eax, %r14d
movq %rbp, %rdi
movl $0xe, %esi
movl 0x38(%rsp), %edx
movl %r12d, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movl %eax, 0x20(%rsp)
movq %rbp, %rdi
movl $0xb, %esi
xorl %edx, %edx
movl %r14d, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movswl 0x2(%rbx), %edi
movq 0x10(%rsp), %rax
movswl 0x2(%rax), %esi
callq 0x2dc90b
movb (%rsp), %cl
movw %ax, 0x2(%rbx)
cmpb $-0x79, %cl
jne 0x2d6457
movq 0x10(%rsp), %rax
movzwl 0x2(%rax), %eax
movl %r14d, %r12d
cmpw %ax, 0x2(%rbx)
jle 0x2d649f
movw %ax, 0x2(%rbx)
movl %r14d, %r12d
jmp 0x2d649f
movq %rbp, %rdi
movl $0xc, %esi
movl %r13d, %edx
movl 0x58(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2b200c
movl %eax, %r12d
movq %rbp, %rdi
movl $0xe, %esi
movl 0x28(%rsp), %edx
movq 0x18(%rsp), %rcx
xorl %r8d, %r8d
callq 0x2b200c
movq %rbp, %rdi
movl $0xb, %esi
xorl %edx, %edx
movl %r12d, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq %rbp, %rdi
movl $0xc, %esi
movl %r13d, %edx
movl 0x58(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2b200c
movl %eax, %r13d
movq %rbp, %rdi
movl $0xe, %esi
movl 0x28(%rsp), %edx
movl %r14d, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq %rbp, %rdi
movl $0xb, %esi
xorl %edx, %edx
movl 0x40(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2b200c
movb (%rsp), %al
cmpb $-0x7b, %al
jne 0x2d64f3
movl %r13d, (%rsp)
jmp 0x2d6554
cmpb $-0x79, %al
jne 0x2d6524
movl %r13d, (%rsp)
incl %r13d
jmp 0x2d6554
movq %r15, 0x20(%rsp)
movb 0xb0(%rsp), %r15b
cmpb $0x1, %r15b
jne 0x2d67d1
movl 0xb4(%rsp), %r12d
jmp 0x2d6808
movq %rbp, %rdi
movl $0xe, %esi
movl 0x28(%rsp), %edx
movl %r14d, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movl %eax, (%rsp)
movq %rbp, %rdi
movl $0xb, %esi
xorl %edx, %edx
movl 0x40(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2b200c
movl 0x90(%rbp), %r14d
cmpb $-0x7c, %r15b
jne 0x2d6579
movq %rbp, %rdi
movl $0xc, %esi
movl 0x34(%rsp), %edx
movl 0x50(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq %rbp, %rdi
movl $0xe, %esi
movl 0x38(%rsp), %edx
movl %r12d, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq %rbp, %rdi
movl $0xb, %esi
xorl %edx, %edx
movl 0x40(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2b200c
movl 0x90(%rbp), %eax
movq (%rbp), %rcx
cmpb $0x0, 0x61(%rcx)
je 0x2d65bf
leaq 0x1f38cb(%rip), %rcx    # 0x4c9e88
jmp 0x2d65dd
leal -0x1(%rax), %ecx
movl 0x64(%rsp), %edx
testl %edx, %edx
cmovnsl %edx, %ecx
movslq %ecx, %rcx
leaq (%rcx,%rcx,2), %rcx
shlq $0x3, %rcx
addq 0x88(%rbp), %rcx
movl %eax, 0x8(%rcx)
movq %rbp, %rdi
movl $0xe, %esi
movl 0x28(%rsp), %edx
movl 0x20(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq %rbp, %rdi
movl $0xe, %esi
movl 0x38(%rsp), %edx
movl %r12d, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq %rbp, %rdi
movl 0x40(%rsp), %esi
callq 0x2c91a7
movq %rbp, %rdi
movl $0x55, %esi
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq %rbp, %rdi
movl %eax, %esi
movq 0x90(%rsp), %rdx
movl $0xfffffff1, %ecx       # imm = 0xFFFFFFF1
callq 0x285198
movl 0x74(%rsp), %edx
movl 0xfc(%rsp), %ecx
movq %rbp, %rdi
movl $0x56, %esi
movq 0xa8(%rsp), %r8
callq 0x2b200c
movq %rbp, %rdi
movl %eax, %esi
movq 0x98(%rsp), %rdx
movl $0xfffffff7, %ecx       # imm = 0xFFFFFFF7
callq 0x285198
movslq 0x90(%rbp), %rax
testq %rax, %rax
jle 0x2d669b
movq 0x88(%rbp), %rcx
leaq (%rax,%rax,2), %rax
movw $0x1, -0x16(%rcx,%rax,8)
movq %rbp, %rdi
movl $0x10, %esi
movl %r13d, %edx
movl (%rsp), %ecx
movl %r14d, %r8d
callq 0x2b200c
movq %rbp, %rdi
movq 0x18(%rsp), %rsi
callq 0x2c91a7
movq 0x50(%rbx), %rsi
testq %rsi, %rsi
je 0x2d66d6
movq 0x48(%rsp), %rdi
movl $0x1, %edx
callq 0x2afecb
movq 0x10(%rsp), %rax
movq %rax, 0x50(%rbx)
movq %rbx, 0x58(%rax)
movq 0x8(%rsp), %rbx
movq %rbx, %rdi
callq 0x2d7296
xorl %r12d, %r12d
cmpl $0x0, 0x30(%rbx)
setne %r12b
jmp 0x2d5ba4
movl $0x1, %r15d
movq 0x20(%rbx), %rax
cmpl (%rax), %r15d
jg 0x2d5d72
testl %r8d, %r8d
jle 0x2d6737
leaq 0x1c(%r12), %rcx
xorl %eax, %eax
movzwl (%rcx), %edx
cmpl %edx, %r15d
je 0x2d6739
incl %eax
addq $0x18, %rcx
cmpl %eax, %r8d
jne 0x2d671f
movl %r8d, %eax
jmp 0x2d6739
xorl %eax, %eax
movb $0x1, %r14b
cmpl %r8d, %eax
jne 0x2d67b5
movq %r13, %rdi
movq %r8, %r13
movq $0x0, 0x68(%rsp)
movl $0x0, 0x70(%rsp)
movl $0x98, %esi
leaq 0x68(%rsp), %rdx
xorl %ecx, %ecx
callq 0x2bb38d
testq %rax, %rax
setne %cl
je 0x2d67aa
orb $0x4, 0x5(%rax)
movl %r15d, 0x8(%rax)
movq 0x8(%rsp), %rdi
movq %r12, %rsi
movq %rax, %rdx
callq 0x2bb1a3
movq %rax, %r12
movq %rax, 0x48(%rbx)
testq %rax, %rax
je 0x2d67ad
movq %r13, %r8
movslq %r8d, %rax
incl %r8d
leaq (%rax,%rax,2), %rax
movw %r15w, 0x1c(%r12,%rax,8)
jmp 0x2d67b0
movl %ecx, %r14d
movq %r13, %r8
movq 0x48(%rsp), %r13
testb %r14b, %r14b
je 0x2d6ae7
incl %r15d
cmpb $0x0, 0x61(%r13)
je 0x2d6706
jmp 0x2d5d72
movl 0x34(%rbp), %r12d
leal 0x1(%r12), %ecx
movl %ecx, 0x34(%rbp)
movq %rax, %rdi
movl $0x64, %esi
movl %r12d, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movl %eax, 0x14(%rbx)
movq %rbx, %rcx
movq %rcx, %rax
movq 0x58(%rcx), %rcx
testq %rcx, %rcx
jne 0x2d67f8
orb $0x20, 0x4(%rax)
leaq 0x68(%rsp), %rdx
movb $0x1, (%rdx)
movl %r12d, 0x4(%rdx)
movl $0x0, 0x8(%rdx)
xorl %eax, %eax
movq %rax, 0x18(%rdx)
movq $0x0, (%rsp)
movq %rax, 0xc(%rdx)
movq %rbp, %rdi
movq %r14, %rsi
callq 0x2b9266
movq %r12, %rcx
movl %eax, %r12d
testl %eax, %eax
jne 0x2d6c52
movl %eax, 0x8(%rsp)
movq %rcx, 0x28(%rsp)
movq %r13, 0x10(%rsp)
movb (%rbx), %al
cmpb $-0x7a, %al
sete %cl
incb %cl
xorl %edx, %edx
movq %rdx, 0x50(%rbx)
movq 0x60(%rbx), %r13
movq %rdx, 0x60(%rbx)
movb %cl, 0x68(%rsp)
addb $0x7b, %al
cmpb $0x2, %al
ja 0x2d6af2
movzbl %al, %eax
leaq 0x1eca95(%rip), %rcx    # 0x4c3318
movq (%rcx,%rax,8), %rcx
jmp 0x2d6af9
movl 0x34(%rbp), %r12d
leal 0x2(%r12), %ecx
movl %ecx, 0x34(%rbp)
movq %rax, %rdi
movl $0x64, %esi
movl %r12d, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movl %eax, 0x14(%rbx)
movq %rbx, %rcx
movq %rcx, %rax
movq 0x58(%rcx), %rcx
testq %rcx, %rcx
jne 0x2d68b3
orb $0x20, 0x4(%rax)
leaq 0x68(%rsp), %rdx
movb $0x1, (%rdx)
movl %r12d, 0x4(%rdx)
movl $0x0, 0x8(%rdx)
xorl %eax, %eax
movq %rax, 0x18(%rdx)
movq %rax, 0xc(%rdx)
movq %rbp, %rdi
movq %r14, %rsi
callq 0x2b9266
testl %eax, %eax
je 0x2d6d8e
movl %eax, %r12d
xorl %r14d, %r14d
jmp 0x2d7276
movl 0x48(%r14,%rax), %edx
movq %r13, 0x10(%rsp)
movq %r15, 0x20(%rsp)
movq 0x48(%rbx), %rbp
movq 0x8(%rsp), %r13
movl 0x34(%r13), %r14d
leal 0x1(%r14), %eax
movl %eax, 0x34(%r13)
cmpb $-0x7c, (%rbx)
movq %r12, 0x38(%rsp)
movl %esi, 0x58(%rsp)
jne 0x2d6948
movl %eax, 0x34(%rsp)
testq %rbp, %rbp
setne %al
addb %al, %al
addb $0x6, %al
leal 0x2(%r14), %ecx
movl %ecx, 0x34(%r13)
jmp 0x2d695a
testq %rbp, %rbp
setne %al
addb %al, %al
orb $0x5, %al
movl $0x0, 0x34(%rsp)
movb %al, 0x68(%rsp)
movl %r14d, 0x6c(%rsp)
movl $0x0, 0x70(%rsp)
xorl %eax, %eax
movq %rax, 0x80(%rsp)
movq %rax, 0x74(%rsp)
movl 0x38(%r13), %ecx
incl %ecx
movl %ecx, 0x38(%r13)
movq 0x28(%rsp), %r12
movq %r12, %rdi
movl $0x72, %esi
movq %rdx, 0x50(%rsp)
movl %ecx, 0x90(%rsp)
movl %r8d, %r15d
callq 0x2b200c
testq %rbp, %rbp
movq %rbp, 0x40(%rsp)
movq %r14, 0xa8(%rsp)
je 0x2d69fa
movq %r13, %rdi
movq %rbx, %rsi
callq 0x2dc9b1
movq %rax, %r15
movl (%rbp), %ecx
addl $0x2, %ecx
movq %r12, %rdi
movl $0x64, %esi
movl %r14d, %edx
xorl %r8d, %r8d
callq 0x2b200c
movq %r12, %rdi
movl %eax, %esi
movq %r15, %rdx
movl $0xfffffff7, %ecx       # imm = 0xFFFFFFF7
callq 0x285198
movq %rbp, 0x88(%rsp)
jmp 0x2d6a10
movq %r12, %rdi
movl $0x64, %esi
movl %r14d, %edx
movl %r15d, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movl 0x34(%rsp), %edx
testl %edx, %edx
movq 0x28(%rsp), %rbp
movq 0x38(%rsp), %r14
je 0x2d6a3b
movq %rbp, %rdi
movl $0x64, %esi
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movl %eax, 0x14(%rbx)
orb $0x20, 0x4(%rbx)
xorl %eax, %eax
movq %rax, 0x48(%rbx)
movq 0x48(%rsp), %r15
movq %rax, 0x58(%r15)
leaq 0x10b577(%rip), %rdx    # 0x3e1fc8
movq %r13, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2cae5e
leaq 0x68(%rsp), %rdx
movq %r13, %rdi
movq %r15, %rsi
callq 0x2b9266
movq %rbx, 0x58(%r15)
testl %eax, %eax
movq 0x20(%rsp), %r15
jne 0x2d6f13
movq %rbp, %rdi
movl $0x25, %esi
movq %r14, %rcx
movq 0xa8(%rsp), %r12
movl %r12d, %edx
xorl %r8d, %r8d
callq 0x2b200c
movl %eax, %r14d
movq %rbp, %rdi
movl $0x80, %esi
movq 0x50(%rsp), %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq 0x40(%rsp), %rax
testq %rax, %rax
movl %r14d, (%rsp)
je 0x2d6df8
movl (%rax), %ecx
incl %ecx
movq %rbp, %rdi
movl $0x59, %esi
movl %r12d, %edx
movl 0x90(%rsp), %r8d
jmp 0x2d6e0d
movl $0x7, %r12d
jmp 0x2d5ba4
leaq 0x10aca1(%rip), %rcx    # 0x3e179a
leaq 0x10b46b(%rip), %rdx    # 0x3e1f6b
movq %rbp, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2cae5e
leaq 0x68(%rsp), %rdx
movq %rbp, %rdi
movq %rbx, %rsi
callq 0x2b9266
movl %eax, %r12d
movq 0x50(%rbx), %rax
movq %rax, (%rsp)
movq %r14, 0x50(%rbx)
movq $0x0, 0x48(%rbx)
cmpb $-0x7c, (%rbx)
jne 0x2d6b4d
movswl 0x2(%rbx), %edi
movswl 0x2(%r14), %esi
callq 0x2dc90b
movw %ax, 0x2(%rbx)
movq 0x60(%rbx), %rsi
testq %rsi, %rsi
je 0x2d6b60
movq 0x10(%rsp), %rdi
callq 0x2afd54
movq %r13, 0x60(%rbx)
movq $0x0, 0x8(%rbx)
cmpb $0x1, %r15b
jne 0x2d6b7c
movq 0x10(%rsp), %r13
jmp 0x2d6c4e
movq 0x10(%rsp), %r13
cmpb $0x0, 0x61(%r13)
movl 0x8(%rsp), %eax
jne 0x2d6c52
movl 0x44(%rbp), %r15d
leal -0x1(%r15), %r13d
addl $-0x2, %r15d
movl %r15d, 0x44(%rbp)
movq %rbp, %rdi
movq %rbx, %rsi
movl %r13d, %edx
callq 0x2d76ab
movq 0x18(%rsp), %r14
movq %r14, %rdi
movl $0x25, %esi
movq 0x28(%rsp), %rdx
movl %r13d, %ecx
movq %r13, 0x40(%rsp)
xorl %r8d, %r8d
callq 0x2b200c
movl 0x90(%r14), %eax
movl %eax, 0x38(%rsp)
leaq 0xb0(%rsp), %r9
movq %rbp, %rdi
movq %rbx, %rsi
movq 0x28(%rsp), %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
pushq %r13
pushq %r15
callq 0x2d9d48
addq $0x10, %rsp
movq %r14, %rdi
movl %r15d, %esi
callq 0x2c91a7
movq %r14, %rdi
movl $0x5, %esi
movq 0x28(%rsp), %r15
movl %r15d, %edx
movl 0x38(%rsp), %ecx
movq 0x10(%rsp), %r13
xorl %r8d, %r8d
callq 0x2b200c
movq %r14, %rdi
movq 0x40(%rsp), %rsi
callq 0x2c91a7
movq %r14, %rdi
movl $0x74, %esi
movl %r15d, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movl 0x8(%rsp), %eax
testl %eax, %eax
movq 0x20(%rsp), %r15
movq (%rsp), %r14
jne 0x2d5b79
jmp 0x2d727e
movq $0x0, 0x10(%rsp)
movl %eax, 0x28(%rsp)
movq $0x0, 0x50(%rbx)
movl 0x8(%r14), %edx
movl %edx, 0x8(%rbx)
movl 0xc(%r14), %eax
movl %eax, 0xc(%rbx)
testl %edx, %edx
je 0x2d6cc8
movq 0x18(%rsp), %r12
movq %r12, %rdi
movl $0x14, %esi
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq %rax, 0x10(%rsp)
movl 0xc(%rbx), %r8d
testl %r8d, %r8d
je 0x2d6cc8
movl 0x8(%rbx), %edx
leal 0x1(%r8), %ecx
movq %r12, %rdi
movl $0x98, %esi
callq 0x2b200c
leaq 0x10aab0(%rip), %rdx    # 0x3e177f
movq %rbp, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2cae5e
leaq 0xb0(%rsp), %rdx
movq %rbp, %rdi
movq %rbx, %rsi
callq 0x2b9266
movl %eax, %r12d
movq 0x50(%rbx), %rax
movq %rax, (%rsp)
movq %r14, 0x50(%rbx)
movswl 0x2(%rbx), %edi
movswl 0x2(%r14), %esi
callq 0x2dc90b
movw %ax, 0x2(%rbx)
movq 0x60(%r14), %rax
testq %rax, %rax
je 0x2d6d59
movq 0x10(%rax), %rdi
leaq 0x68(%rsp), %r14
movq %r14, %rsi
callq 0x2d2e59
testl %eax, %eax
setne %cl
movl (%r14), %eax
testl %eax, %eax
setg %dl
andb %cl, %dl
cmpb $0x1, %dl
jne 0x2d6d59
movl %eax, %edi
movzwl 0x2(%rbx), %ebp
callq 0x2a680d
cmpw %ax, %bp
movq 0x8(%rsp), %rbp
jle 0x2d6d59
movw %ax, 0x2(%rbx)
movq 0x10(%rsp), %rsi
testl %esi, %esi
movq 0x18(%rsp), %rdx
je 0x2d726e
movl 0x90(%rdx), %eax
movq (%rdx), %rcx
cmpb $0x0, 0x61(%rcx)
movq (%rsp), %r14
je 0x2d712a
leaq 0x1f30ff(%rip), %rcx    # 0x4c9e88
jmp 0x2d7144
movl %eax, 0x28(%rsp)
movq %r13, 0x10(%rsp)
movq %r15, 0x20(%rsp)
movq %r12, 0x8(%rsp)
leal 0x1(%r12), %r13d
xorl %r12d, %r12d
movq 0x18(%rsp), %rdi
movl $0x64, %esi
movl %r13d, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movl %eax, 0x18(%rbx)
movq %r12, 0x50(%rbx)
movq 0x60(%rbx), %r15
movq %r12, 0x60(%rbx)
movl %r13d, 0x38(%rsp)
movl %r13d, 0x6c(%rsp)
movb (%rbx), %al
addb $0x7b, %al
cmpb $0x2, %al
ja 0x2d705c
movzbl %al, %eax
leaq 0x1ec529(%rip), %rcx    # 0x4c3318
movq (%rcx,%rax,8), %rcx
jmp 0x2d7063
movq %rbp, %rdi
movl $0x7e, %esi
movl %r12d, %edx
movl 0x90(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq %rbp, %rdi
movl $0x7a, %esi
movl %r12d, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movl 0x44(%r13), %r14d
decl %r14d
movl %r14d, 0x44(%r13)
movl 0x98(%rsp), %edx
testl %edx, %edx
jle 0x2d6e53
movq %rbp, %rdi
movl $0x30, %esi
movl %r14d, %ecx
movl $0x1, %r8d
callq 0x2b200c
leaq 0xb0(%rsp), %r9
movq %r13, %rdi
movq %rbx, %rsi
movq 0x50(%rsp), %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
movq 0x38(%rsp), %r12
pushq %r12
pushq %r14
callq 0x2d9d48
addq $0x10, %rsp
movl 0x58(%rsp), %edx
testl %edx, %edx
je 0x2d6e98
movq %rbp, %rdi
movl $0x3b, %esi
movl %r12d, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq %rbp, %rdi
movl %r14d, %esi
callq 0x2c91a7
testb $0x8, 0x4(%rbx)
jne 0x2d6ee2
movq $0x0, 0x50(%rbx)
leaq 0x10b140(%rip), %rdx    # 0x3e1ff8
movq %r13, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2cae5e
leaq 0x68(%rsp), %rdx
movq %r13, %rdi
movq %rbx, %rsi
callq 0x2b9266
movq 0x48(%rsp), %rax
movq %rax, 0x50(%rbx)
jmp 0x2d6ef3
leaq 0x10b0e5(%rip), %rsi    # 0x3e1fce
movq %r13, %rdi
xorl %eax, %eax
callq 0x284eb8
movl (%rsp), %ecx
movq %rbp, %rdi
movl $0xb, %esi
xorl %edx, %edx
xorl %r8d, %r8d
callq 0x2b200c
movq %rbp, %rdi
movl %r12d, %esi
callq 0x2c91a7
movq 0x48(%rbx), %rsi
testq %rsi, %rsi
je 0x2d6f25
movq (%r13), %rdi
callq 0x2b0183
movq 0x40(%rsp), %rax
movq %rax, 0x48(%rbx)
movq 0xa0(%rsp), %rax
movq %rax, 0x60(%rbx)
movq 0x10(%rsp), %r13
xorl %r14d, %r14d
xorl %r12d, %r12d
movq 0x8(%rsp), %rbp
cmpl $0x0, 0x30(%rbp)
jne 0x2d5b79
testb $0x20, 0x4(%rbx)
je 0x2d5b79
movq %r14, (%rsp)
movq %r15, 0x20(%rsp)
movq 0x20(%rbx), %rax
movl (%rax), %r15d
movq %r13, %rdi
movl %r15d, %esi
movl $0x1, %edx
callq 0x2c6339
testq %rax, %rax
je 0x2d7048
movq %rax, %r14
movq %r13, 0x10(%rsp)
testl %r15d, %r15d
jle 0x2d6fc5
xorl %r13d, %r13d
movq %rbp, %rdi
movq %rbx, %rsi
movl %r13d, %edx
callq 0x2dc962
movq %rax, 0x20(%r14,%r13,8)
testq %rax, %rax
jne 0x2d6fbd
movq 0x10(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x20(%r14,%r13,8)
incq %r13
cmpl %r13d, %r15d
jne 0x2d6f97
testq %rbx, %rbx
je 0x2d702b
leaq 0x1f2eb7(%rip), %r13    # 0x4c9e88
xorl %ebp, %ebp
movslq 0x14(%rbx,%rbp,4), %rsi
testq %rsi, %rsi
js 0x2d7022
movq 0x18(%rsp), %rdi
movq (%rdi), %rax
cmpb $0x0, 0x61(%rax)
movq %r13, %rax
jne 0x2d6ffd
leaq (%rsi,%rsi,2), %rax
shlq $0x3, %rax
addq 0x88(%rdi), %rax
movl %r15d, 0x8(%rax)
incl (%r14)
movq %r14, %rdx
movl $0xfffffff7, %ecx       # imm = 0xFFFFFFF7
callq 0x285198
movl $0xffffffff, 0x14(%rbx,%rbp,4) # imm = 0xFFFFFFFF
incq %rbp
cmpq $0x1, %rbp
je 0x2d6fd3
movq 0x50(%rbx), %rbx
testq %rbx, %rbx
jne 0x2d6fd1
decl (%r14)
jne 0x2d703c
movq 0x10(%r14), %rdi
movq %r14, %rsi
callq 0x28c3e7
movq 0x20(%rsp), %r15
movq 0x10(%rsp), %r13
jmp 0x2d7053
movl $0x7, %r12d
movq 0x20(%rsp), %r15
movq (%rsp), %r14
jmp 0x2d5b79
leaq 0x10a737(%rip), %rcx    # 0x3e179a
leaq 0x10af01(%rip), %rdx    # 0x3e1f6b
movq %rbp, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2cae5e
leaq 0x68(%rsp), %rdx
movq %rbp, %rdi
movq %rbx, %rsi
callq 0x2b9266
movl %eax, %r12d
movq 0x50(%rbx), %rax
movq %rax, (%rsp)
movq %r14, 0x50(%rbx)
movzwl 0x2(%r14), %eax
cmpw %ax, 0x2(%rbx)
jle 0x2d70a7
movw %ax, 0x2(%rbx)
movq 0x60(%rbx), %rsi
testq %rsi, %rsi
je 0x2d70ba
movq 0x10(%rsp), %rdi
callq 0x2afd54
movq %r15, 0x60(%rbx)
testl %r12d, %r12d
movq (%rsp), %r14
je 0x2d70d6
movq 0x20(%rsp), %r15
movq 0x10(%rsp), %r13
jmp 0x2d7272
movl 0x44(%rbp), %r14d
leal -0x1(%r14), %r15d
addl $-0x2, %r14d
movl %r14d, 0x44(%rbp)
movq %rbp, %rdi
movq %rbx, %rsi
movl %r15d, %edx
callq 0x2d76ab
movq 0x18(%rsp), %rdi
movl $0x25, %esi
movq 0x8(%rsp), %rdx
movq %r15, %r13
movl %r15d, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movb 0x1f(%rbp), %al
testb %al, %al
je 0x2d714c
decb %al
movb %al, 0x1f(%rbp)
movzbl %al, %eax
movl 0xd4(%rbp,%rax,4), %r12d
jmp 0x2d7157
leal -0x1(%rax), %ecx
testl %esi, %esi
cmovnsl %esi, %ecx
movslq %ecx, %rcx
leaq (%rcx,%rcx,2), %rcx
shlq $0x3, %rcx
addq 0x88(%rdx), %rcx
movl %eax, 0x8(%rcx)
jmp 0x2d7272
movl 0x38(%rbp), %r12d
incl %r12d
movl %r12d, 0x38(%rbp)
movq 0x18(%rsp), %r15
movq %r15, %rdi
movl $0x7e, %esi
movq 0x8(%rsp), %rdx
movl %r12d, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movl %eax, 0x40(%rsp)
movq %r15, %rdi
movl $0x1d, %esi
movl 0x38(%rsp), %edx
movl %r14d, %ecx
movl %r12d, %r8d
callq 0x2b200c
movq (%r15), %rcx
cmpb $0x0, 0x61(%rcx)
jne 0x2d71b2
movq 0x88(%r15), %rcx
cltq
leaq (%rax,%rax,2), %rax
movb $-0x3, 0x1(%rcx,%rax,8)
movl $0x0, 0x10(%rcx,%rax,8)
movq %r14, %r10
testl %r12d, %r12d
je 0x2d71d2
movzbl 0x1f(%rbp), %eax
cmpq $0x7, %rax
ja 0x2d71d2
leal 0x1(%rax), %ecx
movb %cl, 0x1f(%rbp)
movl %r12d, 0xd4(%rbp,%rax,4)
xorl %r12d, %r12d
leaq 0xb0(%rsp), %r9
movq %rbp, %rdi
movq %rbx, %rsi
movq 0x8(%rsp), %r14
movl %r14d, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
movq %r13, 0x48(%rsp)
pushq %r13
movq %r10, %r13
pushq %r10
callq 0x2d9d48
addq $0x10, %rsp
movq 0x18(%rsp), %r15
movq %r15, %rdi
movl %r13d, %esi
callq 0x2c91a7
movq %r15, %rdi
movl $0x5, %esi
movl %r14d, %edx
movl 0x40(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq %r15, %rdi
movq 0x48(%rsp), %rsi
callq 0x2c91a7
movq %r15, %rdi
movl $0x74, %esi
movl 0x38(%rsp), %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq %r15, %rdi
movl $0x74, %esi
movl %r14d, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2b200c
movq 0x20(%rsp), %r15
movq 0x10(%rsp), %r13
movq (%rsp), %r14
movl 0x28(%rsp), %eax
testl %eax, %eax
jne 0x2d5b79
cmpq $0x0, 0x58(%rbx)
jne 0x2d6f4a
movq %rbp, %rdi
callq 0x2d7296
jmp 0x2d6f4a