// File: /workspace/github_cpp_makefile_star2_O1/toxaart[P]hierarchical_block_sparse_lib/source/HierarchicalBlockSparseMatrix.h
// Function: hbsm::HierarchicalBlockSparseMatrix<double>::assign_from_vectors_general(std::vector<int, std::allocator<int>> const&, std::vector<int, std::allocator<int>> const&, std::vector<double, std::allocator<double>> const&, bool, bool)
void HierarchicalBlockSparseMatrix<Treal>::assign_from_vectors_general(const std::vector<int> & rows,
				     const std::vector<int> & cols,
				     const std::vector<Treal> & values,
				     bool useMax,
					 bool boundaries_checked) {


			assert(blocksize > 0);
			if(rows.size() != values.size() || cols.size() != values.size())
				throw std::runtime_error("Error in HierarchicalBlockSparseMatrix<Treal>::assign_from_vectors: bad sizes.");

			if(rows.size() == 0) return;

			// this will be done only at the top level, later it is not necessary
			if(!boundaries_checked){
				for(int i = 0; i < values.size(); ++i){
					if( rows[i] < 0 ||  rows[i] > nRows_orig-1 || cols[i] < 0 || cols[i] > nCols_orig - 1)
						throw std::runtime_error("Error in HierarchicalBlockSparseMatrix<Treal>::assign_from_vectors: index outside matrix boundaries.");

				}
			}

			if(lowest_level()){

        int max_row_num = nRows;
        if(on_bottom_boundary()) max_row_num = get_n_rows() % blocksize;

        int max_col_num = nCols;
        if(on_right_boundary()) max_col_num = get_n_cols() % blocksize;

        if(get_first_row_position() >= get_n_rows() || get_first_col_position() >= get_n_cols()){ // block to skip
            return;
        }


				for(size_t i = 0; i < values.size(); ++i){

          int row = rows[i];
					int col = cols[i];

          if(row >= max_row_num || col >= max_col_num){
						continue;
					}

					Treal val = values[i];

          if(useMax){
              submatrix[col * nRows + row] = (val > submatrix[col * nRows + row]) ? val : submatrix[col * nRows + row];
          }
          else{
              submatrix[col * nRows + row] += val; // Note: we use += here, so if an element appears several times, the result becomes the sum of those contributions.
          }

				}





				return;
			}

			// now we have to split arrays into 4 parts and recursively apply the same procedure on children
			std::vector<int> rows0, cols0, rows1, cols1, rows2, cols2, rows3, cols3;
            std::vector<Treal> vals0,vals1,vals2,vals3;

			int n_elements = rows.size();

            rows0.reserve(n_elements);
            cols0.reserve(n_elements);
            vals0.reserve(n_elements);

            rows1.reserve(n_elements);
            cols1.reserve(n_elements);
            vals1.reserve(n_elements);

            rows2.reserve(n_elements);
            cols2.reserve(n_elements);
            vals2.reserve(n_elements);

            rows3.reserve(n_elements);
            cols3.reserve(n_elements);
            vals3.reserve(n_elements);

			// the offset, when providing parts of vectors to the next level their "coordinates" will be shifted
			int offset = nRows/2;

			for(size_t i = 0; i < n_elements; ++i){

				int row = rows[i];
				int col = cols[i];
				Treal val = values[i];

				// this part goes to child0
				if(row < offset && col < offset){
					rows0.push_back(row);
					cols0.push_back(col);
					vals0.push_back(val);
				}

				// this part goes to child1
				if(offset <= row && row < nRows && col < offset){
					rows1.push_back(row-offset);
					cols1.push_back(col);
					vals1.push_back(val);
				}

				// this part goes to child2
				if(row < offset && offset <= col && col < nCols){
					rows2.push_back(row);
					cols2.push_back(col-offset);
					vals2.push_back(val);
				}

				// this part goes to child3
				if(offset <= row && row < nRows && offset <= col && col < nCols){
					rows3.push_back(row-offset);
					cols3.push_back(col-offset);
					vals3.push_back(val);
				}

			}

			if(vals0.size() > 0){
				if(children[0] != NULL){
					throw std::runtime_error("Error in HierarchicalBlockSparseMatrix<Treal>::assign_from_vectors: non-null child0 matrix occured.");
				}
				children[0] = std::make_shared<HierarchicalBlockSparseMatrix<Treal> >();
		    children[0]->set_params(get_params());
				children[0]->resize(nRows / 2, nCols / 2);
				children[0]->parent = this;
                children[0]->assign_from_vectors_general(rows0, cols0, vals0, useMax,true);
			}

			if(vals1.size() > 0){
				if(children[1] != NULL){
					throw std::runtime_error("Error in HierarchicalBlockSparseMatrix<Treal>::assign_from_vectors: non-null child1 matrix occured.");
				}
				children[1] = std::make_shared<HierarchicalBlockSparseMatrix<Treal> >();
		    children[1]->set_params(get_params());
				children[1]->resize(nRows / 2, nCols / 2);
				children[1]->parent = this;
                children[1]->assign_from_vectors_general(rows1, cols1, vals1, useMax,true);
			}

			if(vals2.size() > 0){
				if(children[2] != NULL){
					throw std::runtime_error("Error in HierarchicalBlockSparseMatrix<Treal>::assign_from_vectors: non-null child2 matrix occured.");
				}
				children[2] = std::make_shared<HierarchicalBlockSparseMatrix<Treal> >();
		    children[2]->set_params(get_params());
				children[2]->resize(nRows / 2, nCols / 2);
				children[2]->parent = this;
                children[2]->assign_from_vectors_general(rows2, cols2, vals2, useMax,true);
			}

			if(vals3.size() > 0){
				if(children[3] != NULL){
					throw std::runtime_error("Error in HierarchicalBlockSparseMatrix<Treal>::assign_from_vectors: non-null child3 matrix occured.");
				}
				children[3] = std::make_shared<HierarchicalBlockSparseMatrix<Treal> >();
		    children[3]->set_params(get_params());
				children[3]->resize(nRows / 2, nCols / 2);
				children[3]->parent = this;
                children[3]->assign_from_vectors_general(rows3, cols3, vals3, useMax,true);
			}
		}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1a8, %rsp            # imm = 0x1A8
movq %rdx, 0x180(%rsp)
cmpl $0x0, 0x10(%rdi)
jle 0x785a
movl %r8d, %r14d
movq %rcx, %r12
movq %rsi, %r15
movq %rdi, %rbx
movq (%rsi), %rax
movq 0x8(%rsi), %rsi
movq %rsi, %rdx
subq %rax, %rdx
sarq $0x2, %rdx
movq (%rcx), %rdi
movq 0x8(%rcx), %r8
movq %r8, %rcx
subq %rdi, %rcx
sarq $0x3, %rcx
cmpq %rcx, %rdx
jne 0x783c
movq 0x180(%rsp), %r10
movq (%r10), %rdx
movq 0x8(%r10), %r10
subq %rdx, %r10
sarq $0x2, %r10
cmpq %rcx, %r10
jne 0x783c
cmpq %rax, %rsi
je 0x77f8
cmpq %rdi, %r8
sete %sil
orb %r9b, %sil
jne 0x6cc3
movl 0x8(%rbx), %esi
movl 0xc(%rbx), %edi
cmpq $0x1, %rcx
adcq $0x0, %rcx
xorl %r8d, %r8d
movl (%rax,%r8,4), %r9d
testl %r9d, %r9d
js 0x780a
cmpl %esi, %r9d
jge 0x780a
movl (%rdx,%r8,4), %r9d
testl %r9d, %r9d
js 0x780a
cmpl %edi, %r9d
jge 0x780a
incq %r8
cmpq %r8, %rcx
jne 0x6c8f
movq %rbx, %rdi
callq 0x6b36
testb %al, %al
je 0x6e09
movl (%rbx), %ebp
movq %rbx, %rdi
callq 0x7a9c
testb %al, %al
je 0x6d03
cmpq $0x0, 0x68(%rbx)
movq %rbx, %rax
je 0x6cfa
movq %rbx, %rcx
movq %rcx, %rax
movq 0x68(%rcx), %rcx
testq %rcx, %rcx
jne 0x6cee
movl 0x8(%rax), %eax
cltd
idivl 0x10(%rbx)
movl %edx, %ebp
movl 0x4(%rbx), %r13d
movq %rbx, %rdi
callq 0x7af2
testb %al, %al
je 0x6d36
cmpq $0x0, 0x68(%rbx)
movq %rbx, %rax
je 0x6d2c
movq %rbx, %rcx
movq %rcx, %rax
movq 0x68(%rcx), %rcx
testq %rcx, %rcx
jne 0x6d20
movl 0xc(%rax), %eax
cltd
idivl 0x10(%rbx)
movl %edx, %r13d
movq %rbx, %rdi
callq 0x7b4a
cmpq $0x0, 0x68(%rbx)
movq %rbx, %rcx
je 0x6d57
movq %rbx, %rdx
movq %rdx, %rcx
movq 0x68(%rdx), %rdx
testq %rdx, %rdx
jne 0x6d4b
cmpl 0x8(%rcx), %eax
jge 0x77f8
movq %rbx, %rdi
callq 0x7bd2
cmpq $0x0, 0x68(%rbx)
movq %rbx, %rcx
je 0x6d81
movq %rbx, %rdx
movq %rdx, %rcx
movq 0x68(%rdx), %rdx
testq %rdx, %rdx
jne 0x6d75
cmpl 0xc(%rcx), %eax
jge 0x77f8
movq (%r12), %rax
movq 0x8(%r12), %rcx
subq %rax, %rcx
je 0x77f8
sarq $0x3, %rcx
movq (%r15), %rdx
movq 0x180(%rsp), %rsi
movq (%rsi), %rsi
movl (%rbx), %edi
movq 0x70(%rbx), %r8
cmpq $0x1, %rcx
adcq $0x0, %rcx
xorl %r9d, %r9d
movl (%rdx,%r9,4), %r10d
cmpl %ebp, %r10d
jge 0x6dfc
movl (%rsi,%r9,4), %r11d
cmpl %r13d, %r11d
jge 0x6dfc
movsd (%rax,%r9,8), %xmm0
imull %edi, %r11d
addl %r10d, %r11d
movslq %r11d, %r10
movsd (%r8,%r10,8), %xmm1
testb %r14b, %r14b
je 0x6df2
maxsd %xmm1, %xmm0
jmp 0x6df6
addsd %xmm1, %xmm0
movsd %xmm0, (%r8,%r10,8)
incq %r9
cmpq %r9, %rcx
jne 0x6dbf
jmp 0x77f8
movl %r14d, 0x18c(%rsp)
xorpd %xmm0, %xmm0
leaq 0x190(%rsp), %rdi
movapd %xmm0, (%rdi)
xorl %eax, %eax
movq %rax, 0x10(%rdi)
movq %rax, 0x170(%rsp)
movapd %xmm0, 0x160(%rsp)
movq %rax, 0x150(%rsp)
movapd %xmm0, 0x140(%rsp)
movq %rax, 0x130(%rsp)
movapd %xmm0, 0x120(%rsp)
movq %rax, 0x110(%rsp)
movapd %xmm0, 0x100(%rsp)
movq %rax, 0xf0(%rsp)
movapd %xmm0, 0xe0(%rsp)
movq %rax, 0xd0(%rsp)
movapd %xmm0, 0xc0(%rsp)
movq %rax, 0xb0(%rsp)
movapd %xmm0, 0xa0(%rsp)
movq %rax, 0x90(%rsp)
movapd %xmm0, 0x80(%rsp)
movq %rax, 0x70(%rsp)
movapd %xmm0, 0x60(%rsp)
movq %rax, 0x50(%rsp)
movapd %xmm0, 0x40(%rsp)
movq %rax, 0x30(%rsp)
movapd %xmm0, 0x20(%rsp)
movq 0x8(%r15), %r14
subq (%r15), %r14
movq %r14, %rax
shrq $0x2, %rax
movslq %eax, %r13
movq %r13, %rsi
callq 0x7c5c
leaq 0x160(%rsp), %rdi
movq %r13, %rsi
callq 0x7c5c
leaq 0x80(%rsp), %rdi
movq %r13, %rsi
callq 0x7cf2
leaq 0x140(%rsp), %rdi
movq %r13, %rsi
callq 0x7c5c
leaq 0x120(%rsp), %rdi
movq %r13, %rsi
callq 0x7c5c
leaq 0x60(%rsp), %rdi
movq %r13, %rsi
callq 0x7cf2
leaq 0x100(%rsp), %rdi
movq %r13, %rsi
callq 0x7c5c
leaq 0xe0(%rsp), %rdi
movq %r13, %rsi
callq 0x7c5c
leaq 0x40(%rsp), %rdi
movq %r13, %rsi
callq 0x7cf2
leaq 0xc0(%rsp), %rdi
movq %r13, %rsi
callq 0x7c5c
leaq 0xa0(%rsp), %rdi
movq %r13, %rsi
callq 0x7c5c
leaq 0x20(%rsp), %rdi
movq %r13, %rsi
callq 0x7cf2
shlq $0x1e, %r14
je 0x72fb
movl (%rbx), %eax
movl %eax, %ebp
shrl $0x1f, %ebp
addl %eax, %ebp
sarl %ebp
cmpq $0x1, %r13
adcq $0x0, %r13
xorl %r14d, %r14d
movq (%r15), %rax
movl (%rax,%r14,4), %eax
movl %eax, 0x1c(%rsp)
movq 0x180(%rsp), %rcx
movq (%rcx), %rcx
movl (%rcx,%r14,4), %ecx
movl %ecx, 0x8(%rsp)
movq (%r12), %rdx
movsd (%rdx,%r14,8), %xmm0
movsd %xmm0, 0x10(%rsp)
cmpl %ebp, %eax
setl %dl
cmpl %ebp, %ecx
setl %cl
andb %dl, %cl
cmpb $0x1, %cl
jne 0x709b
movq 0x198(%rsp), %rsi
cmpq 0x1a0(%rsp), %rsi
je 0x7015
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x198(%rsp)
jmp 0x7027
leaq 0x190(%rsp), %rdi
leaq 0x1c(%rsp), %rdx
callq 0x8728
movq 0x168(%rsp), %rsi
cmpq 0x170(%rsp), %rsi
je 0x704d
movl 0x8(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x168(%rsp)
jmp 0x705f
leaq 0x160(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x8728
movq 0x88(%rsp), %rsi
cmpq 0x90(%rsp), %rsi
je 0x7089
movsd 0x10(%rsp), %xmm0
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x88(%rsp)
jmp 0x709b
leaq 0x80(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x7fd4
movl 0x1c(%rsp), %ecx
movl %ecx, %eax
subl %ebp, %eax
jl 0x715b
cmpl (%rbx), %ecx
jge 0x715b
cmpl %ebp, 0x8(%rsp)
jge 0x715b
movl %eax, 0xc(%rsp)
movq 0x148(%rsp), %rsi
cmpq 0x150(%rsp), %rsi
je 0x70e1
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x148(%rsp)
jmp 0x70f3
leaq 0x140(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x8528
movq 0x128(%rsp), %rsi
cmpq 0x130(%rsp), %rsi
je 0x7119
movl 0x8(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x128(%rsp)
jmp 0x712b
leaq 0x120(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x8728
movq 0x68(%rsp), %rsi
cmpq 0x70(%rsp), %rsi
je 0x714c
movsd 0x10(%rsp), %xmm0
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x68(%rsp)
jmp 0x715b
leaq 0x60(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x7fd4
movl 0x1c(%rsp), %eax
cmpl %ebp, %eax
jge 0x721e
movl 0x8(%rsp), %ecx
cmpl %ecx, %ebp
jg 0x721e
cmpl 0x4(%rbx), %ecx
jge 0x721e
movq 0x108(%rsp), %rsi
cmpq 0x110(%rsp), %rsi
je 0x719e
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x108(%rsp)
jmp 0x71b0
leaq 0x100(%rsp), %rdi
leaq 0x1c(%rsp), %rdx
callq 0x8728
movl 0x8(%rsp), %eax
subl %ebp, %eax
movl %eax, 0xc(%rsp)
movq 0xe8(%rsp), %rsi
cmpq 0xf0(%rsp), %rsi
je 0x71dc
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0xe8(%rsp)
jmp 0x71ee
leaq 0xe0(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x8528
movq 0x48(%rsp), %rsi
cmpq 0x50(%rsp), %rsi
je 0x720f
movsd 0x10(%rsp), %xmm0
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x48(%rsp)
jmp 0x721e
leaq 0x40(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x7fd4
movl 0x1c(%rsp), %ecx
movl %ecx, %eax
subl %ebp, %eax
jl 0x72ef
cmpl (%rbx), %ecx
jge 0x72ef
movl 0x8(%rsp), %ecx
cmpl %ecx, %ebp
jg 0x72ef
cmpl 0x4(%rbx), %ecx
jge 0x72ef
movl %eax, 0xc(%rsp)
movq 0xc8(%rsp), %rsi
cmpq 0xd0(%rsp), %rsi
je 0x726f
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0xc8(%rsp)
jmp 0x7281
leaq 0xc0(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x8528
movl 0x8(%rsp), %eax
subl %ebp, %eax
movl %eax, 0xc(%rsp)
movq 0xa8(%rsp), %rsi
cmpq 0xb0(%rsp), %rsi
je 0x72ad
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0xa8(%rsp)
jmp 0x72bf
leaq 0xa0(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x8528
movq 0x28(%rsp), %rsi
cmpq 0x30(%rsp), %rsi
je 0x72e0
movsd 0x10(%rsp), %xmm0
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x28(%rsp)
jmp 0x72ef
leaq 0x20(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x7fd4
incq %r14
cmpq %r14, %r13
jne 0x6fb0
movq 0x88(%rsp), %rax
movabsq $0x100000001, %r14      # imm = 0x100000001
movzbl 0x18c(%rsp), %ebp
cmpq 0x80(%rsp), %rax
je 0x73fc
cmpq $0x0, 0x28(%rbx)
jne 0x7879
movl $0x98, %edi
callq 0x2130
movq %r14, 0x8(%rax)
leaq 0x699d(%rip), %rcx      # 0xdce0
movq %rcx, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
xorpd %xmm0, %xmm0
movupd %xmm0, 0x10(%rax)
movl $0xffffffff, 0x20(%rax) # imm = 0xFFFFFFFF
movupd %xmm0, 0x28(%rax)
movupd %xmm0, 0x38(%rax)
movupd %xmm0, 0x48(%rax)
movupd %xmm0, 0x58(%rax)
movupd %xmm0, 0x68(%rax)
movupd %xmm0, 0x78(%rax)
movupd %xmm0, 0x88(%rax)
movq %rcx, 0x28(%rbx)
movq 0x30(%rbx), %rdi
movq %rax, 0x30(%rbx)
testq %rdi, %rdi
je 0x7399
callq 0x6b64
movq 0x28(%rbx), %rdi
movl 0x10(%rbx), %eax
leaq 0x10(%rsp), %rsi
movl %eax, (%rsi)
callq 0x42d2
movq 0x28(%rbx), %rdi
movl (%rbx), %eax
movl 0x4(%rbx), %ecx
movl %eax, %esi
shrl $0x1f, %esi
addl %eax, %esi
sarl %esi
movl %ecx, %edx
shrl $0x1f, %edx
addl %ecx, %edx
sarl %edx
xorl %ecx, %ecx
callq 0x436c
movq 0x28(%rbx), %rdi
movq %rbx, 0x68(%rdi)
leaq 0x190(%rsp), %rsi
leaq 0x160(%rsp), %rdx
leaq 0x80(%rsp), %rcx
movl %ebp, %r8d
movl $0x1, %r9d
callq 0x6bf0
movq 0x68(%rsp), %rax
cmpq 0x60(%rsp), %rax
je 0x74e2
cmpq $0x0, 0x38(%rbx)
jne 0x7897
movl $0x98, %edi
callq 0x2130
movq %r14, 0x8(%rax)
leaq 0x68b4(%rip), %rcx      # 0xdce0
movq %rcx, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
xorpd %xmm0, %xmm0
movupd %xmm0, 0x10(%rax)
movl $0xffffffff, 0x20(%rax) # imm = 0xFFFFFFFF
movupd %xmm0, 0x28(%rax)
movupd %xmm0, 0x38(%rax)
movupd %xmm0, 0x48(%rax)
movupd %xmm0, 0x58(%rax)
movupd %xmm0, 0x68(%rax)
movupd %xmm0, 0x78(%rax)
movupd %xmm0, 0x88(%rax)
movq %rcx, 0x38(%rbx)
movq 0x40(%rbx), %rdi
movq %rax, 0x40(%rbx)
testq %rdi, %rdi
je 0x7482
callq 0x6b64
movq 0x38(%rbx), %rdi
movl 0x10(%rbx), %eax
leaq 0x10(%rsp), %rsi
movl %eax, (%rsi)
callq 0x42d2
movq 0x38(%rbx), %rdi
movl (%rbx), %eax
movl 0x4(%rbx), %ecx
movl %eax, %esi
shrl $0x1f, %esi
addl %eax, %esi
sarl %esi
movl %ecx, %edx
shrl $0x1f, %edx
addl %ecx, %edx
sarl %edx
xorl %ecx, %ecx
callq 0x436c
movq 0x38(%rbx), %rdi
movq %rbx, 0x68(%rdi)
leaq 0x140(%rsp), %rsi
leaq 0x120(%rsp), %rdx
leaq 0x60(%rsp), %rcx
movl %ebp, %r8d
movl $0x1, %r9d
callq 0x6bf0
movq 0x48(%rsp), %rax
cmpq 0x40(%rsp), %rax
je 0x75c8
cmpq $0x0, 0x48(%rbx)
jne 0x78b5
movl $0x98, %edi
callq 0x2130
movq %r14, 0x8(%rax)
leaq 0x67ce(%rip), %rcx      # 0xdce0
movq %rcx, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
xorpd %xmm0, %xmm0
movupd %xmm0, 0x10(%rax)
movl $0xffffffff, 0x20(%rax) # imm = 0xFFFFFFFF
movupd %xmm0, 0x28(%rax)
movupd %xmm0, 0x38(%rax)
movupd %xmm0, 0x48(%rax)
movupd %xmm0, 0x58(%rax)
movupd %xmm0, 0x68(%rax)
movupd %xmm0, 0x78(%rax)
movupd %xmm0, 0x88(%rax)
movq %rcx, 0x48(%rbx)
movq 0x50(%rbx), %rdi
movq %rax, 0x50(%rbx)
testq %rdi, %rdi
je 0x7568
callq 0x6b64
movq 0x48(%rbx), %rdi
movl 0x10(%rbx), %eax
leaq 0x10(%rsp), %rsi
movl %eax, (%rsi)
callq 0x42d2
movq 0x48(%rbx), %rdi
movl (%rbx), %eax
movl 0x4(%rbx), %ecx
movl %eax, %esi
shrl $0x1f, %esi
addl %eax, %esi
sarl %esi
movl %ecx, %edx
shrl $0x1f, %edx
addl %ecx, %edx
sarl %edx
xorl %ecx, %ecx
callq 0x436c
movq 0x48(%rbx), %rdi
movq %rbx, 0x68(%rdi)
leaq 0x100(%rsp), %rsi
leaq 0xe0(%rsp), %rdx
leaq 0x40(%rsp), %rcx
movl %ebp, %r8d
movl $0x1, %r9d
callq 0x6bf0
movq 0x28(%rsp), %rax
cmpq 0x20(%rsp), %rax
je 0x76ae
cmpq $0x0, 0x58(%rbx)
jne 0x78d3
movl $0x98, %edi
callq 0x2130
movq %r14, 0x8(%rax)
leaq 0x66e8(%rip), %rcx      # 0xdce0
movq %rcx, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
xorpd %xmm0, %xmm0
movupd %xmm0, 0x10(%rax)
movl $0xffffffff, 0x20(%rax) # imm = 0xFFFFFFFF
movupd %xmm0, 0x28(%rax)
movupd %xmm0, 0x38(%rax)
movupd %xmm0, 0x48(%rax)
movupd %xmm0, 0x58(%rax)
movupd %xmm0, 0x68(%rax)
movupd %xmm0, 0x78(%rax)
movupd %xmm0, 0x88(%rax)
movq %rcx, 0x58(%rbx)
movq 0x60(%rbx), %rdi
movq %rax, 0x60(%rbx)
testq %rdi, %rdi
je 0x764e
callq 0x6b64
movq 0x58(%rbx), %rdi
movl 0x10(%rbx), %eax
leaq 0x10(%rsp), %rsi
movl %eax, (%rsi)
callq 0x42d2
movq 0x58(%rbx), %rdi
movl (%rbx), %eax
movl 0x4(%rbx), %ecx
movl %eax, %esi
shrl $0x1f, %esi
addl %eax, %esi
sarl %esi
movl %ecx, %edx
shrl $0x1f, %edx
addl %ecx, %edx
sarl %edx
xorl %ecx, %ecx
callq 0x436c
movq 0x58(%rbx), %rdi
movq %rbx, 0x68(%rdi)
leaq 0xc0(%rsp), %rsi
leaq 0xa0(%rsp), %rdx
leaq 0x20(%rsp), %rcx
movl %ebp, %r8d
movl $0x1, %r9d
callq 0x6bf0
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x76c5
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x76dc
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x76f3
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x7710
movq 0x90(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0x772d
movq 0xb0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0xc0(%rsp), %rdi
testq %rdi, %rdi
je 0x774a
movq 0xd0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0xe0(%rsp), %rdi
testq %rdi, %rdi
je 0x7767
movq 0xf0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x100(%rsp), %rdi
testq %rdi, %rdi
je 0x7784
movq 0x110(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x120(%rsp), %rdi
testq %rdi, %rdi
je 0x77a1
movq 0x130(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x140(%rsp), %rdi
testq %rdi, %rdi
je 0x77be
movq 0x150(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x160(%rsp), %rdi
testq %rdi, %rdi
je 0x77db
movq 0x170(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x190(%rsp), %rdi
testq %rdi, %rdi
je 0x77f8
movq 0x1a0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
addq $0x1a8, %rsp            # imm = 0x1A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x10, %edi
callq 0x2070
movq %rax, %r14
leaq 0x302c(%rip), %rsi      # 0xa84a
movq %rax, %rdi
callq 0x2060
movq 0x67c3(%rip), %rsi      # 0xdff0
movq 0x678c(%rip), %rdx      # 0xdfc0
movq %r14, %rdi
callq 0x21a0
movl $0x10, %edi
callq 0x2070
movq %rax, %r14
leaq 0x2fab(%rip), %rsi      # 0xa7fb
movq %rax, %rdi
callq 0x2060
jmp 0x7826
leaq 0x2d06(%rip), %rdi      # 0xa567
leaq 0x2d0d(%rip), %rsi      # 0xa575
leaq 0x2ed1(%rip), %rcx      # 0xa740
movl $0x2a3, %edx            # imm = 0x2A3
callq 0x20a0
movl $0x10, %edi
callq 0x2070
movq %rax, %r14
leaq 0x3022(%rip), %rsi      # 0xa8af
movq %rax, %rdi
callq 0x2060
jmp 0x78ef
movl $0x10, %edi
callq 0x2070
movq %rax, %r14
leaq 0x3068(%rip), %rsi      # 0xa913
movq %rax, %rdi
callq 0x2060
jmp 0x78ef
movl $0x10, %edi
callq 0x2070
movq %rax, %r14
leaq 0x30ae(%rip), %rsi      # 0xa977
movq %rax, %rdi
callq 0x2060
jmp 0x78ef
movl $0x10, %edi
callq 0x2070
movq %rax, %r14
leaq 0x30f4(%rip), %rsi      # 0xa9db
movq %rax, %rdi
callq 0x2060
movq 0x66fa(%rip), %rsi      # 0xdff0
movq 0x66c3(%rip), %rdx      # 0xdfc0
movq %r14, %rdi
callq 0x21a0
jmp 0x790b
jmp 0x790b
jmp 0x790b
movq %rax, %rbx
movq %r14, %rdi
callq 0x20e0
jmp 0x793c
jmp 0x7939
jmp 0x7939
jmp 0x7939
jmp 0x7939
jmp 0x7939
jmp 0x7939
jmp 0x7939
jmp 0x7939
jmp 0x7939
jmp 0x7939
jmp 0x7939
jmp 0x7a88
jmp 0x7939
jmp 0x7939
jmp 0x7939
movq %rax, %rbx
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x7953
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x796a
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x7981
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x799e
movq 0x90(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0x79bb
movq 0xb0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0xc0(%rsp), %rdi
testq %rdi, %rdi
je 0x79d8
movq 0xd0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0xe0(%rsp), %rdi
testq %rdi, %rdi
je 0x79f5
movq 0xf0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x100(%rsp), %rdi
testq %rdi, %rdi
je 0x7a12
movq 0x110(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x120(%rsp), %rdi
testq %rdi, %rdi
je 0x7a2f
movq 0x130(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x140(%rsp), %rdi
testq %rdi, %rdi
je 0x7a4c
movq 0x150(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x160(%rsp), %rdi
testq %rdi, %rdi
je 0x7a69
movq 0x170(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
movq 0x190(%rsp), %rdi
testq %rdi, %rdi
je 0x7a93
movq 0x1a0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2140
jmp 0x7a93
movq %rax, %rbx
movq %r14, %rdi
callq 0x20e0
movq %rbx, %rdi
callq 0x21c0
nop