// File: /workspace/github_cpp_makefile_star2_O2/cannam[P]mini-cpp-convnet/flower.cpp
// Function: classify(std::vector<std::vector<std::vector<float, std::allocator<float>>, std::allocator<std::vector<float, std::allocator<float>>>>, std::allocator<std::vector<std::vector<float, std::allocator<float>>, std::allocator<std::vector<float, std::allocator<float>>>>>> const&)
vector<float>
classify(const vector<vector<vector<float>>> &image)
{
    vector<vector<vector<float>>> t;

    t = zeroPad(image, 1, 1);
    t = convolve(t, weights_firstConv, biases_firstConv);
    t = activation(t, "relu");
    t = maxPool(t, 2, 2);

    t = zeroPad(t, 1, 1);
    t = convolve(t, weights_secondConv, biases_secondConv);
    t = activation(t, "relu");
    t = maxPool(t, 2, 2);

    t = zeroPad(t, 1, 1);
    t = convolve(t, weights_thirdConv, biases_thirdConv);
    t = activation(t, "relu");
    t = maxPool(t, 2, 2);

    t = zeroPad(t, 1, 1);
    t = convolve(t, weights_fourthConv, biases_fourthConv);
    t = activation(t, "relu");
    t = maxPool(t, 2, 2);

    vector<float> flat = flatten(t);
    
    flat = dense(flat, weights_firstDense, biases_firstDense);
    flat = activation(flat, "relu");

    flat = dense(flat, weights_labeller, biases_labeller);
    flat = activation(flat, "softmax");

    return flat;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x100, %rsp            # imm = 0x100
movq %rdi, %rbx
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
andq $0x0, 0x30(%rsp)
leaq 0x8(%rsp), %rdi
pushq $0x1
popq %rcx
movq %rcx, %rdx
callq 0x1b5aa
leaq 0x20(%rsp), %r14
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x1d3c8
movq %r15, %rdi
callq 0x1cba4
leaq 0x963f7(%rip), %rdx     # 0xb21a8
leaq 0x96408(%rip), %rcx     # 0xb21c0
leaq 0x8(%rsp), %rdi
movq %r14, %rsi
callq 0x1afec
leaq 0x20(%rsp), %rdi
leaq 0x8(%rsp), %r14
movq %r14, %rsi
callq 0x1d3c8
movq %r14, %rdi
callq 0x1cba4
leaq 0x3366(%rip), %rsi      # 0x1f14c
leaq 0xe0(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x1cd10
leaq 0x8(%rsp), %rdi
leaq 0x20(%rsp), %rsi
leaq 0xe0(%rsp), %rdx
callq 0x1baa8
leaq 0x20(%rsp), %r14
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x1d3c8
movq %r15, %rdi
callq 0x1cba4
leaq 0xe0(%rsp), %rdi
callq 0x20c0
leaq 0x8(%rsp), %rdi
pushq $0x2
popq %rcx
movq %r14, %rsi
movq %rcx, %rdx
callq 0x1b370
leaq 0x20(%rsp), %r14
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x1d3c8
movq %r15, %rdi
callq 0x1cba4
leaq 0x8(%rsp), %rdi
pushq $0x1
popq %rcx
movq %r14, %rsi
movq %rcx, %rdx
callq 0x1b5aa
leaq 0x20(%rsp), %r14
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x1d3c8
movq %r15, %rdi
callq 0x1cba4
leaq 0x96338(%rip), %rdx     # 0xb21d8
leaq 0x96349(%rip), %rcx     # 0xb21f0
leaq 0x8(%rsp), %rdi
movq %r14, %rsi
callq 0x1afec
leaq 0x20(%rsp), %rdi
leaq 0x8(%rsp), %r14
movq %r14, %rsi
callq 0x1d3c8
movq %r14, %rdi
callq 0x1cba4
leaq 0x3277(%rip), %rsi      # 0x1f14c
leaq 0xc0(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x1cd10
leaq 0x8(%rsp), %rdi
leaq 0x20(%rsp), %rsi
leaq 0xc0(%rsp), %rdx
callq 0x1baa8
leaq 0x20(%rsp), %r14
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x1d3c8
movq %r15, %rdi
callq 0x1cba4
leaq 0xc0(%rsp), %rdi
callq 0x20c0
leaq 0x8(%rsp), %rdi
pushq $0x2
popq %rcx
movq %r14, %rsi
movq %rcx, %rdx
callq 0x1b370
leaq 0x20(%rsp), %r14
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x1d3c8
movq %r15, %rdi
callq 0x1cba4
leaq 0x8(%rsp), %rdi
pushq $0x1
popq %rcx
movq %r14, %rsi
movq %rcx, %rdx
callq 0x1b5aa
leaq 0x20(%rsp), %r14
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x1d3c8
movq %r15, %rdi
callq 0x1cba4
leaq 0x96279(%rip), %rdx     # 0xb2208
leaq 0x9628a(%rip), %rcx     # 0xb2220
leaq 0x8(%rsp), %rdi
movq %r14, %rsi
callq 0x1afec
leaq 0x20(%rsp), %rdi
leaq 0x8(%rsp), %r14
movq %r14, %rsi
callq 0x1d3c8
movq %r14, %rdi
callq 0x1cba4
leaq 0x3188(%rip), %rsi      # 0x1f14c
leaq 0xa0(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x1cd10
leaq 0x8(%rsp), %rdi
leaq 0x20(%rsp), %rsi
leaq 0xa0(%rsp), %rdx
callq 0x1baa8
leaq 0x20(%rsp), %r14
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x1d3c8
movq %r15, %rdi
callq 0x1cba4
leaq 0xa0(%rsp), %rdi
callq 0x20c0
leaq 0x8(%rsp), %rdi
pushq $0x2
popq %rcx
movq %r14, %rsi
movq %rcx, %rdx
callq 0x1b370
leaq 0x20(%rsp), %r14
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x1d3c8
movq %r15, %rdi
callq 0x1cba4
leaq 0x8(%rsp), %rdi
pushq $0x1
popq %rcx
movq %r14, %rsi
movq %rcx, %rdx
callq 0x1b5aa
leaq 0x20(%rsp), %r14
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x1d3c8
movq %r15, %rdi
callq 0x1cba4
leaq 0x961ba(%rip), %rdx     # 0xb2238
leaq 0x961cb(%rip), %rcx     # 0xb2250
leaq 0x8(%rsp), %rdi
movq %r14, %rsi
callq 0x1afec
leaq 0x20(%rsp), %rdi
leaq 0x8(%rsp), %r14
movq %r14, %rsi
callq 0x1d3c8
movq %r14, %rdi
callq 0x1cba4
leaq 0x3099(%rip), %rsi      # 0x1f14c
leaq 0x80(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x1cd10
leaq 0x8(%rsp), %rdi
leaq 0x20(%rsp), %rsi
leaq 0x80(%rsp), %rdx
callq 0x1baa8
leaq 0x20(%rsp), %r14
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x1d3c8
movq %r15, %rdi
callq 0x1cba4
leaq 0x80(%rsp), %rdi
callq 0x20c0
leaq 0x8(%rsp), %rdi
pushq $0x2
popq %rcx
movq %r14, %rsi
movq %rcx, %rdx
callq 0x1b370
leaq 0x20(%rsp), %r14
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x1d3c8
movq %r15, %rdi
callq 0x1cba4
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1b76d
leaq 0x96120(%rip), %rdx     # 0xb2268
leaq 0x96131(%rip), %rcx     # 0xb2280
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
callq 0x1b8b2
leaq 0x8(%rsp), %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1d4b0
movq %r14, %rdi
callq 0x1cef2
leaq 0x2fd1(%rip), %rsi      # 0x1f14c
leaq 0x60(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x1cd10
leaq 0x8(%rsp), %rdi
leaq 0x60(%rsp), %rdx
movq %rbx, %rsi
callq 0x1bbf3
leaq 0x8(%rsp), %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1d4b0
movq %r14, %rdi
callq 0x1cef2
leaq 0x60(%rsp), %rdi
callq 0x20c0
leaq 0x960d3(%rip), %rdx     # 0xb2298
leaq 0x960e4(%rip), %rcx     # 0xb22b0
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
callq 0x1b8b2
leaq 0x8(%rsp), %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1d4b0
movq %r14, %rdi
callq 0x1cef2
leaq 0x2f77(%rip), %rsi      # 0x1f16f
leaq 0x40(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x1cd10
leaq 0x8(%rsp), %rdi
leaq 0x40(%rsp), %rdx
movq %rbx, %rsi
callq 0x1bbf3
leaq 0x8(%rsp), %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1d4b0
movq %r14, %rdi
callq 0x1cef2
leaq 0x40(%rsp), %rdi
callq 0x20c0
leaq 0x20(%rsp), %rdi
callq 0x1cba4
movq %rbx, %rax
addq $0x100, %rsp            # imm = 0x100
popq %rbx
popq %r14
popq %r15
retq
movq %rax, %r14
leaq 0x40(%rsp), %rdi
jmp 0x1c26b
jmp 0x1c274
jmp 0x1c274
movq %rax, %r14
leaq 0x60(%rsp), %rdi
callq 0x20c0
jmp 0x1c277
jmp 0x1c274
movq %rax, %r14
movq %rbx, %rdi
callq 0x1cef2
jmp 0x1c2dd
jmp 0x1c2da
jmp 0x1c2da
movq %rax, %r14
leaq 0x80(%rsp), %rdi
jmp 0x1c2cf
jmp 0x1c2da
jmp 0x1c2da
jmp 0x1c2da
jmp 0x1c2da
movq %rax, %r14
leaq 0xa0(%rsp), %rdi
jmp 0x1c2cf
jmp 0x1c2da
jmp 0x1c2da
jmp 0x1c2da
jmp 0x1c2da
movq %rax, %r14
leaq 0xc0(%rsp), %rdi
jmp 0x1c2cf
jmp 0x1c2da
jmp 0x1c2da
jmp 0x1c2da
jmp 0x1c2da
movq %rax, %r14
leaq 0xe0(%rsp), %rdi
callq 0x20c0
jmp 0x1c2dd
jmp 0x1c2da
jmp 0x1c2da
movq %rax, %r14
leaq 0x20(%rsp), %rdi
callq 0x1cba4
movq %r14, %rdi
callq 0x22d0