// File: koraa[P]sbcrack/cube/crypto.cpp
// Function: ecjacobian::add(ecjacobian const&)
void add(const ecjacobian &q)
    {
        if(q.z.iszero()) return;
        else if(z.iszero()) { *this = q; return; }
        gfield a, b, c, d, e, f;
        a.square(z);
        b.mul(q.y, a).mul(z);
        a.mul(q.x);
        if(q.z.isone())
        {
            c.add(x, a);
            d.add(y, b);
            a.sub(x, a);
            b.sub(y, b);
        }
        else
        {
            f.mul(y, e.square(q.z)).mul(q.z);
            e.mul(x);
            c.add(e, a);
            d.add(f, b);
            a.sub(e, a);
            b.sub(f, b);
        }
        if(a.iszero()) { if(b.iszero()) mul2(); else *this = origin; return; }
        if(!q.z.isone()) z.mul(q.z);
        z.mul(a);
        x.square(b).sub(f.mul(c, e.square(a)));
        y.sub(f, x).sub(x).mul(b).sub(e.mul(a).mul(d)).div2();
    }

// Assembly:
subq $0xf8, %rsp
movq %rdi, 0xf0(%rsp)
movq %rsi, 0xe8(%rsp)
movq 0xf0(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0xe8(%rsp), %rdi
addq $0x40, %rdi
callq 0x9cc0
testb $0x1, %al
jne 0xbf6b
jmp 0xbf70
jmp 0xc2c0
movq 0x20(%rsp), %rdi
addq $0x40, %rdi
callq 0x9cc0
testb $0x1, %al
jne 0xbf84
jmp 0xbfa0
movq 0x20(%rsp), %rdi
movq 0xe8(%rsp), %rsi
movl $0x60, %edx
callq 0x10c0
jmp 0xc2c0
jmp 0xbfa2
leaq 0xc8(%rsp), %rdi
callq 0x9d20
leaq 0xa8(%rsp), %rdi
callq 0x9d20
leaq 0x88(%rsp), %rdi
callq 0x9d20
leaq 0x68(%rsp), %rdi
callq 0x9d20
leaq 0x48(%rsp), %rdi
callq 0x9d20
leaq 0x28(%rsp), %rdi
callq 0x9d20
movq 0x20(%rsp), %rsi
addq $0x40, %rsi
leaq 0xc8(%rsp), %rdi
callq 0x9d50
movq 0xe8(%rsp), %rsi
addq $0x20, %rsi
leaq 0xa8(%rsp), %rdi
leaq 0xc8(%rsp), %rdx
callq 0xa7f0
movq 0x20(%rsp), %rsi
movq %rax, %rdi
addq $0x40, %rsi
callq 0x9d80
movq 0xe8(%rsp), %rsi
leaq 0xc8(%rsp), %rdi
callq 0x9d80
movq 0xe8(%rsp), %rdi
addq $0x40, %rdi
callq 0x9ce0
testb $0x1, %al
jne 0xc05b
jmp 0xc0c3
movq 0x20(%rsp), %rsi
leaq 0x88(%rsp), %rdi
leaq 0xc8(%rsp), %rdx
callq 0xad50
movq 0x20(%rsp), %rsi
addq $0x20, %rsi
leaq 0x68(%rsp), %rdi
leaq 0xa8(%rsp), %rdx
callq 0xad50
movq 0x20(%rsp), %rsi
leaq 0xc8(%rsp), %rdx
movq %rdx, %rdi
callq 0xb0c0
movq 0x20(%rsp), %rsi
addq $0x20, %rsi
leaq 0xa8(%rsp), %rdx
movq %rdx, %rdi
callq 0xb0c0
jmp 0xc177
movq 0x20(%rsp), %rax
addq $0x20, %rax
movq %rax, 0x18(%rsp)
movq 0xe8(%rsp), %rsi
addq $0x40, %rsi
leaq 0x48(%rsp), %rdi
callq 0x9d50
movq 0x18(%rsp), %rsi
movq %rax, %rdx
leaq 0x28(%rsp), %rdi
callq 0xa7f0
movq %rax, %rdi
movq 0xe8(%rsp), %rsi
addq $0x40, %rsi
callq 0x9d80
movq 0x20(%rsp), %rsi
leaq 0x48(%rsp), %rdi
callq 0x9d80
leaq 0x88(%rsp), %rdi
leaq 0x48(%rsp), %rsi
leaq 0xc8(%rsp), %rdx
callq 0xad50
leaq 0x68(%rsp), %rdi
leaq 0x28(%rsp), %rsi
leaq 0xa8(%rsp), %rdx
callq 0xad50
leaq 0xc8(%rsp), %rdx
leaq 0x48(%rsp), %rsi
movq %rdx, %rdi
callq 0xb0c0
leaq 0xa8(%rsp), %rdx
leaq 0x28(%rsp), %rsi
movq %rdx, %rdi
callq 0xb0c0
leaq 0xc8(%rsp), %rdi
callq 0x9cc0
testb $0x1, %al
jne 0xc18a
jmp 0xc1c4
leaq 0xa8(%rsp), %rdi
callq 0x9cc0
testb $0x1, %al
jne 0xc19d
jmp 0xc1a9
movq 0x20(%rsp), %rdi
callq 0xbce0
jmp 0xc1bf
movq 0x20(%rsp), %rdi
leaq 0x6f2f(%rip), %rsi      # 0x130e4
movl $0x60, %edx
callq 0x10c0
jmp 0xc2c0
movq 0xe8(%rsp), %rdi
addq $0x40, %rdi
callq 0x9ce0
testb $0x1, %al
jne 0xc1f3
movq 0x20(%rsp), %rdi
addq $0x40, %rdi
movq 0xe8(%rsp), %rsi
addq $0x40, %rsi
callq 0x9d80
movq 0x20(%rsp), %rdi
addq $0x40, %rdi
leaq 0xc8(%rsp), %rsi
callq 0x9d80
movq 0x20(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x9d50
movq %rax, 0x8(%rsp)
leaq 0x48(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
callq 0x9d50
movq %rax, %rdx
leaq 0x28(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0xa7f0
movq 0x8(%rsp), %rdi
movq %rax, %rsi
callq 0xaec0
movq 0x20(%rsp), %rdx
movq %rdx, %rdi
addq $0x20, %rdi
leaq 0x28(%rsp), %rsi
callq 0xb0c0
movq 0x20(%rsp), %rsi
movq %rax, %rdi
callq 0xaec0
movq %rax, %rdi
leaq 0xa8(%rsp), %rsi
callq 0x9d80
movq %rax, 0x10(%rsp)
leaq 0x48(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
callq 0x9d80
movq %rax, %rdi
leaq 0x68(%rsp), %rsi
callq 0x9d80
movq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0xaec0
movq %rax, %rdi
callq 0xc300
addq $0xf8, %rsp
retq
nopl (%rax,%rax)