// File: toxaart[P]hierarchical_block_sparse_lib/test_source/test_matrix_creation.cc
// Function: int test_creation<hbsm::HierarchicalBlockSparseMatrix<double>>()
static int test_creation() {
	typename MatrixType::Params param;
#if 1
	param.blocksize = 4; // Only for block sparse matrix
#endif

	MatrixType M;

	M.set_params(param);

	if(!M.empty())
		throw std::runtime_error("Error: M.empty() gave wrong result.");


	M.resize(4,4);

    if(M.get_n_rows() != 4 || M.get_n_cols() != 4 )
        throw std::runtime_error("Error: M.get_n_rows() or get_n_cols() gave wrong result.");


	if(M.empty())
		throw std::runtime_error("Error: M.empty() gave wrong result.");


	M.clear();
	if(!M.empty())
		throw std::runtime_error("Error: M.empty() or clear() gave wrong result.");


	M.resize(7,16);

    if(M.get_n_rows() != 7 || M.get_n_cols() != 16 )
        throw std::runtime_error("Error: M.get_n_rows() or get_n_cols() gave wrong result.");


	if(M.get_frob_squared() != 0)
		throw std::runtime_error("Error: M.get_frob_squared() != 0 for newly created matrix.");

    M.clear();
    M.resize(14, 14);

    if(M.get_n_rows() != 14|| M.get_n_cols() != 14 )
    throw std::runtime_error("Error: M.get_n_rows() or get_n_cols() gave wrong result.");


	double refValue1 = 7.7;
    double refValue2 = 1.1;

	  // Test assign_from_vectors()
	{
		int nValues = 2;
		std::vector<int> rows(nValues);
		std::vector<int> cols(nValues);
		std::vector<double> values(nValues);
		rows  [0] = 0;
		cols  [0] = 0;
		values[0] = refValue1;
		rows  [1] = 6;
		cols  [1] = 7;
		values[1] = refValue2;
		M.assign_from_vectors(rows, cols, values);

        if(!M.children_exist())
            throw std::runtime_error("Error: M.chilren_exist() gave wrong result.");

		double expected_frob_sq = refValue1*refValue1 + refValue2*refValue2;

		if(fabs(M.get_frob_squared() - expected_frob_sq) > 1e-7)
			throw std::runtime_error("Error: M.get_frob_squared() gave wrong result.");

		std::cout << "   M.get_nnz() = " << M.get_nnz() << std::endl;

        if(M.get_nnz() != 2)
            throw std::runtime_error("Error: M.get_nnz() gave wrong result.");
	}

	  // Test get_values()
	{
		int nValues2 = 3;
		std::vector<int> rows(nValues2), rows_nnz;
		std::vector<int> cols(nValues2), cols_nnz;
		rows  [0] = 0;
		cols  [0] = 0;
		rows  [1] = 6;
		cols  [1] = 7;
		rows  [2] = 3;
		cols  [2] = 3;
		std::vector<double> values, values_nnz;

		M.get_values(rows, cols, values);

		if(std::fabs(values[0] - refValue1) > 1e-7)
			throw std::runtime_error("Error: wrong result from get_values().");

		if(std::fabs(values[1] - refValue2) > 1e-7)
			throw std::runtime_error("Error: wrong result from get_values().");

		if(std::fabs(values[2] - 0) > 1e-7)
			throw std::runtime_error("Error: wrong result from get_values().");

        M.get_all_values(rows_nnz, cols_nnz, values_nnz);

        if(rows_nnz.size() != 2)
            throw std::runtime_error("Error: wrong result from get_all_values().");

        assert(rows_nnz[0] == 0 && cols_nnz[0] == 0 && values_nnz[0] == refValue1);
        assert(rows_nnz[1] == 6 && cols_nnz[1] == 7 && values_nnz[1] == refValue2);
	}


	size_t size = M.get_size();
    if(size != 528) // two children each 5*4 + 4*8 + 1*8 + 1*8 + 16*8 = 196, plus 2 higher levels 68 bytes each
        throw std::runtime_error("Error: wrong result from get_size().");

	std::vector<char> buf(size);
	M.set_n_block_multiplicaitons(3);
	M.write_to_buffer(&buf[0], size);



	MatrixType B;
	B.assign_from_buffer(&buf[0], size);

	if(B.get_n_rows() != M.get_n_rows() || B.get_n_cols() != M.get_n_cols()){
		throw std::runtime_error("Error: wrong result from get_n_rows() after assign_from_buffer().");
	}

	if(B.get_size() != M.get_size()){
		throw std::runtime_error("Error: wrong result from get_size() after assign_from_buffer().");
	}

  verify_that_matrices_are_equal<MatrixType>(M,B);
	assert(M.get_n_block_multiplications() == B.get_n_block_multiplications());

  MatrixType C;
  C.copy(M);

	if(C.get_n_rows() != M.get_n_rows()){
		throw std::runtime_error("Error: wrong result from get_n_rows() after copy().");
	}

	if(C.get_size() != M.get_size()){
		throw std::runtime_error("Error: wrong result from get_size() after copy().");
	}

  verify_that_matrices_are_equal<MatrixType>(M,C);
  verify_that_matrices_are_equal<MatrixType>(M,C);
  verify_that_matrices_are_equal<MatrixType>(B,C);
	assert(C.get_n_block_multiplications() == B.get_n_block_multiplications());


	{
		MatrixType E;
		typename MatrixType::Params param_E;
        param_E.blocksize = 2;

		E.set_params(param_E);
		E.resize(8,8);
		std::vector<int> rowsE;
		std::vector<int> colsE;
		std::vector<double> valsE;

		rowsE.push_back(0);
		colsE.push_back(0);
		valsE.push_back(-0.5);

		rowsE.push_back(6);
		colsE.push_back(6);
		valsE.push_back(1);

		E.assign_from_vectors(rowsE, colsE, valsE);

		int E_size = E.get_size();
		std::vector<char> E_buf(E_size);

		E.update_internal_info();
		E.write_to_buffer(&E_buf[0], E_size);

		MatrixType E_copy;
		E_copy.assign_from_buffer(&E_buf[0], E_size);
		if(E.get_frob_norm_squared_internal() != E_copy.get_frob_norm_squared_internal()){
			throw std::runtime_error("Error: wrong result from get_frob_norm_squared_internal() after assign_from_buffer().");
		}

	}

    //test relatively large matrix and position codes
    {

        typename MatrixType::Params param_D;
        param_D.blocksize = 3;

        MatrixType D;
        D.set_params(param_D);
        D.resize(14,17);
        std::vector<int> rows,cols;
        std::vector<double> vals;
        for(int i = 0; i < 14; ++i){
            for(int j = 0; j < 17; ++j){
                rows.push_back(i);
                cols.push_back(j);
                vals.push_back((i-j)/3.33);


            }
        }

        D.assign_from_vectors(rows,cols,vals);
        std::cout << "D true size is " << D.get_n_rows() << " " << D.get_n_cols() << std::endl;

    }

    {

        //check add scaled identity
        MatrixType D,E;

        E.set_params(param);
        E.resize(33,33);

        std::vector<int> rows, cols;
        std::vector<double> vals;

        rows.push_back(5);
        cols.push_back(5);
        vals.push_back(2.2);


        rows.push_back(2);
        cols.push_back(24);
        vals.push_back(-2.2);


        E.assign_from_vectors(rows,cols,vals);

        D.add_scaled_identity(E,0.5);

		E.clear();
        E.resize(33,33);
		rows.clear();
		cols.clear();
		vals.clear();

		for(int i = 0; i < 33; ++i){
			rows.push_back(i);
			cols.push_back(i);
			vals.push_back(0.5);
		}
		vals[5] = 2.7;

		rows.push_back(2);
        cols.push_back(24);
        vals.push_back(-2.2);

        E.assign_from_vectors(rows,cols,vals);

		verify_that_matrices_are_equal<MatrixType>(E,D);

    }
	{
		param.blocksize = 1;
		MatrixType A;
		A.set_params(param);

		A.resize(1,1);

		std::vector<int> rows,cols;
		std::vector<double> vals;
		rows.push_back(0);
		cols.push_back(0);
		vals.push_back(1.2);

		A.assign_from_vectors(rows,cols,vals);

		size_t sizeA = A.get_size();

		std::vector<char> bufA(sizeA);
		A.write_to_buffer(&bufA[0], sizeA);

		MatrixType B;
		B.assign_from_buffer(&bufA[0], sizeA);


	}

	return 0;

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb80, %rsp            # imm = 0xB80
movl $0x4, -0x4(%rbp)
leaq -0x90(%rbp), %rdi
movq %rdi, -0x8c0(%rbp)
callq 0x4840
movq -0x8c0(%rbp), %rdi
leaq -0x4(%rbp), %rsi
callq 0x48e0
jmp 0x2517
leaq -0x90(%rbp), %rdi
callq 0x4970
movb %al, -0x8c1(%rbp)
jmp 0x252b
movb -0x8c1(%rbp), %al
testb $0x1, %al
jne 0x25b9
jmp 0x253b
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x8d0(%rbp)
leaq 0xead7(%rip), %rsi      # 0x11030
callq 0x2070
jmp 0x2560
movq -0x8d0(%rbp), %rdi
movq 0x15a82(%rip), %rsi     # 0x17ff0
movq 0x15a4b(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x481a
movq -0x8d0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x481a
xorl %eax, %eax
movl %eax, %ecx
leaq -0x90(%rbp), %rdi
movl $0x4, %edx
movl %edx, %esi
callq 0x49d0
jmp 0x25d2
leaq -0x90(%rbp), %rdi
callq 0x4b20
movl %eax, -0x8d4(%rbp)
jmp 0x25e6
movl -0x8d4(%rbp), %eax
cmpl $0x4, %eax
jne 0x2610
leaq -0x90(%rbp), %rdi
callq 0x4b80
movl %eax, -0x8d8(%rbp)
jmp 0x2605
movl -0x8d8(%rbp), %eax
cmpl $0x4, %eax
je 0x2677
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x8e0(%rbp)
leaq 0xea26(%rip), %rsi      # 0x11054
callq 0x2070
jmp 0x2635
movq -0x8e0(%rbp), %rdi
movq 0x159ad(%rip), %rsi     # 0x17ff0
movq 0x15976(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq -0x8e0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x481a
leaq -0x90(%rbp), %rdi
callq 0x4970
movb %al, -0x8e1(%rbp)
jmp 0x268b
movb -0x8e1(%rbp), %al
testb $0x1, %al
jne 0x2697
jmp 0x26fe
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x8f0(%rbp)
leaq 0xe97b(%rip), %rsi      # 0x11030
callq 0x2070
jmp 0x26bc
movq -0x8f0(%rbp), %rdi
movq 0x15926(%rip), %rsi     # 0x17ff0
movq 0x158ef(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq -0x8f0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x481a
leaq -0x90(%rbp), %rdi
callq 0x4be0
jmp 0x270c
leaq -0x90(%rbp), %rdi
callq 0x4970
movb %al, -0x8f1(%rbp)
jmp 0x2720
movb -0x8f1(%rbp), %al
testb $0x1, %al
jne 0x2793
jmp 0x272c
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x900(%rbp)
leaq 0xe943(%rip), %rsi      # 0x1108d
callq 0x2070
jmp 0x2751
movq -0x900(%rbp), %rdi
movq 0x15891(%rip), %rsi     # 0x17ff0
movq 0x1585a(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq -0x900(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x481a
xorl %eax, %eax
movl %eax, %ecx
leaq -0x90(%rbp), %rdi
movl $0x7, %esi
movl $0x10, %edx
callq 0x49d0
jmp 0x27af
leaq -0x90(%rbp), %rdi
callq 0x4b20
movl %eax, -0x904(%rbp)
jmp 0x27c3
movl -0x904(%rbp), %eax
cmpl $0x7, %eax
jne 0x27ed
leaq -0x90(%rbp), %rdi
callq 0x4b80
movl %eax, -0x908(%rbp)
jmp 0x27e2
movl -0x908(%rbp), %eax
cmpl $0x10, %eax
je 0x2854
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x910(%rbp)
leaq 0xe849(%rip), %rsi      # 0x11054
callq 0x2070
jmp 0x2812
movq -0x910(%rbp), %rdi
movq 0x157d0(%rip), %rsi     # 0x17ff0
movq 0x15799(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq -0x910(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x481a
leaq -0x90(%rbp), %rdi
callq 0x4d50
movsd %xmm0, -0x918(%rbp)
jmp 0x286a
movsd -0x918(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x287f
jp 0x287f
jmp 0x28e6
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x920(%rbp)
leaq 0xe81f(%rip), %rsi      # 0x110bc
callq 0x2070
jmp 0x28a4
movq -0x920(%rbp), %rdi
movq 0x1573e(%rip), %rsi     # 0x17ff0
movq 0x15707(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq -0x920(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x481a
leaq -0x90(%rbp), %rdi
callq 0x4be0
jmp 0x28f4
xorl %eax, %eax
movl %eax, %ecx
leaq -0x90(%rbp), %rdi
movl $0xe, %edx
movl %edx, %esi
callq 0x49d0
jmp 0x290d
leaq -0x90(%rbp), %rdi
callq 0x4b20
movl %eax, -0x924(%rbp)
jmp 0x2921
movl -0x924(%rbp), %eax
cmpl $0xe, %eax
jne 0x294b
leaq -0x90(%rbp), %rdi
callq 0x4b80
movl %eax, -0x928(%rbp)
jmp 0x2940
movl -0x928(%rbp), %eax
cmpl $0xe, %eax
je 0x29b2
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x930(%rbp)
leaq 0xe6eb(%rip), %rsi      # 0x11054
callq 0x2070
jmp 0x2970
movq -0x930(%rbp), %rdi
movq 0x15672(%rip), %rsi     # 0x17ff0
movq 0x1563b(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq -0x930(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x481a
movabsq $0x401ecccccccccccd, %rax # imm = 0x401ECCCCCCCCCCCD
movq %rax, -0xa8(%rbp)
movabsq $0x3ff199999999999a, %rax # imm = 0x3FF199999999999A
movq %rax, -0xb0(%rbp)
movl $0x2, -0xb4(%rbp)
movslq -0xb4(%rbp), %rax
movq %rax, -0x940(%rbp)
leaq -0xd1(%rbp), %rdi
movq %rdi, -0x938(%rbp)
callq 0x4ef0
movq -0x940(%rbp), %rsi
movq -0x938(%rbp), %rdx
leaq -0xd0(%rbp), %rdi
callq 0x4f10
jmp 0x2a1b
leaq -0xd1(%rbp), %rdi
callq 0x4f80
movslq -0xb4(%rbp), %rax
movq %rax, -0x950(%rbp)
leaq -0xf1(%rbp), %rdi
movq %rdi, -0x948(%rbp)
callq 0x4ef0
movq -0x950(%rbp), %rsi
movq -0x948(%rbp), %rdx
leaq -0xf0(%rbp), %rdi
callq 0x4f10
jmp 0x2a64
leaq -0xf1(%rbp), %rdi
callq 0x4f80
movslq -0xb4(%rbp), %rax
movq %rax, -0x960(%rbp)
leaq -0x111(%rbp), %rdi
movq %rdi, -0x958(%rbp)
callq 0x4fa0
movq -0x960(%rbp), %rsi
movq -0x958(%rbp), %rdx
leaq -0x110(%rbp), %rdi
callq 0x4fc0
jmp 0x2aad
leaq -0x111(%rbp), %rdi
callq 0x5030
xorl %eax, %eax
movl %eax, %esi
movq %rsi, -0x998(%rbp)
leaq -0xd0(%rbp), %rdi
movq %rdi, -0x978(%rbp)
callq 0x5050
movq -0x998(%rbp), %rsi
movl $0x0, (%rax)
leaq -0xf0(%rbp), %rdi
movq %rdi, -0x970(%rbp)
callq 0x5050
movq -0x998(%rbp), %rsi
movl $0x0, (%rax)
movsd -0xa8(%rbp), %xmm0
movsd %xmm0, -0x990(%rbp)
leaq -0x110(%rbp), %rdi
movq %rdi, -0x968(%rbp)
callq 0x5070
movsd -0x990(%rbp), %xmm0
movq -0x978(%rbp), %rdi
movsd %xmm0, (%rax)
movl $0x1, %esi
movq %rsi, -0x988(%rbp)
callq 0x5050
movq -0x988(%rbp), %rsi
movq -0x970(%rbp), %rdi
movl $0x6, (%rax)
callq 0x5050
movq -0x988(%rbp), %rsi
movq -0x968(%rbp), %rdi
movl $0x7, (%rax)
movsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0x980(%rbp)
callq 0x5070
movsd -0x980(%rbp), %xmm0
movq -0x978(%rbp), %rsi
movq -0x970(%rbp), %rdx
movq -0x968(%rbp), %rcx
movsd %xmm0, (%rax)
leaq -0x90(%rbp), %rdi
callq 0x5090
jmp 0x2bbc
leaq -0x90(%rbp), %rdi
callq 0x50d0
movb %al, -0x999(%rbp)
jmp 0x2bd0
movb -0x999(%rbp), %al
testb $0x1, %al
jne 0x2cc7
jmp 0x2be0
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x9a8(%rbp)
leaq 0xe4f9(%rip), %rsi      # 0x110f7
callq 0x2070
jmp 0x2c05
movq -0x9a8(%rbp), %rdi
movq 0x153dd(%rip), %rsi     # 0x17ff0
movq 0x153a6(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0xd1(%rbp), %rdi
callq 0x4f80
jmp 0x481a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0xf1(%rbp), %rdi
callq 0x4f80
jmp 0x30dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x111(%rbp), %rdi
callq 0x5030
jmp 0x30d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x30c5
movq -0x9a8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x30c5
movsd -0xa8(%rbp), %xmm0
movsd -0xb0(%rbp), %xmm1
mulsd %xmm1, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x120(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x4d50
movsd %xmm0, -0x9b0(%rbp)
jmp 0x2d01
movsd -0x9b0(%rbp), %xmm0
subsd -0x120(%rbp), %xmm0
movaps 0xe308(%rip), %xmm1     # 0x11020
pand %xmm1, %xmm0
movsd 0xe2e4(%rip), %xmm1     # 0x11008
ucomisd %xmm1, %xmm0
jbe 0x2d91
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x9b8(%rbp)
leaq 0xe3db(%rip), %rsi      # 0x11123
callq 0x2070
jmp 0x2d4f
movq -0x9b8(%rbp), %rdi
movq 0x15293(%rip), %rsi     # 0x17ff0
movq 0x1525c(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq -0x9b8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x30c5
movq 0x15238(%rip), %rdi     # 0x17fd0
leaq 0xe3b3(%rip), %rsi      # 0x11152
callq 0x2190
movq %rax, -0x9c0(%rbp)
jmp 0x2dad
leaq -0x90(%rbp), %rdi
callq 0x5170
movq %rax, -0x9c8(%rbp)
jmp 0x2dc2
movq -0x9c8(%rbp), %rsi
movq -0x9c0(%rbp), %rdi
callq 0x2040
movq %rax, -0x9d0(%rbp)
jmp 0x2dde
movq -0x9d0(%rbp), %rdi
movq 0x151c4(%rip), %rsi     # 0x17fb0
callq 0x21c0
jmp 0x2df3
leaq -0x90(%rbp), %rdi
callq 0x5170
movq %rax, -0x9d8(%rbp)
jmp 0x2e08
movq -0x9d8(%rbp), %rax
cmpq $0x2, %rax
je 0x2e7c
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x9e0(%rbp)
leaq 0xe331(%rip), %rsi      # 0x11164
callq 0x2070
jmp 0x2e3a
movq -0x9e0(%rbp), %rdi
movq 0x151a8(%rip), %rsi     # 0x17ff0
movq 0x15171(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq -0x9e0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x30c5
leaq -0x110(%rbp), %rdi
callq 0x5300
leaq -0xf0(%rbp), %rdi
callq 0x5360
leaq -0xd0(%rbp), %rdi
callq 0x5360
movl $0x3, -0x124(%rbp)
movslq -0x124(%rbp), %rax
movq %rax, -0x9f0(%rbp)
leaq -0x141(%rbp), %rdi
movq %rdi, -0x9e8(%rbp)
callq 0x4ef0
movq -0x9f0(%rbp), %rsi
movq -0x9e8(%rbp), %rdx
leaq -0x140(%rbp), %rdi
callq 0x4f10
jmp 0x2ee7
leaq -0x141(%rbp), %rdi
callq 0x4f80
leaq -0x160(%rbp), %rdi
callq 0x53c0
movslq -0x124(%rbp), %rax
movq %rax, -0xa00(%rbp)
leaq -0x179(%rbp), %rdi
movq %rdi, -0x9f8(%rbp)
callq 0x4ef0
movq -0xa00(%rbp), %rsi
movq -0x9f8(%rbp), %rdx
leaq -0x178(%rbp), %rdi
callq 0x4f10
jmp 0x2f3c
leaq -0x179(%rbp), %rdi
callq 0x4f80
leaq -0x198(%rbp), %rdi
callq 0x53c0
xorl %eax, %eax
movl %eax, %esi
movq %rsi, -0xa30(%rbp)
leaq -0x140(%rbp), %rdi
movq %rdi, -0xa18(%rbp)
callq 0x5050
movq -0xa30(%rbp), %rsi
movl $0x0, (%rax)
leaq -0x178(%rbp), %rdi
movq %rdi, -0xa10(%rbp)
callq 0x5050
movq -0xa18(%rbp), %rdi
movl $0x0, (%rax)
movl $0x1, %esi
movq %rsi, -0xa28(%rbp)
callq 0x5050
movq -0xa28(%rbp), %rsi
movq -0xa10(%rbp), %rdi
movl $0x6, (%rax)
callq 0x5050
movq -0xa18(%rbp), %rdi
movl $0x7, (%rax)
movl $0x2, %esi
movq %rsi, -0xa20(%rbp)
callq 0x5050
movq -0xa20(%rbp), %rsi
movq -0xa10(%rbp), %rdi
movl $0x3, (%rax)
callq 0x5050
movl $0x3, (%rax)
leaq -0x1b0(%rbp), %rdi
movq %rdi, -0xa08(%rbp)
callq 0x53e0
leaq -0x1c8(%rbp), %rdi
callq 0x53e0
movq -0xa18(%rbp), %rsi
movq -0xa10(%rbp), %rdx
movq -0xa08(%rbp), %rcx
leaq -0x90(%rbp), %rdi
callq 0x5400
jmp 0x3048
leaq -0x1b0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x5070
movsd (%rax), %xmm0
subsd -0xa8(%rbp), %xmm0
movaps 0xdfb5(%rip), %xmm1     # 0x11020
pand %xmm1, %xmm0
movsd 0xdf91(%rip), %xmm1     # 0x11008
ucomisd %xmm1, %xmm0
jbe 0x316e
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xa38(%rbp)
leaq 0xe0eb(%rip), %rsi      # 0x1118a
callq 0x2070
jmp 0x30a6
movq -0xa38(%rbp), %rdi
movq 0x14f3c(%rip), %rsi     # 0x17ff0
movq 0x14f05(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
leaq -0x110(%rbp), %rdi
callq 0x5300
leaq -0xf0(%rbp), %rdi
callq 0x5360
leaq -0xd0(%rbp), %rdi
callq 0x5360
jmp 0x481a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x141(%rbp), %rdi
callq 0x4f80
jmp 0x481a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x179(%rbp), %rdi
callq 0x4f80
jmp 0x3564
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x3534
movq -0xa38(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x3534
leaq -0x1b0(%rbp), %rdi
movl $0x1, %esi
callq 0x5070
movsd (%rax), %xmm0
subsd -0xb0(%rbp), %xmm0
movaps 0xde8e(%rip), %xmm1     # 0x11020
pand %xmm1, %xmm0
movsd 0xde6a(%rip), %xmm1     # 0x11008
ucomisd %xmm1, %xmm0
jbe 0x320b
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xa40(%rbp)
leaq 0xdfc8(%rip), %rsi      # 0x1118a
callq 0x2070
jmp 0x31c9
movq -0xa40(%rbp), %rdi
movq 0x14e19(%rip), %rsi     # 0x17ff0
movq 0x14de2(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq -0xa40(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x3534
leaq -0x1b0(%rbp), %rdi
movl $0x2, %esi
callq 0x5070
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
subsd %xmm1, %xmm0
movaps 0xddf2(%rip), %xmm1     # 0x11020
pand %xmm1, %xmm0
movsd 0xddce(%rip), %xmm1     # 0x11008
ucomisd %xmm1, %xmm0
jbe 0x32a7
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xa48(%rbp)
leaq 0xdf2c(%rip), %rsi      # 0x1118a
callq 0x2070
jmp 0x3265
movq -0xa48(%rbp), %rdi
movq 0x14d7d(%rip), %rsi     # 0x17ff0
movq 0x14d46(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq -0xa48(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x3534
leaq -0x90(%rbp), %rdi
leaq -0x160(%rbp), %rsi
leaq -0x198(%rbp), %rdx
leaq -0x1c8(%rbp), %rcx
callq 0x55b0
jmp 0x32ca
leaq -0x160(%rbp), %rdi
callq 0x6070
cmpq $0x2, %rax
je 0x3343
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xa50(%rbp)
leaq 0xdeb7(%rip), %rsi      # 0x111b1
callq 0x2070
jmp 0x3301
movq -0xa50(%rbp), %rdi
movq 0x14ce1(%rip), %rsi     # 0x17ff0
movq 0x14caa(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq -0xa50(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x3534
leaq -0x160(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x5050
movq %rax, %rcx
xorl %eax, %eax
cmpl $0x0, (%rcx)
movb %al, -0xa51(%rbp)
jne 0x33ad
leaq -0x198(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x5050
movq %rax, %rcx
xorl %eax, %eax
cmpl $0x0, (%rcx)
movb %al, -0xa51(%rbp)
jne 0x33ad
leaq -0x1c8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x5070
movsd (%rax), %xmm0
ucomisd -0xa8(%rbp), %xmm0
sete %al
setnp %cl
andb %cl, %al
movb %al, -0xa51(%rbp)
movb -0xa51(%rbp), %al
testb $0x1, %al
jne 0x33b9
jmp 0x33bb
jmp 0x33da
leaq 0xde1a(%rip), %rdi      # 0x111dc
leaq 0xde56(%rip), %rsi      # 0x1121f
movl $0x7e, %edx
leaq 0xde62(%rip), %rcx      # 0x11237
callq 0x2100
leaq -0x160(%rbp), %rdi
movl $0x1, %esi
callq 0x5050
movq %rax, %rcx
xorl %eax, %eax
cmpl $0x6, (%rcx)
movb %al, -0xa52(%rbp)
jne 0x3447
leaq -0x198(%rbp), %rdi
movl $0x1, %esi
callq 0x5050
movq %rax, %rcx
xorl %eax, %eax
cmpl $0x7, (%rcx)
movb %al, -0xa52(%rbp)
jne 0x3447
leaq -0x1c8(%rbp), %rdi
movl $0x1, %esi
callq 0x5070
movsd (%rax), %xmm0
ucomisd -0xb0(%rbp), %xmm0
sete %al
setnp %cl
andb %cl, %al
movb %al, -0xa52(%rbp)
movb -0xa52(%rbp), %al
testb $0x1, %al
jne 0x3453
jmp 0x3455
jmp 0x3474
leaq 0xde2a(%rip), %rdi      # 0x11286
leaq 0xddbc(%rip), %rsi      # 0x1121f
movl $0x7f, %edx
leaq 0xddc8(%rip), %rcx      # 0x11237
callq 0x2100
leaq -0x1c8(%rbp), %rdi
callq 0x5300
leaq -0x1b0(%rbp), %rdi
callq 0x5300
leaq -0x198(%rbp), %rdi
callq 0x5360
leaq -0x178(%rbp), %rdi
callq 0x5360
leaq -0x160(%rbp), %rdi
callq 0x5360
leaq -0x140(%rbp), %rdi
callq 0x5360
leaq -0x90(%rbp), %rdi
callq 0x6090
movq %rax, -0xa60(%rbp)
jmp 0x34d1
movq -0xa60(%rbp), %rax
movq %rax, -0x1d0(%rbp)
cmpq $0x210, -0x1d0(%rbp) # imm = 0x210
je 0x35a4
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xa68(%rbp)
leaq 0xddbb(%rip), %rsi      # 0x112c9
callq 0x2070
jmp 0x3515
movq -0xa68(%rbp), %rdi
movq 0x14acd(%rip), %rsi     # 0x17ff0
movq 0x14a96(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
leaq -0x1c8(%rbp), %rdi
callq 0x5300
leaq -0x1b0(%rbp), %rdi
callq 0x5300
leaq -0x198(%rbp), %rdi
callq 0x5360
leaq -0x178(%rbp), %rdi
callq 0x5360
leaq -0x160(%rbp), %rdi
callq 0x5360
leaq -0x140(%rbp), %rdi
callq 0x5360
jmp 0x481a
movq -0xa68(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x481a
movq -0x1d0(%rbp), %rax
movq %rax, -0xa78(%rbp)
leaq -0x1e9(%rbp), %rdi
movq %rdi, -0xa70(%rbp)
callq 0x22f0
movq -0xa78(%rbp), %rsi
movq -0xa70(%rbp), %rdx
leaq -0x1e8(%rbp), %rdi
callq 0x61f0
jmp 0x35e1
leaq -0x1e9(%rbp), %rdi
callq 0x21e0
leaq -0x90(%rbp), %rdi
movl $0x3, %esi
callq 0x6260
jmp 0x3600
xorl %eax, %eax
movl %eax, %esi
leaq -0x1e8(%rbp), %rdi
callq 0x6b70
movq %rax, %rsi
movq -0x1d0(%rbp), %rdx
leaq -0x90(%rbp), %rdi
callq 0x6280
jmp 0x3628
leaq -0x278(%rbp), %rdi
callq 0x4840
jmp 0x3636
xorl %eax, %eax
movl %eax, %esi
leaq -0x1e8(%rbp), %rdi
callq 0x6b70
movq %rax, %rsi
movq -0x1d0(%rbp), %rdx
leaq -0x278(%rbp), %rdi
callq 0x6b90
jmp 0x365e
leaq -0x278(%rbp), %rdi
callq 0x4b20
movl %eax, -0xa7c(%rbp)
jmp 0x3672
leaq -0x90(%rbp), %rdi
callq 0x4b20
movl %eax, -0xa80(%rbp)
jmp 0x3686
movl -0xa7c(%rbp), %eax
movl -0xa80(%rbp), %ecx
cmpl %ecx, %eax
jne 0x36d2
leaq -0x278(%rbp), %rdi
callq 0x4b80
movl %eax, -0xa84(%rbp)
jmp 0x36aa
leaq -0x90(%rbp), %rdi
callq 0x4b80
movl %eax, -0xa88(%rbp)
jmp 0x36be
movl -0xa84(%rbp), %eax
movl -0xa88(%rbp), %ecx
cmpl %ecx, %eax
je 0x378a
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xa90(%rbp)
leaq 0xdbfe(%rip), %rsi      # 0x112ee
callq 0x2070
jmp 0x36f7
movq -0xa90(%rbp), %rdi
movq 0x148eb(%rip), %rsi     # 0x17ff0
movq 0x148b4(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x1e9(%rbp), %rdi
callq 0x21e0
jmp 0x481a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x480e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x4802
movq -0xa90(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x4802
leaq -0x278(%rbp), %rdi
callq 0x6090
movq %rax, -0xa98(%rbp)
jmp 0x379f
leaq -0x90(%rbp), %rdi
callq 0x6090
movq %rax, -0xaa0(%rbp)
jmp 0x37b4
movq -0xa98(%rbp), %rax
movq -0xaa0(%rbp), %rcx
cmpq %rcx, %rax
je 0x382e
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xaa8(%rbp)
leaq 0xdb4b(%rip), %rsi      # 0x11330
callq 0x2070
jmp 0x37ec
movq -0xaa8(%rbp), %rdi
movq 0x147f6(%rip), %rsi     # 0x17ff0
movq 0x147bf(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq -0xaa8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x4802
leaq -0x90(%rbp), %rdi
leaq -0x278(%rbp), %rsi
callq 0x75f0
jmp 0x3843
leaq -0x90(%rbp), %rdi
callq 0x7970
movq %rax, -0xab0(%rbp)
jmp 0x3858
leaq -0x278(%rbp), %rdi
callq 0x7970
movq %rax, -0xab8(%rbp)
jmp 0x386d
movq -0xab0(%rbp), %rax
movq -0xab8(%rbp), %rcx
cmpq %rcx, %rax
jne 0x3882
jmp 0x38a1
leaq 0xdae7(%rip), %rdi      # 0x11370
leaq 0xd98f(%rip), %rsi      # 0x1121f
movl $0x99, %edx
leaq 0xd99b(%rip), %rcx      # 0x11237
callq 0x2100
leaq -0x300(%rbp), %rdi
callq 0x4840
jmp 0x38af
xorl %eax, %eax
movl %eax, %edx
leaq -0x300(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x7990
jmp 0x38c8
leaq -0x300(%rbp), %rdi
callq 0x4b20
movl %eax, -0xabc(%rbp)
jmp 0x38dc
leaq -0x90(%rbp), %rdi
callq 0x4b20
movl %eax, -0xac0(%rbp)
jmp 0x38f0
movl -0xabc(%rbp), %eax
movl -0xac0(%rbp), %ecx
cmpl %ecx, %eax
je 0x397e
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xac8(%rbp)
leaq 0xda95(%rip), %rsi      # 0x113b3
callq 0x2070
jmp 0x3925
movq -0xac8(%rbp), %rdi
movq 0x146bd(%rip), %rsi     # 0x17ff0
movq 0x14686(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x47f6
movq -0xac8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x47f6
leaq -0x300(%rbp), %rdi
callq 0x6090
movq %rax, -0xad0(%rbp)
jmp 0x3993
leaq -0x90(%rbp), %rdi
callq 0x6090
movq %rax, -0xad8(%rbp)
jmp 0x39a8
movq -0xad0(%rbp), %rax
movq -0xad8(%rbp), %rcx
cmpq %rcx, %rax
je 0x3a22
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xae0(%rbp)
leaq 0xda0e(%rip), %rsi      # 0x113e7
callq 0x2070
jmp 0x39e0
movq -0xae0(%rbp), %rdi
movq 0x14602(%rip), %rsi     # 0x17ff0
movq 0x145cb(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq -0xae0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x47f6
leaq -0x90(%rbp), %rdi
leaq -0x300(%rbp), %rsi
callq 0x75f0
jmp 0x3a37
leaq -0x90(%rbp), %rdi
leaq -0x300(%rbp), %rsi
callq 0x75f0
jmp 0x3a4c
leaq -0x278(%rbp), %rdi
leaq -0x300(%rbp), %rsi
callq 0x75f0
jmp 0x3a61
leaq -0x300(%rbp), %rdi
callq 0x7970
movq %rax, -0xae8(%rbp)
jmp 0x3a76
leaq -0x278(%rbp), %rdi
callq 0x7970
movq %rax, -0xaf0(%rbp)
jmp 0x3a8b
movq -0xae8(%rbp), %rax
movq -0xaf0(%rbp), %rcx
cmpq %rcx, %rax
jne 0x3aa0
jmp 0x3abf
leaq 0xd972(%rip), %rdi      # 0x11419
leaq 0xd771(%rip), %rsi      # 0x1121f
movl $0xa9, %edx
leaq 0xd77d(%rip), %rcx      # 0x11237
callq 0x2100
leaq -0x388(%rbp), %rdi
callq 0x4840
jmp 0x3acd
movl $0x2, -0x38c(%rbp)
leaq -0x388(%rbp), %rdi
leaq -0x38c(%rbp), %rsi
callq 0x48e0
jmp 0x3aec
xorl %eax, %eax
movl %eax, %ecx
leaq -0x388(%rbp), %rdi
movl $0x8, %edx
movl %edx, %esi
callq 0x49d0
jmp 0x3b05
leaq -0x3a8(%rbp), %rdi
movq %rdi, -0xaf8(%rbp)
callq 0x53c0
leaq -0x3c0(%rbp), %rdi
callq 0x53c0
leaq -0x3d8(%rbp), %rdi
callq 0x53e0
movq -0xaf8(%rbp), %rdi
movl $0x0, -0x3dc(%rbp)
leaq -0x3dc(%rbp), %rsi
callq 0x7c10
jmp 0x3b4f
movl $0x0, -0x3e0(%rbp)
leaq -0x3c0(%rbp), %rdi
leaq -0x3e0(%rbp), %rsi
callq 0x7c10
jmp 0x3b6e
movabsq $-0x4020000000000000, %rax # imm = 0xBFE0000000000000
movq %rax, -0x3e8(%rbp)
leaq -0x3d8(%rbp), %rdi
leaq -0x3e8(%rbp), %rsi
callq 0x7c40
jmp 0x3b94
movl $0x6, -0x3ec(%rbp)
leaq -0x3a8(%rbp), %rdi
leaq -0x3ec(%rbp), %rsi
callq 0x7c10
jmp 0x3bb3
movl $0x6, -0x3f0(%rbp)
leaq -0x3c0(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
callq 0x7c10
jmp 0x3bd2
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, -0x3f8(%rbp)
leaq -0x3d8(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
callq 0x7c40
jmp 0x3bf8
leaq -0x388(%rbp), %rdi
leaq -0x3a8(%rbp), %rsi
leaq -0x3c0(%rbp), %rdx
leaq -0x3d8(%rbp), %rcx
callq 0x5090
jmp 0x3c1b
leaq -0x388(%rbp), %rdi
callq 0x6090
movq %rax, -0xb00(%rbp)
jmp 0x3c30
movq -0xb00(%rbp), %rax
movl %eax, -0x3fc(%rbp)
movslq -0x3fc(%rbp), %rax
movq %rax, -0xb10(%rbp)
leaq -0x419(%rbp), %rdi
movq %rdi, -0xb08(%rbp)
callq 0x22f0
movq -0xb10(%rbp), %rsi
movq -0xb08(%rbp), %rdx
leaq -0x418(%rbp), %rdi
callq 0x61f0
jmp 0x3c7a
leaq -0x419(%rbp), %rdi
callq 0x21e0
leaq -0x388(%rbp), %rdi
callq 0x7c70
jmp 0x3c94
xorl %eax, %eax
movl %eax, %esi
leaq -0x418(%rbp), %rdi
callq 0x6b70
movq %rax, %rsi
movslq -0x3fc(%rbp), %rdx
leaq -0x388(%rbp), %rdi
callq 0x6280
jmp 0x3cbc
leaq -0x4a8(%rbp), %rdi
callq 0x4840
jmp 0x3cca
xorl %eax, %eax
movl %eax, %esi
leaq -0x418(%rbp), %rdi
callq 0x6b70
movq %rax, %rsi
movslq -0x3fc(%rbp), %rdx
leaq -0x4a8(%rbp), %rdi
callq 0x6b90
jmp 0x3cf2
leaq -0x388(%rbp), %rdi
callq 0x7d60
movsd %xmm0, -0xb18(%rbp)
jmp 0x3d08
leaq -0x4a8(%rbp), %rdi
callq 0x7d60
movsd %xmm0, -0xb20(%rbp)
jmp 0x3d1e
movsd -0xb18(%rbp), %xmm0
movsd -0xb20(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jne 0x3d3b
jp 0x3d3b
jmp 0x3e21
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xb28(%rbp)
leaq 0xd703(%rip), %rsi      # 0x1145c
callq 0x2070
jmp 0x3d60
movq -0xb28(%rbp), %rdi
movq 0x14282(%rip), %rsi     # 0x17ff0
movq 0x1424b(%rip), %rdx     # 0x17fc0
callq 0x22c0
jmp 0x4832
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x3fbb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x3f97
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x419(%rbp), %rdi
callq 0x21e0
jmp 0x3f97
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x3f8b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x3f7f
movq -0xb28(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x2130
jmp 0x3f7f
leaq -0x4a8(%rbp), %rdi
callq 0x7d80
leaq -0x418(%rbp), %rdi
callq 0x7e10
leaq -0x3d8(%rbp), %rdi
callq 0x5300
leaq -0x3c0(%rbp), %rdi
callq 0x5360
leaq -0x3a8(%rbp), %rdi
callq 0x5360
leaq -0x388(%rbp), %rdi
callq 0x7d80
movl $0x3, -0x4ac(%rbp)
leaq -0x538(%rbp), %rdi
callq 0x4840
jmp 0x3e81
leaq -0x538(%rbp), %rdi
leaq -0x4ac(%rbp), %rsi
callq 0x48e0
jmp 0x3e96
xorl %eax, %eax
movl %eax, %ecx
leaq -0x538(%rbp), %rdi
movl $0xe, %esi
movl $0x11, %edx
callq 0x49d0
jmp 0x3eb2
leaq -0x550(%rbp), %rdi
callq 0x53c0
leaq -0x568(%rbp), %rdi
callq 0x53c0
leaq -0x580(%rbp), %rdi
callq 0x53e0
movl $0x0, -0x584(%rbp)
cmpl $0xe, -0x584(%rbp)
jge 0x4034
movl $0x0, -0x588(%rbp)
cmpl $0x11, -0x588(%rbp)
jge 0x401e
leaq -0x550(%rbp), %rdi
leaq -0x584(%rbp), %rsi
callq 0x7e70
jmp 0x3f19
leaq -0x568(%rbp), %rdi
leaq -0x588(%rbp), %rsi
callq 0x7e70
jmp 0x3f2e
movl -0x584(%rbp), %eax
movl -0x588(%rbp), %ecx
subl %ecx, %eax
cvtsi2sd %eax, %xmm0
movsd 0xd0d0(%rip), %xmm1     # 0x11018
divsd %xmm1, %xmm0
movsd %xmm0, -0x590(%rbp)
leaq -0x580(%rbp), %rdi
leaq -0x590(%rbp), %rsi
callq 0x7c40
jmp 0x3f69
jmp 0x3f6b
movl -0x588(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x588(%rbp)
jmp 0x3ef7
leaq -0x4a8(%rbp), %rdi
callq 0x7d80
leaq -0x418(%rbp), %rdi
callq 0x7e10
leaq -0x3d8(%rbp), %rdi
callq 0x5300
leaq -0x3c0(%rbp), %rdi
callq 0x5360
leaq -0x3a8(%rbp), %rdi
callq 0x5360
leaq -0x388(%rbp), %rdi
callq 0x7d80
jmp 0x47f6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x4371
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x580(%rbp), %rdi
callq 0x5300
leaq -0x568(%rbp), %rdi
callq 0x5360
leaq -0x550(%rbp), %rdi
callq 0x5360
jmp 0x4371
jmp 0x4020
movl -0x584(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x584(%rbp)
jmp 0x3ee0
leaq -0x538(%rbp), %rdi
leaq -0x550(%rbp), %rsi
leaq -0x568(%rbp), %rdx
leaq -0x580(%rbp), %rcx
callq 0x5090
jmp 0x4057
movq 0x13f72(%rip), %rdi     # 0x17fd0
leaq 0xd44d(%rip), %rsi      # 0x114b2
callq 0x2190
movq %rax, -0xb30(%rbp)
jmp 0x4073
leaq -0x538(%rbp), %rdi
callq 0x4b20
movl %eax, -0xb34(%rbp)
jmp 0x4087
movl -0xb34(%rbp), %esi
movq -0xb30(%rbp), %rdi
callq 0x22d0
movq %rax, -0xb40(%rbp)
jmp 0x40a2
movq -0xb40(%rbp), %rdi
leaq 0xd0b2(%rip), %rsi      # 0x11162
callq 0x2190
movq %rax, -0xb48(%rbp)
jmp 0x40be
leaq -0x538(%rbp), %rdi
callq 0x4b80
movl %eax, -0xb4c(%rbp)
jmp 0x40d2
movl -0xb4c(%rbp), %esi
movq -0xb48(%rbp), %rdi
callq 0x22d0
movq %rax, -0xb58(%rbp)
jmp 0x40ed
movq -0xb58(%rbp), %rdi
movq 0x13eb5(%rip), %rsi     # 0x17fb0
callq 0x21c0
jmp 0x4102
leaq -0x580(%rbp), %rdi
callq 0x5300
leaq -0x568(%rbp), %rdi
callq 0x5360
leaq -0x550(%rbp), %rdi
callq 0x5360
leaq -0x538(%rbp), %rdi
callq 0x7d80
leaq -0x618(%rbp), %rdi
callq 0x4840
jmp 0x4140
leaq -0x6a0(%rbp), %rdi
callq 0x4840
jmp 0x414e
leaq -0x6a0(%rbp), %rdi
leaq -0x4(%rbp), %rsi
callq 0x48e0
jmp 0x4160
xorl %eax, %eax
movl %eax, %ecx
leaq -0x6a0(%rbp), %rdi
movl $0x21, %edx
movl %edx, %esi
callq 0x49d0
jmp 0x4179
leaq -0x6b8(%rbp), %rdi
movq %rdi, -0xb60(%rbp)
callq 0x53c0
leaq -0x6d0(%rbp), %rdi
callq 0x53c0
leaq -0x6e8(%rbp), %rdi
callq 0x53e0
movq -0xb60(%rbp), %rdi
movl $0x5, -0x6ec(%rbp)
leaq -0x6ec(%rbp), %rsi
callq 0x7c10
jmp 0x41c3
movl $0x5, -0x6f0(%rbp)
leaq -0x6d0(%rbp), %rdi
leaq -0x6f0(%rbp), %rsi
callq 0x7c10
jmp 0x41e2
movabsq $0x400199999999999a, %rax # imm = 0x400199999999999A
movq %rax, -0x6f8(%rbp)
leaq -0x6e8(%rbp), %rdi
leaq -0x6f8(%rbp), %rsi
callq 0x7c40
jmp 0x4208
movl $0x2, -0x6fc(%rbp)
leaq -0x6b8(%rbp), %rdi
leaq -0x6fc(%rbp), %rsi
callq 0x7c10
jmp 0x4227
movl $0x18, -0x700(%rbp)
leaq -0x6d0(%rbp), %rdi
leaq -0x700(%rbp), %rsi
callq 0x7c10
jmp 0x4246
movabsq $-0x3ffe666666666666, %rax # imm = 0xC00199999999999A
movq %rax, -0x708(%rbp)
leaq -0x6e8(%rbp), %rdi
leaq -0x708(%rbp), %rsi
callq 0x7c40
jmp 0x426c
leaq -0x6a0(%rbp), %rdi
leaq -0x6b8(%rbp), %rsi
leaq -0x6d0(%rbp), %rdx
leaq -0x6e8(%rbp), %rcx
callq 0x5090
jmp 0x428f
leaq -0x618(%rbp), %rdi
leaq -0x6a0(%rbp), %rsi
movsd 0xcd6b(%rip), %xmm0     # 0x11010
callq 0x7ee0
jmp 0x42ac
leaq -0x6a0(%rbp), %rdi
callq 0x4be0
jmp 0x42ba
xorl %eax, %eax
movl %eax, %ecx
leaq -0x6a0(%rbp), %rdi
movl $0x21, %edx
movl %edx, %esi
callq 0x49d0
jmp 0x42d3
leaq -0x6b8(%rbp), %rdi
callq 0x8aa0
leaq -0x6d0(%rbp), %rdi
callq 0x8aa0
leaq -0x6e8(%rbp), %rdi
callq 0x8ac0
movl $0x0, -0x70c(%rbp)
cmpl $0x21, -0x70c(%rbp)
jge 0x43eb
leaq -0x6b8(%rbp), %rdi
leaq -0x70c(%rbp), %rsi
callq 0x7e70
jmp 0x4323
leaq -0x6d0(%rbp), %rdi
leaq -0x70c(%rbp), %rsi
callq 0x7e70
jmp 0x4338
movabsq $0x3fe0000000000000, %rax # imm = 0x3FE0000000000000
movq %rax, -0x718(%rbp)
leaq -0x6e8(%rbp), %rdi
leaq -0x718(%rbp), %rsi
callq 0x7c40
jmp 0x435e
jmp 0x4360
movl -0x70c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x70c(%rbp)
jmp 0x4301
leaq -0x538(%rbp), %rdi
callq 0x7d80
jmp 0x47f6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x472c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x4720
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x6e8(%rbp), %rdi
callq 0x5300
leaq -0x6d0(%rbp), %rdi
callq 0x5360
leaq -0x6b8(%rbp), %rdi
callq 0x5360
jmp 0x4720
leaq -0x6e8(%rbp), %rdi
movl $0x5, %esi
callq 0x5070
movabsq $0x400599999999999a, %rcx # imm = 0x400599999999999A
movq %rcx, (%rax)
movl $0x2, -0x71c(%rbp)
leaq -0x6b8(%rbp), %rdi
leaq -0x71c(%rbp), %rsi
callq 0x7c10
jmp 0x4428
movl $0x18, -0x720(%rbp)
leaq -0x6d0(%rbp), %rdi
leaq -0x720(%rbp), %rsi
callq 0x7c10
jmp 0x4447
movabsq $-0x3ffe666666666666, %rax # imm = 0xC00199999999999A
movq %rax, -0x728(%rbp)
leaq -0x6e8(%rbp), %rdi
leaq -0x728(%rbp), %rsi
callq 0x7c40
jmp 0x446d
leaq -0x6a0(%rbp), %rdi
leaq -0x6b8(%rbp), %rsi
leaq -0x6d0(%rbp), %rdx
leaq -0x6e8(%rbp), %rcx
callq 0x5090
jmp 0x4490
leaq -0x6a0(%rbp), %rdi
leaq -0x618(%rbp), %rsi
callq 0x75f0
jmp 0x44a5
leaq -0x6e8(%rbp), %rdi
callq 0x5300
leaq -0x6d0(%rbp), %rdi
callq 0x5360
leaq -0x6b8(%rbp), %rdi
callq 0x5360
leaq -0x6a0(%rbp), %rdi
callq 0x7d80
leaq -0x618(%rbp), %rdi
callq 0x7d80
movl $0x1, -0x4(%rbp)
leaq -0x7b0(%rbp), %rdi
callq 0x4840
jmp 0x44f6
leaq -0x7b0(%rbp), %rdi
leaq -0x4(%rbp), %rsi
callq 0x48e0
jmp 0x4508
xorl %eax, %eax
movl %eax, %ecx
leaq -0x7b0(%rbp), %rdi
movl $0x1, %edx
movl %edx, %esi
callq 0x49d0
jmp 0x4521
leaq -0x7c8(%rbp), %rdi
movq %rdi, -0xb68(%rbp)
callq 0x53c0
leaq -0x7e0(%rbp), %rdi
callq 0x53c0
leaq -0x7f8(%rbp), %rdi
callq 0x53e0
movq -0xb68(%rbp), %rdi
movl $0x0, -0x7fc(%rbp)
leaq -0x7fc(%rbp), %rsi
callq 0x7c10
jmp 0x456b
movl $0x0, -0x800(%rbp)
leaq -0x7e0(%rbp), %rdi
leaq -0x800(%rbp), %rsi
callq 0x7c10
jmp 0x458a
movabsq $0x3ff3333333333333, %rax # imm = 0x3FF3333333333333
movq %rax, -0x808(%rbp)
leaq -0x7f8(%rbp), %rdi
leaq -0x808(%rbp), %rsi
callq 0x7c40
jmp 0x45b0
leaq -0x7b0(%rbp), %rdi
leaq -0x7c8(%rbp), %rsi
leaq -0x7e0(%rbp), %rdx
leaq -0x7f8(%rbp), %rcx
callq 0x5090
jmp 0x45d3
leaq -0x7b0(%rbp), %rdi
callq 0x6090
movq %rax, -0xb70(%rbp)
jmp 0x45e8
movq -0xb70(%rbp), %rax
movq %rax, -0x810(%rbp)
movq -0x810(%rbp), %rax
movq %rax, -0xb80(%rbp)
leaq -0x829(%rbp), %rdi
movq %rdi, -0xb78(%rbp)
callq 0x22f0
movq -0xb80(%rbp), %rsi
movq -0xb78(%rbp), %rdx
leaq -0x828(%rbp), %rdi
callq 0x61f0
jmp 0x4633
leaq -0x829(%rbp), %rdi
callq 0x21e0
xorl %eax, %eax
movl %eax, %esi
leaq -0x828(%rbp), %rdi
callq 0x6b70
movq %rax, %rsi
movq -0x810(%rbp), %rdx
leaq -0x7b0(%rbp), %rdi
callq 0x6280
jmp 0x4667
leaq -0x8b8(%rbp), %rdi
callq 0x4840
jmp 0x4675
xorl %eax, %eax
movl %eax, %esi
leaq -0x828(%rbp), %rdi
callq 0x6b70
movq %rax, %rsi
movq -0x810(%rbp), %rdx
leaq -0x8b8(%rbp), %rdi
callq 0x6b90
jmp 0x469d
leaq -0x8b8(%rbp), %rdi
callq 0x7d80
leaq -0x828(%rbp), %rdi
callq 0x7e10
leaq -0x7f8(%rbp), %rdi
callq 0x5300
leaq -0x7e0(%rbp), %rdi
callq 0x5360
leaq -0x7c8(%rbp), %rdi
callq 0x5360
leaq -0x7b0(%rbp), %rdi
callq 0x7d80
leaq -0x300(%rbp), %rdi
callq 0x7d80
leaq -0x278(%rbp), %rdi
callq 0x7d80
leaq -0x1e8(%rbp), %rdi
callq 0x7e10
leaq -0x90(%rbp), %rdi
callq 0x7d80
xorl %eax, %eax
addq $0xb80, %rsp            # imm = 0xB80
popq %rbp
retq
leaq -0x6a0(%rbp), %rdi
callq 0x7d80
leaq -0x618(%rbp), %rdi
callq 0x7d80
jmp 0x47f6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x47ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x47c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x829(%rbp), %rdi
callq 0x21e0
jmp 0x47c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x47ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x8b8(%rbp), %rdi
callq 0x7d80
leaq -0x828(%rbp), %rdi
callq 0x7e10
leaq -0x7f8(%rbp), %rdi
callq 0x5300
leaq -0x7e0(%rbp), %rdi
callq 0x5360
leaq -0x7c8(%rbp), %rdi
callq 0x5360
leaq -0x7b0(%rbp), %rdi
callq 0x7d80
leaq -0x300(%rbp), %rdi
callq 0x7d80
leaq -0x278(%rbp), %rdi
callq 0x7d80
leaq -0x1e8(%rbp), %rdi
callq 0x7e10
leaq -0x90(%rbp), %rdi
callq 0x7d80
movq -0x98(%rbp), %rdi
callq 0x22e0
nopw %cs:(%rax,%rax)
nopl (%rax)