// File: /workspace/github_cpp_makefile_star2_O2/ncbi[P]amr/fasta_check.cpp
// Function: (anonymous namespace)::ThisApplication::body() const
void body () const final
  {
    const string fName     = getArg ("in");
    const bool aa          = getFlag ("aa");
    const bool hyphen      = getFlag ("hyphen");
    const bool ambig       = getFlag ("ambig");
    const size_t ambig_max = str2<size_t> (getArg ("ambig_max"));
    const bool stop_codon  = getFlag ("stop_codon");
    const string lenFName  = getArg ("len");
    const string outFName  = getArg ("out");
    
    QC_IMPLY (stop_codon, aa);
    

    unique_ptr<OFStream> lenF;
    if (! lenFName. empty ())
      lenF. reset (new OFStream (lenFName));
    unique_ptr<OFStream> outF;
    if (! outFName. empty ())
      outF. reset (new OFStream (outFName));
    size_t lines = 0;
    StringVector ids;  ids. reserve (100000);  // PAR
    size_t seqSize_max = 0;
    size_t seqSize_sum = 0;
  //string errorS;
    // One sequence
    size_t xs = 0;
    string header;
    string seq;
    
    auto processSeq = [&] () 
  	  {
  	    if (! lines)
  	      return;
 	  		ASSERT (! header. empty ());
 	  		ASSERT (! ids. empty ());
 	  		const string id (ids. back ());
  	    if (aa && ! stop_codon)
  	    {  	    
    	    while (! seq. empty () && seq. back () == '*')
   	  		  if (outF)
   	  		    seq. erase (seq. size () - 1);
   	  		  else
    		      throw runtime_error (id + ": '*' at the sequence end");
    		}
  	    if (seq. empty ())
 	  		  throw runtime_error (id + ": Empty sequence");
 	  		bool skip = false;
  	    if (! ambig && xs > ambig_max)
  	    {
 	  		  if (outF)
 	  		    skip = true;
 	  		  else
  		      throw runtime_error (id + ": Too many ambiguities");
  		  }
  		  if (skip)
  		    { LOG ("Skipping " + id); }
  		  else
  		  {
     	  	if (lenF. get ())
     	  	  *lenF << id << '\t' << seq. size () << endl;
  	      if (outF)
  	        *outF << header << endl << seq << endl;
   	  	  maximize (seqSize_max, seq. size ());
   	  	  seqSize_sum += seq. size ();
   	  	}
    	  xs = 0;
    	  header. clear ();
    	  seq. clear ();
 	    };
    
    size_t nuc = 0;   
    {
      LineInput f (fName); 
      string id;
      while (f. nextLine ())
      {
        trimTrailing (f. line);
        if (f. line. empty ())
        	continue;
      	const string errorS ("File " + fName + ", " + f. lineStr (false) + ": ");
      	if (f. line [0] == '>')
      	{
      		size_t pos = 1;
      		while (pos < f. line. size () && ! isspace (f. line [pos]))
      		  pos++;
      		id = f. line. substr (1, pos - 1);
      		if (id. empty ())
      			throw runtime_error (errorS + "Empty sequence identifier");
        #if 0
      		if (id. size () > 1000)  // PAR
      			throw runtime_error (errorS + "Too long sequence identifier");
        #endif
      	  for (const char c : id)
      	  	if (! printable (c))
      	  		throw runtime_error (errorS + "Non-printable character in the sequence identifier: " + to_string ((int) c));
      	  // BLAST: PD-4548
      	  if (! aa)
      	  {
        	  if (id. front () == '?')
       	  		throw runtime_error (errorS + "Sequence identifier starts with '?'");
       	  	for (const char c : {',', ';', '.', '~'})
          	  if (id. back () == c)
         	  		throw runtime_error (errorS + "Sequence identifier ends with " + strQuote (string (1, c)));
        	  if (contains (id, "\\t"))
       	  		throw runtime_error (errorS + "Sequence identifier contains '\\t'");
        	  if (contains (id, ",,"))
       	  		throw runtime_error (errorS + "Sequence identifier contains ',,'");
       	  }
     	    processSeq ();
      	  header = f. line;
      	  ids << id;
      	}
      	else 
      	{
      		if (! lines)
      			throw runtime_error (errorS + "FASTA should start with '>'");
      	  for (const char c : f. line)
      	  {
      	    bool skip = false;
      	  	if (c == '-')
      	  		if (hyphen)
      	  			;
      	  		else
      	  		{
      	  		  if (outF)
      	  		    skip = true;
      	  		  else
  	    	  		  throw runtime_error (errorS + "Hyphen in the sequence");  	    	  		  
  	    	    }
  	    	  else
  	    	  {
  	    	  	const char c1 = toLower (c);
  	    	  	if (aa)
  	    	  	{
  		    	  	if (! charInSet (c1, "acdefghiklmnpqrstvwyxbzjuoacdefghiklmnpqrstvwyxbzjuo*"))
  		    	  		throw runtime_error (errorS + "Wrong amino acid character: (code = " + to_string ((int) c) + ") '" + c + "'");
  		    	    if (charInSet (c1, "acgt"))
  		    	    	nuc++;
  		    	    if (charInSet (c1, "xbzjuo"))
  		    	      xs++;
  		    	  }
  	    	  	else
  	    	  	{
  		    	  	if (! charInSet (c1, "acgtbdhkmnrsvwyacgtbdhkmnrsvwy"))
  		    	  		throw runtime_error (errorS + "Wrong nucleotide character: (code = " + to_string ((int) c) + ") '" + c + "'");
  		    	    if (charInSet (c1, "bdhkmnrsvwy"))
  		    	      xs++;
  		    	  }
  		    	}
  		    	if (! skip)
  		    	  seq += c;
  		    }
      	}
      	lines++;
  	  }
  	}
    processSeq ();	// Last sequence
	  if (! lines)
	  	throw runtime_error ("Empty file"); 
  	if (aa && (double) nuc / (double) seqSize_sum > 0.9)  // PAR
  		throw runtime_error ("Protein sequences looks like a nucleotide sequences");
  		
	  ids. sort ();
	  const size_t index = ids. findDuplicate ();
	  if (index != no_index)
	  	throw runtime_error ("Duplicate identifier: " + ids [index]);
	  	
	  cout << ids. size () << endl
	       << seqSize_max << endl
	       << seqSize_sum << endl;
  }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x528, %rsp            # imm = 0x528
movq %rdi, %rbx
leaq 0x2ff83(%rip), %rsi     # 0x3b0d4
leaq 0x280(%rsp), %rdi
leaq 0x120(%rsp), %rdx
callq 0xcaec
leaq 0x260(%rsp), %rdi
leaq 0x280(%rsp), %rdx
movq %rbx, %rsi
callq 0x23610
leaq 0x280(%rsp), %rdi
callq 0xaab8
leaq 0x2ff50(%rip), %rsi     # 0x3b0e2
leaq 0x280(%rsp), %rdi
leaq 0x120(%rsp), %rdx
callq 0xcaec
leaq 0x280(%rsp), %rsi
movq %rbx, %rdi
callq 0x2371c
movl %eax, %ebp
leaq 0x280(%rsp), %rdi
callq 0xaab8
movb %bpl, 0x4(%rsp)
leaq 0x2ff3d(%rip), %rsi     # 0x3b10f
leaq 0x280(%rsp), %rdi
leaq 0x120(%rsp), %rdx
callq 0xcaec
leaq 0x280(%rsp), %rsi
movq %rbx, %rdi
callq 0x2371c
movb %al, 0x6(%rsp)
leaq 0x280(%rsp), %rdi
callq 0xaab8
leaq 0x2ff1b(%rip), %rsi     # 0x3b12a
leaq 0x280(%rsp), %rdi
leaq 0x120(%rsp), %rdx
callq 0xcaec
leaq 0x280(%rsp), %rsi
movq %rbx, %rdi
callq 0x2371c
movl %eax, %ebp
leaq 0x280(%rsp), %rdi
callq 0xaab8
movb %bpl, 0x7(%rsp)
leaq 0x2ff02(%rip), %rsi     # 0x3b151
leaq 0x120(%rsp), %rdi
leaq 0x220(%rsp), %rdx
callq 0xcaec
leaq 0x280(%rsp), %rdi
leaq 0x120(%rsp), %rdx
movq %rbx, %rsi
callq 0x23610
leaq 0x280(%rsp), %rdi
callq 0xd0a9
movq %rax, %r14
leaq 0x280(%rsp), %rdi
callq 0xaab8
leaq 0x120(%rsp), %rdi
callq 0xaab8
movq %r14, 0x1f8(%rsp)
leaq 0x2fed7(%rip), %rsi     # 0x3b18c
leaq 0x280(%rsp), %rdi
leaq 0x120(%rsp), %rdx
callq 0xcaec
leaq 0x280(%rsp), %rsi
movq %rbx, %rdi
callq 0x2371c
movl %eax, %ebp
leaq 0x280(%rsp), %rdi
callq 0xaab8
movb %bpl, 0x5(%rsp)
leaq 0x2fed8(%rip), %rsi     # 0x3b1cd
leaq 0x280(%rsp), %rdi
leaq 0x120(%rsp), %rdx
callq 0xcaec
leaq 0x220(%rsp), %rdi
leaq 0x280(%rsp), %rdx
movq %rbx, %rsi
callq 0x23610
leaq 0x280(%rsp), %rdi
callq 0xaab8
leaq 0x32640(%rip), %rsi     # 0x3d976
leaq 0x280(%rsp), %rdi
leaq 0x120(%rsp), %rdx
callq 0xcaec
leaq 0x240(%rsp), %rdi
leaq 0x280(%rsp), %rdx
movq %rbx, %rsi
callq 0x23610
leaq 0x280(%rsp), %rdi
callq 0xaab8
cmpb $0x1, 0x5(%rsp)
jne 0xb38a
callq 0xa060
andl $0x0, (%rax)
cmpb $0x0, 0x4(%rsp)
je 0xbe67
andq $0x0, 0x30(%rsp)
cmpq $0x0, 0x228(%rsp)
je 0xb3cd
movl $0x200, %edi            # imm = 0x200
callq 0xa540
movq %rax, %r14
leaq 0x220(%rsp), %rsi
movq %rax, %rdi
callq 0xd2c2
movq 0x30(%rsp), %rdi
movq %r14, 0x30(%rsp)
testq %rdi, %rdi
je 0xb3cd
movq (%rdi), %rax
callq *0x8(%rax)
andq $0x0, 0x28(%rsp)
cmpq $0x0, 0x248(%rsp)
je 0xb410
movl $0x200, %edi            # imm = 0x200
callq 0xa540
movq %rax, %r14
leaq 0x240(%rsp), %rsi
movq %rax, %rdi
callq 0xd2c2
movq 0x28(%rsp), %rdi
movq %r14, 0x28(%rsp)
testq %rdi, %rdi
je 0xb410
movq (%rdi), %rax
callq *0x8(%rax)
andq $0x0, 0x78(%rsp)
xorpd %xmm0, %xmm0
leaq 0xa0(%rsp), %rbx
movupd %xmm0, 0x9(%rbx)
movapd %xmm0, (%rbx)
movl $0x186a0, %esi          # imm = 0x186A0
movq %rbx, %rdi
callq 0xd346
leaq 0x1b0(%rsp), %rax
andq $0x0, (%rax)
leaq 0xf8(%rsp), %rcx
andq $0x0, (%rcx)
leaq 0xf0(%rsp), %rdx
andq $0x0, (%rdx)
leaq 0x1e8(%rsp), %rsi
movq %rsi, -0x10(%rsi)
andq $0x0, -0x8(%rsi)
xorl %edi, %edi
leaq 0x1c8(%rsp), %r8
movq %r8, -0x10(%r8)
andq $0x0, -0x8(%r8)
movb %dil, (%rsi)
movb %dil, (%r8)
leaq 0x78(%rsp), %rsi
movq %rsi, 0x120(%rsp)
leaq 0x1d8(%rsp), %rsi
movq %rsi, 0x128(%rsp)
movq %rbx, 0x130(%rsp)
leaq 0x4(%rsp), %rsi
movq %rsi, 0x138(%rsp)
leaq 0x5(%rsp), %rsi
movq %rsi, 0x140(%rsp)
leaq 0x1b8(%rsp), %rsi
movq %rsi, 0x148(%rsp)
leaq 0x28(%rsp), %rsi
movq %rsi, 0x150(%rsp)
leaq 0x7(%rsp), %rsi
movq %rsi, 0x158(%rsp)
movq %rdx, 0x160(%rsp)
leaq 0x1f8(%rsp), %rdx
movq %rdx, 0x168(%rsp)
leaq 0x30(%rsp), %rdx
movq %rdx, 0x170(%rsp)
movq %rax, 0x178(%rsp)
movq %rcx, 0x180(%rsp)
leaq 0x280(%rsp), %rdi
leaq 0x260(%rsp), %rsi
xorl %edx, %edx
callq 0xd3da
leaq 0x110(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq 0x4e8(%rsp), %r15
movq $0x0, 0xc0(%rsp)
leaq 0x280(%rsp), %r14
leaq 0x58(%rsp), %r12
leaq 0x38(%rsp), %rbp
movq %r14, %rdi
callq 0xe9f8
testb %al, %al
je 0xb975
movq %r15, %rdi
callq 0x105cf
cmpq $0x0, 0x4f0(%rsp)
je 0xb575
movq %r12, %rdi
leaq 0x2fdfb(%rip), %rsi     # 0x3b39d
leaq 0x260(%rsp), %rdx
callq 0xd430
movq %rbp, %rdi
movq %r12, %rsi
leaq 0x2fde7(%rip), %rdx     # 0x3b3a3
callq 0xd1e2
leaq 0xd0(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
xorl %edx, %edx
callq 0xd4a6
leaq 0x8(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
movq %rbx, %rdx
callq 0xd201
leaq 0x80(%rsp), %rdi
movq %r14, %rsi
leaq 0x30723(%rip), %rdx     # 0x3bd1e
callq 0xd1e2
movq %r14, %rdi
callq 0xaab8
movq %rbx, %rdi
callq 0xaab8
movq %rbp, %rdi
callq 0xaab8
movq %r12, %rdi
callq 0xaab8
movq 0x4e8(%rsp), %rax
movq %rax, 0xc8(%rsp)
cmpb $0x3e, (%rax)
jne 0xb677
movq %r15, %rbp
movq 0x4f0(%rsp), %r15
cmpq $0x1, %r15
movq %r15, %rbx
adcq $0x0, %rbx
pushq $0x1
popq %r12
cmpq %r15, %r12
jae 0xb804
movq 0xc8(%rsp), %rax
movsbl (%rax,%r12), %edi
callq 0xa090
testl %eax, %eax
jne 0xb801
incq %r12
jmp 0xb64f
cmpq $0x0, 0x78(%rsp)
je 0xbf7b
movq 0x4f0(%rsp), %rax
movq %rax, 0x188(%rsp)
xorl %r13d, %r13d
leaq 0x8(%rsp), %r14
cmpq %r13, 0x188(%rsp)
je 0xb7ec
movq 0xc8(%rsp), %rax
movsbl (%rax,%r13), %ebx
cmpl $0x2d, %ebx
jne 0xb6d7
cmpb $0x0, 0x6(%rsp)
jne 0xb7d5
cmpq $0x0, 0x28(%rsp)
jne 0xb7e4
jmp 0xbc15
movl %ebx, %edi
callq 0xd569
cmpb $0x1, 0x4(%rsp)
movsbl %al, %r12d
jne 0xb765
movq %r14, %rdi
leaq 0x2fdc2(%rip), %rsi     # 0x3b4b5
movq %rbp, %rdx
callq 0xcaec
movl %r12d, %edi
movq %r14, %rsi
callq 0xd571
movl %eax, %ebp
movq %r14, %rdi
callq 0xaab8
testb %bpl, %bpl
je 0xbd26
movq %r14, %rdi
leaq 0x2fdf1(%rip), %rsi     # 0x3b514
leaq 0x38(%rsp), %r15
movq %r15, %rdx
callq 0xcaec
movl %r12d, %edi
movq %r14, %rsi
callq 0xd571
movl %eax, %ebp
movq %r14, %rdi
callq 0xaab8
movq %r14, %rdi
leaq 0x2fdca(%rip), %rsi     # 0x3b519
movq %r15, %rdx
callq 0xcaec
movzbl %bpl, %eax
addq %rax, 0xc0(%rsp)
jmp 0xb7a9
movq %r14, %rdi
leaq 0x2fdb1(%rip), %rsi     # 0x3b520
movq %rbp, %rdx
callq 0xcaec
movl %r12d, %edi
movq %r14, %rsi
callq 0xd571
movl %eax, %ebp
movq %r14, %rdi
callq 0xaab8
testb %bpl, %bpl
je 0xbc66
movq %r14, %rdi
leaq 0x2fd94(%rip), %rsi     # 0x3b533
leaq 0x38(%rsp), %rdx
callq 0xcaec
movl %r12d, %edi
movq %r14, %rsi
callq 0xd571
movl %eax, %ebp
movq %r14, %rdi
callq 0xaab8
testb %bpl, %bpl
je 0xb7cb
incq 0xf0(%rsp)
leaq 0x58(%rsp), %r12
leaq 0x38(%rsp), %rbp
leaq 0x1b8(%rsp), %rdi
movl %ebx, %esi
callq 0xa4a0
incq %r13
jmp 0xb69b
leaq 0x4e8(%rsp), %r15
leaq 0x280(%rsp), %r14
jmp 0xb95e
movq %r12, %rbx
decq %rbx
leaq 0x8(%rsp), %r12
movq %r12, %rdi
movq %rbp, %r15
movq %rbp, %rsi
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0xa580
leaq 0x280(%rsp), %r14
leaq 0x100(%rsp), %rdi
movq %r12, %rsi
callq 0xa690
movq %r12, %rdi
callq 0xaab8
movq 0x108(%rsp), %rax
testq %rax, %rax
leaq 0x58(%rsp), %r12
leaq 0x38(%rsp), %rbp
je 0xbfcc
movq 0x100(%rsp), %rcx
xorl %edx, %edx
cmpq %rdx, %rax
je 0xb87f
movsbl (%rcx,%rdx), %ebx
leal -0x20(%rbx), %esi
incq %rdx
cmpb $0x5f, %sil
jb 0xb865
jmp 0xbb0b
cmpb $0x0, 0x4(%rsp)
jne 0xb92c
cmpb $0x3f, (%rcx)
je 0xc025
movl $0x7e2e3b2c, 0x190(%rsp) # imm = 0x7E2E3B2C
movb -0x1(%rcx,%rax), %bl
xorl %eax, %eax
cmpq $0x4, %rax
je 0xb8bf
leaq 0x1(%rax), %rcx
cmpb 0x190(%rsp,%rax), %bl
movq %rcx, %rax
jne 0xb8a4
jmp 0xbb7c
leaq 0x8(%rsp), %r13
movq %r13, %rdi
leaq 0x2fb6a(%rip), %rsi     # 0x3b438
movq %rbp, %rdx
callq 0xcaec
leaq 0x100(%rsp), %rdi
movq %r13, %rsi
callq 0xd539
movl %eax, %ebx
movq %r13, %rdi
callq 0xaab8
testb %bl, %bl
jne 0xc076
movq %r13, %rdi
leaq 0x2fb5b(%rip), %rsi     # 0x3b45d
movq %rbp, %rdx
callq 0xcaec
leaq 0x100(%rsp), %rdi
movq %r13, %rsi
callq 0xd539
movl %eax, %ebx
movq %r13, %rdi
callq 0xaab8
testb %bl, %bl
jne 0xc0c4
leaq 0x120(%rsp), %rdi
callq 0xc4e2
leaq 0x1d8(%rsp), %rdi
movq %r15, %rsi
callq 0xa330
leaq 0xa0(%rsp), %rdi
leaq 0x100(%rsp), %rsi
callq 0xd54a
incq 0x78(%rsp)
leaq 0x80(%rsp), %rdi
callq 0xaab8
jmp 0xb575
leaq 0x100(%rsp), %rdi
callq 0xaab8
leaq 0x280(%rsp), %rdi
callq 0xd5ac
leaq 0x120(%rsp), %rdi
callq 0xc4e2
cmpq $0x0, 0x78(%rsp)
je 0xbde6
cmpb $0x1, 0x4(%rsp)
jne 0xba09
movsd 0xc0(%rsp), %xmm0
movsd 0x2f650(%rip), %xmm1    # 0x3b010
unpcklps %xmm1, %xmm0            # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x2f655(%rip), %xmm2    # 0x3b020
subpd %xmm2, %xmm0
movapd %xmm0, %xmm3
unpckhpd %xmm0, %xmm3            # xmm3 = xmm3[1],xmm0[1]
addsd %xmm0, %xmm3
movsd 0xf8(%rsp), %xmm0
unpcklps %xmm1, %xmm0            # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
subpd %xmm2, %xmm0
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
divsd %xmm1, %xmm3
ucomisd 0x2f62d(%rip), %xmm3    # 0x3b030
ja 0xbf4b
leaq 0xa0(%rsp), %rdi
callq 0xd5dc
leaq 0xa0(%rsp), %rdi
pushq $0x1
popq %rsi
callq 0xd5f2
movq %rax, %rbx
cmpq $-0x1, %rax
jne 0xbe05
movq 0xa8(%rsp), %rsi
subq 0xa0(%rsp), %rsi
sarq $0x5, %rsi
movq 0x4c542(%rip), %rdi     # 0x57f90
callq 0xa3e0
movq %rax, %rdi
callq 0xa2d0
movq 0x1b0(%rsp), %rsi
movq %rax, %rdi
callq 0xa3e0
movq %rax, %rdi
callq 0xa2d0
movq 0xf8(%rsp), %rsi
movq %rax, %rdi
callq 0xa3e0
movq %rax, %rdi
callq 0xa2d0
leaq 0x1b8(%rsp), %rdi
callq 0xaab8
leaq 0x1d8(%rsp), %rdi
callq 0xaab8
leaq 0xa0(%rsp), %rdi
callq 0xd6d8
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0xbac2
movq (%rdi), %rax
callq *0x8(%rax)
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0xbad2
movq (%rdi), %rax
callq *0x8(%rax)
leaq 0x240(%rsp), %rdi
callq 0xaab8
leaq 0x220(%rsp), %rdi
callq 0xaab8
leaq 0x260(%rsp), %rdi
callq 0xaab8
addq $0x528, %rsp            # imm = 0x528
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
pushq $0x10
popq %rdi
callq 0xa2e0
movq %rax, %r14
leaq 0x2f8a3(%rip), %rdx     # 0x3b3c0
leaq 0x38(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0xd501
leaq 0x58(%rsp), %rdi
movl %ebx, %esi
callq 0xd268
leaq 0x8(%rsp), %rdi
leaq 0x38(%rsp), %rsi
leaq 0x58(%rsp), %rdx
callq 0xd201
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %r14, %rdi
callq 0xa8a0
xorl %ebp, %ebp
movq 0x4c480(%rip), %rsi     # 0x57fe8
movq 0x4c3f9(%rip), %rdx     # 0x57f68
movq %r14, %rdi
callq 0xa930
jmp 0xc110
pushq $0x10
popq %rdi
callq 0xa2e0
movq %rax, %r14
leaq 0x2f88b(%rip), %rdx     # 0x3b419
leaq 0x38(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0xd501
leaq 0xe0(%rsp), %rax
movq %rax, -0x10(%rax)
movsbl %bl, %edx
leaq 0xd0(%rsp), %rdi
pushq $0x1
popq %rsi
callq 0xa610
leaq 0x58(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
pushq $0x22
popq %rdx
callq 0x113d5
leaq 0x8(%rsp), %rdi
leaq 0x38(%rsp), %rsi
leaq 0x58(%rsp), %rdx
callq 0xd201
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %r14, %rdi
callq 0xa8a0
xorl %ebp, %ebp
movq 0x4c3e7(%rip), %rsi     # 0x57fe8
movq 0x4c360(%rip), %rdx     # 0x57f68
movq %r14, %rdi
callq 0xa930
jmp 0xc110
pushq $0x10
popq %rdi
callq 0xa2e0
movq %rax, %r14
leaq 0x2f877(%rip), %rdx     # 0x3b49e
leaq 0x8(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0xd501
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %r14, %rdi
callq 0xa8a0
xorl %ebp, %ebp
movq 0x4c396(%rip), %rsi     # 0x57fe8
movq 0x4c30f(%rip), %rdx     # 0x57f68
movq %r14, %rdi
callq 0xa930
jmp 0xc110
pushq $0x10
popq %rdi
callq 0xa2e0
movq %rax, %r14
leaq 0x2f8c7(%rip), %rdx     # 0x3b53f
leaq 0x190(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0xd501
leaq 0x200(%rsp), %rdi
movl %ebx, %esi
callq 0xd268
leaq 0xd0(%rsp), %rdi
leaq 0x190(%rsp), %rsi
leaq 0x200(%rsp), %rdx
callq 0xd201
leaq 0x2f850(%rip), %rdx     # 0x3b510
leaq 0x58(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
callq 0xd1e2
leaq 0x38(%rsp), %rdi
leaq 0x58(%rsp), %rsi
movl %ebx, %edx
callq 0xd589
leaq 0x2f828(%rip), %rdx     # 0x3b512
leaq 0x8(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0xd1e2
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %r14, %rdi
callq 0xa8a0
xorl %ebp, %ebp
movq 0x4c2d6(%rip), %rsi     # 0x57fe8
movq 0x4c24f(%rip), %rdx     # 0x57f68
movq %r14, %rdi
callq 0xa930
jmp 0xc110
pushq $0x10
popq %rdi
callq 0xa2e0
movq %rax, %r14
leaq 0x2f7b3(%rip), %rdx     # 0x3b4eb
leaq 0x190(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0xd501
leaq 0x200(%rsp), %rdi
movl %ebx, %esi
callq 0xd268
leaq 0xd0(%rsp), %rdi
leaq 0x190(%rsp), %rsi
leaq 0x200(%rsp), %rdx
callq 0xd201
leaq 0x2f790(%rip), %rdx     # 0x3b510
leaq 0x58(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
callq 0xd1e2
leaq 0x38(%rsp), %rdi
leaq 0x58(%rsp), %rsi
movl %ebx, %edx
callq 0xd589
leaq 0x2f768(%rip), %rdx     # 0x3b512
leaq 0x8(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0xd1e2
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %r14, %rdi
callq 0xa8a0
xorl %ebp, %ebp
movq 0x4c216(%rip), %rsi     # 0x57fe8
movq 0x4c18f(%rip), %rdx     # 0x57f68
movq %r14, %rdi
callq 0xa930
jmp 0xc110
pushq $0x10
popq %rdi
callq 0xa2e0
movq %rax, %r14
leaq 0x2f76c(%rip), %rsi     # 0x3b564
movq %rax, %rdi
callq 0xa250
jmp 0xbf65
pushq $0x10
popq %rdi
callq 0xa2e0
movq %rax, %r14
leaq 0xa0(%rsp), %rdi
movq %rbx, %rsi
callq 0xd66e
leaq 0x2f77c(%rip), %rsi     # 0x3b5a3
leaq 0x280(%rsp), %rdi
movq %rax, %rdx
callq 0xd430
movb $0x1, %bpl
leaq 0x280(%rsp), %rsi
movq %r14, %rdi
callq 0xa8a0
xorl %ebp, %ebp
movq 0x4c195(%rip), %rsi     # 0x57fe8
movq 0x4c10e(%rip), %rdx     # 0x57f68
movq %r14, %rdi
callq 0xa930
jmp 0xc110
callq 0xa660
testl %eax, %eax
jne 0xc01d
leaq 0x2f4c1(%rip), %rsi     # 0x3b33c
leaq 0x1b8(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0xcaec
leaq 0x100(%rsp), %rdi
pushq $0x4e
popq %rsi
callq 0xd268
leaq 0x1d8(%rsp), %rdi
leaq 0x1b8(%rsp), %rsi
leaq 0x100(%rsp), %rdx
callq 0xd201
leaq 0x2f494(%rip), %rdx     # 0x3b355
leaq 0xa0(%rsp), %rdi
leaq 0x1d8(%rsp), %rsi
callq 0xd1e2
leaq 0x2f47e(%rip), %rsi     # 0x3b35b
leaq 0x8(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0xcaec
leaq 0x2fe59(%rip), %rdx     # 0x3bd4c
leaq 0x80(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xd1e2
leaq 0x120(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
leaq 0x80(%rsp), %rdx
callq 0xd201
leaq 0x2f1b9(%rip), %rdx     # 0x3b0e2
leaq 0x280(%rsp), %rdi
leaq 0x120(%rsp), %rsi
callq 0xd1e2
leaq 0x280(%rsp), %rdi
callq 0xf520
pushq $0x10
popq %rdi
callq 0xa2e0
movq %rax, %r14
leaq 0x2f612(%rip), %rsi     # 0x3b56f
movq %rax, %rdi
callq 0xa250
movq 0x4c07c(%rip), %rsi     # 0x57fe8
movq 0x4bff5(%rip), %rdx     # 0x57f68
movq %r14, %rdi
callq 0xa930
pushq $0x10
popq %rdi
callq 0xa2e0
movq %rax, %r14
leaq 0x2f4f5(%rip), %rdx     # 0x3b482
leaq 0x8(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0xd501
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %r14, %rdi
callq 0xa8a0
xorl %ebp, %ebp
movq 0x4c030(%rip), %rsi     # 0x57fe8
movq 0x4bfa9(%rip), %rdx     # 0x57f68
movq %r14, %rdi
callq 0xa930
jmp 0xc110
pushq $0x10
popq %rdi
callq 0xa2e0
movq %rax, %r14
leaq 0x2f3c8(%rip), %rdx     # 0x3b3a6
leaq 0x8(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0xd501
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %r14, %rdi
callq 0xa8a0
xorl %ebp, %ebp
movq 0x4bfdf(%rip), %rsi     # 0x57fe8
movq 0x4bf58(%rip), %rdx     # 0x57f68
movq %r14, %rdi
callq 0xa930
jmp 0xc110
pushq $0x1
popq %rdi
callq 0xa670
pushq $0x10
popq %rdi
callq 0xa2e0
movq %rax, %r14
leaq 0x2f3be(%rip), %rdx     # 0x3b3f5
leaq 0x8(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0xd501
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %r14, %rdi
callq 0xa8a0
xorl %ebp, %ebp
movq 0x4bf86(%rip), %rsi     # 0x57fe8
movq 0x4beff(%rip), %rdx     # 0x57f68
movq %r14, %rdi
callq 0xa930
jmp 0xc110
pushq $0x10
popq %rdi
callq 0xa2e0
movq %rax, %r14
leaq 0x2f3b3(%rip), %rdx     # 0x3b43b
leaq 0x8(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0xd501
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %r14, %rdi
callq 0xa8a0
xorl %ebp, %ebp
movq 0x4bf35(%rip), %rsi     # 0x57fe8
movq 0x4beae(%rip), %rdx     # 0x57f68
movq %r14, %rdi
callq 0xa930
jmp 0xc110
pushq $0x10
popq %rdi
callq 0xa2e0
movq %rax, %r14
leaq 0x2f38a(%rip), %rdx     # 0x3b460
leaq 0x8(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0xd501
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %r14, %rdi
callq 0xa8a0
xorl %ebp, %ebp
movq 0x4bee7(%rip), %rsi     # 0x57fe8
movq 0x4be60(%rip), %rdx     # 0x57f68
movq %r14, %rdi
callq 0xa930
movq %rax, %rbx
leaq 0x280(%rsp), %rdi
callq 0xaab8
jmp 0xc125
movq %rax, %rbx
leaq 0x120(%rsp), %rdi
callq 0xaab8
jmp 0xc137
movq %rax, %rbx
leaq 0x80(%rsp), %rdi
callq 0xaab8
jmp 0xc149
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0xaab8
jmp 0xc158
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0xaab8
jmp 0xc16a
movq %rax, %rbx
leaq 0x1d8(%rsp), %rdi
callq 0xaab8
jmp 0xc17c
movq %rax, %rbx
leaq 0x100(%rsp), %rdi
callq 0xaab8
jmp 0xc1b3
jmp 0xc18f
jmp 0xc19e
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0xaab8
jmp 0xc1a4
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x38(%rsp), %rdi
callq 0xaab8
jmp 0xc1cd
movq %rax, %rbx
leaq 0x1b8(%rsp), %rdi
callq 0xaab8
jmp 0xc4b2
jmp 0xc1c7
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x58(%rsp), %rdi
callq 0xaab8
jmp 0xc207
jmp 0xc3f9
jmp 0xc42f
jmp 0xc3f9
jmp 0xc42f
jmp 0xc3f9
jmp 0xc42f
movq %rax, %rbx
jmp 0xc4b2
jmp 0xc201
movq %rax, %rbx
movb $0x1, %bpl
leaq 0xd0(%rsp), %rdi
callq 0xaab8
jmp 0xc27d
jmp 0xc3f9
jmp 0xc42f
jmp 0xc3f9
jmp 0xc42f
jmp 0xc43c
jmp 0xc43c
movq %rax, %rbx
leaq 0x280(%rsp), %rdi
callq 0xaab8
testb %bpl, %bpl
jne 0xc2d0
jmp 0xc46b
jmp 0xc2cd
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0xaab8
jmp 0xc269
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x58(%rsp), %rdi
callq 0xaab8
jmp 0xc2e3
jmp 0xc277
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x200(%rsp), %rdi
callq 0xaab8
jmp 0xc2f8
jmp 0xc43c
jmp 0xc2cd
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq %r14, %rdi
callq 0xa550
jmp 0xc492
movq %rax, %rbx
jmp 0xc492
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq %r14, %rdi
callq 0xa550
jmp 0xc4a2
movq %rax, %rbx
jmp 0xc4a2
movq %rax, %rbx
movq %r14, %rdi
callq 0xa430
jmp 0xc46b
movq %rax, %rbx
movb $0x1, %bpl
leaq 0xd0(%rsp), %rdi
jmp 0xc3ee
jmp 0xc2f2
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x190(%rsp), %rdi
jmp 0xc414
movq %rax, %rbx
jmp 0xc321
movq %rax, %rbx
jmp 0xc32e
movq %rax, %rbx
jmp 0xc338
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0xaab8
leaq 0xd0(%rsp), %rdi
callq 0xaab8
leaq 0x38(%rsp), %rdi
callq 0xaab8
leaq 0x58(%rsp), %rdi
jmp 0xc447
jmp 0xc44e
jmp 0xc42a
movq %rax, %rbx
jmp 0xc485
movq %rax, %rbx
leaq 0x280(%rsp), %rdi
jmp 0xc4ba
movq %rax, %rbx
jmp 0xc4bf
jmp 0xc3a0
jmp 0xc3b0
jmp 0xc3a0
jmp 0xc3b0
movq %rax, %rbx
leaq 0x280(%rsp), %rdi
callq 0xaab8
jmp 0xc389
movq %rax, %rbx
leaq 0x120(%rsp), %rdi
jmp 0xc4c7
jmp 0xc3b0
jmp 0xc3a0
jmp 0xc3b0
jmp 0xc3a0
jmp 0xc3b0
movq %rax, %rbx
leaq 0x280(%rsp), %rdi
jmp 0xc4c7
movq %rax, %rbx
jmp 0xc4cc
movq %rax, %rbx
leaq 0x280(%rsp), %rdi
jmp 0xc4d4
movq %rax, %rbx
jmp 0xc4d9
jmp 0xc43c
jmp 0xc409
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0xaab8
jmp 0xc3e9
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x58(%rsp), %rdi
callq 0xaab8
jmp 0xc40f
jmp 0xc42f
jmp 0xc42f
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
jmp 0xc414
jmp 0xc42f
jmp 0xc42a
jmp 0xc42f
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x38(%rsp), %rdi
callq 0xaab8
testb %bpl, %bpl
jne 0xc432
jmp 0xc43f
jmp 0xc43c
jmp 0xc43c
jmp 0xc43c
jmp 0xc43c
jmp 0xc43c
movq %rax, %rbx
jmp 0xc46b
movq %rax, %rbx
movq %r14, %rdi
callq 0xa430
jmp 0xc43f
movq %rax, %rbx
leaq 0x80(%rsp), %rdi
callq 0xaab8
jmp 0xc451
movq %rax, %rbx
leaq 0x100(%rsp), %rdi
callq 0xaab8
leaq 0x280(%rsp), %rdi
callq 0xd5ac
leaq 0x1b8(%rsp), %rdi
callq 0xaab8
leaq 0x1d8(%rsp), %rdi
callq 0xaab8
leaq 0xa0(%rsp), %rdi
callq 0xd6d8
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0xc4a2
movq (%rdi), %rax
callq *0x8(%rax)
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0xc4b2
movq (%rdi), %rax
callq *0x8(%rax)
leaq 0x240(%rsp), %rdi
callq 0xaab8
leaq 0x220(%rsp), %rdi
callq 0xaab8
leaq 0x260(%rsp), %rdi
callq 0xaab8
movq %rbx, %rdi
callq 0xa980
nop