// File: /workspace/github_c_makefile_star2_O1/soso7885[P]OPCUA_example/demo_src/server.c
// Function: main
int main(int argc, char** argv) {
    signal(SIGINT, stopHandler); /* catches ctrl-c */
#ifdef UA_ENABLE_MULTITHREADING
    pthread_rwlock_init(&writeLock, 0);
#endif

    UA_ServerNetworkLayer nl = UA_ServerNetworkLayerTCP(UA_ConnectionConfig_standard, 16664);
    UA_ServerConfig config = UA_ServerConfig_standard;
    config.serverCertificate = loadCertificate();
    config.networkLayers = &nl;
    config.networkLayersSize = 1;
    UA_Server *server = UA_Server_new(config);

    // add node with the datetime data source
    UA_DataSource dateDataSource = (UA_DataSource) {.handle = NULL, .read = readTimeData, .write = NULL};
    UA_VariableAttributes v_attr;
    UA_VariableAttributes_init(&v_attr);
    v_attr.description = UA_LOCALIZEDTEXT("en_US","current time");
    v_attr.displayName = UA_LOCALIZEDTEXT("en_US","current time");
    const UA_QualifiedName dateName = UA_QUALIFIEDNAME(1, "current time");
    UA_NodeId dataSourceId;
    UA_Server_addDataSourceVariableNode(server, UA_NODEID_NULL,
                                        UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
                                        UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), dateName,
                                        UA_NODEID_NULL, v_attr, dateDataSource, &dataSourceId);

#ifndef _WIN32
    /* cpu temperature monitoring for linux machines */
    const char *temperatureFileName = "/sys/class/thermal/thermal_zone0/temp"; // RaspberryPi
    // const char *temperatureFileName = "/sys/class/hwmon/hwmon0/device/temp1_input"; // Beaglebone
    // const char *temperatureFileName = "/sys/class/thermal/thermal_zone3/temp"; // Intel Edison Alternative 1
    // const char *temperatureFileName = "/sys/class/thermal/thermal_zone4/temp"; // Intel Edison Alternative 2
    if((temperatureFile = fopen(temperatureFileName, "r"))) {
        // add node with the data source
        UA_DataSource temperatureDataSource = (UA_DataSource) {
            .handle = NULL, .read = readTemperature, .write = NULL};
        const UA_QualifiedName tempName = UA_QUALIFIEDNAME(1, "cpu temperature");
        UA_VariableAttributes_init(&v_attr);
        v_attr.description = UA_LOCALIZEDTEXT("en_US","temperature");
        v_attr.displayName = UA_LOCALIZEDTEXT("en_US","temperature");
        UA_Server_addDataSourceVariableNode(server, UA_NODEID_NULL,
                                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
                                            UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), tempName,
                                            UA_NODEID_NULL, v_attr, temperatureDataSource, NULL);
    }

    /* LED control for rpi */
    if(access("/sys/class/leds/led0/trigger", F_OK ) != -1 ||
       access("/sys/class/leds/led0/brightness", F_OK ) != -1) {
        if((triggerFile = fopen("/sys/class/leds/led0/trigger", "w")) &&
           (ledFile = fopen("/sys/class/leds/led0/brightness", "w"))) {
            //setting led mode to manual
            fprintf(triggerFile, "%s", "none");
            fflush(triggerFile);

            //turning off led initially
            fprintf(ledFile, "%s", "1");
            fflush(ledFile);

            // add node with the LED status data source
            UA_DataSource ledStatusDataSource = (UA_DataSource) {
                .handle = NULL, .read = readLedStatus, .write = writeLedStatus};
            UA_VariableAttributes_init(&v_attr);
            v_attr.description = UA_LOCALIZEDTEXT("en_US","status LED");
            v_attr.displayName = UA_LOCALIZEDTEXT("en_US","status LED");
            const UA_QualifiedName statusName = UA_QUALIFIEDNAME(0, "status LED");
            UA_Server_addDataSourceVariableNode(server, UA_NODEID_NULL,
                                                UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
                                                UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), statusName,
                                                UA_NODEID_NULL, v_attr, ledStatusDataSource, NULL);
        } else
            UA_LOG_WARNING(logger, UA_LOGCATEGORY_USERLAND,
                           "[Raspberry Pi] LED file exist, but is not accessible (try to run server with sudo)");
    }
#endif

    // add a static variable node to the adresspace
    UA_VariableAttributes myVar;
    UA_VariableAttributes_init(&myVar);
    myVar.description = UA_LOCALIZEDTEXT("en_US", "the answer");
    myVar.displayName = UA_LOCALIZEDTEXT("en_US", "the answer");
    UA_Int32 myInteger = 42;
    UA_Variant_setScalarCopy(&myVar.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
    const UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "the answer");
    const UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "the.answer");
    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
    /* Instantiation Callback can be used when a typeDefinition creates new nodes under this added one.
     * The method will be called for each created node.
     */
    UA_InstantiationCallback theAnswerCallback = {.method=instantiationHandle, .handle=(void*) server};
    UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId, parentReferenceNodeId,
                              myIntegerName, UA_NODEID_NULL, myVar, &theAnswerCallback, NULL);
    UA_Variant_deleteMembers(&myVar.value);

    /**************/
    /* Demo Nodes */
    /**************/

#define DEMOID 50000
    UA_ObjectAttributes object_attr;
    UA_ObjectAttributes_init(&object_attr);
    object_attr.description = UA_LOCALIZEDTEXT("en_US","Demo");
    object_attr.displayName = UA_LOCALIZEDTEXT("en_US","Demo");
    UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, DEMOID),
                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
                            UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), UA_QUALIFIEDNAME(1, "Demo"),
                            UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE), object_attr, NULL, NULL);

#define SCALARID 50001
    object_attr.description = UA_LOCALIZEDTEXT("en_US","Scalar");
    object_attr.displayName = UA_LOCALIZEDTEXT("en_US","Scalar");
    UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, SCALARID),
                            UA_NODEID_NUMERIC(1, DEMOID), UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
                            UA_QUALIFIEDNAME(1, "Scalar"),
                            UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE), object_attr, NULL, NULL);

#define ARRAYID 50002
    object_attr.description = UA_LOCALIZEDTEXT("en_US","Array");
    object_attr.displayName = UA_LOCALIZEDTEXT("en_US","Array");
    UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, ARRAYID),
                            UA_NODEID_NUMERIC(1, DEMOID), UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
                            UA_QUALIFIEDNAME(1, "Array"),
                            UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE), object_attr, NULL, NULL);

#define MATRIXID 50003
    object_attr.description = UA_LOCALIZEDTEXT("en_US","Matrix");
    object_attr.displayName = UA_LOCALIZEDTEXT("en_US","Matrix");
    UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, MATRIXID), UA_NODEID_NUMERIC(1, DEMOID),
                            UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), UA_QUALIFIEDNAME(1, "Matrix"),
                            UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE), object_attr, NULL, NULL);

    UA_UInt32 id = 51000; // running id in namespace 0
    for(UA_UInt32 type = 0; type < UA_TYPES_DIAGNOSTICINFO; type++) {
        if(type == UA_TYPES_VARIANT || type == UA_TYPES_DIAGNOSTICINFO)
            continue;

        UA_VariableAttributes attr;
        UA_VariableAttributes_init(&attr);
        char name[15];
        sprintf(name, "%02d", type);
        attr.displayName = UA_LOCALIZEDTEXT("en_US",name);
        UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME(1, name);

        /* add a scalar node for every built-in type */
        void *value = UA_new(&UA_TYPES[type]);
        UA_Variant_setScalar(&attr.value, value, &UA_TYPES[type]);
        UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, ++id),
                                  UA_NODEID_NUMERIC(1, SCALARID),
                                  UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
                                  qualifiedName, UA_NODEID_NULL, attr, NULL, NULL);
        UA_Variant_deleteMembers(&attr.value);

        /* add an array node for every built-in type */
        UA_Variant_setArray(&attr.value, UA_Array_new(10, &UA_TYPES[type]),
                            10, &UA_TYPES[type]);
        UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, ++id),
                                  UA_NODEID_NUMERIC(1, ARRAYID),
                                  UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
                                  qualifiedName, UA_NODEID_NULL, attr, NULL, NULL);
        UA_Variant_deleteMembers(&attr.value);

        /* add an matrix node for every built-in type */
        void* myMultiArray = UA_Array_new(9, &UA_TYPES[type]);
        attr.value.arrayDimensions = UA_Array_new(2, &UA_TYPES[UA_TYPES_INT32]);
        attr.value.arrayDimensions[0] = 3;
        attr.value.arrayDimensions[1] = 3;
        attr.value.arrayDimensionsSize = 2;
        attr.value.arrayLength = 9;
        attr.value.data = myMultiArray;
        attr.value.type = &UA_TYPES[type];
        UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, ++id),
                                  UA_NODEID_NUMERIC(1, MATRIXID),
                                  UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
                                  qualifiedName, UA_NODEID_NULL, attr, NULL, NULL);
        UA_Variant_deleteMembers(&attr.value);
    }

#ifdef UA_ENABLE_METHODCALLS
    UA_Argument inputArguments;
    UA_Argument_init(&inputArguments);
    inputArguments.arrayDimensionsSize = 0;
    inputArguments.arrayDimensions = NULL;
    inputArguments.dataType = UA_TYPES[UA_TYPES_STRING].typeId;
    inputArguments.description = UA_LOCALIZEDTEXT("en_US", "A String");
    inputArguments.name = UA_STRING("Input an integer");
    inputArguments.valueRank = -1;

    UA_Argument outputArguments;
    UA_Argument_init(&outputArguments);
    outputArguments.arrayDimensionsSize = 0;
    outputArguments.arrayDimensions = NULL;
    outputArguments.dataType = UA_TYPES[UA_TYPES_STRING].typeId;
    outputArguments.description = UA_LOCALIZEDTEXT("en_US", "A String");
    outputArguments.name = UA_STRING("Input an integer");
    outputArguments.valueRank = -1;

    UA_MethodAttributes addmethodattributes;
    UA_MethodAttributes_init(&addmethodattributes);
    addmethodattributes.description = UA_LOCALIZEDTEXT("en_US", "Return a single argument as passed by the caller");
    addmethodattributes.displayName = UA_LOCALIZEDTEXT("en_US", "ping");
    addmethodattributes.executable = true;
    addmethodattributes.userExecutable = true;
    UA_Server_addMethodNode(server, UA_NODEID_NUMERIC(1,62541),
                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
                            UA_QUALIFIEDNAME(1,"ping"), addmethodattributes,
                            &getMonitoredItems, // Call this method
                            (void *) server,    // Pass our server pointer as a handle to the method
                            1, &inputArguments, 1, &outputArguments, NULL);
#endif
   
    // Example for iterating over all nodes referenced by "Objects":
    //printf("Nodes connected to 'Objects':\n=============================\n");
    UA_Server_forEachChildNodeCall(server, UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER), nodeIter, NULL);
  
    // Some easy localization
    UA_LocalizedText objectsName = UA_LOCALIZEDTEXT("de_DE", "Objekte");
    UA_Server_writeDisplayName(server, UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER), objectsName);
  
    //start server
    UA_StatusCode retval = UA_Server_run(server, &running); //blocks until running=false

    //ctrl-c received -> clean up
    UA_Server_delete(server);
    nl.deleteMembers(&nl);

    if(temperatureFile)
        fclose(temperatureFile);

    if(triggerFile) {
        fseek(triggerFile, 0, SEEK_SET);
        //setting led mode to default
        fprintf(triggerFile, "%s", "mmc0");
        fclose(triggerFile);
    }
  
    if(ledFile)
        fclose(ledFile);

#ifdef UA_ENABLE_MULTITHREADING
    pthread_rwlock_destroy(&writeLock);
#endif

    UA_ByteString_deleteMembers(&config.serverCertificate);
    return (int)retval;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x868, %rsp            # imm = 0x868
leaq 0x1452(%rip), %rsi      # 0x37d9
movl $0x2, %edi
callq 0x21a0
movq 0x3c58(%rip), %rax      # 0x5ff0
movl 0x10(%rax), %ecx
leaq -0x730(%rbp), %r14
movl %ecx, 0x10(%r14)
movups (%rax), %xmm0
movaps %xmm0, (%r14)
movl 0x10(%r14), %eax
movl %eax, 0x10(%rsp)
movaps (%r14), %xmm0
movups %xmm0, (%rsp)
leaq -0x440(%rbp), %rbx
movq %rbx, %rdi
movl $0x4118, %esi           # imm = 0x4118
callq 0x20b0
movq 0x3c00(%rip), %rsi      # 0x5fd8
movl $0x160, %edx            # imm = 0x160
movq %r14, %rdi
callq 0x2190
movq 0x3bf4(%rip), %rax      # 0x5fe0
movups (%rax), %xmm0
movaps %xmm0, -0x3d0(%rbp)
leaq 0x1dbf(%rip), %rdi      # 0x41bc
leaq 0x1dc8(%rip), %rsi      # 0x41cc
callq 0x2220
testq %rax, %rax
je 0x2499
movq %rax, %r14
movq %rax, %rdi
xorl %esi, %esi
movl $0x2, %edx
callq 0x21f0
movq %r14, %rdi
callq 0x2180
movq %rax, -0x3d0(%rbp)
movq %rax, %rdi
callq 0x21b0
movq %rax, -0x3c8(%rbp)
testq %rax, %rax
je 0x248f
movq %r14, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x21f0
movq -0x3d0(%rbp), %rdx
movq -0x3c8(%rbp), %rdi
movl $0x1, %esi
movq %r14, %rcx
callq 0x2090
cmpq -0x3d0(%rbp), %rax
jae 0x248f
movl $0x230, %esi            # imm = 0x230
addq 0x3b4d(%rip), %rsi      # 0x5fd0
leaq -0x3d0(%rbp), %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20c0
jmp 0x24a4
callq 0x2050
movl $0x0, (%rax)
movaps -0x3d0(%rbp), %xmm0
leaq -0x730(%rbp), %rsi
movups %xmm0, 0xe0(%rsi)
movq %rbx, 0xf8(%rsi)
movq $0x1, 0xf0(%rsi)
movl $0x2c, %ecx
movq %rsp, %rdi
rep  movsq (%rsi), %es:(%rdi)
callq 0x2030
movq %rax, %r12
leaq -0x5d0(%rbp), %rbx
xorl %r15d, %r15d
movl $0xc8, %edx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x2130
movl $0x5, %r14d
movq %r14, 0x28(%rbx)
leaq 0x1b20(%rip), %r13      # 0x4028
movq %r13, 0x30(%rbx)
movl $0xc, %eax
movq %rax, 0x38(%rbx)
leaq 0x1b12(%rip), %rcx      # 0x402e
movq %rcx, 0x40(%rbx)
movq %r14, 0x8(%rbx)
movq %r13, 0x10(%rbx)
movq %rax, 0x18(%rbx)
movq %rcx, 0x20(%rbx)
movw $0x1, -0x128(%rbp)
movq %rax, -0x120(%rbp)
movq %rcx, -0x118(%rbp)
movw %r15w, -0x308(%rbp)
movabsq $0x5500000000, %rax     # imm = 0x5500000000
movq %rax, -0x304(%rbp)
movw %r15w, -0x2f0(%rbp)
movabsq $0x2300000000, %rax     # imm = 0x2300000000
movq %rax, -0x2ec(%rbp)
leaq 0x78(%rsp), %rdi
movl $0x19, %ecx
movq %rbx, %rsi
rep  movsq (%rsi), %es:(%rdi)
movq 0x37f8(%rip), %rax      # 0x5d88
movq %rax, 0x150(%rsp)
movups 0x37d9(%rip), %xmm0     # 0x5d78
movups %xmm0, 0x140(%rsp)
movq 0x3a12(%rip), %rbx      # 0x5fc0
movq 0x10(%rbx), %rax
movq %rax, 0x70(%rsp)
movups (%rbx), %xmm0
movups %xmm0, 0x60(%rsp)
movq -0x118(%rbp), %rcx
movq %rcx, 0x58(%rsp)
movups -0x128(%rbp), %xmm1
movups %xmm1, 0x48(%rsp)
movq -0x2e0(%rbp), %rcx
movq %rcx, 0x40(%rsp)
movups -0x2f0(%rbp), %xmm1
movups %xmm1, 0x30(%rsp)
movq -0x2f8(%rbp), %rcx
movq %rcx, 0x28(%rsp)
movups -0x308(%rbp), %xmm1
movups %xmm1, 0x18(%rsp)
movq %rax, 0x10(%rsp)
movups %xmm0, (%rsp)
leaq -0x408(%rbp), %rsi
movq %r12, %rdi
callq 0x20a0
leaq 0x1a15(%rip), %rdi      # 0x403b
leaq 0x1b08(%rip), %rsi      # 0x4135
callq 0x2220
movq %rax, 0x3b27(%rip)      # 0x6160
testq %rax, %rax
je 0x277c
movw $0x1, -0x3d0(%rbp)
movq $0xf, -0x3c8(%rbp)
leaq 0x1a04(%rip), %rax      # 0x4061
movq %rax, -0x3c0(%rbp)
leaq -0x5d0(%rbp), %rbx
xorl %r15d, %r15d
movl $0xc8, %edx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x2130
movq %r14, 0x28(%rbx)
movq %r13, 0x30(%rbx)
movl $0xb, %eax
movq %rax, 0x38(%rbx)
leaq 0x1b4c(%rip), %rcx      # 0x41e1
movq %rcx, 0x40(%rbx)
movq %r14, 0x8(%rbx)
movq %r13, 0x10(%rbx)
movq %rax, 0x18(%rbx)
movq %rcx, 0x20(%rbx)
movw %r15w, -0x2d8(%rbp)
movabsq $0x5500000000, %rax     # imm = 0x5500000000
movq %rax, -0x2d4(%rbp)
movw %r15w, -0x2c0(%rbp)
movabsq $0x2300000000, %rax     # imm = 0x2300000000
movq %rax, -0x2bc(%rbp)
leaq 0x78(%rsp), %rdi
movl $0x19, %ecx
movq %rbx, %rsi
movq 0x38d1(%rip), %rbx      # 0x5fc0
rep  movsq (%rsi), %es:(%rdi)
movq 0x36a7(%rip), %rax      # 0x5da0
movq %rax, 0x150(%rsp)
movups 0x3688(%rip), %xmm0     # 0x5d90
movups %xmm0, 0x140(%rsp)
movq 0x10(%rbx), %rax
movq %rax, 0x70(%rsp)
movups (%rbx), %xmm0
movups %xmm0, 0x60(%rsp)
movq -0x3c0(%rbp), %rcx
movq %rcx, 0x58(%rsp)
movups -0x3d0(%rbp), %xmm1
movups %xmm1, 0x48(%rsp)
movq -0x2b0(%rbp), %rcx
movq %rcx, 0x40(%rsp)
movups -0x2c0(%rbp), %xmm1
movups %xmm1, 0x30(%rsp)
movq -0x2c8(%rbp), %rcx
movq %rcx, 0x28(%rsp)
movups -0x2d8(%rbp), %xmm1
movups %xmm1, 0x18(%rsp)
movq %rax, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %r12, %rdi
xorl %esi, %esi
callq 0x20a0
leaq 0x18ee(%rip), %rdi      # 0x4071
xorl %esi, %esi
callq 0x2210
cmpl $-0x1, %eax
movq %r13, %r15
jne 0x27a9
leaq 0x18f5(%rip), %rdi      # 0x408e
xorl %esi, %esi
callq 0x2210
cmpl $-0x1, %eax
je 0x2983
leaq 0x18c1(%rip), %rdi      # 0x4071
leaq 0x18f7(%rip), %rsi      # 0x40ae
callq 0x2220
movq %rax, 0x39a5(%rip)      # 0x6168
testq %rax, %rax
je 0x2962
leaq 0x18bb(%rip), %rdi      # 0x408e
leaq 0x18d4(%rip), %rsi      # 0x40ae
callq 0x2220
movq %rax, 0x398a(%rip)      # 0x6170
testq %rax, %rax
je 0x2962
movq 0x3972(%rip), %rsi      # 0x6168
leaq 0x18b3(%rip), %rdi      # 0x40b0
callq 0x2120
movq 0x395f(%rip), %rdi      # 0x6168
callq 0x21c0
movq 0x395b(%rip), %rsi      # 0x6170
leaq 0x1899(%rip), %rdi      # 0x40b5
callq 0x2120
movq 0x3948(%rip), %rdi      # 0x6170
callq 0x21c0
leaq -0x5d0(%rbp), %rbx
xorl %r14d, %r14d
movl $0xc8, %edx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x2130
movl $0x5, %eax
movq %rax, 0x28(%rbx)
movq %r15, 0x30(%rbx)
movl $0xa, %ecx
movq %rcx, 0x38(%rbx)
leaq 0x1854(%rip), %rdx      # 0x40b7
movq %rdx, 0x40(%rbx)
movq %rax, 0x8(%rbx)
movq %r15, 0x10(%rbx)
movq %rcx, 0x18(%rbx)
movq %rdx, 0x20(%rbx)
movw %r14w, -0x3d0(%rbp)
movq %rcx, -0x3c8(%rbp)
movq %rdx, -0x3c0(%rbp)
movw %r14w, -0x2a8(%rbp)
movabsq $0x5500000000, %rax     # imm = 0x5500000000
movq %rax, -0x2a4(%rbp)
movw %r14w, -0x290(%rbp)
movabsq $0x2300000000, %rax     # imm = 0x2300000000
movq %rax, -0x28c(%rbp)
leaq 0x78(%rsp), %rdi
movl $0x19, %ecx
movq %rbx, %rsi
movq 0x36ed(%rip), %rbx      # 0x5fc0
rep  movsq (%rsi), %es:(%rdi)
movq 0x34db(%rip), %rax      # 0x5db8
movq %rax, 0x150(%rsp)
movups 0x34bc(%rip), %xmm0     # 0x5da8
movups %xmm0, 0x140(%rsp)
movq 0x10(%rbx), %rax
movq %rax, 0x70(%rsp)
movups (%rbx), %xmm0
movups %xmm0, 0x60(%rsp)
movq -0x3c0(%rbp), %rcx
movq %rcx, 0x58(%rsp)
movups -0x3d0(%rbp), %xmm1
movups %xmm1, 0x48(%rsp)
movq -0x280(%rbp), %rcx
movq %rcx, 0x40(%rsp)
movups -0x290(%rbp), %xmm1
movups %xmm1, 0x30(%rsp)
movq -0x298(%rbp), %rcx
movq %rcx, 0x28(%rsp)
movups -0x2a8(%rbp), %xmm1
movups %xmm1, 0x18(%rsp)
movq %rax, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %r12, %rdi
xorl %esi, %esi
callq 0x20a0
jmp 0x2983
movq 0x37e7(%rip), %rcx      # 0x6150
testq %rcx, %rcx
je 0x2983
leaq 0x174d(%rip), %rdx      # 0x40c2
movl $0x3, %edi
movl $0x5, %esi
xorl %eax, %eax
callq *%rcx
movq %r12, %r14
movq %r12, -0x80(%rbp)
leaq -0x508(%rbp), %r12
movl $0xc8, %edx
movq %r12, %rdi
xorl %esi, %esi
callq 0x2130
movl $0x5, %eax
movq %rax, 0x28(%r12)
movq %r15, 0x30(%r12)
movl $0xa, %ecx
movq %rcx, 0x38(%r12)
leaq 0x1755(%rip), %r13      # 0x4115
movq %r13, 0x40(%r12)
movq %rax, 0x8(%r12)
movq %r15, 0x10(%r12)
movq %rcx, 0x18(%r12)
movq %r13, 0x20(%r12)
leaq -0x10c(%rbp), %rsi
movl $0x2a, (%rsi)
leaq -0x4b8(%rbp), %rdi
movq 0x35dc(%rip), %r15      # 0x5fd0
leaq 0xc8(%r15), %rdx
movq %rdx, -0x100(%rbp)
callq 0x2170
leaq 0xff3(%rip), %rax       # 0x3a01
leaq -0x3f0(%rbp), %rcx
movq %rax, (%rcx)
movq %r14, 0x8(%rcx)
leaq -0x3d0(%rbp), %r14
movl $0xc8, %edx
movq %r14, %rdi
movq %r12, %rsi
callq 0x2190
movw $0x1, %r12w
leaq -0x1b0(%rbp), %rax
movw %r12w, -0x50(%rax)
movl $0xa, %esi
movq %rsi, -0x48(%rax)
movq %r13, -0x40(%rax)
movq %rax, %rdx
movabsq $0x5500000000, %r13     # imm = 0x5500000000
xorl %ecx, %ecx
movw %cx, -0xf0(%rbp)
movabsq $0x2300000000, %rax     # imm = 0x2300000000
movq %rax, -0xec(%rbp)
movw %cx, -0x78(%rbp)
movq %r13, -0x74(%rbp)
movw %r12w, -0x40(%rbp)
movl $0x3, -0x3c(%rbp)
movq %rsi, -0x38(%rbp)
leaq 0x1689(%rip), %rax      # 0x4120
movq %rax, -0x30(%rbp)
movq 0x10(%rbx), %rcx
movq %rcx, 0x70(%rsp)
movups (%rbx), %xmm0
movups %xmm0, 0x60(%rsp)
movq -0x40(%rdx), %rcx
movq %rcx, 0x58(%rsp)
movups -0x50(%rdx), %xmm0
movups %xmm0, 0x48(%rsp)
movq -0xe0(%rbp), %rcx
movq %rcx, 0x40(%rsp)
movups -0xf0(%rbp), %xmm0
movups %xmm0, 0x30(%rsp)
movq -0x68(%rbp), %rcx
movq %rcx, 0x28(%rsp)
movups -0x78(%rbp), %xmm0
movups %xmm0, 0x18(%rsp)
movq %rax, 0x10(%rsp)
movups -0x40(%rbp), %xmm0
movups %xmm0, (%rsp)
leaq 0x528(%r15), %rcx
movq -0x80(%rbp), %rbx
movq %rbx, %rdi
movl $0x2, %esi
movq %r14, %rdx
movq %rcx, -0xf8(%rbp)
leaq -0x3f0(%rbp), %r8
xorl %r9d, %r9d
callq 0x21e0
leaq 0x398(%r15), %rsi
leaq -0x4b8(%rbp), %rdi
movq %rsi, -0x90(%rbp)
callq 0x20f0
xorps %xmm0, %xmm0
movaps %xmm0, -0x3e0(%rbp)
xorl %edx, %edx
movq %rdx, (%r14)
movl $0x5, %edi
movq %rdi, 0x8(%r14)
leaq 0x14ce(%rip), %rsi      # 0x4028
movq %rsi, 0x10(%r14)
movl $0x4, %eax
movq %rax, 0x18(%r14)
leaq 0x15bd(%rip), %rcx      # 0x412b
movq %rcx, 0x20(%r14)
movq %rdi, 0x28(%r14)
movq %rsi, 0x30(%r14)
movq %rax, 0x38(%r14)
movq %rcx, 0x40(%r14)
movups %xmm0, 0x48(%r14)
leaq -0x1b0(%rbp), %rdi
movw %dx, -0x50(%rdi)
movabsq $0x3d00000000, %rsi     # imm = 0x3D00000000
movq %rsi, -0x4c(%rdi)
movw %r12w, -0xf0(%rbp)
movq %rax, -0xe8(%rbp)
movq %rcx, -0xe0(%rbp)
movw %dx, -0x78(%rbp)
movabsq $0x2300000000, %rax     # imm = 0x2300000000
movq %rax, -0x74(%rbp)
movw %dx, -0x40(%rbp)
movq %r13, -0x3c(%rbp)
movw %r12w, -0x58(%rbp)
movabsq $0xc35000000000, %rax   # imm = 0xC35000000000
movq %rax, -0x54(%rbp)
movq -0x40(%rdi), %rax
movq %rax, 0x70(%rsp)
movups -0x50(%rdi), %xmm0
movups %xmm0, 0x60(%rsp)
movq -0xe0(%rbp), %rax
movq %rax, 0x58(%rsp)
movups -0xf0(%rbp), %xmm0
movups %xmm0, 0x48(%rsp)
movq -0x68(%rbp), %rax
movq %rax, 0x40(%rsp)
movups -0x78(%rbp), %xmm0
movups %xmm0, 0x30(%rsp)
movq -0x30(%rbp), %rax
movq %rax, 0x28(%rsp)
movups -0x40(%rbp), %xmm0
movups %xmm0, 0x18(%rsp)
movq -0x48(%rbp), %rax
movq %rax, 0x10(%rsp)
movups -0x58(%rbp), %xmm0
movups %xmm0, (%rsp)
leaq 0x1018(%r15), %rcx
movq %rcx, -0x88(%rbp)
leaq -0x3d0(%rbp), %r12
movq %rbx, %rdi
movq %rbx, %r14
movl $0x1, %esi
movq %r12, %rdx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x21e0
xorl %eax, %eax
movq %rax, (%r12)
movl $0x5, %esi
movq %rsi, 0x8(%r12)
leaq 0x13a1(%rip), %rcx      # 0x4028
movq %rcx, 0x10(%r12)
movl $0x6, %edx
movq %rdx, 0x18(%r12)
leaq 0x1493(%rip), %rax      # 0x4130
movq %rax, 0x20(%r12)
movq %rsi, 0x28(%r12)
movq %rcx, 0x30(%r12)
movq %rdx, 0x38(%r12)
movq %rax, 0x40(%r12)
xorps %xmm0, %xmm0
movups %xmm0, 0x48(%r12)
leaq -0x1b0(%rbp), %rbx
movl $0x0, %esi
movw %si, -0x50(%rbx)
movabsq $0x3d00000000, %rcx     # imm = 0x3D00000000
movq %rcx, -0x4c(%rbx)
movw $0x1, %cx
movw %cx, -0xf0(%rbp)
movq %rdx, -0xe8(%rbp)
movq %rax, -0xe0(%rbp)
movw %si, -0x78(%rbp)
movabsq $0x2300000000, %rax     # imm = 0x2300000000
movq %rax, -0x74(%rbp)
movw %cx, -0x40(%rbp)
movw $0x1, %ax
movabsq $0xc35000000000, %rcx   # imm = 0xC35000000000
movq %rcx, -0x3c(%rbp)
movw %ax, -0x58(%rbp)
movabsq $0xc35100000000, %rax   # imm = 0xC35100000000
movq %rax, -0x54(%rbp)
movq -0x40(%rbx), %rax
movq %rax, 0x70(%rsp)
movups -0x50(%rbx), %xmm0
movups %xmm0, 0x60(%rsp)
movq -0xe0(%rbp), %rax
movq %rax, 0x58(%rsp)
movups -0xf0(%rbp), %xmm0
movups %xmm0, 0x48(%rsp)
movq -0x68(%rbp), %rax
movq %rax, 0x40(%rsp)
movups -0x78(%rbp), %xmm0
movups %xmm0, 0x30(%rsp)
movq -0x30(%rbp), %rax
movq %rax, 0x28(%rsp)
movups -0x40(%rbp), %xmm0
movups %xmm0, 0x18(%rsp)
movq -0x48(%rbp), %rax
movq %rax, 0x10(%rsp)
movups -0x58(%rbp), %xmm0
movups %xmm0, (%rsp)
movq %r14, %rdi
movl $0x1, %esi
movq %r12, %rdx
movq -0x88(%rbp), %r14
movq %r14, %rcx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x21e0
xorl %eax, %eax
movq %rax, (%r12)
movl $0x5, %ecx
movq %rcx, 0x8(%r12)
leaq 0x1262(%rip), %rdx      # 0x4028
movq %rdx, 0x10(%r12)
movq %rcx, 0x18(%r12)
leaq 0x1360(%rip), %rax      # 0x4137
movq %rax, 0x20(%r12)
movq %rcx, 0x28(%r12)
movq %rdx, 0x30(%r12)
movq %rcx, 0x38(%r12)
movq %rax, 0x40(%r12)
xorps %xmm0, %xmm0
movups %xmm0, 0x48(%r12)
movl $0x0, %esi
movw %si, -0x50(%rbx)
movabsq $0x3d00000000, %rdx     # imm = 0x3D00000000
movq %rdx, -0x4c(%rbx)
movw $0x1, %dx
movw %dx, -0xf0(%rbp)
movq %rcx, -0xe8(%rbp)
movq %rax, -0xe0(%rbp)
movw %si, -0x78(%rbp)
movabsq $0x2300000000, %rax     # imm = 0x2300000000
movq %rax, -0x74(%rbp)
movw %dx, -0x40(%rbp)
movabsq $0xc35000000000, %rax   # imm = 0xC35000000000
movq %rax, -0x3c(%rbp)
movw %dx, -0x58(%rbp)
movabsq $0xc35200000000, %rax   # imm = 0xC35200000000
movq %rax, -0x54(%rbp)
movq -0x40(%rbx), %rax
movq %rax, 0x70(%rsp)
movups -0x50(%rbx), %xmm0
movups %xmm0, 0x60(%rsp)
movq -0xe0(%rbp), %rax
movq %rax, 0x58(%rsp)
movups -0xf0(%rbp), %xmm0
movups %xmm0, 0x48(%rsp)
movq -0x68(%rbp), %rax
movq %rax, 0x40(%rsp)
movups -0x78(%rbp), %xmm0
movups %xmm0, 0x30(%rsp)
movq -0x30(%rbp), %rax
movq %rax, 0x28(%rsp)
movups -0x40(%rbp), %xmm0
movups %xmm0, 0x18(%rsp)
movq -0x48(%rbp), %rax
movq %rax, 0x10(%rsp)
movups -0x58(%rbp), %xmm0
movups %xmm0, (%rsp)
movq -0x80(%rbp), %rdi
movl $0x1, %esi
movq %r12, %rdx
movq %r14, %rcx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x21e0
xorl %edx, %edx
movq %rdx, (%r12)
movl $0x5, %edi
movq %rdi, 0x8(%r12)
leaq 0x1139(%rip), %rsi      # 0x4028
movq %rsi, 0x10(%r12)
movl $0x6, %ecx
movq %rcx, 0x18(%r12)
leaq 0x1238(%rip), %rax      # 0x413d
movq %rax, 0x20(%r12)
movq %rdi, 0x28(%r12)
movq %rsi, 0x30(%r12)
movq %rcx, 0x38(%r12)
movl $0x6, %esi
movq %rax, 0x40(%r12)
movaps -0x3e0(%rbp), %xmm0
movups %xmm0, 0x48(%r12)
leaq -0x1b0(%rbp), %rcx
movw %dx, -0x50(%rcx)
movl $0x0, %r8d
movabsq $0x3d00000000, %rdx     # imm = 0x3D00000000
movq %rdx, -0x4c(%rcx)
movq %rcx, %rdx
movw $0x1, %di
movw %di, -0xf0(%rbp)
movq %rsi, -0xe8(%rbp)
movq %rax, -0xe0(%rbp)
movw %r8w, -0x78(%rbp)
movabsq $0x2300000000, %rax     # imm = 0x2300000000
movq %rax, -0x74(%rbp)
movw %di, -0x40(%rbp)
movw $0x1, %ax
movabsq $0xc35000000000, %rcx   # imm = 0xC35000000000
movq %rcx, -0x3c(%rbp)
movw %ax, -0x58(%rbp)
movabsq $0xc35300000000, %rax   # imm = 0xC35300000000
movq %rax, -0x54(%rbp)
movq -0x40(%rdx), %rax
movq %rax, 0x70(%rsp)
movups -0x50(%rdx), %xmm0
movups %xmm0, 0x60(%rsp)
movq -0xe0(%rbp), %rax
movq %rax, 0x58(%rsp)
movups -0xf0(%rbp), %xmm0
movups %xmm0, 0x48(%rsp)
movq -0x68(%rbp), %rax
movq %rax, 0x40(%rsp)
movups -0x78(%rbp), %xmm0
movups %xmm0, 0x30(%rsp)
movq -0x30(%rbp), %rax
movq %rax, 0x28(%rsp)
movups -0x40(%rbp), %xmm0
movups %xmm0, 0x18(%rsp)
movq -0x48(%rbp), %rax
movq %rax, 0x10(%rsp)
movups -0x58(%rbp), %xmm0
movups %xmm0, (%rsp)
leaq -0x3d0(%rbp), %rdx
movq -0x80(%rbp), %rdi
movl $0x1, %esi
movq %r14, %rcx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x21e0
movl $0xc738, %ebx           # imm = 0xC738
xorl %r12d, %r12d
cmpq $0x17, %r12
je 0x3468
movl $0xc8, %edx
leaq -0x200(%rbp), %rdi
xorl %esi, %esi
callq 0x2130
leaq -0x137(%rbp), %r13
movq %r13, %rdi
leaq 0x10eb(%rip), %rsi      # 0x4144
movl %r12d, %edx
xorl %eax, %eax
callq 0x2230
movq %r13, %rdi
callq 0x20e0
movq %rax, %r14
movq $0x5, -0x1f8(%rbp)
leaq 0xfa8(%rip), %rax       # 0x4028
movq %rax, -0x1f0(%rbp)
movq %r14, -0x1e8(%rbp)
movq %r13, -0x1e0(%rbp)
movq %r15, %rdi
callq 0x2150
leaq -0x1b0(%rbp), %rdi
movq %rax, %rsi
movq %r15, %rdx
callq 0x2140
movq %rbx, -0x88(%rbp)
movq -0x88(%rbp), %rax
leal 0x1(%rax), %ebx
movl $0xc8, %edx
leaq -0x3d0(%rbp), %rdi
leaq -0x200(%rbp), %rsi
callq 0x2190
movw $0x1, %cx
movw %cx, -0xf0(%rbp)
movq %r14, -0xe8(%rbp)
movq %r14, -0x108(%rbp)
movq %r13, -0xe0(%rbp)
xorl %edx, %edx
movw %dx, -0x78(%rbp)
movabsq $0x2300000000, %rax     # imm = 0x2300000000
movq %rax, -0x74(%rbp)
movw %cx, -0x40(%rbp)
movabsq $0xc35100000000, %rax   # imm = 0xC35100000000
movq %rax, -0x3c(%rbp)
movw %cx, -0x58(%rbp)
movl %edx, -0x54(%rbp)
movl %ebx, -0x50(%rbp)
movq 0x2e91(%rip), %rcx      # 0x5fc0
movq 0x10(%rcx), %rax
movq %rax, 0x70(%rsp)
movups (%rcx), %xmm0
movups %xmm0, 0x60(%rsp)
movq -0xe0(%rbp), %rax
movq %rax, 0x58(%rsp)
movups -0xf0(%rbp), %xmm0
movups %xmm0, 0x48(%rsp)
movq -0x68(%rbp), %rax
movq %rax, 0x40(%rsp)
movups -0x78(%rbp), %xmm0
movups %xmm0, 0x30(%rsp)
movq -0x30(%rbp), %rax
movq %rax, 0x28(%rsp)
movups -0x40(%rbp), %xmm0
movups %xmm0, 0x18(%rsp)
movq -0x48(%rbp), %rax
movq %rax, 0x10(%rsp)
movups -0x58(%rbp), %xmm0
movups %xmm0, (%rsp)
movq -0x80(%rbp), %rdi
movl $0x2, %esi
leaq -0x3d0(%rbp), %rdx
movq -0xf8(%rbp), %r13
movq %r13, %rcx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x21e0
leaq -0x1b0(%rbp), %rbx
movq %rbx, %rdi
movq -0x90(%rbp), %rsi
callq 0x20f0
movl $0xa, %edi
movq %r15, %rsi
callq 0x2060
movl $0xa, %edx
movq %rbx, %rdi
movq %rax, %rsi
movq %r15, %rcx
callq 0x2160
movq -0x88(%rbp), %rax
leal 0x2(%rax), %ebx
movl $0xc8, %edx
leaq -0x3d0(%rbp), %rdi
leaq -0x200(%rbp), %rsi
callq 0x2190
movw $0x1, %cx
movw %cx, -0xf0(%rbp)
movq %r14, -0xe8(%rbp)
leaq -0x137(%rbp), %rax
movq %rax, -0xe0(%rbp)
xorl %edx, %edx
movw %dx, -0x78(%rbp)
movabsq $0x2300000000, %rax     # imm = 0x2300000000
movq %rax, -0x74(%rbp)
movw %cx, -0x40(%rbp)
movabsq $0xc35200000000, %rax   # imm = 0xC35200000000
movq %rax, -0x3c(%rbp)
movw %cx, -0x58(%rbp)
movl %edx, -0x54(%rbp)
movl %ebx, -0x50(%rbp)
movq 0x2d5f(%rip), %rcx      # 0x5fc0
movq 0x10(%rcx), %rax
movq %rax, 0x70(%rsp)
movups (%rcx), %xmm0
movups %xmm0, 0x60(%rsp)
movq -0xe0(%rbp), %rax
movq %rax, 0x58(%rsp)
movups -0xf0(%rbp), %xmm0
movups %xmm0, 0x48(%rsp)
movq -0x68(%rbp), %rax
movq %rax, 0x40(%rsp)
movups -0x78(%rbp), %xmm0
movups %xmm0, 0x30(%rsp)
movq -0x30(%rbp), %rax
movq %rax, 0x28(%rsp)
movups -0x40(%rbp), %xmm0
movups %xmm0, 0x18(%rsp)
movq -0x48(%rbp), %rax
movq %rax, 0x10(%rsp)
movups -0x58(%rbp), %xmm0
movups %xmm0, (%rsp)
movq -0x80(%rbp), %r14
movq %r14, %rdi
movl $0x2, %esi
leaq -0x3d0(%rbp), %rdx
movq %r13, %rcx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x21e0
leaq -0x1b0(%rbp), %rdi
movq -0x90(%rbp), %rsi
callq 0x20f0
movl $0x9, %edi
movq %r15, %rsi
callq 0x2060
movq %rax, %rbx
movl $0x2, %edi
movq -0x100(%rbp), %rsi
callq 0x2060
movq %rax, -0x188(%rbp)
movabsq $0x300000003, %rcx      # imm = 0x300000003
movq %rcx, (%rax)
movq $0x2, -0x190(%rbp)
movq $0x9, -0x1a0(%rbp)
movq %rbx, -0x198(%rbp)
movq -0x88(%rbp), %rbx
movq %r15, -0x1b0(%rbp)
addl $0x3, %ebx
movl $0xc8, %edx
leaq -0x3d0(%rbp), %rdi
leaq -0x200(%rbp), %rsi
callq 0x2190
movw $0x1, %cx
movw %cx, -0xf0(%rbp)
movq -0x108(%rbp), %rax
movq %rax, -0xe8(%rbp)
movabsq $0x5500000000, %r13     # imm = 0x5500000000
leaq -0x137(%rbp), %rax
movq %rax, -0xe0(%rbp)
xorl %edx, %edx
movw %dx, -0x78(%rbp)
movabsq $0x2300000000, %rax     # imm = 0x2300000000
movq %rax, -0x74(%rbp)
movw %cx, -0x40(%rbp)
movabsq $0xc35300000000, %rax   # imm = 0xC35300000000
movq %rax, -0x3c(%rbp)
movw %cx, -0x58(%rbp)
movl %edx, -0x54(%rbp)
movl %ebx, -0x50(%rbp)
movq 0x2bea(%rip), %rcx      # 0x5fc0
movq 0x10(%rcx), %rax
movq %rax, 0x70(%rsp)
movups (%rcx), %xmm0
movups %xmm0, 0x60(%rsp)
movq -0xe0(%rbp), %rax
movq %rax, 0x58(%rsp)
movups -0xf0(%rbp), %xmm0
movups %xmm0, 0x48(%rsp)
movq -0x68(%rbp), %rax
movq %rax, 0x40(%rsp)
movups -0x78(%rbp), %xmm0
movups %xmm0, 0x30(%rsp)
movq -0x30(%rbp), %rax
movq %rax, 0x28(%rsp)
movups -0x40(%rbp), %xmm0
movups %xmm0, 0x18(%rsp)
movq -0x48(%rbp), %rax
movq %rax, 0x10(%rsp)
movups -0x58(%rbp), %xmm0
movups %xmm0, (%rsp)
movq %r14, %rdi
movl $0x2, %esi
leaq -0x3d0(%rbp), %rdx
movq -0xf8(%rbp), %rcx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x21e0
leaq -0x1b0(%rbp), %rdi
movq -0x90(%rbp), %rsi
callq 0x20f0
incq %r12
addq $0x28, %r15
cmpq $0x18, %r12
jne 0x302b
xorps %xmm0, %xmm0
leaq -0x3d0(%rbp), %r8
movaps %xmm0, 0x20(%r8)
movaps %xmm0, 0x40(%r8)
movaps %xmm0, 0x50(%r8)
movaps %xmm0, (%r8)
movaps %xmm0, 0x30(%r8)
movq 0x2b2e(%rip), %rbx      # 0x5fd0
movups 0x1b8(%rbx), %xmm1
movaps %xmm1, 0x10(%r8)
movq 0x1c8(%rbx), %rax
movq %rax, 0x20(%r8)
movl $0x5, %r14d
movq %r14, 0x40(%r8)
leaq 0xb5e(%rip), %r10       # 0x4028
movq %r10, 0x48(%r8)
movl $0x8, %ecx
movq %rcx, 0x50(%r8)
leaq 0xc6b(%rip), %rdx       # 0x4149
movq %rdx, 0x58(%r8)
movl $0x10, %esi
movq %rsi, (%r8)
leaq 0xc61(%rip), %rdi       # 0x4152
movq %rdi, 0x8(%r8)
movl $0xffffffff, %r9d       # imm = 0xFFFFFFFF
movl %r9d, 0x28(%r8)
movaps %xmm0, -0x1e0(%rbp)
movaps %xmm0, -0x1c0(%rbp)
movaps %xmm0, -0x1b0(%rbp)
movaps %xmm0, -0x200(%rbp)
movaps %xmm0, -0x1d0(%rbp)
movaps %xmm1, -0x1f0(%rbp)
movq %rax, -0x1e0(%rbp)
movq %r14, -0x1c0(%rbp)
movq %r10, -0x1b8(%rbp)
movq %rcx, -0x1b0(%rbp)
movq %rdx, -0x1a8(%rbp)
movq %rsi, -0x200(%rbp)
movq %rdi, -0x1f8(%rbp)
movl %r9d, -0x1d8(%rbp)
leaq -0xf0(%rbp), %rsi
movaps %xmm0, 0x20(%rsi)
movaps %xmm0, 0x30(%rsi)
movaps %xmm0, 0x40(%rsi)
movaps %xmm0, (%rsi)
movaps %xmm0, 0x10(%rsi)
xorl %r15d, %r15d
movq %r15, 0x50(%rsi)
movq %r14, 0x28(%rsi)
movq %r10, 0x30(%rsi)
movq $0x30, 0x38(%rsi)
leaq 0xbca(%rip), %rax       # 0x4163
movq %rax, 0x40(%rsi)
movq %r14, 0x8(%rsi)
movq %r10, 0x10(%rsi)
movl $0x4, %eax
movq %rax, 0x18(%rsi)
leaq 0xbdf(%rip), %rdx       # 0x4194
movq %rdx, 0x20(%rsi)
movw $0x101, 0x50(%rsi)      # imm = 0x101
movw $0x1, %cx
movw %cx, -0x278(%rbp)
movabsq $0xf44d00000000, %rdi   # imm = 0xF44D00000000
movq %rdi, -0x274(%rbp)
movw %r15w, -0x260(%rbp)
movq %r13, -0x25c(%rbp)
movw %r15w, -0x248(%rbp)
movabsq $0x2f00000000, %rdi     # imm = 0x2F00000000
movq %rdi, -0x244(%rbp)
movw %cx, -0x230(%rbp)
movq %rax, -0x228(%rbp)
movq %rdx, -0x220(%rbp)
leaq 0x60(%rsp), %rdi
movl $0xb, %ecx
rep  movsq (%rsi), %es:(%rdi)
movq %rdx, 0x58(%rsp)
movups -0x230(%rbp), %xmm0
movups %xmm0, 0x48(%rsp)
movq -0x238(%rbp), %rax
movq %rax, 0x40(%rsp)
movups -0x248(%rbp), %xmm0
movups %xmm0, 0x30(%rsp)
movq -0x250(%rbp), %rax
movq %rax, 0x28(%rsp)
movups -0x260(%rbp), %xmm0
movups %xmm0, 0x18(%rsp)
movq -0x268(%rbp), %rax
movq %rax, 0x10(%rsp)
movups -0x278(%rbp), %xmm0
movups %xmm0, (%rsp)
movq %r15, 0xc0(%rsp)
leaq -0x200(%rbp), %rax
movq %rax, 0xb8(%rsp)
leaq 0x38b(%rip), %rsi       # 0x3a26
movl $0x1, %ecx
movl $0x1, %r9d
movq -0x80(%rbp), %r12
movq %r12, %rdi
movq %r12, %rdx
callq 0x2040
movw %r15w, -0x218(%rbp)
movq %r13, -0x214(%rbp)
movq -0x208(%rbp), %rax
movq %rax, 0x10(%rsp)
movups -0x218(%rbp), %xmm0
movups %xmm0, (%rsp)
leaq 0x38a(%rip), %rsi       # 0x3a6c
movq %r12, %rdi
xorl %edx, %edx
callq 0x20d0
leaq -0x78(%rbp), %r8
movq %r14, (%r8)
leaq 0xa9f(%rip), %rax       # 0x4199
movq %rax, 0x8(%r8)
movq $0x7, 0x10(%r8)
leaq 0xa92(%rip), %rax       # 0x419f
movq %rax, 0x18(%r8)
leaq -0x40(%rbp), %rsi
movw %r15w, (%rsi)
movq %r13, 0x4(%rsi)
addq $0x320, %rbx            # imm = 0x320
movq %r12, %rdi
movl $0x4, %edx
movq %rbx, %rcx
callq 0x2260
leaq 0x2a0d(%rip), %rsi      # 0x6148
movq %r12, %rdi
callq 0x21d0
movl %eax, %ebx
movq %r12, %rdi
callq 0x2250
leaq -0x440(%rbp), %rdi
callq *0x30(%rdi)
movq 0x2a02(%rip), %rdi      # 0x6160
testq %rdi, %rdi
je 0x3768
callq 0x20c0
movq 0x29f9(%rip), %rdi      # 0x6168
testq %rdi, %rdi
je 0x379c
xorl %esi, %esi
xorl %edx, %edx
callq 0x21f0
movq 0x29e4(%rip), %rsi      # 0x6168
leaq 0xa1c(%rip), %rdi       # 0x41a7
callq 0x2120
movq 0x29d1(%rip), %rdi      # 0x6168
callq 0x20c0
movq 0x29cd(%rip), %rdi      # 0x6170
testq %rdi, %rdi
je 0x37ad
callq 0x20c0
movl $0x230, %esi            # imm = 0x230
addq 0x2817(%rip), %rsi      # 0x5fd0
leaq -0x650(%rbp), %rdi
callq 0x20f0
movl %ebx, %eax
addq $0x868, %rsp            # imm = 0x868
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq