// File: /workspace/github_cpp_makefile_star2_O3/leonn[P]neuralNet/source/neural-net.cpp
// Function: main
int main(int argc, char *argv[]){
    srand(time(NULL));
    TrainingData trainData(argv[1]);

    // e.g., { 3, 2, 1 }
    vector<unsigned> topology;

    vector<vector<double>> inputValsA, targetValuesA;
    vector<double> inputVals, targetValues, resultValues;

    int trainingPass = 0;
    int epochs=0;
    bool test=false;
    bool testFile=false;
    long double minError=atof(argv[2]);
    int maxEpochs=atoi(argv[3]);

    ofstream trainingDataOutput;
    ofstream trainingDataGlobalOutput;
    ofstream testDataOutput;
    TrainingData *testDataInput;

    trainingDataOutput.open(argv[4]);
    trainingDataGlobalOutput.open(argv[5]);

    if(argc>6){
        if(!strcmp(argv[6],"-t")){
        testDataOutput.open(argv[7]);
        test=true;
        }
        else if(!strcmp(argv[6],"-tf")){
            testDataInput=new TrainingData(argv[7]);
            testDataOutput.open(argv[8]);
            testFile=true;
        }
    }

    long double eta,momentum;
    string transferFunction;

    trainData.getTopology(topology);
    trainData.getEta(eta);
    trainData.getMomentum(momentum);
    trainData.getTransferFunction(transferFunction);

    //Load trainning data from file
    while (!trainData.isEof()) {
        trainingPass++;

        // Get new input data and feed it forward:
        if (trainData.getNextInputs(inputVals) != topology[0])
            break;
        inputValsA.push_back(inputVals);

        // Train the net what the outputs should have been:
        trainData.getTargetOutputs(targetValues);
        assert(targetValues.size() == topology.back());
        targetValuesA.push_back(targetValues);
    }

    Net net(topology,transferFunction);
    long double recentAverageError;
    long double globalError;

    do {
        globalError=0.0;

        for (int i = 0; i < trainingPass; i++){
            // Get new input data and feed it forward:
            net.feedForward(inputValsA[i]);

            // Collect the net's actual output results:
            net.getResults(resultValues);

            // Train the net what the outputs should have been:
            net.backPropagation(targetValuesA[i],eta,momentum);

            // Report how well the training is working, average over recent samples:
            recentAverageError=net.getRecentAverageError();
            globalError+=recentAverageError;
            trainingDataOutput <<recentAverageError<<endl;
        }
        globalError/=trainingPass;
        trainingDataGlobalOutput <<globalError<<endl;
        epochs++;

    } while(round(globalError, minError) > minError && epochs < maxEpochs);

    trainingDataOutput.close();
    trainingDataGlobalOutput.close();

    if (test){
         for (int i = 0; i < trainingPass; i++){
            // Get new input data and feed it forward:][]
            net.feedForward(inputValsA[i]);
            showVectorValues("Input:", inputValsA[i], testDataOutput);

            showVectorValues("Target_Output:", targetValuesA[i], testDataOutput);

            // Collect the net's actual output results:
            net.getResults(resultValues);
            showTestVectorValues("Output:", resultValues, testDataOutput);
        }
    }

    if (testFile){
        trainingPass=0;
        //clear trainning data vectors
        inputValsA.clear();
        targetValuesA.clear();
        inputVals.clear();
        targetValues.clear();
        resultValues.clear();

        //Load trainning data from file
        while (!testDataInput->isEof()) {
            trainingPass++;

            // Get new input data and feed it forward:
            if (testDataInput->getNextInputs(inputVals) != topology[0])
                break;
            inputValsA.push_back(inputVals);

            // Train the net what the outputs should have been:
            testDataInput->getTargetOutputs(targetValues);
            assert(targetValues.size() == topology.back());
            targetValuesA.push_back(targetValues);
        }

        for (int i = 0; i < trainingPass; i++){
            // Get new input data and feed it forward:][]
            net.feedForward(inputValsA[i]);
            showVectorValues("Input:", inputValsA[i],testDataOutput);

            showVectorValues("Target_Output:", targetValuesA[i],testDataOutput);

            // Collect the net's actual output results:
            net.getResults(resultValues);
            showVectorValues("Output:", resultValues,testDataOutput);
        }
    }

    testDataOutput.close();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xac8, %rsp            # imm = 0xAC8
movq %rsi, %r15
movl %edi, %ebx
xorl %edi, %edi
callq 0x21e0
movl %eax, %edi
callq 0x2200
movq 0x8(%r15), %rsi
leaq -0x2d0(%rbp), %rdi
leaq -0x6d0(%rbp), %rdx
callq 0x20c0
leaq -0xad8(%rbp), %rdi
leaq -0x2d0(%rbp), %rsi
callq 0x514a
leaq -0x2c0(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x35ab
callq 0x21f0
xorl %eax, %eax
movq %rax, -0xd0(%rbp)
xorpd %xmm0, %xmm0
movapd %xmm0, -0xe0(%rbp)
movq %rax, -0x50(%rbp)
movapd %xmm0, -0x60(%rbp)
movq %rax, -0x90(%rbp)
movapd %xmm0, -0xa0(%rbp)
movq %rax, -0xf0(%rbp)
movapd %xmm0, -0x100(%rbp)
movq %rax, -0x70(%rbp)
movapd %xmm0, -0x80(%rbp)
movq %rax, -0xb0(%rbp)
movapd %xmm0, -0xc0(%rbp)
movq 0x10(%r15), %rdi
callq 0x2260
movsd %xmm0, -0x140(%rbp)
movsd %xmm0, -0x158(%rbp)
fldl -0x158(%rbp)
fstpt -0x38(%rbp)
movq 0x18(%r15), %rdi
callq 0x22d0
movl %eax, -0xa4(%rbp)
leaq -0x6d0(%rbp), %rdi
callq 0x2320
leaq -0x8d0(%rbp), %rdi
callq 0x2320
leaq -0x4d0(%rbp), %rdi
callq 0x2320
movq 0x20(%r15), %rsi
leaq -0x6d0(%rbp), %rdi
movl $0x10, %edx
callq 0x2040
movq 0x28(%r15), %rsi
leaq -0x8d0(%rbp), %rdi
movl $0x10, %edx
callq 0x2040
cmpl $0x7, %ebx
jl 0x36b0
movq 0x30(%r15), %rdi
cmpb $0x2d, (%rdi)
jne 0x369c
cmpb $0x74, 0x1(%rdi)
jne 0x369c
cmpb $0x0, 0x2(%rdi)
je 0x3f4b
leaq 0x2a4f(%rip), %rsi      # 0x60f2
callq 0x2280
testl %eax, %eax
je 0x3edb
movl $0x0, -0x3c(%rbp)
movl $0x0, -0x40(%rbp)
leaq -0x120(%rbp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq -0xad8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x4b9e
leaq -0xad8(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x4d54
leaq -0xad8(%rbp), %rdi
leaq -0x280(%rbp), %rsi
callq 0x4ff8
leaq -0xad8(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x4ea6
movl $0x0, -0x2c(%rbp)
leaq -0xad8(%rbp), %rbx
leaq -0x100(%rbp), %r14
leaq -0x60(%rbp), %r15
leaq -0x80(%rbp), %r12
leaq -0xa0(%rbp), %r13
movq %rbx, %rdi
callq 0x4b88
testb %al, %al
jne 0x37ae
movq %rbx, %rdi
movq %r14, %rsi
callq 0x5184
movq -0xe0(%rbp), %rcx
cmpl (%rcx), %eax
jne 0x37ab
movq %r15, %rdi
movq %r14, %rsi
callq 0x4180
movq %rbx, %rdi
movq %r12, %rsi
callq 0x534a
movq -0x78(%rbp), %rax
subq -0x80(%rbp), %rax
sarq $0x3, %rax
movq -0xd8(%rbp), %rcx
movl -0x4(%rcx), %ecx
cmpq %rcx, %rax
jne 0x3f71
incl -0x2c(%rbp)
movq %r13, %rdi
movq %r12, %rsi
callq 0x4180
jmp 0x3744
incl -0x2c(%rbp)
leaq -0x270(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
leaq -0x130(%rbp), %rdx
callq 0x264c
movl -0x2c(%rbp), %eax
movl %eax, -0xa8(%rbp)
fildl -0xa8(%rbp)
fstpt -0x224(%rbp)
fld1
fldt -0x38(%rbp)
fdivrp %st, %st(1)
fstpt -0x10c(%rbp)
movl %eax, %eax
movq %rax, -0x138(%rbp)
leaq (,%rax,8), %rax
leaq (%rax,%rax,2), %r13
xorl %eax, %eax
leaq -0x270(%rbp), %r15
leaq -0x6d0(%rbp), %r14
movq %rax, -0x148(%rbp)
fldz
fstpt -0x38(%rbp)
cmpl $0x0, -0x2c(%rbp)
jle 0x38d8
xorl %ebx, %ebx
fldz
fstpt -0x38(%rbp)
movq -0x60(%rbp), %rsi
addq %rbx, %rsi
movq %r15, %rdi
callq 0x27ba
fldz
fstp %st(0)
movq %r15, %rdi
leaq -0xc0(%rbp), %rsi
callq 0x2b9a
fldz
fstp %st(0)
movq -0xa0(%rbp), %rsi
addq %rbx, %rsi
movq %r15, %rdi
leaq -0x290(%rbp), %rdx
leaq -0x280(%rbp), %rcx
callq 0x2916
fldz
fstp %st(0)
movq %r15, %rdi
callq 0x2c5e
fldt -0x38(%rbp)
fadd %st(1), %st
fstpt -0x38(%rbp)
fstpt (%rsp)
movq %r14, %rdi
callq 0x20f0
fldz
movq %rax, %r12
fstp %st(0)
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2210
fldz
fstp %st(0)
movsbl %al, %esi
movq %r12, %rdi
callq 0x2030
fldz
fstp %st(0)
movq %rax, %rdi
callq 0x2160
fldz
fstp %st(0)
addq $0x18, %rbx
cmpq %rbx, %r13
jne 0x382c
fldt -0x224(%rbp)
fldt -0x38(%rbp)
fdivp %st, %st(1)
fld %st(0)
fstpt -0x38(%rbp)
fstpt (%rsp)
leaq -0x8d0(%rbp), %rdi
callq 0x20f0
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2210
movsbl %al, %esi
movq %r12, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2160
fldt -0x10c(%rbp)
fldt -0x38(%rbp)
fmulp %st, %st(1)
fadds 0x26ee(%rip)            # 0x6020
fstpt (%rsp)
callq 0x2100
fldt -0x10c(%rbp)
fdivrp %st, %st(1)
fstpl -0x150(%rbp)
movsd -0x150(%rbp), %xmm0
ucomisd -0x140(%rbp), %xmm0
movq -0x148(%rbp), %rax
jbe 0x396f
incl %eax
cmpl -0xa4(%rbp), %eax
jl 0x380f
leaq -0x6d0(%rbp), %rdi
callq 0x2290
leaq -0x8d0(%rbp), %rdi
callq 0x2290
cmpl $0x0, -0x2c(%rbp)
setle %al
movl -0x40(%rbp), %ecx
xorb $0x1, %cl
orb %al, %cl
jne 0x3aff
movq -0x138(%rbp), %rax
shlq $0x3, %rax
leaq (%rax,%rax,2), %rax
movq %rax, -0x38(%rbp)
xorl %r12d, %r12d
leaq -0x1f8(%rbp), %r14
leaq -0xc0(%rbp), %r15
leaq -0x1d8(%rbp), %r13
movq -0x60(%rbp), %rsi
addq %r12, %rsi
leaq -0x270(%rbp), %rdi
callq 0x27ba
movq %r15, %rbx
movq %r14, %r15
leaq -0x208(%rbp), %rax
movq %rax, -0x218(%rbp)
leaq -0x218(%rbp), %r14
movq %r14, %rdi
leaq 0x274b(%rip), %rsi      # 0x614a
leaq 0x274a(%rip), %rdx      # 0x6150
callq 0x4210
movq -0x60(%rbp), %rsi
addq %r12, %rsi
movq %r14, %rdi
leaq -0x4d0(%rbp), %rdx
callq 0x336c
movq -0x218(%rbp), %rdi
leaq -0x208(%rbp), %rax
cmpq %rax, %rdi
movq %r15, %r14
je 0x3a3c
callq 0x21f0
leaq -0x1e8(%rbp), %rax
movq %rax, -0x1f8(%rbp)
movq %r14, %rdi
leaq 0x26fd(%rip), %rsi      # 0x6151
leaq 0x2704(%rip), %rdx      # 0x615f
callq 0x4210
movq %rbx, %r15
movq -0xa0(%rbp), %rsi
addq %r12, %rsi
movq %r14, %rdi
leaq -0x4d0(%rbp), %rdx
callq 0x336c
movq -0x1f8(%rbp), %rdi
leaq -0x1e8(%rbp), %rax
cmpq %rax, %rdi
je 0x3a94
callq 0x21f0
leaq -0x270(%rbp), %rdi
movq %r15, %rsi
callq 0x2b9a
leaq -0x1c8(%rbp), %rax
movq %rax, -0x1d8(%rbp)
movq %r13, %rdi
leaq 0x269d(%rip), %rsi      # 0x6158
leaq 0x269d(%rip), %rdx      # 0x615f
callq 0x4210
movq %r13, %rdi
movq %r15, %rsi
leaq -0x4d0(%rbp), %rdx
callq 0x341d
movq -0x1d8(%rbp), %rdi
leaq -0x1c8(%rbp), %rax
cmpq %rax, %rdi
je 0x3af1
callq 0x21f0
addq $0x18, %r12
cmpq %r12, -0x38(%rbp)
jne 0x39c7
cmpb $0x0, -0x3c(%rbp)
je 0x3da1
movq -0x60(%rbp), %rbx
movq -0x58(%rbp), %r14
cmpq %rbx, %r14
je 0x3b33
movq %rbx, %r15
movq (%r15), %rdi
testq %rdi, %rdi
je 0x3b26
callq 0x21f0
addq $0x18, %r15
cmpq %r14, %r15
jne 0x3b19
movq %rbx, -0x58(%rbp)
movq -0xa0(%rbp), %rbx
movq -0x98(%rbp), %r14
cmpq %rbx, %r14
je 0x3b66
movq %rbx, %r15
movq (%r15), %rdi
testq %rdi, %rdi
je 0x3b56
callq 0x21f0
addq $0x18, %r15
cmpq %r14, %r15
jne 0x3b49
movq %rbx, -0x98(%rbp)
movq -0x100(%rbp), %rax
cmpq %rax, -0xf8(%rbp)
je 0x3b7d
movq %rax, -0xf8(%rbp)
movq -0x80(%rbp), %rax
cmpq %rax, -0x78(%rbp)
je 0x3b8b
movq %rax, -0x78(%rbp)
movq -0xc0(%rbp), %rax
cmpq %rax, -0xb8(%rbp)
je 0x3ba2
movq %rax, -0xb8(%rbp)
xorl %r13d, %r13d
leaq -0x100(%rbp), %rbx
leaq -0x60(%rbp), %r14
leaq -0x80(%rbp), %r15
leaq -0xa0(%rbp), %r12
movq -0x48(%rbp), %rdi
callq 0x4b88
testb %al, %al
jne 0x3c25
movq -0x48(%rbp), %rdi
movq %rbx, %rsi
callq 0x5184
movq -0xe0(%rbp), %rcx
cmpl (%rcx), %eax
jne 0x3c33
movq %r14, %rdi
movq %rbx, %rsi
callq 0x4180
movq -0x48(%rbp), %rdi
movq %r15, %rsi
callq 0x534a
movq -0x78(%rbp), %rax
subq -0x80(%rbp), %rax
sarq $0x3, %rax
movq -0xd8(%rbp), %rcx
movl -0x4(%rcx), %ecx
cmpq %rcx, %rax
jne 0x3f90
decl %r13d
movq %r12, %rdi
movq %r15, %rsi
callq 0x4180
jmp 0x3bbb
testl %r13d, %r13d
je 0x3da1
negl %r13d
jmp 0x3c3e
movl $0x1, %eax
subl %r13d, %eax
movl %eax, %r13d
movl %r13d, %eax
xorl %r12d, %r12d
leaq -0x198(%rbp), %r13
leaq -0xc0(%rbp), %rbx
leaq -0x178(%rbp), %r15
movq %rax, -0x38(%rbp)
movq -0x60(%rbp), %rsi
addq %r12, %rsi
leaq -0x270(%rbp), %rdi
callq 0x27ba
movq %r15, %r14
movq %rbx, %r15
movq %r13, %rbx
leaq -0x1a8(%rbp), %rax
movq %rax, -0x1b8(%rbp)
leaq -0x1b8(%rbp), %r13
movq %r13, %rdi
leaq 0x24b2(%rip), %rsi      # 0x614a
leaq 0x24b1(%rip), %rdx      # 0x6150
callq 0x4210
movq -0x60(%rbp), %rsi
addq %r12, %rsi
movq %r13, %rdi
leaq -0x4d0(%rbp), %rdx
callq 0x336c
movq -0x1b8(%rbp), %rdi
leaq -0x1a8(%rbp), %rax
cmpq %rax, %rdi
movq %rbx, %r13
je 0x3cd5
callq 0x21f0
leaq -0x188(%rbp), %rax
movq %rax, -0x198(%rbp)
movq %r13, %rdi
leaq 0x2464(%rip), %rsi      # 0x6151
leaq 0x246b(%rip), %rdx      # 0x615f
callq 0x4210
movq %r15, %rbx
movq -0xa0(%rbp), %rsi
addq %r12, %rsi
movq %r13, %rdi
leaq -0x4d0(%rbp), %rdx
callq 0x336c
movq %r14, %r15
movq -0x198(%rbp), %rdi
leaq -0x188(%rbp), %rax
cmpq %rax, %rdi
je 0x3d30
callq 0x21f0
leaq -0x270(%rbp), %rdi
movq %rbx, %rsi
callq 0x2b9a
leaq -0x168(%rbp), %rax
movq %rax, -0x178(%rbp)
movq %r15, %rdi
leaq 0x2401(%rip), %rsi      # 0x6158
leaq 0x2401(%rip), %rdx      # 0x615f
callq 0x4210
movq %r15, %rdi
movq %rbx, %rsi
leaq -0x4d0(%rbp), %rdx
callq 0x336c
movq -0x178(%rbp), %rdi
leaq -0x168(%rbp), %rax
cmpq %rax, %rdi
movq -0x38(%rbp), %r14
je 0x3d91
callq 0x21f0
addq $0x18, %r12
decq %r14
movq %r14, %rax
jne 0x3c59
leaq -0x4d0(%rbp), %rbx
movq %rbx, %rdi
callq 0x2290
leaq -0x250(%rbp), %rdi
callq 0x2cce
movq -0x130(%rbp), %rdi
leaq -0x120(%rbp), %rax
cmpq %rax, %rdi
je 0x3dd4
callq 0x21f0
movq 0x51fd(%rip), %rax      # 0x8fd8
movq (%rax), %r14
movq 0x18(%rax), %r15
leaq -0x4c8(%rbp), %rdi
movq %r14, -0x8(%rdi)
movq -0x18(%r14), %rax
movq %r15, -0x4d0(%rbp,%rax)
callq 0x21c0
movl $0xf8, %r12d
addq %r12, %rbx
movq %rbx, %rdi
callq 0x20a0
leaq -0x8c8(%rbp), %rdi
movq %r14, -0x8(%rdi)
movq -0x18(%r14), %rax
movq %r15, -0x8d0(%rbp,%rax)
callq 0x21c0
leaq -0x8d0(%rbp), %rdi
addq %r12, %rdi
callq 0x20a0
leaq -0x6c8(%rbp), %rdi
movq %r14, -0x8(%rdi)
movq -0x18(%r14), %rax
movq %r15, -0x6d0(%rbp,%rax)
callq 0x21c0
leaq -0x6d0(%rbp), %rdi
addq %r12, %rdi
callq 0x20a0
movq -0xc0(%rbp), %rdi
testq %rdi, %rdi
je 0x3e76
callq 0x21f0
movq -0x80(%rbp), %rdi
testq %rdi, %rdi
je 0x3e84
callq 0x21f0
movq -0x100(%rbp), %rdi
testq %rdi, %rdi
je 0x3e95
callq 0x21f0
leaq -0xa0(%rbp), %rdi
callq 0x41bc
leaq -0x60(%rbp), %rdi
callq 0x41bc
movq -0xe0(%rbp), %rdi
testq %rdi, %rdi
je 0x3ebb
callq 0x21f0
leaq -0xad8(%rbp), %rdi
callq 0x2060
xorl %eax, %eax
addq $0xac8, %rsp            # imm = 0xAC8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x208, %edi            # imm = 0x208
callq 0x2220
movq %rax, -0x48(%rbp)
movq 0x38(%r15), %rsi
leaq -0x2b0(%rbp), %rdi
leaq -0x270(%rbp), %rdx
callq 0x20c0
leaq -0x2b0(%rbp), %rsi
movq -0x48(%rbp), %rdi
callq 0x514a
leaq -0x2a0(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3f25
callq 0x21f0
movq 0x40(%r15), %rsi
leaq -0x4d0(%rbp), %rdi
movl $0x10, %edx
callq 0x2040
movb $0x1, %al
movl %eax, -0x3c(%rbp)
movl $0x0, -0x40(%rbp)
jmp 0x36be
movq 0x38(%r15), %rsi
leaq -0x4d0(%rbp), %rdi
movl $0x10, %edx
callq 0x2040
movb $0x1, %al
movl %eax, -0x40(%rbp)
movl $0x0, -0x3c(%rbp)
jmp 0x36be
leaq 0x217e(%rip), %rdi      # 0x60f6
leaq 0x219e(%rip), %rsi      # 0x611d
leaq 0x21ad(%rip), %rcx      # 0x6133
movl $0x52, %edx
callq 0x2150
leaq 0x215f(%rip), %rdi      # 0x60f6
leaq 0x217f(%rip), %rsi      # 0x611d
leaq 0x218e(%rip), %rcx      # 0x6133
movl $0x97, %edx
callq 0x2150
movq %rax, %r14
leaq -0x2a0(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3fcc
callq 0x21f0
jmp 0x3fcc
movq %rax, %r14
movq -0x48(%rbp), %rdi
jmp 0x40ec
jmp 0x40c1
movq %rax, %r14
jmp 0x40fd
movq %rax, %r14
jmp 0x4109
movq %rax, %r14
jmp 0x4115
movq %rax, %r14
leaq -0x2c0(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x4177
callq 0x21f0
jmp 0x4177
movq %rax, %r14
jmp 0x4177
movq %rax, %r14
jmp 0x40f1
jmp 0x40ca
jmp 0x40c1
jmp 0x40ca
movq %rax, %r14
movq -0x1b8(%rbp), %rdi
leaq -0x1a8(%rbp), %rax
jmp 0x40af
jmp 0x40ca
movq %rax, %r14
movq -0x198(%rbp), %rdi
leaq -0x188(%rbp), %rax
jmp 0x40af
movq %rax, %r14
movq -0x178(%rbp), %rdi
leaq -0x168(%rbp), %rax
jmp 0x40af
jmp 0x40ca
jmp 0x40ca
movq %rax, %r14
movq -0x218(%rbp), %rdi
leaq -0x208(%rbp), %rax
jmp 0x40af
jmp 0x40ca
movq %rax, %r14
movq -0x1f8(%rbp), %rdi
leaq -0x1e8(%rbp), %rax
jmp 0x40af
jmp 0x40ca
movq %rax, %r14
movq -0x1d8(%rbp), %rdi
leaq -0x1c8(%rbp), %rax
cmpq %rax, %rdi
je 0x40cd
callq 0x21f0
jmp 0x40cd
jmp 0x40ca
jmp 0x40ca
jmp 0x40ca
movq %rax, %r14
jmp 0x40d9
jmp 0x40ca
fstp %st(0)
movq %rax, %r14
leaq -0x250(%rbp), %rdi
callq 0x2cce
leaq -0x120(%rbp), %rax
movq -0x130(%rbp), %rdi
cmpq %rax, %rdi
je 0x40f1
callq 0x21f0
leaq -0x4d0(%rbp), %rdi
callq 0x22b0
leaq -0x8d0(%rbp), %rdi
callq 0x22b0
leaq -0x6d0(%rbp), %rdi
callq 0x22b0
movq -0xc0(%rbp), %rdi
testq %rdi, %rdi
je 0x4126
callq 0x21f0
movq -0x80(%rbp), %rdi
testq %rdi, %rdi
je 0x4134
callq 0x21f0
movq -0x100(%rbp), %rdi
testq %rdi, %rdi
je 0x4145
callq 0x21f0
leaq -0xa0(%rbp), %rdi
callq 0x41bc
leaq -0x60(%rbp), %rdi
callq 0x41bc
movq -0xe0(%rbp), %rdi
testq %rdi, %rdi
je 0x416b
callq 0x21f0
leaq -0xad8(%rbp), %rdi
callq 0x2060
movq %r14, %rdi
callq 0x2340
nop