// File: /workspace/github_cpp_makefile_star2_O1/kiudee[P]VAHD-Projekt/Node.cpp
// Function: Node::BuildWeakConnectedComponent(NumObj*)
Action Node::BuildWeakConnectedComponent(NumObj *numo)
{

    IdObj *tempido;

    if (numo->num == 0) {
        //envelope left neighbor
        //TO DO check if left is existing before delegating. maybe this is not necessary because if the left is not exisiting, we would not come so far. otherwise the link to left might be broken.
        if (left != NULL) {
            tempido = new IdObj(left->num, extractIdentity(left->out), left->debugID);
            delete left;
            leftstable = false;

            //link to v.0
            left = new NodeRelay(num / 2, new Identity(node0->out), node0->debugID);
            //delegate old left neighbor to node0
            left->out->call(Node::BuildList, tempido);
        } else {
            leftstable = false;

            //link to v.0
            left = new NodeRelay(num / 2, new Identity(node0->out), node0->debugID);
        }

    } else if (numo->num == 1) {
        if (right != NULL) {
            tempido = new IdObj(right->num, extractIdentity(right->out), right->debugID);
            delete right;
            rightstable = false;

            right = new NodeRelay((1 + num) / 2, new Identity(node1->out), node1->debugID);
            right->out->call(Node::BuildList, tempido);
        } else {
            rightstable = false;

            right = new NodeRelay((1 + num) / 2, new Identity(node1->out), node1->debugID);
        }
    }
    delete numo;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, %rbp
movq %rdi, %r15
movl 0x20(%rsi), %eax
cmpl $0x1, %eax
je 0xc23e
testl %eax, %eax
jne 0xc688
movq 0xc8(%r15), %r13
testq %r13, %r13
je 0xc46b
movl $0x38, %edi
callq 0x3160
movq %rax, (%rsp)
movsd 0x20(%r13), %xmm0
movsd %xmm0, 0x8(%rsp)
leaq 0x60f9(%rip), %rax      # 0x121a0
movq (%rax), %r14
testq %r14, %r14
je 0xc0d0
cmpq $0x0, 0x10(%r15)
jne 0xc0bd
cmpq $0x0, 0x8(%r15)
jne 0xc0d0
movq 0x28(%r13), %rbx
testq %rbx, %rbx
je 0xc0d0
cmpq %r15, 0x18(%rbx)
je 0xc6b7
xorl %r12d, %r12d
movq 0xc8(%r15), %rdi
movl 0x30(%rdi), %eax
leaq 0x60a4(%rip), %rbx      # 0x12188
movq (%rbx), %rcx
movq (%rsp), %rsi
movq %rcx, (%rsi)
incq %rcx
movq %rcx, (%rbx)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x8(%rsi)
movq $0x0, 0x18(%rsi)
leaq 0x6094(%rip), %rcx      # 0x121a0
movq (%rcx), %rcx
testq %rcx, %rcx
je 0xc11e
movq %rsi, %rdx
addq $0x8, %rdx
movq %rcx, (%rdx)
movq %rbp, 0x10(%rsp)
movsd 0x8(%rsp), %xmm0
movsd %xmm0, 0x20(%rsi)
movq %r12, 0x28(%rsi)
movl %eax, 0x30(%rsi)
testq %rdi, %rdi
je 0xc144
movl $0x38, %esi
callq 0x3170
movb $0x0, 0x60(%r15)
movl $0x38, %edi
callq 0x3160
movq %rax, %r12
movsd 0xb0(%r15), %xmm0
movsd %xmm0, 0x8(%rsp)
movl $0x28, %edi
callq 0x3160
movq %rax, %r13
movq 0xd8(%r15), %rbp
movq 0x28(%rbp), %r14
movq (%rbx), %rax
movq %rax, (%r13)
incq %rax
movq %rax, (%rbx)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x8(%r13)
movq $0x0, 0x18(%r13)
leaq 0x5ffd(%rip), %rax      # 0x121a0
movq (%rax), %rax
testq %rax, %rax
je 0xc1b5
movq %r13, %rcx
addq $0x8, %rcx
movq %rax, (%rcx)
testq %rax, %rax
sete %cl
testq %r14, %r14
sete %dl
orb %cl, %dl
movupd %xmm0, 0x10(%r13)
movq $0x0, 0x20(%r13)
jne 0xc216
cmpq %rax, 0x18(%r14)
jne 0xc216
movq %r14, 0x10(%r13)
movq 0x30(%r14), %rax
movq %rax, 0x20(%r13)
movl $0x18, %edi
callq 0x3160
xorpd %xmm0, %xmm0
movupd %xmm0, (%rax)
movq %r13, 0x10(%rax)
movq 0x40(%r14), %rcx
movq 0x8(%rcx), %rdx
testq %rdx, %rdx
je 0xc20b
movq %rax, (%rdx)
movq %rdx, 0x8(%rax)
movq %rcx, (%rax)
movq %rax, 0x8(%rcx)
movsd 0x8(%rsp), %xmm0
mulsd 0x1194(%rip), %xmm0     # 0xd3b8
movl 0x30(%rbp), %edx
movq %r12, %rdi
movq %r13, %rsi
callq 0xc86c
movq %r12, 0xc8(%r15)
jmp 0xc409
movq 0xd0(%r15), %r13
testq %r13, %r13
je 0xc578
movl $0x38, %edi
callq 0x3160
movq %rax, (%rsp)
movsd 0x20(%r13), %xmm0
movsd %xmm0, 0x8(%rsp)
leaq 0x5f31(%rip), %rax      # 0x121a0
movq (%rax), %r14
testq %r14, %r14
je 0xc298
cmpq $0x0, 0x10(%r15)
jne 0xc285
cmpq $0x0, 0x8(%r15)
jne 0xc298
movq 0x28(%r13), %rbx
testq %rbx, %rbx
je 0xc298
cmpq %r15, 0x18(%rbx)
je 0xc70b
xorl %r12d, %r12d
movq 0xd0(%r15), %rdi
movl 0x30(%rdi), %eax
leaq 0x5edc(%rip), %rbx      # 0x12188
movq (%rbx), %rcx
movq (%rsp), %rsi
movq %rcx, (%rsi)
incq %rcx
movq %rcx, (%rbx)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x8(%rsi)
movq $0x0, 0x18(%rsi)
leaq 0x5ecc(%rip), %rcx      # 0x121a0
movq (%rcx), %rcx
testq %rcx, %rcx
je 0xc2e6
movq %rsi, %rdx
addq $0x8, %rdx
movq %rcx, (%rdx)
movq %rbp, 0x10(%rsp)
movsd 0x8(%rsp), %xmm0
movsd %xmm0, 0x20(%rsi)
movq %r12, 0x28(%rsi)
movl %eax, 0x30(%rsi)
testq %rdi, %rdi
je 0xc30c
movl $0x38, %esi
callq 0x3170
movb $0x0, 0x61(%r15)
movl $0x38, %edi
callq 0x3160
movq %rax, %r12
movsd 0xb0(%r15), %xmm0
movsd %xmm0, 0x8(%rsp)
movl $0x28, %edi
callq 0x3160
movq %rax, %r13
movq 0xe0(%r15), %rbp
movq 0x28(%rbp), %r14
movq (%rbx), %rax
movq %rax, (%r13)
incq %rax
movq %rax, (%rbx)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x8(%r13)
movq $0x0, 0x18(%r13)
leaq 0x5e35(%rip), %rax      # 0x121a0
movq (%rax), %rax
testq %rax, %rax
je 0xc37d
movq %r13, %rcx
addq $0x8, %rcx
movq %rax, (%rcx)
testq %rax, %rax
sete %cl
testq %r14, %r14
sete %dl
orb %cl, %dl
movupd %xmm0, 0x10(%r13)
movq $0x0, 0x20(%r13)
jne 0xc3de
cmpq %rax, 0x18(%r14)
jne 0xc3de
movq %r14, 0x10(%r13)
movq 0x30(%r14), %rax
movq %rax, 0x20(%r13)
movl $0x18, %edi
callq 0x3160
xorpd %xmm0, %xmm0
movupd %xmm0, (%rax)
movq %r13, 0x10(%rax)
movq 0x40(%r14), %rcx
movq 0x8(%rcx), %rdx
testq %rdx, %rdx
je 0xc3d3
movq %rax, (%rdx)
movq %rdx, 0x8(%rax)
movq %rcx, (%rax)
movq %rax, 0x8(%rcx)
movsd 0x8(%rsp), %xmm0
addsd 0xfd4(%rip), %xmm0      # 0xd3c0
mulsd 0xfc4(%rip), %xmm0      # 0xd3b8
movl 0x30(%rbp), %edx
movq %r12, %rdi
movq %r13, %rsi
callq 0xc86c
movq %r12, 0xd0(%r15)
movq 0x28(%r12), %r12
movl $0x38, %edi
callq 0x3160
leaq 0x5d89(%rip), %rcx      # 0x121a8
movq (%rcx), %rdx
movq %rdx, (%rax)
incq %rdx
movq %rdx, (%rcx)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x8(%rax)
leaq -0x402b(%rip), %rcx     # 0x8410
movq %rcx, 0x18(%rax)
xorl %ecx, %ecx
movq %rcx, 0x20(%rax)
movq (%rsp), %rdx
movq %rdx, 0x28(%rax)
movq %rcx, 0x30(%rax)
movq (%r12), %rcx
movq %r12, %rdi
movq %r15, %rsi
movq %rax, %rdx
callq *0x8(%rcx)
movq 0x10(%rsp), %rbp
jmp 0xc688
movb $0x0, 0x60(%r15)
movl $0x38, %edi
callq 0x3160
movsd 0xb0(%r15), %xmm0
movsd %xmm0, 0x10(%rsp)
movl $0x28, %edi
movq %rax, (%rsp)
callq 0x3160
movq %rax, %r12
movq 0xd8(%r15), %r13
movq 0x28(%r13), %rbx
leaq 0x5cdc(%rip), %rax      # 0x12188
movq (%rax), %rcx
movq %rcx, (%r12)
incq %rcx
movq %rcx, (%rax)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x8(%r12)
movq $0x0, 0x18(%r12)
leaq 0x5ccc(%rip), %rax      # 0x121a0
movq (%rax), %rax
testq %rax, %rax
je 0xc4e6
movq %r12, %rcx
addq $0x8, %rcx
movq %rax, (%rcx)
testq %rax, %rax
sete %cl
testq %rbx, %rbx
sete %dl
orb %cl, %dl
movupd %xmm0, 0x10(%r12)
movq $0x0, 0x20(%r12)
jne 0xc54b
cmpq %rax, 0x18(%rbx)
jne 0xc54b
movq %rbx, 0x10(%r12)
movq 0x30(%rbx), %rax
movq %rax, 0x20(%r12)
movl $0x18, %edi
callq 0x3160
xorpd %xmm0, %xmm0
movupd %xmm0, (%rax)
movq %r12, 0x10(%rax)
movq 0x40(%rbx), %rcx
movq 0x8(%rcx), %rdx
testq %rdx, %rdx
je 0xc540
movq %rax, (%rdx)
movq %rdx, 0x8(%rax)
movq %rcx, (%rax)
movq %rax, 0x8(%rcx)
movsd 0x10(%rsp), %xmm0
mulsd 0xe5f(%rip), %xmm0      # 0xd3b8
movl 0x30(%r13), %edx
movq (%rsp), %rbx
movq %rbx, %rdi
movq %r12, %rsi
callq 0xc86c
movq %rbx, 0xc8(%r15)
jmp 0xc688
movb $0x0, 0x61(%r15)
movl $0x38, %edi
callq 0x3160
movsd 0xb0(%r15), %xmm0
movsd %xmm0, 0x10(%rsp)
movl $0x28, %edi
movq %rax, (%rsp)
callq 0x3160
movq %rax, %r12
movq 0xe0(%r15), %r13
movq 0x28(%r13), %rbx
leaq 0x5bcf(%rip), %rax      # 0x12188
movq (%rax), %rcx
movq %rcx, (%r12)
incq %rcx
movq %rcx, (%rax)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x8(%r12)
movq $0x0, 0x18(%r12)
leaq 0x5bbf(%rip), %rax      # 0x121a0
movq (%rax), %rax
testq %rax, %rax
je 0xc5f3
movq %r12, %rcx
addq $0x8, %rcx
movq %rax, (%rcx)
testq %rax, %rax
sete %cl
testq %rbx, %rbx
sete %dl
orb %cl, %dl
movupd %xmm0, 0x10(%r12)
movq $0x0, 0x20(%r12)
jne 0xc658
cmpq %rax, 0x18(%rbx)
jne 0xc658
movq %rbx, 0x10(%r12)
movq 0x30(%rbx), %rax
movq %rax, 0x20(%r12)
movl $0x18, %edi
callq 0x3160
xorpd %xmm0, %xmm0
movupd %xmm0, (%rax)
movq %r12, 0x10(%rax)
movq 0x40(%rbx), %rcx
movq 0x8(%rcx), %rdx
testq %rdx, %rdx
je 0xc64d
movq %rax, (%rdx)
movq %rdx, 0x8(%rax)
movq %rcx, (%rax)
movq %rax, 0x8(%rcx)
movsd 0x10(%rsp), %xmm0
addsd 0xd5a(%rip), %xmm0      # 0xd3c0
mulsd 0xd4a(%rip), %xmm0      # 0xd3b8
movl 0x30(%r13), %edx
movq (%rsp), %rbx
movq %rbx, %rdi
movq %r12, %rsi
callq 0xc86c
movq %rbx, 0xd0(%r15)
testq %rbp, %rbp
je 0xc6a8
movl $0x28, %esi
movq %rbp, %rdi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x3170
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x28, %edi
callq 0x3160
movq %rax, %r12
leaq 0x5abd(%rip), %rax      # 0x12188
movq (%rax), %rcx
movq %rcx, (%r12)
incq %rcx
movq %rcx, (%rax)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x8(%r12)
movupd %xmm0, 0x18(%r12)
movq %r14, 0x8(%r12)
movupd %xmm0, 0x10(%r12)
movq 0x28(%rbx), %r14
movq %r14, 0x10(%r12)
cmpl $0x0, 0x14(%rbx)
je 0xc75f
movq 0x20(%r15), %rax
jmp 0xc761
movl $0x28, %edi
callq 0x3160
movq %rax, %r12
leaq 0x5a69(%rip), %rax      # 0x12188
movq (%rax), %rcx
movq %rcx, (%r12)
incq %rcx
movq %rcx, (%rax)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x8(%r12)
movupd %xmm0, 0x18(%r12)
movq %r14, 0x8(%r12)
movupd %xmm0, 0x10(%r12)
movq 0x28(%rbx), %r14
movq %r14, 0x10(%r12)
cmpl $0x0, 0x14(%rbx)
je 0xc7bc
movq 0x20(%r15), %rax
jmp 0xc7be
xorl %eax, %eax
movq %rax, 0x18(%r12)
movq 0x30(%rbx), %rax
movq %rax, 0x20(%r12)
testq %r14, %r14
je 0xc7a5
movl $0x18, %edi
callq 0x3160
xorpd %xmm0, %xmm0
movupd %xmm0, (%rax)
movq %r12, 0x10(%rax)
movq 0x40(%r14), %rcx
movq 0x8(%rcx), %rdx
testq %rdx, %rdx
je 0xc79a
movq %rax, (%rdx)
movq %rdx, 0x8(%rax)
movq %rcx, (%rax)
movq %rax, 0x8(%rcx)
movq 0x28(%r13), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movq $0x0, 0x28(%r13)
jmp 0xc0d3
xorl %eax, %eax
movq %rax, 0x18(%r12)
movq 0x30(%rbx), %rax
movq %rax, 0x20(%r12)
testq %r14, %r14
je 0xc802
movl $0x18, %edi
callq 0x3160
xorpd %xmm0, %xmm0
movupd %xmm0, (%rax)
movq %r12, 0x10(%rax)
movq 0x40(%r14), %rcx
movq 0x8(%rcx), %rdx
testq %rdx, %rdx
je 0xc7f7
movq %rax, (%rdx)
movq %rdx, 0x8(%rax)
movq %rcx, (%rax)
movq %rax, 0x8(%rcx)
movq 0x28(%r13), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movq $0x0, 0x28(%r13)
jmp 0xc29b
jmp 0xc81b
movq %rax, %rbx
movl $0x28, %esi
movq %r12, %rdi
callq 0x3170
jmp 0xc855
jmp 0xc82f
movq %rax, %rbx
movl $0x28, %esi
movq %r13, %rdi
callq 0x3170
jmp 0xc851
jmp 0xc847
jmp 0xc847
jmp 0xc847
movq %rax, %rbx
jmp 0xc855
jmp 0xc84e
movq %rax, %rbx
movq %r12, (%rsp)
movl $0x38, %esi
movq (%rsp), %rdi
callq 0x3170
movq %rbx, %rdi
callq 0x3280
nop