// File: /workspace/github_cpp_makefile_star2_O1/ArashPartow[P]exprtk-extras/exprtk_sudoku_solver.cpp
// Function: void sudoku_solver<double>()
void sudoku_solver()
{
   typedef exprtk::symbol_table<T>         symbol_table_t;
   typedef exprtk::expression<T>           expression_t;
   typedef exprtk::parser<T>               parser_t;
   typedef exprtk::function_compositor<T>  compositor_t;
   typedef typename compositor_t::function function_t;

   std::vector<T> board =
   {
      0, 0, 0, 0, 0, 8, 2, 0, 5,
      0, 0, 0, 3, 2, 0, 0, 0, 8,
      0, 0, 0, 0, 0, 5, 6, 0, 0,
      0, 1, 0, 0, 4, 7, 0, 9, 3,
      0, 0, 0, 0, 0, 0, 0, 0, 0,
      8, 6, 0, 2, 3, 0, 0, 1, 0,
      0, 0, 6, 8, 0, 0, 0, 0, 0,
      5, 0, 0, 0, 7, 3, 0, 0, 0,
      4, 0, 3, 9, 0, 0, 0, 0, 0,
   };

   exprtk::rtl::io::package<T> io_package;

   symbol_table_t symbol_table;
   symbol_table.add_vector  ("board", board);
   symbol_table.add_function("print_digit",
                             [](T v) ->T
                             { printf(" %d ",static_cast<int>(v)); return 0; });
   symbol_table.add_package (io_package);

   compositor_t compositor(symbol_table);

   compositor.load_variables(true);
   compositor.load_vectors  (true);

   compositor.add(
      function_t("get_board")
      .vars("col", "row")
      .expression
      ( " board[row * sqrt(board[]) + col]; " ));

   compositor.add(
      function_t("set_board")
      .vars("col", "row", "value")
      .expression
      ( " board[row * sqrt(board[]) + col] := value; " ));

   compositor.add(
      function_t("display_board")
      .expression
      (
         " const var n := sqrt(board[]);                             "
         "                                                           "
         " for (var row := 0; row < n; row += 1)                     "
         " {                                                         "
         "    for (var col := 0; col < n; col += 1)                  "
         "    {                                                      "
         "       print_digit(get_board(col,row));                    "
         "                                                           "
         "       if ((col > 0) and (col < 8) and (col + 1) % 3 == 0) "
         "       {                                                   "
         "          print('|')                                       "
         "       }                                                   "
         "    };                                                     "
         "                                                           "
         "    println('');                                           "
         "                                                           "
         "    if ((row > 0) and (row < 8) and (row + 1) % 3 == 0)    "
         "    {                                                      "
         "       println('---------+---------+----------');          "
         "    }                                                      "
         " }                                                         "
      ));

   compositor.add(
      function_t("is_valid")
      .vars("col", "row", "num")
      .expression
      (
         " const var n := sqrt(board[]);                              "
         "                                                            "
         " for (var i := 0; i < n; i += 1)                            "
         " {                                                          "
         "    if (                                                    "
         "         (get_board(col, i  ) == num) or                    "
         "         (get_board(i  , row) == num)                       "
         "       )                                                    "
         "    {                                                       "
         "       return [false];                                      "
         "    }                                                       "
         " };                                                         "
         "                                                            "
         " var subgrid_row := row - floor(row % 3);                   "
         " var subgrid_col := col - floor(col % 3);                   "
         "                                                            "
         " for (var i := subgrid_row; i < subgrid_row + 3; i += 1)    "
         " {                                                          "
         "    for (var j := subgrid_col; j < subgrid_col + 3; j += 1) "
         "    {                                                       "
         "       if (get_board(j,i) == num)                           "
         "       {                                                    "
         "          return [false];                                   "
         "       }                                                    "
         "    }                                                       "
         " };                                                         "
         "                                                            "
         " return [true];                                             "
      ));

   compositor.add(
      function_t("solve_sudoku")
      .expression
      (
         " const var n := sqrt(board[]);                "
         "                                              "
         " for (var row := 0; row < n; row += 1)        "
         " {                                            "
         "    for (var col := 0; col < n; col += 1)     "
         "    {                                         "
         "       if (get_board(col, row) != 0)          "
         "       {                                      "
         "          continue;                           "
         "       }                                      "
         "                                              "
         "       for (var num := 1; num <= 9; num += 1) "
         "       {                                      "
         "          if (not(is_valid(col, row, num)))   "
         "          {                                   "
         "             continue;                        "
         "          }                                   "
         "                                              "
         "          set_board(col, row, num);           "
         "                                              "
         "          if (solve_sudoku())                 "
         "          {                                   "
         "             return [true];                   "
         "          };                                  "
         "                                              "
         "          set_board(col, row, 0);             "
         "       };                                     "
         "                                              "
         "       return [false];                        "
         "    }                                         "
         " };                                           "
         "                                              "
         " return [true];                               "
      ));

   const std::string sudoku_solver_program =
      " if (solve_sudoku())                           "
      " {                                             "
      "    println('Puzzle Solved!');                 "
      " }                                             "
      " else                                          "
      " {                                             "
      "    println('Error: Failed to solve puzzle.'); "
      " };                                            "
      "                                               "
      " display_board();                              ";

   expression_t expression;
   expression.register_symbol_table(symbol_table);

   parser_t parser;
   parser.compile(sudoku_solver_program,expression);

   expression.value();
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x15d8, %rsp           # imm = 0x15D8
leaq 0x1c02ea(%rip), %rsi    # 0x2dc800
leaq 0xbf0(%rsp), %rbx
movl $0x288, %edx            # imm = 0x288
movq %rbx, %rdi
callq 0x119060
leaq 0x90(%rsp), %rdi
leaq 0x2c8(%rsp), %rcx
movl $0x51, %edx
movq %rbx, %rsi
callq 0x11d642
leaq 0x1f8(%rsp), %rdi
callq 0x11d688
leaq 0x8(%rsp), %rdi
movl $0x1, %esi
callq 0x11d768
leaq 0xc00(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x1ba376(%rip), %rsi    # 0x2d68ed
leaq 0x1ba374(%rip), %rdx    # 0x2d68f2
leaq 0xbf0(%rsp), %rdi
callq 0x11d5b2
leaq 0x8(%rsp), %rdi
leaq 0xbf0(%rsp), %rsi
leaq 0x90(%rsp), %rdx
callq 0x11d7b0
movq 0xbf0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x11c5c2
movq 0xc00(%rsp), %rsi
incq %rsi
callq 0x119090
leaq 0xbf0(%rsp), %rdi
movq %rbx, (%rdi)
leaq 0x1ba309(%rip), %rsi    # 0x2d68dd
leaq 0x1ba30d(%rip), %rdx    # 0x2d68e8
callq 0x11d5b2
leaq 0x6a91(%rip), %rdx      # 0x123078
leaq 0x8(%rsp), %rdi
leaq 0xbf0(%rsp), %rsi
callq 0x11d8c8
movq 0xbf0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x11c616
movq 0xc00(%rsp), %rsi
incq %rsi
callq 0x119090
leaq 0x1f8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x123092
leaq 0xbf0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x11da46
movw $0x101, 0x15d0(%rsp)    # imm = 0x101
leaq 0xb8(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x1ba292(%rip), %rsi    # 0x2d68e9
leaq 0x1ba294(%rip), %rdx    # 0x2d68f2
leaq 0xa8(%rsp), %rdi
callq 0x11d5b2
leaq 0x2c8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x11dbce
leaq 0x20(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x1ba263(%rip), %rsi    # 0x2d68f3
leaq 0x1ba25f(%rip), %rdx    # 0x2d68f6
leaq 0x10(%rsp), %rdi
callq 0x11d5b2
leaq 0x40(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1ba246(%rip), %rsi    # 0x2d68f7
leaq 0x1ba242(%rip), %rdx    # 0x2d68fa
leaq 0x30(%rsp), %rdi
callq 0x11d5b2
leaq 0x308(%rsp), %r15
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x12d7c2
leaq 0x30(%rsp), %rsi
movq %r15, %rdi
callq 0x12d7c2
leaq 0x60(%rsp), %rbp
movq %rbp, -0x10(%rbp)
leaq 0x1ba207(%rip), %rsi    # 0x2d68fb
leaq 0x1ba223(%rip), %rdx    # 0x2d691e
leaq 0x50(%rsp), %rdi
callq 0x11d5b2
leaq 0x2e8(%rsp), %r12
leaq 0x50(%rsp), %rsi
movq %r12, %rdi
callq 0x119520
leaq 0x1520(%rsp), %rdi
leaq 0x2c8(%rsp), %rsi
callq 0x1257ba
leaq 0x1528(%rsp), %rcx
cmpq %rax, %rcx
jne 0x11c7ee
leaq 0xbf0(%rsp), %rdi
leaq 0x2c8(%rsp), %rsi
movq %r12, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x124518
testb %al, %al
je 0x11c7ee
leaq 0x2c8(%rsp), %rsi
movq 0x88(%rsi), %rax
movq %rax, %rcx
subq 0x68(%rsi), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
movq 0x60(%rsi), %rax
movq 0x70(%rsi), %rdx
subq 0x78(%rsi), %rdx
subq 0x50(%rsi), %rax
sarq $0x5, %rdx
sarq $0x5, %rax
leaq (%rcx,%rcx,2), %rcx
shlq $0x8, %rcx
addq 0x1550(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
shlq $0x4, %rdx
leaq (%rax,%rax,2), %rdi
shlq $0x4, %rdi
addq %rdx, %rdi
addq %rcx, %rdi
callq 0x1253ea
movq (%rax), %r12
leaq 0x2c8(%rsp), %rsi
leaq 0x1520(%rsp), %rdi
callq 0x12573e
movq %r12, %rdi
movq %rax, %rsi
callq 0x125466
movq 0x50(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11c805
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x11c81c
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0x10(%rsp), %rdi
cmpq %r13, %rdi
je 0x11c833
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x119090
movq %r15, %rdi
callq 0x12da5c
leaq 0x2f8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x11c85c
movq 0x2f8(%rsp), %rsi
incq %rsi
callq 0x119090
leaq 0x2d8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x11c87d
movq 0x2d8(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x11c8a2
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x119090
leaq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
movq %rax, (%rdi)
leaq 0x1ba063(%rip), %rsi    # 0x2d691f
leaq 0x1ba065(%rip), %rdx    # 0x2d6928
callq 0x11d5b2
leaq 0x2c8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x11dbce
leaq 0x10(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x1ba007(%rip), %rsi    # 0x2d68f3
leaq 0x1ba003(%rip), %rdx    # 0x2d68f6
callq 0x11d5b2
leaq 0x30(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1b9ff0(%rip), %rsi    # 0x2d68f7
leaq 0x1b9fec(%rip), %rdx    # 0x2d68fa
callq 0x11d5b2
leaq 0x50(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x1bb523(%rip), %rsi    # 0x2d7e45
leaq 0x1bb521(%rip), %rdx    # 0x2d7e4a
callq 0x11d5b2
leaq 0x308(%rsp), %r15
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x12d7c2
leaq 0x30(%rsp), %rsi
movq %r15, %rdi
callq 0x12d7c2
leaq 0x50(%rsp), %rsi
movq %r15, %rdi
callq 0x12d7c2
leaq 0x80(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x1b9fb9(%rip), %rsi    # 0x2d6929
leaq 0x1b9fde(%rip), %rdx    # 0x2d6955
leaq 0x70(%rsp), %rdi
callq 0x11d5b2
leaq 0x2e8(%rsp), %r12
leaq 0x70(%rsp), %rsi
movq %r12, %rdi
callq 0x119520
leaq 0x2c8(%rsp), %rsi
leaq 0x1520(%rsp), %rdi
callq 0x1257ba
leaq 0x1528(%rsp), %rcx
cmpq %rax, %rcx
jne 0x11ca6a
leaq 0xbf0(%rsp), %rdi
leaq 0x2c8(%rsp), %rsi
movq %r12, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x124518
testb %al, %al
je 0x11ca6a
leaq 0x2c8(%rsp), %rsi
movq 0x88(%rsi), %rax
movq %rax, %rcx
subq 0x68(%rsi), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
movq 0x60(%rsi), %rax
movq 0x70(%rsi), %rdx
subq 0x78(%rsi), %rdx
subq 0x50(%rsi), %rax
sarq $0x5, %rdx
sarq $0x5, %rax
leaq (%rcx,%rcx,2), %rcx
shlq $0x8, %rcx
addq 0x1550(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
shlq $0x4, %rdx
leaq (%rax,%rax,2), %rdi
shlq $0x4, %rdi
addq %rdx, %rdi
addq %rcx, %rdi
callq 0x1253ea
movq (%rax), %r12
leaq 0x2c8(%rsp), %rsi
leaq 0x1520(%rsp), %rdi
callq 0x12573e
movq %r12, %rdi
movq %rax, %rsi
callq 0x125466
movq 0x70(%rsp), %rdi
cmpq %rbx, %rdi
je 0x11ca84
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0x50(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11ca9b
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x11cab2
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0x10(%rsp), %rdi
cmpq %r13, %rdi
je 0x11cac9
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x119090
movq %r15, %rdi
callq 0x12da5c
movq 0x2e8(%rsp), %rdi
leaq 0x2f8(%rsp), %rax
cmpq %rax, %rdi
je 0x11caf6
movq 0x2f8(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0x2c8(%rsp), %rdi
leaq 0x2d8(%rsp), %rax
cmpq %rax, %rdi
je 0x11cb1b
movq 0x2d8(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x11cb40
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x119090
leaq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
movq %rax, (%rdi)
leaq 0x1b9dfc(%rip), %rsi    # 0x2d6956
leaq 0x1b9e02(%rip), %rdx    # 0x2d6963
callq 0x11d5b2
leaq 0x2c8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x11dbce
leaq 0x10(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x1b9dda(%rip), %rsi    # 0x2d6964
leaq 0x1ba2aa(%rip), %rdx    # 0x2d6e3b
callq 0x11d5b2
leaq 0x2e8(%rsp), %r12
leaq 0x10(%rsp), %rsi
movq %r12, %rdi
callq 0x119520
leaq 0x2c8(%rsp), %rsi
leaq 0x1520(%rsp), %rdi
callq 0x1257ba
leaq 0x308(%rsp), %r15
leaq 0x1528(%rsp), %rcx
cmpq %rax, %rcx
jne 0x11cc87
leaq 0xbf0(%rsp), %rdi
leaq 0x2c8(%rsp), %rsi
movq %r12, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x124518
testb %al, %al
je 0x11cc87
leaq 0x2c8(%rsp), %rsi
movq 0x88(%rsi), %rax
movq %rax, %rcx
subq 0x68(%rsi), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
movq 0x60(%rsi), %rax
movq 0x70(%rsi), %rdx
subq 0x78(%rsi), %rdx
subq 0x50(%rsi), %rax
sarq $0x5, %rdx
sarq $0x5, %rax
leaq (%rcx,%rcx,2), %rcx
shlq $0x8, %rcx
addq 0x1550(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
shlq $0x4, %rdx
leaq (%rax,%rax,2), %rdi
shlq $0x4, %rdi
addq %rdx, %rdi
addq %rcx, %rdi
callq 0x1253ea
movq (%rax), %r12
leaq 0x2c8(%rsp), %rsi
leaq 0x1520(%rsp), %rdi
callq 0x12573e
movq %r12, %rdi
movq %rax, %rsi
callq 0x125466
movq 0x10(%rsp), %rdi
cmpq %r13, %rdi
je 0x11cc9e
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x119090
movq %r15, %rdi
callq 0x12da5c
movq 0x2e8(%rsp), %rdi
leaq 0x2f8(%rsp), %rax
cmpq %rax, %rdi
je 0x11cccb
movq 0x2f8(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0x2c8(%rsp), %rdi
leaq 0x2d8(%rsp), %rax
cmpq %rax, %rdi
je 0x11ccf0
movq 0x2d8(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x11cd15
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x119090
leaq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
movq %rax, (%rdi)
leaq 0x1ba10d(%rip), %rsi    # 0x2d6e3c
leaq 0x1ba10e(%rip), %rdx    # 0x2d6e44
callq 0x11d5b2
leaq 0x2c8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x11dbce
leaq 0x10(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x1b9b94(%rip), %rsi    # 0x2d68f3
leaq 0x1b9b90(%rip), %rdx    # 0x2d68f6
callq 0x11d5b2
leaq 0x30(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1b9b7d(%rip), %rsi    # 0x2d68f7
leaq 0x1b9b79(%rip), %rdx    # 0x2d68fa
callq 0x11d5b2
leaq 0x50(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x1ba0b0(%rip), %rsi    # 0x2d6e45
leaq 0x1ba0ac(%rip), %rdx    # 0x2d6e48
callq 0x11d5b2
leaq 0x308(%rsp), %r15
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x12d7c2
leaq 0x30(%rsp), %rsi
movq %r15, %rdi
callq 0x12d7c2
leaq 0x50(%rsp), %rsi
movq %r15, %rdi
callq 0x12d7c2
leaq 0x70(%rsp), %rdi
movq %rbx, (%rdi)
leaq 0x1ba06a(%rip), %rsi    # 0x2d6e49
leaq 0x1ba6f3(%rip), %rdx    # 0x2d74d9
callq 0x11d5b2
leaq 0x2e8(%rsp), %r12
leaq 0x70(%rsp), %rsi
movq %r12, %rdi
callq 0x119520
leaq 0x2c8(%rsp), %rsi
leaq 0x1520(%rsp), %rdi
callq 0x1257ba
leaq 0x1528(%rsp), %rcx
cmpq %rax, %rcx
jne 0x11ced4
leaq 0xbf0(%rsp), %rdi
leaq 0x2c8(%rsp), %rsi
movq %r12, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x124518
testb %al, %al
je 0x11ced4
leaq 0x2c8(%rsp), %rsi
movq 0x88(%rsi), %rax
movq %rax, %rcx
subq 0x68(%rsi), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
movq 0x60(%rsi), %rax
movq 0x70(%rsi), %rdx
subq 0x78(%rsi), %rdx
subq 0x50(%rsi), %rax
sarq $0x5, %rdx
sarq $0x5, %rax
leaq (%rcx,%rcx,2), %rcx
shlq $0x8, %rcx
addq 0x1550(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
shlq $0x4, %rdx
leaq (%rax,%rax,2), %rdi
shlq $0x4, %rdi
addq %rdx, %rdi
addq %rcx, %rdi
callq 0x1253ea
movq (%rax), %r12
leaq 0x2c8(%rsp), %rsi
leaq 0x1520(%rsp), %rdi
callq 0x12573e
movq %r12, %rdi
movq %rax, %rsi
callq 0x125466
movq 0x70(%rsp), %rdi
cmpq %rbx, %rdi
je 0x11ceee
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0x50(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11cf05
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x11cf1c
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0x10(%rsp), %rdi
cmpq %r13, %rdi
je 0x11cf33
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x119090
movq %r15, %rdi
callq 0x12da5c
movq 0x2e8(%rsp), %rdi
leaq 0x2f8(%rsp), %rax
cmpq %rax, %rdi
je 0x11cf60
movq 0x2f8(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0x2c8(%rsp), %rdi
leaq 0x2d8(%rsp), %rax
cmpq %rax, %rdi
je 0x11cf85
movq 0x2d8(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x11cfaa
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x119090
leaq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
movq %rax, (%rdi)
leaq 0x1ba516(%rip), %rsi    # 0x2d74da
leaq 0x1ba51b(%rip), %rdx    # 0x2d74e6
callq 0x11d5b2
leaq 0x2c8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x11dbce
leaq 0x10(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x1ba4f3(%rip), %rsi    # 0x2d74e7
leaq 0x1baada(%rip), %rdx    # 0x2d7ad5
callq 0x11d5b2
leaq 0x2e8(%rsp), %r12
leaq 0x10(%rsp), %rsi
movq %r12, %rdi
callq 0x119520
leaq 0x2c8(%rsp), %rsi
leaq 0x1520(%rsp), %rdi
callq 0x1257ba
leaq 0x308(%rsp), %r15
leaq 0x1528(%rsp), %rcx
cmpq %rax, %rcx
jne 0x11d0f1
leaq 0xbf0(%rsp), %rdi
leaq 0x2c8(%rsp), %rsi
movq %r12, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x124518
testb %al, %al
je 0x11d0f1
leaq 0x2c8(%rsp), %rsi
movq 0x88(%rsi), %rax
movq %rax, %rcx
subq 0x68(%rsi), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
movq 0x60(%rsi), %rax
movq 0x70(%rsi), %rdx
subq 0x78(%rsi), %rdx
subq 0x50(%rsi), %rax
sarq $0x5, %rdx
sarq $0x5, %rax
leaq (%rcx,%rcx,2), %rcx
shlq $0x8, %rcx
addq 0x1550(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
shlq $0x4, %rdx
leaq (%rax,%rax,2), %rdi
shlq $0x4, %rdi
addq %rdx, %rdi
addq %rcx, %rdi
callq 0x1253ea
movq (%rax), %r12
leaq 0x2c8(%rsp), %rsi
leaq 0x1520(%rsp), %rdi
callq 0x12573e
movq %r12, %rdi
movq %rax, %rsi
callq 0x125466
movq 0x10(%rsp), %rdi
cmpq %r13, %rdi
je 0x11d108
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x119090
movq %r15, %rdi
callq 0x12da5c
movq 0x2e8(%rsp), %rdi
leaq 0x2f8(%rsp), %rax
cmpq %rax, %rdi
je 0x11d135
movq 0x2f8(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0x2c8(%rsp), %rdi
leaq 0x2d8(%rsp), %rax
cmpq %rax, %rdi
je 0x11d15a
movq 0x2d8(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
leaq 0x8(%rsp), %rbx
je 0x11d184
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x119090
leaq 0x10(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x1ba943(%rip), %rsi    # 0x2d7ad6
leaq 0x1bab12(%rip), %rdx    # 0x2d7cac
callq 0x11d5b2
leaq 0x30(%rsp), %rdi
callq 0x11dca8
movq 0x38(%rsp), %rcx
movq 0x40(%rsp), %rax
subq %rcx, %rax
je 0x11d205
sarq $0x3, %rax
cmpq $0x1, %rax
movq %rax, %rsi
adcq $0x0, %rsi
cmpq %rbx, %rcx
je 0x11d214
movq 0x8(%rsp), %rdx
cmpq (%rcx), %rdx
je 0x11d214
addq $0x8, %rcx
movl $0x1, %edi
subq %rsi, %rdi
xorl %esi, %esi
cmpq %rsi, %rdi
je 0x11d205
decq %rsi
cmpq %rbx, %rcx
je 0x11d1fd
leaq 0x8(%rcx), %r8
cmpq (%rcx), %rdx
movq %r8, %rcx
jne 0x11d1e4
negq %rsi
cmpq %rax, %rsi
jb 0x11d214
leaq 0x38(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x12dcce
leaq 0xa8(%rsp), %rdi
movl $0x7f, %esi
callq 0x11dd42
leaq 0x2c8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x11de42
leaq 0x1a8(%rsp), %rdi
callq 0x12deb4
leaq 0x178(%rsp), %rdi
callq 0x12deb4
leaq 0x148(%rsp), %rdi
callq 0x12deb4
leaq 0x118(%rsp), %rdi
callq 0x12deb4
leaq 0xe8(%rsp), %rdi
callq 0x12deb4
leaq 0xb8(%rsp), %rdi
callq 0x12deb4
leaq 0x2c8(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x11e666
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
leaq 0x2c8(%rsp), %rdi
callq 0x11f038
leaq 0x30(%rsp), %rdi
callq 0x11f2fa
movq 0x10(%rsp), %rdi
cmpq %r13, %rdi
je 0x11d2dd
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x119090
leaq 0xbf0(%rsp), %rdi
callq 0x11f348
leaq 0x8(%rsp), %rdi
callq 0x11f3aa
leaq 0x2b8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x11d315
movq 0x2b8(%rsp), %rsi
incq %rsi
callq 0x119090
leaq 0x2c36cc(%rip), %rbx    # 0x3e09e8
leaq 0x290(%rsp), %rax
movq %rbx, -0x30(%rax)
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x11d341
movq 0x290(%rsp), %rsi
incq %rsi
callq 0x119090
leaq 0x250(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x11d362
movq 0x250(%rsp), %rsi
incq %rsi
callq 0x119090
leaq 0x228(%rsp), %rax
movq %rbx, -0x30(%rax)
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x11d387
movq 0x228(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0x11d3a4
movq 0xa0(%rsp), %rsi
subq %rdi, %rsi
callq 0x119090
addq $0x15d8, %rsp           # imm = 0x15D8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x11d3cd
movq %rax, %r15
leaq 0xa8(%rsp), %rdi
callq 0x11e61e
jmp 0x11d490
movq %rax, %r15
jmp 0x11d490
movq %rax, %r15
jmp 0x11d49a
jmp 0x11d42f
jmp 0x11d41f
jmp 0x11d427
jmp 0x11d42f
jmp 0x11d4e3
jmp 0x11d4b2
jmp 0x11d4bb
jmp 0x11d41f
jmp 0x11d427
jmp 0x11d42f
jmp 0x11d41f
jmp 0x11d427
jmp 0x11d42f
jmp 0x11d4e3
jmp 0x11d4b2
jmp 0x11d4bb
jmp 0x11d41f
jmp 0x11d427
jmp 0x11d42f
jmp 0x11d4b2
jmp 0x11d4bb
movq %rax, %r15
jmp 0x11d52b
movq %rax, %r15
jmp 0x11d538
movq %rax, %r15
jmp 0x11d55d
jmp 0x11d468
jmp 0x11d468
jmp 0x11d43f
jmp 0x11d468
movq %rax, %r15
movq 0xbf0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x11d56a
movq 0xc00(%rsp), %rsi
incq %rsi
callq 0x119090
jmp 0x11d56a
movq %rax, %r15
jmp 0x11d56a
movq %rax, %r15
jmp 0x11d574
movq %rax, %r15
jmp 0x11d581
movq %rax, %r15
leaq 0x2c8(%rsp), %rdi
callq 0x11f038
leaq 0x30(%rsp), %rdi
callq 0x11f2fa
movq 0x10(%rsp), %rdi
cmpq %r13, %rdi
je 0x11d55d
movq 0x20(%rsp), %rsi
jmp 0x11d555
movq %rax, %r15
jmp 0x11d4fd
jmp 0x11d4bb
jmp 0x11d4c0
movq %rax, %r15
jmp 0x11d514
movq %rax, %r15
movq 0x70(%rsp), %rdi
cmpq %rbx, %rdi
je 0x11d4e6
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x119090
jmp 0x11d4e6
jmp 0x11d4e3
jmp 0x11d4e3
movq %rax, %r15
movq 0x50(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11d4fd
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x11d514
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x119090
movq 0x10(%rsp), %rdi
cmpq %r13, %rdi
je 0x11d52b
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x119090
leaq 0x2c8(%rsp), %rdi
callq 0x11dc68
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x11d55d
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x119090
leaq 0xbf0(%rsp), %rdi
callq 0x11f348
leaq 0x8(%rsp), %rdi
callq 0x11f3aa
leaq 0x1f8(%rsp), %rdi
callq 0x11f440
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0x11d59e
movq 0xa0(%rsp), %rsi
subq %rdi, %rsi
callq 0x119090
movq %r15, %rdi
callq 0x1192e0