// File: /workspace/github_cpp_makefile_star2_O1/cassioneri[P]delayed_init/delayed_init.cpp
// Function: main
int main() {
  
  /***
   * Test default-constructor.
   */

  test_default_constructor(__LINE__);

  /***
   * Create non-const/const helpers.
   */
   
  helper h;
  const helper ch;
  
  /***
   * Test constructor from helper.
   */

  // lvalue.
  test_constructor<helper>(__LINE__, h, true, {helper::copy_constructor});
  test_constructor<const helper>(__LINE__, h, true,
    {helper::copy_constructor});

  // const lvalue.
  test_constructor<helper>(__LINE__, ch, true, {helper::copy_constructor});
  test_constructor<const helper>(__LINE__, ch, true,
    {helper::copy_constructor});

  // rvalue.
  test_constructor<helper>(__LINE__, std::move(h), true,
    {helper::move_constructor});
  test_constructor<const helper>(__LINE__, std::move(h), true,
    {helper::move_constructor});

  // const rvalue.
  test_constructor<helper>(__LINE__, std::move(ch), true,
    {helper::copy_constructor});
  test_constructor<const helper>(__LINE__, std::move(ch), true,
    {helper::copy_constructor});

  /***
   * Create default/non-default initialised delayed_init non-const/const.
   */
   
  delayed_init<helper> d0;
  delayed_init<const helper> cd0;
  delayed_init<helper> d1(helper(1));
  delayed_init<const helper> cd1(helper(1));
    
  /***
   * Test constructor from delayed_init.
   */

  // uninitialised lvalue.
  test_constructor<helper>(__LINE__, d0, false, {});
  test_constructor<const helper>(__LINE__, d0, false, {});
  
  // uninitialised const lvalue.
  test_constructor<helper>(__LINE__, cd0, false, {});
  test_constructor<const helper>(__LINE__, cd0, false, {});
  
  // initialised lvalue.
  test_constructor<helper>(__LINE__, d1, true, {helper::copy_constructor});
  test_constructor<const helper>(__LINE__, d1, true,
    {helper::copy_constructor});

  // initialised const lvalue.
  test_constructor<helper>(__LINE__, cd1, true, {helper::copy_constructor});
  test_constructor<const helper>(__LINE__, cd1, true,
    {helper::copy_constructor});

  // uninitialised rvalue.
  test_constructor<helper>(__LINE__, std::move(d0), false, {});
  test_constructor<const helper>(__LINE__, std::move(d0), false, {});
  
  // uninitialised const rvalue.
  test_constructor<helper>(__LINE__, std::move(cd0), false, {});
  test_constructor<const helper>(__LINE__, std::move(cd0), false, {});
  
  // initialised rvalue.
  test_constructor<helper>(__LINE__, std::move(d1), true,
    {helper::move_constructor});
  test_constructor<const helper>(__LINE__, std::move(d1), true,
    {helper::move_constructor});

  // initialised const rvalue.
  test_constructor<helper>(__LINE__, std::move(cd1), true,
    {helper::copy_constructor});
  test_constructor<const helper>(__LINE__, std::move(cd1), true,
    {helper::copy_constructor});

  /**
   * Test destructor.
   */
   
  // uninitialised.
  test_destructor(__LINE__, d0, {});
  
  // initialised.
  test_destructor(__LINE__, d1, {helper::destructor});

  /***
   * Test assignment from helper.
   */
   
  // lvalue -> uninitialised.
  test_assignment(__LINE__, h, d0, true, {helper::copy_constructor});
  
  // lvalue -> initialised.
  test_assignment(__LINE__, h, d1, true, {helper::copy_assignment});
  
  // const lvalue -> uninitialised.
  test_assignment(__LINE__, ch, d0, true, {helper::copy_constructor});
  
  // const lvalue -> initialised.
  test_assignment(__LINE__, ch, d1, true, {helper::copy_assignment});

  // rvalue -> uninitialised.
  test_assignment(__LINE__, std::move(h), d0, true,
    {helper::move_constructor});
  
  // rvalue -> initialised.
  test_assignment(__LINE__, std::move(h), d1, true,
    {helper::move_assignment});

  // const rvalue -> uninitialised.
  test_assignment(__LINE__, std::move(ch), d0, true,
    {helper::copy_constructor});

  // const rvalue -> initialised.
  test_assignment(__LINE__, std::move(ch), d1, true,
    {helper::copy_assignment});

  /***
   * Test assignment from uninitialised delayed_init.
   */
   
  // lvalue -> uninitialised.
  test_assignment(__LINE__, d0, d0, false, {});
  
  // lvalue -> initialised.
  test_assignment(__LINE__, d0, d1, false, {helper::destructor});
  
  // const lvalue -> uninitialised.
  test_assignment(__LINE__, cd0, d0, false, {});

  // const lvalue -> initialised.
  test_assignment(__LINE__, cd0, d1, false, {helper::destructor});

  // rvalue -> uninitialised.
  test_assignment(__LINE__, std::move(d0), d0, false, {});

  // rvalue -> initialised.
  test_assignment(__LINE__, std::move(d0), d1, false, {helper::destructor});

  // const rvalue -> uninitialised.
  test_assignment(__LINE__, std::move(cd0), d0, false, {});

  // const rvalue -> initialised.
  test_assignment(__LINE__, std::move(cd0), d1, false,
    {helper::destructor});

  /***
   * Test assignment from initialised delayed_init.
   */
   
  // lvalue -> uninitialised.
  test_assignment(__LINE__, d1, d0, true, {helper::copy_constructor});
  
  // lvalue -> initialised.
  test_assignment(__LINE__, d1, d1, true, {helper::copy_assignment});
  
  // const lvalue -> uninitialised.
  test_assignment(__LINE__, cd1, d0, true, {helper::copy_constructor});

  // const lvalue -> initialised.
  test_assignment(__LINE__, cd1, d1, true, {helper::copy_assignment});

  // rvalue -> uninitialised.
  test_assignment(__LINE__, std::move(d1), d0, true,
    {helper::move_constructor});

  // rvalue -> initialised.
  test_assignment(__LINE__, std::move(d1), d1, true,
    {helper::move_assignment});

  // const rvalue -> uninitialised.
  test_assignment(__LINE__, std::move(cd1), d0, true,
    {helper::copy_constructor});

  // const rvalue -> initialised.
  test_assignment(__LINE__, std::move(cd1), d1, true,
    {helper::copy_assignment});
  
  /***
   * Test indirection for uninitialised delayed_init.
   */

  test_indirection_uninitialised<delayed_init<helper>>(__LINE__);
  test_indirection_uninitialised<delayed_init<const helper>>(__LINE__);
  
  /***
   * Test indirection for initialised delayed_init.
   */

  test_indirection_initialised<delayed_init<helper>>(__LINE__,
    {helper::non_const_get});
  test_indirection_initialised<delayed_init<const helper>>(__LINE__,
    {helper::const_get});

  /**
   * Test getter from uninitialised delayed_init.
   */

  // non-const.
  test_getter<delayed_init<helper>>(__LINE__, d0, false, false);

  // const.
  test_getter<const delayed_init<helper>>(__LINE__, d0, true, false);
  test_getter<delayed_init<const helper>>(__LINE__, d0, true, false);
  test_getter<const delayed_init<const helper>>(__LINE__, d0, true, false);

  /**
   * Test getter from initialised delayed_init.
   */

  // non-const.
  test_getter<delayed_init<helper>>(__LINE__, d1, false, true);

  // const.
  test_getter<delayed_init<const helper>>(__LINE__, d1, true, true);
  test_getter<const delayed_init<helper>>(__LINE__, d1, true, true);
  test_getter<const delayed_init<const helper>>(__LINE__, d1, true, true);

  /***
   * Test dereference.
   */
   
  // non-const.
  test_dereference<delayed_init<helper>>(__LINE__, {helper::non_const_get});

  // const.
  test_dereference<delayed_init<const helper>>(__LINE__,
    {helper::const_get});
  test_dereference<const delayed_init<helper>>(__LINE__,
    {helper::const_get});
  test_dereference<const delayed_init<const helper>>(__LINE__,
    {helper::const_get});

  /***
   * Test conversion to bool.
   */
    
  // uninitialised.
  test_conversion_to_bool(__LINE__, d0, false);
  
  // initialised.
  test_conversion_to_bool(__LINE__, d1, true);
  
  /***
   * Test initialiser.
   */
  
  // lvalue -> uninitialised.
  test_init_uninitialised(__LINE__, {helper::constructor}, 1);
  test_init_uninitialised(__LINE__, {helper::copy_constructor}, h);
  test_init_uninitialised(__LINE__, {helper::copy_constructor}, ch);
  
  // rvalue -> uninitialised.
  test_init_uninitialised(__LINE__, {helper::constructor}, std::move(1));
  test_init_uninitialised(__LINE__, {helper::move_constructor},
    std::move(h));
  test_init_uninitialised(__LINE__, {helper::copy_constructor},
    std::move(ch));
 
  // initialised.
  test_init_initialised(__LINE__);
 
  /***
   * Test swap member.
   */

  // uninitialised <-> uninitialised.
  {
    delayed_init<helper> d1, d2;
    test_swap_member(__LINE__, d1, d2, {});
  }

  // initialised <-> uninitialised.
  {
    delayed_init<helper> d1(h), d2;
    test_swap_member(__LINE__, d1, d2,
      {helper::destructor, helper::move_constructor});
  }
  
  // initialised <-> uninitialised.
  {
    delayed_init<helper> d1, d2(h);
    test_swap_member(__LINE__, d1, d2,
      {helper::destructor, helper::move_constructor});
  }

  // initialised <-> initialised.
  {
    delayed_init<helper> d1(h), d2(h);
    test_swap_member(__LINE__, d1, d2,
      {helper::swap_member, helper::swap_non_member});
  }
  
  /***
   * Test swap non member.
   */

  // uninitialised <-> uninitialised.
  {
    delayed_init<helper> d1, d2;
    test_swap_non_member(__LINE__, d1, d2, {});
  }

  // initialised <-> uninitialised.
  {
    delayed_init<helper> d1(h), d2;
    test_swap_non_member(__LINE__, d1, d2,
      {helper::destructor, helper::move_constructor});
  }
  
  // initialised <-> uninitialised.
  {
    delayed_init<helper> d1, d2(h);
    test_swap_non_member(__LINE__, d1, d2,
      {helper::destructor, helper::move_constructor});
  }

  // initialised <-> initialised.
  {
    delayed_init<helper> d1(h), d2(h);
    test_swap_non_member(__LINE__, d1, d2,
      {helper::swap_member, helper::swap_non_member});
  }

  std::cout << "all tests passed." << std::endl;
  return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
movl $0x173, %edi            # imm = 0x173
callq 0x14bc
leaq 0x20(%rsp), %rbx
movq %rbx, %rdi
callq 0x284a
leaq 0x2c(%rsp), %rdi
callq 0x284a
leaq 0x18(%rsp), %rcx
movl $0x3, (%rcx)
movl $0x1, %r8d
movl $0x181, %edi            # imm = 0x181
movq %rbx, %rsi
movl $0x1, %edx
callq 0x289e
leaq 0x18(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x20(%rsp), %rsi
movl $0x1, %r8d
movl $0x182, %edi            # imm = 0x182
movl $0x1, %edx
callq 0x2944
leaq 0x18(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x2c(%rsp), %rsi
movl $0x1, %r8d
movl $0x186, %edi            # imm = 0x186
movl $0x1, %edx
callq 0x29ea
leaq 0x18(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x2c(%rsp), %rsi
movl $0x1, %r8d
movl $0x187, %edi            # imm = 0x187
movl $0x1, %edx
callq 0x2a90
leaq 0x18(%rsp), %rcx
movl $0x4, (%rcx)
leaq 0x20(%rsp), %rsi
movl $0x1, %r8d
movl $0x18b, %edi            # imm = 0x18B
movl $0x1, %edx
callq 0x2b36
leaq 0x18(%rsp), %rcx
movl $0x4, (%rcx)
leaq 0x20(%rsp), %rsi
movl $0x1, %r8d
movl $0x18d, %edi            # imm = 0x18D
movl $0x1, %edx
callq 0x2bdc
leaq 0x18(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x2c(%rsp), %rsi
movl $0x1, %r8d
movl $0x191, %edi            # imm = 0x191
movl $0x1, %edx
callq 0x2c82
leaq 0x18(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x2c(%rsp), %rsi
movl $0x1, %r8d
movl $0x193, %edi            # imm = 0x193
movl $0x1, %edx
callq 0x2d28
xorl %r13d, %r13d
leaq 0x18(%rsp), %r15
movb %r13b, (%r15)
movb %r13b, 0x38(%rsp)
leaq 0x30(%rsp), %r14
movq %r14, %rdi
movl $0x1, %esi
callq 0x2744
leaq 0x28(%rsp), %rbx
movb %r13b, -0x4(%rbx)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4a46
movb $0x1, %bpl
movb %bpl, -0x4(%rbx)
movq %r14, %rdi
callq 0x2794
leaq 0x8(%rsp), %r12
movq %r12, %rdi
movl $0x1, %esi
callq 0x2744
movb %r13b, (%r14)
leaq 0x34(%rsp), %r14
movq %r14, %rdi
movq %r12, %rsi
callq 0x4a46
movb %bpl, -0x4(%r14)
movq %r12, %rdi
callq 0x2794
movl $0x1a4, %edi            # imm = 0x1A4
movq %r15, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2dce
leaq 0x18(%rsp), %rsi
movl $0x1a5, %edi            # imm = 0x1A5
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2e86
leaq 0x38(%rsp), %rsi
movl $0x1a8, %edi            # imm = 0x1A8
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2f3e
leaq 0x38(%rsp), %rsi
movl $0x1a9, %edi            # imm = 0x1A9
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2ff6
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x24(%rsp), %rsi
movl $0x1, %r8d
movl $0x1ac, %edi            # imm = 0x1AC
movl $0x1, %edx
callq 0x2dce
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x24(%rsp), %rsi
movl $0x1, %r8d
movl $0x1ad, %edi            # imm = 0x1AD
movl $0x1, %edx
callq 0x2e86
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x30(%rsp), %rsi
movl $0x1, %r8d
movl $0x1b1, %edi            # imm = 0x1B1
movl $0x1, %edx
callq 0x2f3e
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x30(%rsp), %rsi
movl $0x1, %r8d
movl $0x1b2, %edi            # imm = 0x1B2
movl $0x1, %edx
callq 0x2ff6
leaq 0x18(%rsp), %rsi
movl $0x1b6, %edi            # imm = 0x1B6
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x30ae
leaq 0x18(%rsp), %rsi
movl $0x1b7, %edi            # imm = 0x1B7
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x3166
leaq 0x38(%rsp), %rsi
movl $0x1ba, %edi            # imm = 0x1BA
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x321e
leaq 0x38(%rsp), %rsi
movl $0x1bb, %edi            # imm = 0x1BB
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x32d6
leaq 0x8(%rsp), %rcx
movl $0x4, (%rcx)
leaq 0x24(%rsp), %rsi
movl $0x1, %r8d
movl $0x1be, %edi            # imm = 0x1BE
movl $0x1, %edx
callq 0x30ae
leaq 0x8(%rsp), %rcx
movl $0x4, (%rcx)
leaq 0x24(%rsp), %rsi
movl $0x1, %r8d
movl $0x1c0, %edi            # imm = 0x1C0
movl $0x1, %edx
callq 0x3166
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x30(%rsp), %rsi
movl $0x1, %r8d
movl $0x1c4, %edi            # imm = 0x1C4
movl $0x1, %edx
callq 0x321e
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x30(%rsp), %rsi
movl $0x1, %r8d
movl $0x1c6, %edi            # imm = 0x1C6
movl $0x1, %edx
callq 0x32d6
leaq 0x18(%rsp), %rsi
movl $0x1ce, %edi            # imm = 0x1CE
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x338e
leaq 0x8(%rsp), %rdx
movl $0x5, (%rdx)
leaq 0x24(%rsp), %rsi
movl $0x1, %ecx
movl $0x1d1, %edi            # imm = 0x1D1
callq 0x338e
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x20(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1, %r9d
movl $0x1d8, %edi            # imm = 0x1D8
movl $0x1, %ecx
callq 0x3416
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x20(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x1db, %edi            # imm = 0x1DB
movl $0x1, %ecx
callq 0x3416
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x2c(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1, %r9d
movl $0x1de, %edi            # imm = 0x1DE
movl $0x1, %ecx
callq 0x34eb
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x2c(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x1e1, %edi            # imm = 0x1E1
movl $0x1, %ecx
callq 0x34eb
leaq 0x8(%rsp), %r8
movl $0x4, (%r8)
leaq 0x20(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1, %r9d
movl $0x1e4, %edi            # imm = 0x1E4
movl $0x1, %ecx
callq 0x35b8
leaq 0x8(%rsp), %r8
movl $0x7, (%r8)
leaq 0x20(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x1e8, %edi            # imm = 0x1E8
movl $0x1, %ecx
callq 0x35b8
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x2c(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1, %r9d
movl $0x1ec, %edi            # imm = 0x1EC
movl $0x1, %ecx
callq 0x3685
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x2c(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x1f0, %edi            # imm = 0x1F0
movl $0x1, %ecx
callq 0x3685
leaq 0x18(%rsp), %rdx
movl $0x1f8, %edi            # imm = 0x1F8
movq %rdx, %rsi
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x3752
leaq 0x8(%rsp), %r8
movl $0x5, (%r8)
leaq 0x18(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x1fb, %edi            # imm = 0x1FB
xorl %ecx, %ecx
callq 0x3752
leaq 0x38(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1fe, %edi            # imm = 0x1FE
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x3821
leaq 0x8(%rsp), %r8
movl $0x5, (%r8)
leaq 0x38(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x201, %edi            # imm = 0x201
xorl %ecx, %ecx
callq 0x3821
leaq 0x18(%rsp), %rdx
movl $0x204, %edi            # imm = 0x204
movq %rdx, %rsi
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x38f0
leaq 0x8(%rsp), %r8
movl $0x5, (%r8)
leaq 0x18(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x207, %edi            # imm = 0x207
xorl %ecx, %ecx
callq 0x38f0
leaq 0x38(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x20a, %edi            # imm = 0x20A
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x39bf
leaq 0x8(%rsp), %r8
movl $0x5, (%r8)
leaq 0x38(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x20d, %edi            # imm = 0x20D
xorl %ecx, %ecx
callq 0x39bf
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x24(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1, %r9d
movl $0x215, %edi            # imm = 0x215
movl $0x1, %ecx
callq 0x3752
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x218, %edi            # imm = 0x218
movq %rdx, %rsi
movl $0x1, %ecx
callq 0x3752
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x30(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1, %r9d
movl $0x21b, %edi            # imm = 0x21B
movl $0x1, %ecx
callq 0x3821
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x30(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x21e, %edi            # imm = 0x21E
movl $0x1, %ecx
callq 0x3821
leaq 0x8(%rsp), %r8
movl $0x4, (%r8)
leaq 0x24(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1, %r9d
movl $0x221, %edi            # imm = 0x221
movl $0x1, %ecx
callq 0x38f0
leaq 0x8(%rsp), %r8
movl $0x7, (%r8)
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x225, %edi            # imm = 0x225
movq %rdx, %rsi
movl $0x1, %ecx
callq 0x38f0
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x30(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1, %r9d
movl $0x229, %edi            # imm = 0x229
movl $0x1, %ecx
callq 0x39bf
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x30(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x22d, %edi            # imm = 0x22D
movl $0x1, %ecx
callq 0x39bf
movl $0x234, %edi            # imm = 0x234
callq 0x3a8e
movl $0x235, %edi            # imm = 0x235
callq 0x3b32
leaq 0x8(%rsp), %rsi
movl $0xa, (%rsi)
movl $0x1, %edx
movl $0x23b, %edi            # imm = 0x23B
callq 0x3bd6
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
movl $0x1, %edx
movl $0x23d, %edi            # imm = 0x23D
callq 0x3c7c
leaq 0x18(%rsp), %rsi
movl $0x245, %edi            # imm = 0x245
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x3d22
leaq 0x18(%rsp), %rsi
movl $0x248, %edi            # imm = 0x248
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x3dc2
leaq 0x18(%rsp), %rsi
movl $0x249, %edi            # imm = 0x249
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x3e62
leaq 0x18(%rsp), %rsi
movl $0x24a, %edi            # imm = 0x24A
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x3f02
leaq 0x24(%rsp), %rsi
movl $0x251, %edi            # imm = 0x251
xorl %edx, %edx
movl $0x1, %ecx
callq 0x3d22
leaq 0x24(%rsp), %rsi
movl $0x254, %edi            # imm = 0x254
movl $0x1, %edx
movl $0x1, %ecx
callq 0x3e62
leaq 0x24(%rsp), %rsi
movl $0x255, %edi            # imm = 0x255
movl $0x1, %edx
movl $0x1, %ecx
callq 0x3dc2
leaq 0x24(%rsp), %rsi
movl $0x256, %edi            # imm = 0x256
movl $0x1, %edx
movl $0x1, %ecx
callq 0x3f02
leaq 0x8(%rsp), %rsi
movl $0xa, (%rsi)
movl $0x1, %edx
movl $0x25d, %edi            # imm = 0x25D
callq 0x3fa2
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
movl $0x1, %edx
movl $0x260, %edi            # imm = 0x260
callq 0x4046
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
movl $0x1, %edx
movl $0x262, %edi            # imm = 0x262
callq 0x40ea
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
movl $0x1, %edx
movl $0x264, %edi            # imm = 0x264
callq 0x418e
movb $0x0, 0x8(%rsp)
cmpb $0x1, 0x18(%rsp)
jne 0x1f5f
leaq 0x1c(%rsp), %rsi
leaq 0xc(%rsp), %r15
movq %r15, %rdi
callq 0x4a98
movb $0x1, -0x4(%r15)
leaq 0x8(%rsp), %rsi
movl $0x26c, %edi            # imm = 0x26C
xorl %edx, %edx
callq 0x1528
cmpb $0x1, 0x8(%rsp)
jne 0x1f81
leaq 0xc(%rsp), %rdi
callq 0x2794
movb $0x0, 0x8(%rsp)
cmpb $0x1, 0x24(%rsp)
jne 0x1fa2
leaq 0xc(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x4a98
movb $0x1, -0x4(%r15)
leaq 0x8(%rsp), %rsi
movl $0x26f, %edi            # imm = 0x26F
movl $0x1, %edx
callq 0x1528
cmpb $0x1, 0x8(%rsp)
jne 0x1fc7
leaq 0xc(%rsp), %rdi
callq 0x2794
leaq 0x8(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0x10(%rsp), %rcx
movl $0x1, (%rcx)
movl $0x1, %edx
movl $0x276, %edi            # imm = 0x276
callq 0x4232
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0x20(%rsp), %rcx
movl $0x1, %edx
movl $0x277, %edi            # imm = 0x277
callq 0x42c8
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0x2c(%rsp), %rcx
movl $0x1, %edx
movl $0x278, %edi            # imm = 0x278
callq 0x435e
leaq 0x8(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0x10(%rsp), %rcx
movl $0x1, (%rcx)
movl $0x1, %edx
movl $0x27b, %edi            # imm = 0x27B
callq 0x4232
leaq 0x8(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0x20(%rsp), %rcx
movl $0x1, %edx
movl $0x27c, %edi            # imm = 0x27C
callq 0x43f4
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0x2c(%rsp), %rcx
movl $0x1, %edx
movl $0x27e, %edi            # imm = 0x27E
callq 0x448a
movl $0x282, %edi            # imm = 0x282
callq 0x1576
xorl %eax, %eax
leaq 0x8(%rsp), %rsi
movb %al, (%rsi)
leaq 0x10(%rsp), %rdx
movb %al, (%rdx)
movl $0x28b, %edi            # imm = 0x28B
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x4520
cmpb $0x1, 0x10(%rsp)
jne 0x20c7
leaq 0x14(%rsp), %rdi
callq 0x2794
cmpb $0x1, 0x8(%rsp)
jne 0x20d8
leaq 0xc(%rsp), %rdi
callq 0x2794
xorl %ebp, %ebp
leaq 0xc(%rsp), %r12
movb %bpl, -0x4(%r12)
leaq 0x20(%rsp), %rsi
movq %r12, %rdi
callq 0x4a98
movb $0x1, -0x4(%r12)
leaq 0x10(%rsp), %rdx
movb %bpl, (%rdx)
movabsq $0x400000005, %rbp      # imm = 0x400000005
leaq 0x40(%rsp), %rcx
movq %rbp, (%rcx)
leaq 0x8(%rsp), %rsi
movl $0x2, %r8d
movl $0x291, %edi            # imm = 0x291
callq 0x4520
cmpb $0x1, 0x10(%rsp)
jne 0x2137
leaq 0x14(%rsp), %rdi
callq 0x2794
cmpb $0x1, 0x8(%rsp)
jne 0x2146
movq %r12, %rdi
callq 0x2794
xorl %eax, %eax
leaq 0x8(%rsp), %r15
movb %al, (%r15)
leaq 0x14(%rsp), %r12
movb %al, -0x4(%r12)
leaq 0x20(%rsp), %rsi
movq %r12, %rdi
callq 0x4a98
movb $0x1, -0x4(%r12)
leaq 0x40(%rsp), %rcx
movq %rbp, (%rcx)
leaq 0x10(%rsp), %rdx
movl $0x2, %r8d
movl $0x298, %edi            # imm = 0x298
movq %r15, %rsi
callq 0x4520
cmpb $0x1, 0x10(%rsp)
jne 0x219c
movq %r12, %rdi
callq 0x2794
cmpb $0x1, 0x8(%rsp)
jne 0x21ad
leaq 0xc(%rsp), %rdi
callq 0x2794
xorl %r14d, %r14d
leaq 0xc(%rsp), %r12
movb %r14b, -0x4(%r12)
leaq 0x20(%rsp), %r15
movq %r12, %rdi
movq %r15, %rsi
callq 0x4a98
movb $0x1, %bl
movb %bl, -0x4(%r12)
leaq 0x14(%rsp), %r13
movb %r14b, -0x4(%r13)
movq %r13, %rdi
movq %r15, %rsi
callq 0x4a98
movb %bl, -0x4(%r13)
movabsq $0xc0000000b, %r14      # imm = 0xC0000000B
leaq 0x40(%rsp), %rcx
movq %r14, (%rcx)
leaq 0x8(%rsp), %rsi
leaq 0x10(%rsp), %rdx
movl $0x2, %r8d
movl $0x29f, %edi            # imm = 0x29F
callq 0x4520
cmpb $0x1, 0x10(%rsp)
jne 0x2224
movq %r13, %rdi
callq 0x2794
cmpb $0x1, 0x8(%rsp)
jne 0x2233
movq %r12, %rdi
callq 0x2794
xorl %eax, %eax
leaq 0x8(%rsp), %rsi
movb %al, (%rsi)
leaq 0x10(%rsp), %rdx
movb %al, (%rdx)
movl $0x2aa, %edi            # imm = 0x2AA
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x45bd
cmpb $0x1, 0x10(%rsp)
jne 0x2263
leaq 0x14(%rsp), %rdi
callq 0x2794
cmpb $0x1, 0x8(%rsp)
jne 0x2274
leaq 0xc(%rsp), %rdi
callq 0x2794
xorl %ebx, %ebx
leaq 0xc(%rsp), %r12
movb %bl, -0x4(%r12)
leaq 0x20(%rsp), %rsi
movq %r12, %rdi
callq 0x4a98
movb $0x1, -0x4(%r12)
leaq 0x10(%rsp), %rdx
movb %bl, (%rdx)
leaq 0x40(%rsp), %rcx
movq %rbp, (%rcx)
leaq 0x8(%rsp), %rsi
movl $0x2, %r8d
movl $0x2b0, %edi            # imm = 0x2B0
callq 0x45bd
cmpb $0x1, 0x10(%rsp)
jne 0x22c8
leaq 0x14(%rsp), %rdi
callq 0x2794
cmpb $0x1, 0x8(%rsp)
jne 0x22d7
movq %r12, %rdi
callq 0x2794
xorl %eax, %eax
leaq 0x8(%rsp), %r15
movb %al, (%r15)
leaq 0x14(%rsp), %r12
movb %al, -0x4(%r12)
leaq 0x20(%rsp), %rsi
movq %r12, %rdi
callq 0x4a98
movb $0x1, -0x4(%r12)
leaq 0x40(%rsp), %rcx
movq %rbp, (%rcx)
leaq 0x10(%rsp), %rdx
movl $0x2, %r8d
movl $0x2b7, %edi            # imm = 0x2B7
movq %r15, %rsi
callq 0x45bd
cmpb $0x1, 0x10(%rsp)
jne 0x232d
movq %r12, %rdi
callq 0x2794
cmpb $0x1, 0x8(%rsp)
jne 0x233e
leaq 0xc(%rsp), %rdi
callq 0x2794
xorl %ebx, %ebx
leaq 0xc(%rsp), %r12
movb %bl, -0x4(%r12)
leaq 0x20(%rsp), %r15
movq %r12, %rdi
movq %r15, %rsi
callq 0x4a98
movb $0x1, %bpl
movb %bpl, -0x4(%r12)
leaq 0x14(%rsp), %r13
movb %bl, -0x4(%r13)
movq %r13, %rdi
movq %r15, %rsi
callq 0x4a98
movb %bpl, -0x4(%r13)
leaq 0x40(%rsp), %rcx
movq %r14, (%rcx)
leaq 0x8(%rsp), %rsi
leaq 0x10(%rsp), %rdx
movl $0x2, %r8d
movl $0x2be, %edi            # imm = 0x2BE
callq 0x45bd
cmpb $0x1, 0x10(%rsp)
leaq 0x28(%rsp), %rbx
jne 0x23b0
movq %r13, %rdi
callq 0x2794
cmpb $0x1, 0x8(%rsp)
jne 0x23bf
movq %r12, %rdi
callq 0x2794
movq 0x8c0a(%rip), %r15      # 0xafd0
leaq 0x3d51(%rip), %rsi      # 0x611e
movl $0x11, %edx
movq %r15, %rdi
callq 0x1120
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x1100
movsbl %al, %esi
movq 0x8bd8(%rip), %rdi      # 0xafd0
callq 0x1030
movq %rax, %rdi
callq 0x10b0
cmpb $0x1, 0x30(%rsp)
jne 0x2416
leaq 0x34(%rsp), %rdi
callq 0x2794
cmpb $0x1, 0x24(%rsp)
jne 0x2425
movq %rbx, %rdi
callq 0x2794
cmpb $0x1, 0x38(%rsp)
jne 0x2436
leaq 0x3c(%rsp), %rdi
callq 0x2794
cmpb $0x1, 0x18(%rsp)
jne 0x2447
leaq 0x1c(%rsp), %rdi
callq 0x2794
leaq 0x2c(%rsp), %rdi
callq 0x2794
leaq 0x20(%rsp), %rdi
callq 0x2794
xorl %eax, %eax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x2474
jmp 0x2483
jmp 0x2492
jmp 0x24b6
movq %rax, %r15
cmpb $0x1, 0x10(%rsp)
jne 0x24a6
movq %r13, %rdi
jmp 0x24a1
movq %rax, %r15
cmpb $0x1, 0x10(%rsp)
jne 0x24dd
movq %r12, %rdi
jmp 0x24c5
movq %rax, %r15
cmpb $0x1, 0x10(%rsp)
jne 0x24a6
leaq 0x14(%rsp), %rdi
callq 0x2794
cmpb $0x1, 0x8(%rsp)
jne 0x254c
movq %r12, %rdi
jmp 0x24e9
movq %rax, %r15
cmpb $0x1, 0x10(%rsp)
jne 0x24dd
leaq 0x14(%rsp), %rdi
callq 0x2794
jmp 0x24dd
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x24da
movq %rax, %r15
cmpb $0x1, 0x8(%rsp)
jne 0x254c
leaq 0xc(%rsp), %rdi
callq 0x2794
jmp 0x254c
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2549
jmp 0x2544
jmp 0x2544
jmp 0x2544
jmp 0x2544
jmp 0x2544
jmp 0x2544
jmp 0x2544
movq %rax, %r15
jmp 0x2590
movq %rax, %r15
cmpb $0x1, 0x30(%rsp)
jne 0x255d
leaq 0x34(%rsp), %rdi
callq 0x2794
cmpb $0x1, 0x24(%rsp)
jne 0x256e
leaq 0x28(%rsp), %rdi
callq 0x2794
cmpb $0x1, 0x38(%rsp)
jne 0x257f
leaq 0x3c(%rsp), %rdi
callq 0x2794
cmpb $0x1, 0x18(%rsp)
jne 0x2590
leaq 0x1c(%rsp), %rdi
callq 0x2794
leaq 0x2c(%rsp), %rdi
callq 0x2794
leaq 0x20(%rsp), %rdi
callq 0x2794
movq %r15, %rdi
callq 0x11b0