diff --git a/GH Injector Library/Error.h b/GH Injector Library/Error.h index 9e82bc5..c8ce787 100644 --- a/GH Injector Library/Error.h +++ b/GH Injector Library/Error.h @@ -148,6 +148,7 @@ #define SR_NTCTE_ERR_SHELLCODE_SETUP_FAIL 0x1010000B //shellcode : - : argument passed to the shellcode is 0 #define SR_NTCTE_ERR_RPM_FAIL 0x1010000C //ReadProcessMemory : win32 error : reading the results of the shellcode failed #define SR_NTCTE_ERR_CANT_FIND_THREAD 0x1010000D //internal error : - : ProcessInfo class failed to resolve information about the new thread +#define SR_NTCTE_ERR_NTQIT_FAIL 0x1010000E //NtQueryInformationThread : NTSTATUS : failed to get THREAD_BASIC_INFORMATION /////////////// diff --git a/GH Injector Library/FakeVEH WOW64.cpp b/GH Injector Library/FakeVEH WOW64.cpp index 43e7415..71664b1 100644 --- a/GH Injector Library/FakeVEH WOW64.cpp +++ b/GH Injector Library/FakeVEH WOW64.cpp @@ -22,75 +22,80 @@ DWORD SR_FakeVEH_WOW64(HANDLE hTargetProc, f_Routine_WOW64 pRoutine, DWORD pArg, { SR_REMOTE_DATA_BUFFER_VEH_86 - 0x55, // + 0x00 -> push ebp ; x86 stack frame creation + 0x55, // + 0x00 -> push ebp ; x86 stack frame creation 0x8B, 0xEC, // + 0x01 -> mov ebp, esp - 0x8B, 0x4D, 0x08, // + 0x03 -> mov ecx, [ebp + 0x08] ; move ExceptionInfo pointer into ecx - 0x85, 0xC9, // + 0x06 -> test ecx, ecx ; check if ExceptionInfo pointer is non-zero - 0x74, 0x6D, // + 0x08 -> je 0x77 ; jump if nullptr + 0x8B, 0x4D, 0x08, // + 0x03 -> mov ecx, [ebp + 0x08] ; move ExceptionInfo pointer into ecx + 0x85, 0xC9, // + 0x06 -> test ecx, ecx ; check if ExceptionInfo pointer is non-zero + 0x0F, 0x84, 0x7D, 0x00, 0x00, 0x00, // + 0x08 -> je 0x8B ; jump if nullptr - 0x8B, 0x09, // + 0x0A -> mov ecx, [ecx] ; move EXCEPTION_POINTERS::ExceptionRecord into ecx - 0x85, 0xC9, // + 0x0C -> test ecx, ecx ; check if ExceptionRecord is non-zero - 0x74, 0x67, // + 0x0E -> je 0x77 ; jump if nullptr + 0x8B, 0x09, // + 0x0D -> mov ecx, [ecx] ; move EXCEPTION_POINTERS::ExceptionRecord into ecx + 0x85, 0xC9, // + 0x10 -> test ecx, ecx ; check if ExceptionRecord is non-zero + 0x74, 0x77, // + 0x12 -> je 0x8B ; jump if nullptr - 0x81, 0x39, 0x01, 0x00, 0x00, 0x80, // + 0x10 -> cmp [ecx], 0x80000001 ; check if ExceptionRecord::ExceptionCode matches EXCEPTION_GUARD_PAGE - 0x75, 0x5F, // + 0x16 -> jne 0x77 ; jump if not equal + 0x81, 0x39, 0x01, 0x00, 0x00, 0x80, // + 0x14 -> cmp [ecx], 0x80000001 ; check if ExceptionRecord::ExceptionCode matches EXCEPTION_GUARD_PAGE + 0x75, 0x6F, // + 0x1A -> jne 0x8B ; jump if not equal - 0x53, // + 0x18 -> push ebx ; push ebx on stack (non volatile) - 0xBB, 0x00, 0x00, 0x00, 0x00, // + 0x19 (+ 0x1A) -> mov ebx, 0x00000000 ; load pData into ebx + 0x53, // + 0x1C -> push ebx ; push ebx on stack (non volatile) + 0xBB, 0x00, 0x00, 0x00, 0x00, // + 0x1D (+ 0x1E) -> mov ebx, 0x00000000 ; load pData into ebx - 0x80, 0x3B, 0x00, // + 0x1E -> cmp byte ptr [ebx], 0 ; test if SR_REMOTE_DATA_VEH::Data::State is equal to SR_RS_ExecutionPending - 0x75, 0x53, // + 0x22 -> jne 0x76 ; jump if not equal + 0x80, 0x3B, 0x00, // + 0x22 -> cmp byte ptr [ebx], 0 ; test if SR_REMOTE_DATA_VEH::Data::State is equal to SR_RS_ExecutionPending + 0x75, 0x63, // + 0x25 -> jne 0x8A ; jump if not equal - 0xC6, 0x03, 0x01, // + 0x23 -> mov byte ptr [ebx], 1 ; set SR_REMOTE_DATA_VEH::Data::State to SR_RS_Executing + 0xC6, 0x03, 0x01, // + 0x27 -> mov byte ptr [ebx], 1 ; set SR_REMOTE_DATA_VEH::Data::State to SR_RS_Executing - 0x83, 0x7B, 0x18, 0x00, // + 0x26 -> cmp dword ptr [ebx + 0x18], 0 ; check if SR_REMOTE_DATA_VEH::pLdrProtectMrdata is non-zero - 0x74, 0x05, // + 0x2A -> je 0x31 ; jump if nullptr - 0x6A, 0x00, // + 0x2C -> push 0 ; push FALSE on the stack - 0xFF, 0x53, 0x18, // + 0x2E -> call dword ptr [ebx + 0x18] ; call LdrProtectMrdata to make LdrpVectorHandlerList writeable + 0x80, 0x7B, 0x24, 0x01, // + 0x2A -> cmp byte ptr [ebx + 0x24], 1 : test if SR_REMOTE_DATA::bRemoveVEHBit is set + 0x75, 0x10, // + 0x2E -> jne 0x40 : jump if not equal + 0x64, 0xA1, 0x30, 0x00, 0x00, 0x00, // + 0x30 -> mov eax, fs:[0x30] : mov PEB pointer into ecx + 0x83, 0x70, 0x28, 0x04, // + 0x36 -> xor dword ptr [ecx + 0x28], 0x04 : remove PEB->ProcessUsingVEH bit - 0x8B, 0x53, 0x1C, // + 0x31 -> mov edx, [ebx + 0x1C] ; move &LdrpVectorHandlerList.List (head) into edx - 0x8B, 0x0A, // + 0x34 -> mov ecx, [edx] ; move head->Flink into ecx (current) + 0x83, 0x7B, 0x18, 0x00, // + 0x3A -> cmp dword ptr [ebx + 0x18], 0 ; check if SR_REMOTE_DATA_VEH::pLdrProtectMrdata is non-zero + 0x74, 0x05, // + 0x3E -> je 0x45 ; jump if nullptr + 0x6A, 0x00, // + 0x40 -> push 0 ; push FALSE on the stack + 0xFF, 0x53, 0x18, // + 0x42 -> call dword ptr [ebx + 0x18] ; call LdrProtectMrdata to make LdrpVectorHandlerList writeable - 0x39, 0xD1, // + 0x36 -> cmp ecx, edx ; compare current, head - 0x74, 0x13, // + 0x38 -> je 0x4D ; exit loop if equal (end of list) - 0x3B, 0x4B, 0x20, // + 0x3A -> cmp ecx, [ebx + 0x20] ; compare current to SR_REMOTE_DATA_VEH::pFakeEntry - 0x74, 0x04, // + 0x3D -> je 0x43 ; break loop if equal (found entry) - 0x8B, 0x09, // + 0x3F -> mov ecx, [ecx] ; set current to current->Flink - 0xEB, 0xF3, // + 0x41 -> jmp 0x36 ; jmp to the start of the loop + 0x8B, 0x53, 0x1C, // + 0x45 -> mov edx, [ebx + 0x1C] ; move &LdrpVectorHandlerList.List (head) into edx + 0x8B, 0x0A, // + 0x48 -> mov ecx, [edx] ; move head->Flink into ecx (current) - 0x8B, 0x01, // + 0x43 -> mov eax, [ecx] ; store current->Flink in eax - 0x8B, 0x51, 0x04, // + 0x45 -> mov edx, [ecx + 0x04] ; store current->Blink in edx - 0x89, 0x02, // + 0x48 -> mov [edx], eax ; current->Blink->Flink = current->Fink - 0x89, 0x50, 0x04, // + 0x4A -> mov [eax + 0x04], edx ; current->Flink->Blink = current->Blink + 0x39, 0xD1, // + 0x4A -> cmp ecx, edx ; compare current, head + 0x74, 0x13, // + 0x4C -> je 0x61 ; exit loop if equal (end of list) + 0x3B, 0x4B, 0x20, // + 0x4E -> cmp ecx, [ebx + 0x20] ; compare current, SR_REMOTE_DATA_VEH::pFakeEntry + 0x74, 0x04, // + 0x51 -> je 0x57 ; break loop if equal (found entry) + 0x8B, 0x09, // + 0x53 -> mov ecx, [ecx] ; set current to current->Flink + 0xEB, 0xF3, // + 0x55 -> jmp 0x4A ; jmp to the start of the loop - 0x83, 0x7B, 0x18, 0x00, // + 0x4D -> cmp dword ptr [ebx + 0x18], 0 ; check if SR_REMOTE_DATA_VEH::pLdrProtectMrdata is non-zero - 0x74, 0x05, // + 0x51 -> je 0x48 ; jump if nullptr - 0x6A, 0x01, // + 0x53 -> push 1 ; push TRUE on the stack - 0xFF, 0x53, 0x18, // + 0x55 -> call dword ptr [ebx + 0x18] ; call LdrProtectMrdata to protect LdrpVectorHandlerList + 0x8B, 0x01, // + 0x57 -> mov eax, [ecx] ; store current->Flink in eax + 0x8B, 0x51, 0x04, // + 0x59 -> mov edx, [ecx + 0x04] ; store current->Blink in edx + 0x89, 0x02, // + 0x5C -> mov [edx], eax ; current->Blink->Flink = current->Fink + 0x89, 0x50, 0x04, // + 0x5E -> mov [eax + 0x04], edx ; current->Flink->Blink = current->Blink - 0xFF, 0x73, 0x0C, // + 0x58 -> push [ebx + 0x0C] ; push pArg - 0xFF, 0x53, 0x10, // + 0x5B -> call dword ptr [ebx + 0x10] ; call pRoutine - 0x89, 0x43, 0x04, // + 0x5E -> mov [ebx + 0x04], eax ; store returned value + 0x83, 0x7B, 0x18, 0x00, // + 0x61 -> cmp dword ptr [ebx + 0x18], 0 ; check if SR_REMOTE_DATA_VEH::pLdrProtectMrdata is non-zero + 0x74, 0x05, // + 0x65 -> je 0x6C ; jump if nullptr + 0x6A, 0x01, // + 0x67 -> push 1 ; push TRUE on the stack + 0xFF, 0x53, 0x18, // + 0x69 -> call dword ptr [ebx + 0x18] ; call LdrProtectMrdata to protect LdrpVectorHandlerList - 0x64, 0xA1, 0x18, 0x00, 0x00, 0x00, // + 0x61 -> mov eax, fs:[0x18] ; GetLastError - 0x8B, 0x40, 0x34, // + 0x67 -> mov eax, [eax + 0x34] - 0x89, 0x43, 0x08, // + 0x6A -> mov [ebx + 0x08], eax ; store in SR_REMOTE_DATA_VEH::Data::LastWin32Error + 0xFF, 0x73, 0x0C, // + 0x6C -> push [ebx + 0x0C] ; push pArg + 0xFF, 0x53, 0x10, // + 0x6F -> call dword ptr [ebx + 0x10] ; call pRoutine + 0x89, 0x43, 0x04, // + 0x72 -> mov [ebx + 0x04], eax ; store returned value - 0xC6, 0x03, 0x02, // + 0x6D -> mov byte ptr [ebx], 2 ; set SR_REMOTE_DATA_VEH::Data::State to SR_RS_ExecutionFinished + 0x64, 0xA1, 0x18, 0x00, 0x00, 0x00, // + 0x75 -> mov eax, fs:[0x18] ; GetLastError + 0x8B, 0x40, 0x34, // + 0x7B -> mov eax, [eax + 0x34] + 0x89, 0x43, 0x08, // + 0x7E -> mov [ebx + 0x08], eax ; store in SR_REMOTE_DATA_VEH::Data::LastWin32Error - 0x83, 0xC8, 0xFF, // + 0x70 -> or eax, -1 ; set eax to EXCEPTION_CONTINUE_EXECUTION - 0x5B, // + 0x73 -> pop ebx ; restore ebx - 0xEB, 0x03, // + 0x75 -> jmp 0x79 ; jump to epilogue + 0xC6, 0x03, 0x02, // + 0x81 -> mov byte ptr [ebx], 2 ; set SR_REMOTE_DATA_VEH::Data::State to SR_RS_ExecutionFinished - 0x5B, // + 0x76 -> pop ebx ; restore ebx - 0x31, 0xC0, // + 0x77 -> xor eax, eax ; set eax to EXCEPTION_CONTINUE_SEARCH + 0x83, 0xC8, 0xFF, // + 0x84 -> or eax, -1 ; set eax to EXCEPTION_CONTINUE_EXECUTION + 0x5B, // + 0x87 -> pop ebx ; restore ebx + 0xEB, 0x03, // + 0x88 -> jmp 0x8D ; jump to epilogue - 0x5D, // + 0x79 -> pop ebp ; x86 __stdcall epilogue - 0xC2, 0x04, 0x00 // + 0x7A -> ret 0x04 - }; // SIZE = 0x7D (+ sizeof(SR_REMOTE_DATA_VEH_WOW64)) + 0x5B, // + 0x8A -> pop ebx ; restore ebx + 0x31, 0xC0, // + 0x8B -> xor eax, eax ; set eax to EXCEPTION_CONTINUE_SEARCH - *ReCa(Shellcode + 0x1A + sizeof(SR_REMOTE_DATA_VEH_WOW64)) = MDWD(pMem); + 0x5D, // + 0x8D -> pop ebp ; x86 __stdcall epilogue + 0xC2, 0x04, 0x00 // + 0x8E -> ret 0x04 + }; // SIZE = 0x91 (+ sizeof(SR_REMOTE_DATA_VEH_WOW64)) + + *ReCa(Shellcode + 0x1E + sizeof(SR_REMOTE_DATA_VEH_WOW64)) = MDWD(pMem); DWORD pRemoteFunc = MDWD(pMem) + sizeof(SR_REMOTE_DATA_VEH_WOW64); @@ -195,6 +200,7 @@ DWORD SR_FakeVEH_WOW64(HANDLE hTargetProc, f_Routine_WOW64 pRoutine, DWORD pArg, sr_data->pLdrProtectMrdata = WOW64::LdrProtectMrdata_WOW64; sr_data->pListHead = MDWD(pVEHHead); sr_data->pFakeEntry = MDWD(pNewEntry); + sr_data->bRemoveVEHBit = MDWD(FALSE); if (!WriteProcessMemory(hTargetProc, pNewEntry, &buffer, EntrySize, nullptr)) { @@ -210,20 +216,6 @@ DWORD SR_FakeVEH_WOW64(HANDLE hTargetProc, f_Routine_WOW64 pRoutine, DWORD pArg, LOG(2, "Copied fake VEH entry into target process\n"); - if (!WriteProcessMemory(hTargetProc, pMem, Shellcode, sizeof(Shellcode), nullptr)) - { - INIT_ERROR_DATA(error_data, GetLastError()); - - LOG(2, "WriteProcessMemory failed: %08X\n", error_data.AdvErrorCode); - - VirtualFreeEx(hTargetProc, pNewEntry, 0, MEM_RELEASE); - VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); - - return SR_VEH_ERR_WPM_FAIL; - } - - LOG(2, "Copied shellcode into target process\n"); - auto pPEB = PI.GetPEB_WOW64(); if (!pPEB) @@ -251,28 +243,6 @@ DWORD SR_FakeVEH_WOW64(HANDLE hTargetProc, f_Routine_WOW64 pRoutine, DWORD pArg, return SR_VEH_ERR_RPM_FAIL; } - bool updated_peb = false; - if (peb.ProcessUsingVEH == FALSE) - { - LOG(2, "Updating PEB::ProcessUsingVEH flag\n"); - - peb.ProcessUsingVEH = TRUE; - - if (!WriteProcessMemory(hTargetProc, &pPEB->CrossProcessFlags, &peb.CrossProcessFlags, sizeof(peb.CrossProcessFlags), nullptr)) - { - INIT_ERROR_DATA(error_data, GetLastError()); - - LOG(2, "WriteProcessMemory failed: %08X\n", error_data.AdvErrorCode); - - VirtualFreeEx(hTargetProc, pNewEntry, 0, MEM_RELEASE); - VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); - - return SR_VEH_ERR_WPM_FAIL; - } - - updated_peb = true; - } - DWORD dwOld1 = 0; DWORD dwOld2 = 0; if (!VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY32), PAGE_READWRITE, &dwOld1)) @@ -281,12 +251,6 @@ DWORD SR_FakeVEH_WOW64(HANDLE hTargetProc, f_Routine_WOW64 pRoutine, DWORD pArg, LOG(2, "VirtualProtectEx failed: %08X\n", error_data.AdvErrorCode); - if (updated_peb) - { - peb.ProcessUsingVEH = FALSE; - WriteProcessMemory(hTargetProc, &pPEB->CrossProcessFlags, &peb.CrossProcessFlags, sizeof(peb.CrossProcessFlags), nullptr); - } - VirtualFreeEx(hTargetProc, pNewEntry, 0, MEM_RELEASE); VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); @@ -301,12 +265,6 @@ DWORD SR_FakeVEH_WOW64(HANDLE hTargetProc, f_Routine_WOW64 pRoutine, DWORD pArg, VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY32), dwOld1, &dwOld2); - if (updated_peb) - { - peb.ProcessUsingVEH = FALSE; - WriteProcessMemory(hTargetProc, &pPEB->CrossProcessFlags, &peb.CrossProcessFlags, sizeof(peb.CrossProcessFlags), nullptr); - } - VirtualFreeEx(hTargetProc, pNewEntry, 0, MEM_RELEASE); VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); @@ -316,7 +274,7 @@ DWORD SR_FakeVEH_WOW64(HANDLE hTargetProc, f_Routine_WOW64 pRoutine, DWORD pArg, DWORD dwOld3 = 0; DWORD dwOld4 = 0; LIST_ENTRY32 * pFlink = ReCa(MPTR(VEHHead.Flink)); - if (!VirtualProtectEx(hTargetProc, pFlink, sizeof(DWORD), PAGE_READWRITE, &dwOld3)) + if (!VirtualProtectEx(hTargetProc, pFlink, sizeof(LIST_ENTRY32), PAGE_READWRITE, &dwOld3)) { INIT_ERROR_DATA(error_data, GetLastError()); @@ -326,12 +284,6 @@ DWORD SR_FakeVEH_WOW64(HANDLE hTargetProc, f_Routine_WOW64 pRoutine, DWORD pArg, WriteProcessMemory(hTargetProc, pVEHHead, &VEHHead.Flink, sizeof(DWORD), nullptr); VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY32), dwOld1, &dwOld2); - if (updated_peb) - { - peb.ProcessUsingVEH = FALSE; - WriteProcessMemory(hTargetProc, &pPEB->CrossProcessFlags, &peb.CrossProcessFlags, sizeof(peb.CrossProcessFlags), nullptr); - } - VirtualFreeEx(hTargetProc, pNewEntry, 0, MEM_RELEASE); VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); @@ -344,18 +296,12 @@ DWORD SR_FakeVEH_WOW64(HANDLE hTargetProc, f_Routine_WOW64 pRoutine, DWORD pArg, LOG(2, "WriteProcessMemory failed: %08X\n", error_data.AdvErrorCode); - VirtualProtectEx(hTargetProc, pFlink, sizeof(DWORD), dwOld3, &dwOld4); + VirtualProtectEx(hTargetProc, pFlink, sizeof(LIST_ENTRY32), dwOld3, &dwOld4); VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY32), PAGE_READWRITE, &dwOld2); WriteProcessMemory(hTargetProc, pVEHHead, &VEHHead.Flink, sizeof(DWORD), nullptr); VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY32), dwOld1, &dwOld2); - if (updated_peb) - { - peb.ProcessUsingVEH = FALSE; - WriteProcessMemory(hTargetProc, &pPEB->CrossProcessFlags, &peb.CrossProcessFlags, sizeof(peb.CrossProcessFlags), nullptr); - } - VirtualFreeEx(hTargetProc, pNewEntry, 0, MEM_RELEASE); VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); @@ -364,15 +310,56 @@ DWORD SR_FakeVEH_WOW64(HANDLE hTargetProc, f_Routine_WOW64 pRoutine, DWORD pArg, LOG(2, "VEH handler linked to LdrpVectorHandlerList\n"); + if (peb.ProcessUsingVEH == FALSE) + { + sr_data->bRemoveVEHBit = TRUE; + } + + if (!WriteProcessMemory(hTargetProc, pMem, Shellcode, sizeof(Shellcode), nullptr)) + { + INIT_ERROR_DATA(error_data, GetLastError()); + + LOG(2, "WriteProcessMemory failed: %08X\n", error_data.AdvErrorCode); + + VirtualFreeEx(hTargetProc, pNewEntry, 0, MEM_RELEASE); + VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); + + return SR_VEH_ERR_WPM_FAIL; + } + + LOG(2, "Copied shellcode into target process\n"); + + bool updated_peb = false; + if (peb.ProcessUsingVEH == FALSE) + { + LOG(2, "Updating PEB::ProcessUsingVEH flag\n"); + + peb.ProcessUsingVEH = TRUE; + + if (!WriteProcessMemory(hTargetProc, &pPEB->CrossProcessFlags, &peb.CrossProcessFlags, sizeof(peb.CrossProcessFlags), nullptr)) + { + INIT_ERROR_DATA(error_data, GetLastError()); + + LOG(2, "WriteProcessMemory failed: %08X\n", error_data.AdvErrorCode); + + VirtualFreeEx(hTargetProc, pNewEntry, 0, MEM_RELEASE); + VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); + + return SR_VEH_ERR_WPM_FAIL; + } + + updated_peb = true; + } + if (!VirtualProtectEx(hTargetProc, MPTR(WOW64::NtDelayExecution_WOW64), 1, PAGE_EXECUTE_READ | PAGE_GUARD, &dwOld2)) { INIT_ERROR_DATA(error_data, GetLastError()); LOG(2, "VirtualProtectEx failed: %08X\n", error_data.AdvErrorCode); - VirtualProtectEx(hTargetProc, pFlink, sizeof(DWORD), PAGE_READWRITE, &dwOld4); + VirtualProtectEx(hTargetProc, pFlink, sizeof(LIST_ENTRY32), PAGE_READWRITE, &dwOld4); WriteProcessMemory(hTargetProc, &pFlink->Blink, &pVEHHead, sizeof(DWORD), nullptr); - VirtualProtectEx(hTargetProc, pFlink, sizeof(DWORD), dwOld3, &dwOld4); + VirtualProtectEx(hTargetProc, pFlink, sizeof(LIST_ENTRY32), dwOld3, &dwOld4); VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY32), PAGE_READWRITE, &dwOld2); WriteProcessMemory(hTargetProc, pVEHHead, &VEHHead.Flink, sizeof(DWORD), nullptr); @@ -427,9 +414,9 @@ DWORD SR_FakeVEH_WOW64(HANDLE hTargetProc, f_Routine_WOW64 pRoutine, DWORD pArg, LOG(2, "ReadProcessMemory failed: %08X\n", error_data.AdvErrorCode); } - VirtualProtectEx(hTargetProc, pFlink, sizeof(DWORD), PAGE_READWRITE, &dwOld4); + VirtualProtectEx(hTargetProc, pFlink, sizeof(LIST_ENTRY32), PAGE_READWRITE, &dwOld4); WriteProcessMemory(hTargetProc, &pFlink->Blink, &pVEHHead, sizeof(DWORD), nullptr); - VirtualProtectEx(hTargetProc, pFlink, sizeof(DWORD), dwOld3, &dwOld4); + VirtualProtectEx(hTargetProc, pFlink, sizeof(LIST_ENTRY32), dwOld3, &dwOld4); VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY32), PAGE_READWRITE, &dwOld2); WriteProcessMemory(hTargetProc, pVEHHead, &VEHHead.Flink, sizeof(DWORD), nullptr); diff --git a/GH Injector Library/FakeVEH.cpp b/GH Injector Library/FakeVEH.cpp index 027ebaf..97e7555 100644 --- a/GH Injector Library/FakeVEH.cpp +++ b/GH Injector Library/FakeVEH.cpp @@ -28,6 +28,17 @@ DWORD SR_FakeVEH(HANDLE hTargetProc, f_Routine pRoutine, void * pArg, DWORD & Ou SR_REMOTE_DATA_VEH * data = ReCa(ReCa(VectoredExceptionHandler) - sizeof(SR_REMOTE_DATA_VEH)); if (data->Data.State == SR_REMOTE_STATE::SR_RS_ExecutionPending) { + if (data->remove_VEH_flag) + { + #ifdef _WIN64 + PEB * peb = reinterpret_cast(__readgsqword(0x60)); + #else + PEB * peb = reinterpret_cast(__readfsdword(0x30)); + #endif + + peb->ProcessUsingVEH = FALSE; + } + if (data->pLdrProtectMrdata) //only Win8.1+ { data->pLdrProtectMrdata(FALSE); //return value is irrelevant @@ -75,74 +86,79 @@ DWORD SR_FakeVEH(HANDLE hTargetProc, f_Routine pRoutine, void * pArg, DWORD & Ou { SR_REMOVE_DATA_BUFFER_VEH - 0x48, 0x85, 0xC9, // + 0x00 -> test rcx, rcx ; check if rcx (ExceptionInfo pointer) is non-zero - 0x0F, 0x84, 0x9D, 0x00, 0x00, 0x00, // + 0x03 -> je 0xA6 ; jump if nullptr - - 0x48, 0x8B, 0x09, // + 0x09 -> mov rcx, [rcx] ; move EXCEPTION_POINTERS::ExceptionRecord into rcx - 0x48, 0x85, 0xC9, // + 0x0C -> test rcx, rcx ; check if ExceptionRecord is non-zero - 0x0F, 0x84, 0x91, 0x00, 0x00, 0x00, // + 0x0F -> je 0xA6 ; jump if nullptr - - 0x81, 0x39, 0x01, 0x00, 0x00, 0x80, // + 0x15 -> cmp dword ptr [rcx], 0x80000001 ; check if ExceptionRecord::ExceptionCode matches EXCEPTION_GUARD_PAGE - 0x0F, 0x85, 0x85, 0x00, 0x00, 0x00, // + 0x1B -> jne 0xA6 ; jump if not equal - - 0x53, // + 0x21 -> push rbx ; push rbx on stack (non volatile) - 0x48, 0x8D, 0x1D, 0x8F, 0xFF, 0xFF, 0xFF, // + 0x22 -> lea rbx, [-0x48] ; load pData into rbx - - 0x80, 0x3B, 0x00, // + 0x29 -> cmp byte ptr [rbx], 0 ; test if SR_REMOTE_DATA::State is equal to SR_RS_ExecutionPending - 0x75, 0x77, // + 0x2C -> jne 0xA5 ; jump if not equal - - 0xC6, 0x03, 0x01, // + 0x2E -> mov byte ptr [rbx], 1 ; set SR_REMOTE_DATA::State to SR_RS_Executing + 0x48, 0x85, 0xC9, // + 0x00 -> test rcx, rcx ; check if rcx (ExceptionInfo pointer) is non-zero + 0x0F, 0x84, 0xB4, 0x00, 0x00, 0x00, // + 0x03 -> je 0xBD ; jump if nullptr - 0x48, 0x83, 0x7B, 0x30, 0x00, // + 0x31 -> cmp qword ptr [rbx + 0x30], 0 ; check if SR_REMOTE_DATA_VEH::pLdrProtectMrdata is non-zero - 0x74, 0x0A, // + 0x36 -> je 0x42 ; jump if nullptr - 0x48, 0x31, 0xC9, // + 0x38 -> xor rcx, rcx ; move FALSE into rcx - 0x48, 0x83, 0xEC, 0x20, // + 0x3B -> sub rsp, 0x20 ; reserve 0x20 bytes on the stack - 0xFF, 0x53, 0x30, // + 0x3F -> call qword ptr [rbx + 0x30] ; call LdrProtectMrdata to make LdrpVectorHandlerList writeable + 0x48, 0x8B, 0x09, // + 0x09 -> mov rcx, [rcx] ; move EXCEPTION_POINTERS::ExceptionRecord into rcx + 0x48, 0x85, 0xC9, // + 0x0C -> test rcx, rcx ; check if ExceptionRecord is non-zero + 0x0F, 0x84, 0xA8, 0x00, 0x00, 0x00, // + 0x0F -> je 0xBD ; jump if nullptr - 0x48, 0x8B, 0x53, 0x38, // + 0x42 -> mov rdx, [rbx + 0x38] ; move &LdrpVectorHandlerList.List (head) into rdx - 0x48, 0x8B, 0x0A, // + 0x46 -> mov rcx, [rdx] ; move head->Flink into rcx (current) + 0x81, 0x39, 0x01, 0x00, 0x00, 0x80, // + 0x15 -> cmp dword ptr [rcx], 0x80000001 ; check if ExceptionRecord::ExceptionCode matches EXCEPTION_GUARD_PAGE + 0x0F, 0x85, 0x9C, 0x00, 0x00, 0x00, // + 0x1B -> jne 0xBD ; jump if not equal - 0x48, 0x39, 0xD1, // + 0x49 -> cmp rcx, rdx ; compare current, head - 0x74, 0x19, // + 0x4C -> je 0x67 ; exit loop if equal (end of list) - 0x48, 0x3B, 0x4B, 0x40, // + 0x4E -> cmp rcx, [rbx + 0x40] ; compare current, SR_REMOTE_DATA_VEH::pFakeEntry - 0x74, 0x05, // + 0x52 -> je 0x59 ; break loop if equal (found entry) - 0x48, 0x8B, 0x09, // + 0x54 -> mov rcx, [rcx] ; set current to current->Flink - 0xEB, 0xF0, // + 0x57 -> jmp 0x49 ; jmp to the start of the loop + 0x53, // + 0x21 -> push rbx ; push rbx on stack (non volatile) + 0x48, 0x8D, 0x1D, 0x87, 0xFF, 0xFF, 0xFF, // + 0x22 -> lea rbx, [-0x50] ; load pData into rbx - 0x48, 0x8B, 0x01, // + 0x59 -> mov rax, [rcx] ; store current->Flink in rax - 0x48, 0x8B, 0x51, 0x08, // + 0x5C -> mov rdx, [rcx + 0x08] ; store current->Blink in rdx - 0x48, 0x89, 0x02, // + 0x60 -> mov [rdx], rax ; current->Blink->Flink = current->Fink - 0x48, 0x89, 0x50, 0x08, // + 0x63 -> mov [rax + 0x08], rdx ; current->Flink->Blink = current->Blink + 0x80, 0x3B, 0x00, // + 0x29 -> cmp byte ptr [rbx], 0 ; test if SR_REMOTE_DATA::State is equal to SR_RS_ExecutionPending + 0x0F, 0x85, 0x8A, 0x00, 0x00, 0x00, // + 0x2C -> jne 0xBC ; jump if not equal - 0x48, 0x83, 0x7B, 0x30, 0x00, // + 0x67 -> cmp qword ptr [rbx + 0x30], 0 ; check if SR_REMOTE_DATA_VEH::pLdrProtectMrdata is non-zero - 0x74, 0x0C, // + 0x6C -> je 0x7A ; jump if nullptr - 0x48, 0x31, 0xC9, // + 0x6E -> xor rcx, rcx ; zero rcx - 0xB1, 0x01, // + 0x71 -> mov cl, 1 ; move TRUE into rcx - 0xFF, 0x53, 0x30, // + 0x73 -> call qword ptr [rbx + 0x30] ; call LdrProtectMrdata to protect LdrpVectorHandlerList - 0x48, 0x83, 0xC4, 0x20, // + 0x76 -> add rsp, 0x20 ; restore stack (reserved at + 0x3B) - - 0x48, 0x8B, 0x4B, 0x18, // + 0x7A -> mov rcx, [rbx + 0x18] ; move pArg into rcx - 0x48, 0x83, 0xEC, 0x20, // + 0x7E -> sub rsp, 0x20 ; reserve stack - 0xFF, 0x53, 0x20, // + 0x82 -> call qword ptr [rbx + 0x20] ; call pRoutine - 0x48, 0x83, 0xC4, 0x20, // + 0x85 -> add rsp, 0x20 ; update stack - 0x48, 0x89, 0x43, 0x08, // + 0x89 -> mov [rbx + 0x08], rax ; store returned value - - 0x65, 0x48, 0x8B, 0x04, 0x25, 0x30, 0x00, 0x00, 0x00, // + 0x8D -> mov rax, gs: [0x30] ; GetLastError - 0x8B, 0x40, 0x68, // + 0x89 -> mov eax, [rax + 0x68] - 0x89, 0x43, 0x10, // + 0x99 -> mov [rbx + 0x10], eax ; store in SR_REMOTE_DATA::LastWin32Error - - 0xC6, 0x03, 0x02, // + 0x9C -> mov byte ptr [rbx], 2 ; set SR_REMOTE_DATA::State to SR_RS_ExecutionFinished - - 0x83, 0xC8, 0xFF, // + 0x9F -> or eax, -1 ; set eax to EXCEPTION_CONTINUE_EXECUTION - 0x5B, // + 0xA2 -> pop rbx ; restore rbx - 0xEB, 0x04, // + 0xA3 -> jmp 0xA9 ; jump to ret - - 0x5B, // + 0xA5 -> pop rbx ; restore rbx - 0x48, 0x31, 0xC0, // + 0xA6 -> xor rax, rax ; set eax to EXCEPTION_CONTINUE_SEARCH - - 0xC3 // + 0xA9 -> ret ; return - - }; // SIZE = 0x9A (+ sizeof(SR_REMOTE_DATA_VEH)) + 0xC6, 0x03, 0x01, // + 0x32 -> mov byte ptr [rbx], 1 ; set SR_REMOTE_DATA::State to SR_RS_Executing + + 0x80, 0x7B, 0x48, 0x01, // + 0x35 -> cmp byte ptr [rbx + 0x48], 1 ; test if SR_REMOTE_DATA::bRemoveVEHBit is set + 0x75, 0x0D, // + 0x39 -> jne 0x48 ; jump if not equal + 0x65, 0x48, 0x8B, 0x0C, 0x25, 0x60, 0x00, 0x00, 0x00, // + 0x3B -> mov rcx, gs: [0x60] ; mov PEB pointer into rcx + 0x83, 0x71, 0x50, 0x04, // + 0x44 -> xor dword ptr [rcx + 0x50], 0x04 ; remove PEB->ProcessUsingVEH bit + + 0x48, 0x83, 0x7B, 0x30, 0x00, // + 0x48 -> cmp qword ptr [rbx + 0x30], 0 ; check if SR_REMOTE_DATA_VEH::pLdrProtectMrdata is non-zero + 0x74, 0x0A, // + 0x4D -> je 0x59 ; jump if nullptr + 0x48, 0x31, 0xC9, // + 0x4F -> xor rcx, rcx ; move FALSE into rcx + 0x48, 0x83, 0xEC, 0x20, // + 0x52 -> sub rsp, 0x20 ; reserve 0x20 bytes on the stack + 0xFF, 0x53, 0x30, // + 0x56 -> call qword ptr [rbx + 0x30] ; call LdrProtectMrdata to make LdrpVectorHandlerList writeable + + 0x48, 0x8B, 0x53, 0x38, // + 0x59 -> mov rdx, [rbx + 0x38] ; move &LdrpVectorHandlerList.List (head) into rdx + 0x48, 0x8B, 0x0A, // + 0x5D -> mov rcx, [rdx] ; move head->Flink into rcx (current) + + 0x48, 0x39, 0xD1, // + 0x60 -> cmp rcx, rdx ; compare current, head + 0x74, 0x19, // + 0x63 -> je 0x7E ; exit loop if equal (end of list) + 0x48, 0x3B, 0x4B, 0x40, // + 0x65 -> cmp rcx, [rbx + 0x40] ; compare current, SR_REMOTE_DATA_VEH::pFakeEntry + 0x74, 0x05, // + 0x69 -> je 0x70 ; break loop if equal (found entry) + 0x48, 0x8B, 0x09, // + 0x6B -> mov rcx, [rcx] ; set current to current->Flink + 0xEB, 0xF0, // + 0x6E -> jmp 0x60 ; jmp to the start of the loop + + 0x48, 0x8B, 0x01, // + 0x70 -> mov rax, [rcx] ; store current->Flink in rax + 0x48, 0x8B, 0x51, 0x08, // + 0x73 -> mov rdx, [rcx + 0x08] ; store current->Blink in rdx + 0x48, 0x89, 0x02, // + 0x77 -> mov [rdx], rax ; current->Blink->Flink = current->Fink + 0x48, 0x89, 0x50, 0x08, // + 0x7A -> mov [rax + 0x08], rdx ; current->Flink->Blink = current->Blink + + 0x48, 0x83, 0x7B, 0x30, 0x00, // + 0x7E -> cmp qword ptr [rbx + 0x30], 0 ; check if SR_REMOTE_DATA_VEH::pLdrProtectMrdata is non-zero + 0x74, 0x0C, // + 0x83 -> je 0x91 ; jump if nullptr + 0x48, 0x31, 0xC9, // + 0x85 -> xor rcx, rcx ; zero rcx + 0xB1, 0x01, // + 0x88 -> mov cl, 1 ; move TRUE into rcx + 0xFF, 0x53, 0x30, // + 0x8A -> call qword ptr [rbx + 0x30] ; call LdrProtectMrdata to protect LdrpVectorHandlerList + 0x48, 0x83, 0xC4, 0x20, // + 0x8D -> add rsp, 0x20 ; restore stack (reserved at + 0x3B) + + 0x48, 0x8B, 0x4B, 0x18, // + 0x91 -> mov rcx, [rbx + 0x18] ; move pArg into rcx + 0x48, 0x83, 0xEC, 0x20, // + 0x95 -> sub rsp, 0x20 ; reserve stack + 0xFF, 0x53, 0x20, // + 0x99 -> call qword ptr [rbx + 0x20] ; call pRoutine + 0x48, 0x83, 0xC4, 0x20, // + 0x9C -> add rsp, 0x20 ; update stack + 0x48, 0x89, 0x43, 0x08, // + 0xA0 -> mov [rbx + 0x08], rax ; store returned value + + 0x65, 0x48, 0x8B, 0x04, 0x25, 0x30, 0x00, 0x00, 0x00, // + 0xA4 -> mov rax, gs: [0x30] ; GetLastError + 0x8B, 0x40, 0x68, // + 0xAD -> mov eax, [rax + 0x68] + 0x89, 0x43, 0x10, // + 0xB0 -> mov [rbx + 0x10], eax ; store in SR_REMOTE_DATA::LastWin32Error + + 0xC6, 0x03, 0x02, // + 0xB3 -> mov byte ptr [rbx], 2 ; set SR_REMOTE_DATA::State to SR_RS_ExecutionFinished + + 0x83, 0xC8, 0xFF, // + 0xB6 -> or eax, -1 ; set eax to EXCEPTION_CONTINUE_EXECUTION + 0x5B, // + 0xB9 -> pop rbx ; restore rbx + 0xEB, 0x04, // + 0xBA -> jmp 0xC0 ; jump to ret + + 0x5B, // + 0xBC -> pop rbx ; restore rbx + 0x48, 0x31, 0xC0, // + 0xBD -> xor rax, rax ; set rax to EXCEPTION_CONTINUE_SEARCH + + 0xC3 // + 0xC0 -> ret ; return + + }; // SIZE = 0xC1 (+ sizeof(SR_REMOTE_DATA_VEH)) #else @@ -150,75 +166,80 @@ DWORD SR_FakeVEH(HANDLE hTargetProc, f_Routine pRoutine, void * pArg, DWORD & Ou { SR_REMOVE_DATA_BUFFER_VEH - 0x55, // + 0x00 -> push ebp ; x86 stack frame creation + 0x55, // + 0x00 -> push ebp ; x86 stack frame creation 0x8B, 0xEC, // + 0x01 -> mov ebp, esp - 0x8B, 0x4D, 0x08, // + 0x03 -> mov ecx, [ebp + 0x08] ; move ExceptionInfo pointer into ecx - 0x85, 0xC9, // + 0x06 -> test ecx, ecx ; check if ExceptionInfo pointer is non-zero - 0x74, 0x6D, // + 0x08 -> je 0x77 ; jump if nullptr + 0x8B, 0x4D, 0x08, // + 0x03 -> mov ecx, [ebp + 0x08] ; move ExceptionInfo pointer into ecx + 0x85, 0xC9, // + 0x06 -> test ecx, ecx ; check if ExceptionInfo pointer is non-zero + 0x0F, 0x84, 0x7D, 0x00, 0x00, 0x00, // + 0x08 -> je 0x8B ; jump if nullptr + + 0x8B, 0x09, // + 0x0D -> mov ecx, [ecx] ; move EXCEPTION_POINTERS::ExceptionRecord into ecx + 0x85, 0xC9, // + 0x10 -> test ecx, ecx ; check if ExceptionRecord is non-zero + 0x74, 0x77, // + 0x12 -> je 0x8B ; jump if nullptr - 0x8B, 0x09, // + 0x0A -> mov ecx, [ecx] ; move EXCEPTION_POINTERS::ExceptionRecord into ecx - 0x85, 0xC9, // + 0x0C -> test ecx, ecx ; check if ExceptionRecord is non-zero - 0x74, 0x67, // + 0x0E -> je 0x77 ; jump if nullptr + 0x81, 0x39, 0x01, 0x00, 0x00, 0x80, // + 0x14 -> cmp [ecx], 0x80000001 ; check if ExceptionRecord::ExceptionCode matches EXCEPTION_GUARD_PAGE + 0x75, 0x6F, // + 0x1A -> jne 0x8B ; jump if not equal - 0x81, 0x39, 0x01, 0x00, 0x00, 0x80, // + 0x10 -> cmp [ecx], 0x80000001 ; check if ExceptionRecord::ExceptionCode matches EXCEPTION_GUARD_PAGE - 0x75, 0x5F, // + 0x16 -> jne 0x77 ; jump if not equal + 0x53, // + 0x1C -> push ebx ; push ebx on stack (non volatile) + 0xBB, 0x00, 0x00, 0x00, 0x00, // + 0x1D (+ 0x1E) -> mov ebx, 0x00000000 ; load pData into ebx - 0x53, // + 0x18 -> push ebx ; push ebx on stack (non volatile) - 0xBB, 0x00, 0x00, 0x00, 0x00, // + 0x19 (+ 0x1A) -> mov ebx, 0x00000000 ; load pData into ebx + 0x80, 0x3B, 0x00, // + 0x22 -> cmp byte ptr [ebx], 0 ; test if SR_REMOTE_DATA_VEH::Data::State is equal to SR_RS_ExecutionPending + 0x75, 0x63, // + 0x25 -> jne 0x8A ; jump if not equal - 0x80, 0x3B, 0x00, // + 0x1E -> cmp byte ptr [ebx], 0 ; test if SR_REMOTE_DATA_VEH::Data::State is equal to SR_RS_ExecutionPending - 0x75, 0x53, // + 0x22 -> jne 0x76 ; jump if not equal + 0xC6, 0x03, 0x01, // + 0x27 -> mov byte ptr [ebx], 1 ; set SR_REMOTE_DATA_VEH::Data::State to SR_RS_Executing - 0xC6, 0x03, 0x01, // + 0x23 -> mov byte ptr [ebx], 1 ; set SR_REMOTE_DATA_VEH::Data::State to SR_RS_Executing + 0x80, 0x7B, 0x24, 0x01, // + 0x2A -> cmp byte ptr [ebx + 0x24], 1 : test if SR_REMOTE_DATA::bRemoveVEHBit is set + 0x75, 0x10, // + 0x2E -> jne 0x40 : jump if not equal + 0x64, 0xA1, 0x30, 0x00, 0x00, 0x00, // + 0x30 -> mov eax, fs:[0x30] : mov PEB pointer into ecx + 0x83, 0x70, 0x28, 0x04, // + 0x36 -> xor dword ptr [ecx + 0x28], 0x04 : remove PEB->ProcessUsingVEH bit - 0x83, 0x7B, 0x18, 0x00, // + 0x26 -> cmp dword ptr [ebx + 0x18], 0 ; check if SR_REMOTE_DATA_VEH::pLdrProtectMrdata is non-zero - 0x74, 0x05, // + 0x2A -> je 0x31 ; jump if nullptr - 0x6A, 0x00, // + 0x2C -> push 0 ; push FALSE on the stack - 0xFF, 0x53, 0x18, // + 0x2E -> call dword ptr [ebx + 0x18] ; call LdrProtectMrdata to make LdrpVectorHandlerList writeable + 0x83, 0x7B, 0x18, 0x00, // + 0x3A -> cmp dword ptr [ebx + 0x18], 0 ; check if SR_REMOTE_DATA_VEH::pLdrProtectMrdata is non-zero + 0x74, 0x05, // + 0x3E -> je 0x45 ; jump if nullptr + 0x6A, 0x00, // + 0x40 -> push 0 ; push FALSE on the stack + 0xFF, 0x53, 0x18, // + 0x42 -> call dword ptr [ebx + 0x18] ; call LdrProtectMrdata to make LdrpVectorHandlerList writeable - 0x8B, 0x53, 0x1C, // + 0x31 -> mov edx, [ebx + 0x1C] ; move &LdrpVectorHandlerList.List (head) into edx - 0x8B, 0x0A, // + 0x34 -> mov ecx, [edx] ; move head->Flink into ecx (current) + 0x8B, 0x53, 0x1C, // + 0x45 -> mov edx, [ebx + 0x1C] ; move &LdrpVectorHandlerList.List (head) into edx + 0x8B, 0x0A, // + 0x48 -> mov ecx, [edx] ; move head->Flink into ecx (current) - 0x39, 0xD1, // + 0x36 -> cmp ecx, edx ; compare current, head - 0x74, 0x13, // + 0x38 -> je 0x4D ; exit loop if equal (end of list) - 0x3B, 0x4B, 0x20, // + 0x3A -> cmp ecx, [ebx + 0x20] ; compare current, SR_REMOTE_DATA_VEH::pFakeEntry - 0x74, 0x04, // + 0x3D -> je 0x43 ; break loop if equal (found entry) - 0x8B, 0x09, // + 0x3F -> mov ecx, [ecx] ; set current to current->Flink - 0xEB, 0xF3, // + 0x41 -> jmp 0x36 ; jmp to the start of the loop + 0x39, 0xD1, // + 0x4A -> cmp ecx, edx ; compare current, head + 0x74, 0x13, // + 0x4C -> je 0x61 ; exit loop if equal (end of list) + 0x3B, 0x4B, 0x20, // + 0x4E -> cmp ecx, [ebx + 0x20] ; compare current, SR_REMOTE_DATA_VEH::pFakeEntry + 0x74, 0x04, // + 0x51 -> je 0x57 ; break loop if equal (found entry) + 0x8B, 0x09, // + 0x53 -> mov ecx, [ecx] ; set current to current->Flink + 0xEB, 0xF3, // + 0x55 -> jmp 0x4A ; jmp to the start of the loop - 0x8B, 0x01, // + 0x43 -> mov eax, [ecx] ; store current->Flink in eax - 0x8B, 0x51, 0x04, // + 0x45 -> mov edx, [ecx + 0x04] ; store current->Blink in edx - 0x89, 0x02, // + 0x48 -> mov [edx], eax ; current->Blink->Flink = current->Fink - 0x89, 0x50, 0x04, // + 0x4A -> mov [eax + 0x04], edx ; current->Flink->Blink = current->Blink + 0x8B, 0x01, // + 0x57 -> mov eax, [ecx] ; store current->Flink in eax + 0x8B, 0x51, 0x04, // + 0x59 -> mov edx, [ecx + 0x04] ; store current->Blink in edx + 0x89, 0x02, // + 0x5C -> mov [edx], eax ; current->Blink->Flink = current->Fink + 0x89, 0x50, 0x04, // + 0x5E -> mov [eax + 0x04], edx ; current->Flink->Blink = current->Blink - 0x83, 0x7B, 0x18, 0x00, // + 0x4D -> cmp dword ptr [ebx + 0x18], 0 ; check if SR_REMOTE_DATA_VEH::pLdrProtectMrdata is non-zero - 0x74, 0x05, // + 0x51 -> je 0x48 ; jump if nullptr - 0x6A, 0x01, // + 0x53 -> push 1 ; push TRUE on the stack - 0xFF, 0x53, 0x18, // + 0x55 -> call dword ptr [ebx + 0x18] ; call LdrProtectMrdata to protect LdrpVectorHandlerList + 0x83, 0x7B, 0x18, 0x00, // + 0x61 -> cmp dword ptr [ebx + 0x18], 0 ; check if SR_REMOTE_DATA_VEH::pLdrProtectMrdata is non-zero + 0x74, 0x05, // + 0x65 -> je 0x6C ; jump if nullptr + 0x6A, 0x01, // + 0x67 -> push 1 ; push TRUE on the stack + 0xFF, 0x53, 0x18, // + 0x69 -> call dword ptr [ebx + 0x18] ; call LdrProtectMrdata to protect LdrpVectorHandlerList - 0xFF, 0x73, 0x0C, // + 0x58 -> push [ebx + 0x0C] ; push pArg - 0xFF, 0x53, 0x10, // + 0x5B -> call dword ptr [ebx + 0x10] ; call pRoutine - 0x89, 0x43, 0x04, // + 0x5E -> mov [ebx + 0x04], eax ; store returned value + 0xFF, 0x73, 0x0C, // + 0x6C -> push [ebx + 0x0C] ; push pArg + 0xFF, 0x53, 0x10, // + 0x6F -> call dword ptr [ebx + 0x10] ; call pRoutine + 0x89, 0x43, 0x04, // + 0x72 -> mov [ebx + 0x04], eax ; store returned value - 0x64, 0xA1, 0x18, 0x00, 0x00, 0x00, // + 0x61 -> mov eax, fs:[0x18] ; GetLastError - 0x8B, 0x40, 0x34, // + 0x67 -> mov eax, [eax + 0x34] - 0x89, 0x43, 0x08, // + 0x6A -> mov [ebx + 0x08], eax ; store in SR_REMOTE_DATA_VEH::Data::LastWin32Error + 0x64, 0xA1, 0x18, 0x00, 0x00, 0x00, // + 0x75 -> mov eax, fs:[0x18] ; GetLastError + 0x8B, 0x40, 0x34, // + 0x7B -> mov eax, [eax + 0x34] + 0x89, 0x43, 0x08, // + 0x7E -> mov [ebx + 0x08], eax ; store in SR_REMOTE_DATA_VEH::Data::LastWin32Error - 0xC6, 0x03, 0x02, // + 0x6D -> mov byte ptr [ebx], 2 ; set SR_REMOTE_DATA_VEH::Data::State to SR_RS_ExecutionFinished + 0xC6, 0x03, 0x02, // + 0x81 -> mov byte ptr [ebx], 2 ; set SR_REMOTE_DATA_VEH::Data::State to SR_RS_ExecutionFinished - 0x83, 0xC8, 0xFF, // + 0x70 -> or eax, -1 ; set eax to EXCEPTION_CONTINUE_EXECUTION - 0x5B, // + 0x73 -> pop ebx ; restore ebx - 0xEB, 0x03, // + 0x75 -> jmp 0x79 ; jump to epilogue + 0x83, 0xC8, 0xFF, // + 0x84 -> or eax, -1 ; set eax to EXCEPTION_CONTINUE_EXECUTION + 0x5B, // + 0x87 -> pop ebx ; restore ebx + 0xEB, 0x03, // + 0x88 -> jmp 0x8D ; jump to epilogue - 0x5B, // + 0x76 -> pop ebx ; restore ebx - 0x31, 0xC0, // + 0x77 -> xor eax, eax ; set eax to EXCEPTION_CONTINUE_SEARCH + 0x5B, // + 0x8A -> pop ebx ; restore ebx + 0x31, 0xC0, // + 0x8B -> xor eax, eax ; set eax to EXCEPTION_CONTINUE_SEARCH - 0x5D, // + 0x79 -> pop ebp ; x86 __stdcall epilogue - 0xC2, 0x04, 0x00 // + 0x7A -> ret 0x04 - }; // SIZE = 0x7D (+ sizeof(SR_REMOTE_DATA_VEH)) + 0x5D, // + 0x8D -> pop ebp ; x86 __stdcall epilogue + 0xC2, 0x04, 0x00 // + 0x8E -> ret 0x04 + }; // SIZE = 0x91 (+ sizeof(SR_REMOTE_DATA_VEH)) - *ReCa(Shellcode + 0x1A + sizeof(SR_REMOTE_DATA_VEH)) = pMem; + *ReCa(Shellcode + 0x1E + sizeof(SR_REMOTE_DATA_VEH)) = pMem; #endif @@ -330,6 +351,7 @@ DWORD SR_FakeVEH(HANDLE hTargetProc, f_Routine pRoutine, void * pArg, DWORD & Ou sr_data->pLdrProtectMrdata = NATIVE::LdrProtectMrdata; sr_data->pListHead = pVEHHead; sr_data->pFakeEntry = ReCa(pNewEntry); + sr_data->bRemoveVEHBit = FALSE; if (!WriteProcessMemory(hTargetProc, pNewEntry, &buffer, EntrySize, nullptr)) { @@ -345,20 +367,6 @@ DWORD SR_FakeVEH(HANDLE hTargetProc, f_Routine pRoutine, void * pArg, DWORD & Ou LOG(2, "Copied fake VEH entry into target process\n"); - if (!WriteProcessMemory(hTargetProc, pMem, Shellcode, sizeof(Shellcode), nullptr)) - { - INIT_ERROR_DATA(error_data, GetLastError()); - - LOG(2, "WriteProcessMemory failed: %08X\n", error_data.AdvErrorCode); - - VirtualFreeEx(hTargetProc, pNewEntry, 0, MEM_RELEASE); - VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); - - return SR_VEH_ERR_WPM_FAIL; - } - - LOG(2, "Copied shellcode into target process\n"); - auto pPEB = PI.GetPEB(); if (!pPEB) @@ -386,28 +394,6 @@ DWORD SR_FakeVEH(HANDLE hTargetProc, f_Routine pRoutine, void * pArg, DWORD & Ou return SR_VEH_ERR_RPM_FAIL; } - bool updated_peb = false; - if (peb.ProcessUsingVEH == FALSE) - { - LOG(2, "Updating PEB::ProcessUsingVEH flag\n"); - - peb.ProcessUsingVEH = TRUE; - - if (!WriteProcessMemory(hTargetProc, &pPEB->CrossProcessFlags, &peb.CrossProcessFlags, sizeof(peb.CrossProcessFlags), nullptr)) - { - INIT_ERROR_DATA(error_data, GetLastError()); - - LOG(2, "WriteProcessMemory failed: %08X\n", error_data.AdvErrorCode); - - VirtualFreeEx(hTargetProc, pNewEntry, 0, MEM_RELEASE); - VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); - - return SR_VEH_ERR_WPM_FAIL; - } - - updated_peb = true; - } - DWORD dwOld1 = 0; DWORD dwOld2 = 0; if (!VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY), PAGE_READWRITE, &dwOld1)) @@ -416,12 +402,6 @@ DWORD SR_FakeVEH(HANDLE hTargetProc, f_Routine pRoutine, void * pArg, DWORD & Ou LOG(2, "VirtualProtectEx failed: %08X\n", error_data.AdvErrorCode); - if (updated_peb) - { - peb.ProcessUsingVEH = FALSE; - WriteProcessMemory(hTargetProc, &pPEB->CrossProcessFlags, &peb.CrossProcessFlags, sizeof(peb.CrossProcessFlags), nullptr); - } - VirtualFreeEx(hTargetProc, pNewEntry, 0, MEM_RELEASE); VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); @@ -436,35 +416,42 @@ DWORD SR_FakeVEH(HANDLE hTargetProc, f_Routine pRoutine, void * pArg, DWORD & Ou VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY), dwOld1, &dwOld2); - if (updated_peb) - { - peb.ProcessUsingVEH = FALSE; - WriteProcessMemory(hTargetProc, &pPEB->CrossProcessFlags, &peb.CrossProcessFlags, sizeof(peb.CrossProcessFlags), nullptr); - } - VirtualFreeEx(hTargetProc, pNewEntry, 0, MEM_RELEASE); VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); return SR_VEH_ERR_WPM_FAIL; } - if (!WriteProcessMemory(hTargetProc, &VEHHead.Flink->Blink, &pNewEntry, sizeof(pNewEntry), nullptr)) + DWORD dwOld3 = 0; + DWORD dwOld4 = 0; + LIST_ENTRY * pFlink = VEHHead.Flink; + if (!VirtualProtectEx(hTargetProc, pFlink, sizeof(LIST_ENTRY), PAGE_READWRITE, &dwOld3)) { INIT_ERROR_DATA(error_data, GetLastError()); LOG(2, "WriteProcessMemory failed: %08X\n", error_data.AdvErrorCode); + VirtualProtectEx(hTargetProc, pFlink, sizeof(LIST_ENTRY), dwOld3, &dwOld4); + VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY), PAGE_READWRITE, &dwOld2); + WriteProcessMemory(hTargetProc, pVEHHead, &VEHHead.Flink, sizeof(DWORD), nullptr); + VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY), dwOld1, &dwOld2); - WriteProcessMemory(hTargetProc, pVEHHead, &VEHHead.Flink, sizeof(VEHHead.Flink), nullptr); + VirtualFreeEx(hTargetProc, pNewEntry, 0, MEM_RELEASE); + VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); - VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY), dwOld1, &dwOld2); + return SR_VEH_ERR_PROTECT_FAIL; + } - if (updated_peb) - { - peb.ProcessUsingVEH = FALSE; - WriteProcessMemory(hTargetProc, &pPEB->CrossProcessFlags, &peb.CrossProcessFlags, sizeof(peb.CrossProcessFlags), nullptr); - } + if (!WriteProcessMemory(hTargetProc, &VEHHead.Flink->Blink, &pNewEntry, sizeof(pNewEntry), nullptr)) + { + INIT_ERROR_DATA(error_data, GetLastError()); + + LOG(2, "WriteProcessMemory failed: %08X\n", error_data.AdvErrorCode); + + VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY), PAGE_READWRITE, &dwOld2); + WriteProcessMemory(hTargetProc, pVEHHead, &VEHHead.Flink, sizeof(VEHHead.Flink), nullptr); + VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY), dwOld1, &dwOld2); VirtualFreeEx(hTargetProc, pNewEntry, 0, MEM_RELEASE); VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); @@ -474,19 +461,63 @@ DWORD SR_FakeVEH(HANDLE hTargetProc, f_Routine pRoutine, void * pArg, DWORD & Ou LOG(2, "VEH handler linked to LdrpVectorHandlerList\n"); + if (peb.ProcessUsingVEH == FALSE) + { + sr_data->bRemoveVEHBit = TRUE; + } + + if (!WriteProcessMemory(hTargetProc, pMem, Shellcode, sizeof(Shellcode), nullptr)) + { + INIT_ERROR_DATA(error_data, GetLastError()); + + LOG(2, "WriteProcessMemory failed: %08X\n", error_data.AdvErrorCode); + + VirtualFreeEx(hTargetProc, pNewEntry, 0, MEM_RELEASE); + VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); + + return SR_VEH_ERR_WPM_FAIL; + } + + LOG(2, "Copied shellcode into target process\n"); + + bool updated_peb = false; + if (peb.ProcessUsingVEH == FALSE) + { + LOG(2, "Updating PEB::ProcessUsingVEH flag\n"); + + peb.ProcessUsingVEH = TRUE; + + if (!WriteProcessMemory(hTargetProc, &pPEB->CrossProcessFlags, &peb.CrossProcessFlags, sizeof(peb.CrossProcessFlags), nullptr)) + { + INIT_ERROR_DATA(error_data, GetLastError()); + + LOG(2, "WriteProcessMemory failed: %08X\n", error_data.AdvErrorCode); + + VirtualFreeEx(hTargetProc, pNewEntry, 0, MEM_RELEASE); + VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); + + return SR_VEH_ERR_WPM_FAIL; + } + + updated_peb = true; + } + if (!VirtualProtectEx(hTargetProc, NATIVE::NtDelayExecution, 1, PAGE_EXECUTE_READ | PAGE_GUARD, &dwOld2)) { INIT_ERROR_DATA(error_data, GetLastError()); LOG(2, "VirtualProtectEx failed: %08X\n", error_data.AdvErrorCode); + + VirtualProtectEx(hTargetProc, pFlink, sizeof(LIST_ENTRY), PAGE_READWRITE, &dwOld4); + WriteProcessMemory(hTargetProc, &pFlink->Blink, &pVEHHead, sizeof(pVEHHead), nullptr); + VirtualProtectEx(hTargetProc, pFlink, sizeof(LIST_ENTRY), dwOld3, &dwOld4); + VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY), PAGE_READWRITE, &dwOld2); - - WriteProcessMemory(hTargetProc, &VEHHead.Flink->Blink, &pVEHHead, sizeof(pVEHHead), nullptr); WriteProcessMemory(hTargetProc, pVEHHead, &VEHHead.Flink, sizeof(VEHHead.Flink), nullptr); - VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY), dwOld1, &dwOld2); + if (updated_peb) { peb.ProcessUsingVEH = FALSE; @@ -536,11 +567,12 @@ DWORD SR_FakeVEH(HANDLE hTargetProc, f_Routine pRoutine, void * pArg, DWORD & Ou LOG(2, "ReadProcessMemory failed: %08X\n", error_data.AdvErrorCode); } - VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY), PAGE_READWRITE, &dwOld2); - - WriteProcessMemory(hTargetProc, &VEHHead.Flink->Blink, &pVEHHead, sizeof(pVEHHead), nullptr); - WriteProcessMemory(hTargetProc, pVEHHead, &VEHHead.Flink, sizeof(VEHHead.Flink), nullptr); + VirtualProtectEx(hTargetProc, pFlink, sizeof(LIST_ENTRY), PAGE_READWRITE, &dwOld4); + WriteProcessMemory(hTargetProc, &pFlink->Blink, &pVEHHead, sizeof(DWORD), nullptr); + VirtualProtectEx(hTargetProc, pFlink, sizeof(LIST_ENTRY), dwOld3, &dwOld4); + VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY), PAGE_READWRITE, &dwOld2); + WriteProcessMemory(hTargetProc, pVEHHead, &VEHHead.Flink, sizeof(DWORD), nullptr); VirtualProtectEx(hTargetProc, pVEHHead, sizeof(LIST_ENTRY), dwOld1, &dwOld2); if (updated_peb) diff --git a/GH Injector Library/GH Injector Library.aps b/GH Injector Library/GH Injector Library.aps index 36f7749..e5e44ca 100644 Binary files a/GH Injector Library/GH Injector Library.aps and b/GH Injector Library/GH Injector Library.aps differ diff --git a/GH Injector Library/GH Injector Library.rc b/GH Injector Library/GH Injector Library.rc index 9a3ef16..7c071e1 100644 --- a/GH Injector Library/GH Injector Library.rc +++ b/GH Injector Library/GH Injector Library.rc @@ -51,8 +51,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 4,5,0,0 - PRODUCTVERSION 4,5,0,0 + FILEVERSION 4,6,0,0 + PRODUCTVERSION 4,6,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -69,10 +69,10 @@ BEGIN BEGIN VALUE "CompanyName", "Guided Hacking" VALUE "FileDescription", "Injection library of the GH Injector" - VALUE "FileVersion", "4.5.0.0" + VALUE "FileVersion", "4.6.0.0" VALUE "LegalCopyright", "Broihon (C) 1987 - 2035" VALUE "ProductName", "GH Injection Library" - VALUE "ProductVersion", "4.5.0.0" + VALUE "ProductVersion", "4.6.0.0" END END BLOCK "VarFileInfo" diff --git a/GH Injector Library/GH Injector Library.vcxproj b/GH Injector Library/GH Injector Library.vcxproj index f15931e..5f5ada8 100644 --- a/GH Injector Library/GH Injector Library.vcxproj +++ b/GH Injector Library/GH Injector Library.vcxproj @@ -22,7 +22,7 @@ 15.0 {AC732425-E265-40FF-842F-C59CECE9A96C} GHInjectorLibrary - 10.0 + 10.0.20348.0 diff --git a/GH Injector Library/Injection Generic.cpp b/GH Injector Library/Injection Generic.cpp index 8665f7c..4c16c62 100644 --- a/GH Injector Library/Injection Generic.cpp +++ b/GH Injector Library/Injection Generic.cpp @@ -331,20 +331,22 @@ DWORD __declspec(code_seg(".inj_sec$1")) __stdcall InjectionShell(INJECTION_DATA return INJ_ERR_LDRP_PREPROCESS_FAILED; } - ULONG_PTR unknown = 0; + NTSTATUS nt_out = 0; if (pData->OSBuildNumber >= g_Win11_21H2) //Win11 prototype has an additional argument { auto _LdrpLoadDllInternal = ReCa(f->LdrpLoadDllInternal); - pData->LastError = _LdrpLoadDllInternal(&pData->ModuleFileNameBundle.String, ctx, ctx_flags, 4, nullptr, nullptr, ReCa(&entry_out), &unknown, 0); + _LdrpLoadDllInternal(&pData->ModuleFileNameBundle.String, ctx, ctx_flags, 4, nullptr, nullptr, ReCa(&entry_out), &nt_out, 0); } else { - pData->LastError = f->LdrpLoadDllInternal(&pData->ModuleFileNameBundle.String, ctx, ctx_flags, 4, nullptr, nullptr, ReCa(&entry_out), &unknown); + f->LdrpLoadDllInternal(&pData->ModuleFileNameBundle.String, ctx, ctx_flags, 4, nullptr, nullptr, ReCa(&entry_out), &nt_out); } - if (NT_FAIL(pData->LastError)) + if (NT_FAIL(nt_out)) { + pData->LastError = (DWORD)nt_out; + return INJ_ERR_LDRPLDLLINTERNAL_FAILED; } } diff --git a/GH Injector Library/Manual Mapping.cpp b/GH Injector Library/Manual Mapping.cpp index f85a631..9f2527f 100644 --- a/GH Injector Library/Manual Mapping.cpp +++ b/GH Injector Library/Manual Mapping.cpp @@ -447,7 +447,7 @@ __forceinline NTSTATUS LoadModule(MANUAL_MAPPING_DATA * pData, MANUAL_MAPPING_FU DeleteObject(f, pModPathW); DeleteObject(f, ModNameW->szBuffer); DeleteObject(f, ModNameW); - + return ntRet; } @@ -470,16 +470,14 @@ __forceinline NTSTATUS LoadModule(MANUAL_MAPPING_DATA * pData, MANUAL_MAPPING_FU ctx->OriginalFullDllName = ModNameW->szBuffer; } - ULONG_PTR unknown3 = 0; - if (pData->OSBuildNumber >= g_Win11_21H2) { auto _LdrpLoadDllInternal = ReCa(f->LdrpLoadDllInternal); - ntRet = _LdrpLoadDllInternal(&pModPathW->String, ctx, ctx_flags, 4, nullptr, nullptr, ReCa(&entry_out), &unknown3, 0); + _LdrpLoadDllInternal(&pModPathW->String, ctx, ctx_flags, 4, nullptr, nullptr, ReCa(&entry_out), &ntRet, 0); } else { - ntRet = f->LdrpLoadDllInternal(&pModPathW->String, ctx, ctx_flags, 4, nullptr, nullptr, ReCa(&entry_out), &unknown3); + f->LdrpLoadDllInternal(&pModPathW->String, ctx, ctx_flags, 4, nullptr, nullptr, ReCa(&entry_out), &ntRet); } DeleteObject(f, ctx); @@ -817,6 +815,7 @@ DWORD __declspec(code_seg(".mmap_sec$1")) __stdcall ManualMapping_Shell(MANUAL_M veh_shell_data->ImgBase = ReCa(pBase); veh_shell_data->ImgSize = pOptionalHeader->SizeOfImage; veh_shell_data->OSVersion = pData->OSVersion; + veh_shell_data->_LdrpInvertedFunctionTable = f->LdrpInvertedFunctionTable; veh_shell_data->_LdrProtectMrdata = f->LdrProtectMrdata; @@ -945,6 +944,18 @@ DWORD __declspec(code_seg(".mmap_sec$1")) __stdcall ManualMapping_Shell(MANUAL_M if (NT_FAIL(ntRet)) { + if (ntRet == STATUS_APISET_NOT_HOSTED) + { + ++pImportDescr; + + if (pImportDescr >= ReCa(pBase + pImportDir->VirtualAddress + pImportDir->Size)) + { + break; + } + + continue; + } + //unable to load required library ErrorBreak = true; break; @@ -1046,12 +1057,23 @@ DWORD __declspec(code_seg(".mmap_sec$1")) __stdcall ManualMapping_Shell(MANUAL_M while (pDelayImportDescr && pDelayImportDescr->DllNameRVA) { char * szMod = ReCa(pBase + pDelayImportDescr->DllNameRVA); - HINSTANCE hDll = NULL; ntRet = LoadModule(pData, f, szMod, &hDll, &delay_imports); if (NT_FAIL(ntRet)) { + if (ntRet == STATUS_APISET_NOT_HOSTED) + { + ++pDelayImportDescr; + + if (pDelayImportDescr >= ReCa(pBase + pDelayImportDir->VirtualAddress + pDelayImportDir->Size)) + { + break; + } + + continue; + } + ErrorBreak = true; break; } @@ -1217,9 +1239,9 @@ DWORD __declspec(code_seg(".mmap_sec$1")) __stdcall ManualMapping_Shell(MANUAL_M bool partial = true; #ifdef _WIN64 - if (veh_shell_fixed) + if (veh_shell_fixed) //really needed for x64? { - //register VEH shell to fill handler list + //register VEH shell to fill SEH handler list pData->hVEH = f->RtlAddVectoredExceptionHandler(0, ReCa(pVEHShell)); } #endif diff --git a/GH Injector Library/NT Defs.h b/GH Injector Library/NT Defs.h index d1af95a..7ef69ed 100644 --- a/GH Injector Library/NT Defs.h +++ b/GH Injector Library/NT Defs.h @@ -30,6 +30,7 @@ #define STATUS_UNSUCCESSFUL 0xC0000001 #define STATUS_NOT_IMPLEMENTED 0xC0000002 #define STATUS_INFO_LENGTH_MISMATCH 0xC0000004 +#define STATUS_APISET_NOT_HOSTED 0xC0000481 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 diff --git a/GH Injector Library/NT Funcs.h b/GH Injector Library/NT Funcs.h index 4ad5c15..242f32f 100644 --- a/GH Injector Library/NT Funcs.h +++ b/GH Injector Library/NT Funcs.h @@ -160,7 +160,7 @@ using f_LdrpLoadDll = NTSTATUS (__fastcall *) LDR_DATA_TABLE_ENTRY ** ldr_out ); -using f_LdrpLoadDllInternal = NTSTATUS (__fastcall *) +using f_LdrpLoadDllInternal = VOID (__fastcall *) ( UNICODE_STRING * dll_path, LDRP_PATH_SEARCH_CONTEXT * search_path, @@ -169,10 +169,10 @@ using f_LdrpLoadDllInternal = NTSTATUS (__fastcall *) LDR_DATA_TABLE_ENTRY_WIN10 * Unknown1, //set to nullptr LDR_DATA_TABLE_ENTRY_WIN10 * Unknown2, //set to nullptr LDR_DATA_TABLE_ENTRY_WIN10 ** ldr_out, - ULONG_PTR * Unknown3 //set to pointer to nullptr + NTSTATUS * ntRet ); -using f_LdrpLoadDllInternal_WIN11 = NTSTATUS (__fastcall *) +using f_LdrpLoadDllInternal_WIN11 = VOID (__fastcall *) ( UNICODE_STRING * dll_path, LDRP_PATH_SEARCH_CONTEXT * search_path, @@ -181,7 +181,7 @@ using f_LdrpLoadDllInternal_WIN11 = NTSTATUS (__fastcall *) LDR_DATA_TABLE_ENTRY_WIN11 * Unknown1, //set to nullptr LDR_DATA_TABLE_ENTRY_WIN11 * Unknown2, //set to nullptr LDR_DATA_TABLE_ENTRY_WIN11 ** ldr_out, - ULONG_PTR * Unknown3, //set to pointer to nullptr + NTSTATUS * ntRet, ULONG Unknown4 //set to 0 ); @@ -476,9 +476,9 @@ using f_LdrpTlsList = LIST_ENTRY *; using f_RtlpUnhandledExceptionFilter = ULONG_PTR *; //encrypted with RtlEncodePointer, points to kernel32.UnhandledExceptionFilter //kernel32.dll: -using f_UnhandledExceptionFilter = ULONG_PTR *; //PTOP_LEVEL_EXCEPTION_FILTER +using f_UnhandledExceptionFilter = ULONG_PTR *; //PTOP_LEVEL_EXCEPTION_FILTER using f_SingleHandler = ULONG_PTR *; //encrypted with RtlEncodePointer, points to kernel32.DefaultHandler -using f_DefaultHandler = ULONG_PTR *; //PTOP_LEVEL_EXCEPTION_FILTER +using f_DefaultHandler = ULONG_PTR *; //PTOP_LEVEL_EXCEPTION_FILTER #pragma endregion diff --git a/GH Injector Library/NtCreateThreadEx.cpp b/GH Injector Library/NtCreateThreadEx.cpp index debb60c..218ac67 100644 --- a/GH Injector Library/NtCreateThreadEx.cpp +++ b/GH Injector Library/NtCreateThreadEx.cpp @@ -55,7 +55,8 @@ DWORD SR_NtCreateThreadEx(HANDLE hTargetProc, f_Routine pRoutine, void * pArg, D if (Flags & INJ_CTF_SKIP_THREAD_ATTACH) { - ntFlags |= THREAD_CREATE_FLAGS_SKIP_THREAD_ATTACH; + ntFlags |= THREAD_CREATE_FLAGS_CREATE_SUSPENDED; + //ntFlags |= THREAD_CREATE_FLAGS_SKIP_THREAD_ATTACH; } if (Flags & INJ_CTF_FAKE_TEB_CLIENT_ID) @@ -297,7 +298,61 @@ DWORD SR_NtCreateThreadEx(HANDLE hTargetProc, f_Routine pRoutine, void * pArg, D } LOG(2, "Thread redirected\n"); + } + + if (Flags & INJ_CTF_SKIP_THREAD_ATTACH) + { + THREAD_BASIC_INFORMATION tbi{ 0 }; + ntRet = NATIVE::NtQueryInformationThread(hThread, THREADINFOCLASS::ThreadBasicInformation, &tbi, sizeof(tbi), nullptr); + if (NT_FAIL(ntRet) || !tbi.TebBaseAddress) + { + INIT_ERROR_DATA(error_data, ntRet); + + LOG(2, "NtQueryInformationThread failed: %08X\n", error_data.AdvErrorCode); + + TerminateThread(hThread, 0); + CloseHandle(hThread); + VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); + + return SR_NTCTE_ERR_NTQIT_FAIL; + } + + WORD same_teb_flags = 0; + if (!ReadProcessMemory(hTargetProc, ReCa(tbi.TebBaseAddress) + TEB_SameTebFlags, &same_teb_flags, sizeof(same_teb_flags), nullptr)) + { + INIT_ERROR_DATA(error_data, GetLastError()); + + LOG(2, "ReadProcessMemory failed: %08X\n", error_data.AdvErrorCode); + + TerminateThread(hThread, 0); + CloseHandle(hThread); + + VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); + + return SR_NTCTE_ERR_RPM_FAIL; + } + + same_teb_flags |= TEB_SAMETEB_FLAGS_SkipAttach; + if (!WriteProcessMemory(hTargetProc, ReCa(tbi.TebBaseAddress) + TEB_SameTebFlags, &same_teb_flags, sizeof(same_teb_flags), nullptr)) + { + INIT_ERROR_DATA(error_data, GetLastError()); + + LOG(2, "WriteProcessMemory failed: %08X\n", error_data.AdvErrorCode); + + TerminateThread(hThread, 0); + CloseHandle(hThread); + + VirtualFreeEx(hTargetProc, pMem, 0, MEM_RELEASE); + + return SR_NTCTE_ERR_WPM_FAIL; + } + + LOG(2, "Fixed TEB flags\n"); + } + + if (ntFlags & THREAD_CREATE_FLAGS_CREATE_SUSPENDED) + { if (ResumeThread(hThread) == (DWORD)-1) { INIT_ERROR_DATA(error_data, GetLastError()); diff --git a/GH Injector Library/Process Info.h b/GH Injector Library/Process Info.h index 08eec5a..fa8c562 100644 --- a/GH Injector Library/Process Info.h +++ b/GH Injector Library/Process Info.h @@ -19,7 +19,8 @@ #define TEB_WowTebOffset_64 0x180C //Win10+ only -#define TEB_SAMETEB_FLAGS_LoaderWorker 0x2000 +#define TEB_SAMETEB_FLAGS_SkipAttach 0x0008 +#define TEB_SAMETEB_FLAGS_LoaderWorker 0x2000 #ifdef _WIN64 #define TEB_SameTebFlags TEB_SameTebFlags_64 diff --git a/GH Injector Library/Start Routine.h b/GH Injector Library/Start Routine.h index d2b6d7d..8ad9b91 100644 --- a/GH Injector Library/Start Routine.h +++ b/GH Injector Library/Start Routine.h @@ -55,6 +55,7 @@ ALIGN struct SR_REMOTE_DATA_VEH ALIGN f_LdrProtectMrdata pLdrProtectMrdata = nullptr; ALIGN LIST_ENTRY * pListHead = nullptr; ALIGN LIST_ENTRY * pFakeEntry = nullptr; + ALIGN bool bRemoveVEHBit = false; }; #define PTR_64_ARR 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -63,8 +64,8 @@ ALIGN struct SR_REMOTE_DATA_VEH #define SR_REMOTE_DATA_BUFFER_64 PTR_64_ARR PTR_64_ARR PTR_64_ARR PTR_64_ARR PTR_64_ARR PTR_64_ARR #define SR_REMOTE_DATA_BUFFER_86 PTR_86_ARR PTR_86_ARR PTR_86_ARR PTR_86_ARR PTR_86_ARR PTR_86_ARR -#define SR_REMOTE_DATA_BUFFER_VEH_64 SR_REMOTE_DATA_BUFFER_64 PTR_64_ARR PTR_64_ARR PTR_64_ARR -#define SR_REMOTE_DATA_BUFFER_VEH_86 SR_REMOTE_DATA_BUFFER_86 PTR_86_ARR PTR_86_ARR PTR_86_ARR +#define SR_REMOTE_DATA_BUFFER_VEH_64 SR_REMOTE_DATA_BUFFER_64 PTR_64_ARR PTR_64_ARR PTR_64_ARR PTR_64_ARR +#define SR_REMOTE_DATA_BUFFER_VEH_86 SR_REMOTE_DATA_BUFFER_86 PTR_86_ARR PTR_86_ARR PTR_86_ARR PTR_86_ARR #ifdef _WIN64 #define SR_REMOTE_DATA_BUFFER SR_REMOTE_DATA_BUFFER_64 @@ -125,6 +126,7 @@ ALIGN_86 struct SR_REMOTE_DATA_VEH_WOW64 ALIGN_86 DWORD pLdrProtectMrdata = 0; ALIGN_86 DWORD pListHead = 0; ALIGN_86 DWORD pFakeEntry = 0; + ALIGN_86 DWORD bRemoveVEHBit = 0; }; #define SR_REMOTE_DATA_BUFFER_WOW64 SR_REMOTE_DATA_BUFFER_86 diff --git a/GH Injector Library/Tools.h b/GH Injector Library/Tools.h index e5b15a8..7d9e1dc 100644 --- a/GH Injector Library/Tools.h +++ b/GH Injector Library/Tools.h @@ -6,11 +6,11 @@ #define GH_INJ_MOD_NAME64W L"GH Injector - x64.dll" #define GH_INJ_MOD_NAME86W L"GH Injector - x86.dll" -#define GH_INJ_VERSIONW L"4.5" +#define GH_INJ_VERSIONW L"4.6" #define GH_INJ_MOD_NAME64A "GH Injector - x64.dll" #define GH_INJ_MOD_NAME86A "GH Injector - x86.dll" -#define GH_INJ_VERSIONA "4.5" +#define GH_INJ_VERSIONA "4.6" #ifdef _WIN64 #define GH_INJ_MOD_NAMEW GH_INJ_MOD_NAME64W diff --git a/GH Injector Library/WOW64 Shells.h b/GH Injector Library/WOW64 Shells.h index 2575f45..ec7c7ae 100644 --- a/GH Injector Library/WOW64 Shells.h +++ b/GH Injector Library/WOW64 Shells.h @@ -4,29 +4,29 @@ inline unsigned char InjectionShell_WOW64[] = { - 0x55, 0x8B, 0xEC, 0x83, 0xEC, 0x28, 0x53, 0x56, 0x8B, 0x75, 0x08, 0x57, 0x85, 0xF6, 0x75, 0x0C, 0x8D, 0x46, 0x01, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x4E, 0x0C, 0x8D, 0x56, 0x18, 0x89, 0x56, 0x14, 0x85, 0xC9, 0x75, 0x2E, 0x8B, 0x86, 0x88, 0x03, 0x00, 0x00, 0x51, 0x51, 0x52, 0xFF, 0xD0, 0x89, 0x06, 0x85, 0xC0, 0x0F, 0x85, 0xC9, 0x00, 0x00, 0x00, 0x8B, 0x86, 0x9C, 0x03, 0x00, 0x00, 0xFF, 0xD0, 0x89, 0x46, 0x04, 0xB8, 0x28, 0x00, 0x00, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x86, 0x78, 0x03, 0x00, 0x00, 0x83, 0xF9, 0x01, 0x75, 0x3C, 0xC7, 0x45, 0xF4, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x83, 0xF8, 0x3D, 0x75, 0x0B, 0x8B, 0x86, 0xC4, 0x03, 0x00, 0x00, 0x8B, 0x40, 0x04, 0xEB, 0x07, 0x80, 0x4D, 0x08, 0x01, 0x8B, 0x45, 0x08, 0x8B, 0x96, 0x8C, 0x03, 0x00, 0x00, 0x8D, 0x4E, 0x10, 0x56, 0x51, 0x8D, 0x4D, 0xF4, 0x51, 0x50, 0xFF, 0xD2, 0x89, 0x46, 0x04, 0xEB, 0x69, 0x83, 0xF8, 0x64, 0x0F, 0x82, 0xF4, 0x00, 0x00, 0x00, 0x8D, 0xBE, 0x28, 0x03, 0x00, 0x00, 0x33, 0xC0, 0x89, 0x57, 0x10, 0x81, 0xBE, 0x7C, 0x03, 0x00, 0x00, 0x5A, 0x29, 0x00, 0x00, 0xC7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x89, 0x45, 0xF8, 0x75, 0x06, 0x89, 0x57, 0x0C, 0x89, 0x47, 0x10, 0x83, 0x7E, 0x0C, 0x02, 0x8D, 0x4E, 0x10, 0x75, 0x4B, 0x81, 0xBE, 0x7C, 0x03, 0x00, 0x00, 0xEE, 0x42, 0x00, 0x00, 0x8D, 0x55, 0x08, 0x8B, 0x9E, 0x90, 0x03, 0x00, 0x00, 0x52, 0x8B, 0xD7, 0x77, 0x2E, 0x6A, 0x01, 0x50, 0xFF, 0xD3, 0x89, 0x46, 0x04, 0x8B, 0x45, 0x08, 0x85, 0xC0, 0x0F, 0x84, 0x78, 0x01, 0x00, 0x00, 0x8B, 0x40, 0x18, 0x89, 0x06, 0x8B, 0x46, 0x08, 0xA8, 0x07, 0x0F, 0x85, 0x76, 0x01, 0x00, 0x00, 0x33, 0xC0, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x50, 0xFF, 0xD3, 0xEB, 0xD2, 0x8D, 0x55, 0xF8, 0x8D, 0x86, 0x28, 0x02, 0x00, 0x00, 0x52, 0x89, 0x86, 0x24, 0x02, 0x00, 0x00, 0x8D, 0x96, 0x20, 0x02, 0x00, 0x00, 0x8B, 0x86, 0x98, 0x03, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xD0, 0x81, 0xBE, 0x7C, 0x03, 0x00, 0x00, 0xF0, 0x55, 0x00, 0x00, 0x8D, 0x4D, 0xF4, 0x89, 0x46, 0x04, 0x8B, 0xD7, 0x8B, 0x86, 0x94, 0x03, 0x00, 0x00, 0xC7, 0x45, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x72, 0x1D, 0x6A, 0x00, 0x51, 0x8D, 0x4D, 0x08, 0x51, 0x6A, 0x00, 0x6A, 0x00, 0x6A, 0x04, 0xFF, 0x75, 0xF8, 0x8D, 0x8E, 0x20, 0x02, 0x00, 0x00, 0xFF, 0xD0, 0xE9, 0x74, 0xFF, 0xFF, 0xFF, 0x51, 0x8D, 0x4D, 0x08, 0x51, 0x6A, 0x00, 0x6A, 0x00, 0x6A, 0x04, 0xFF, 0x75, 0xF8, 0x8D, 0x8E, 0x20, 0x02, 0x00, 0x00, 0xFF, 0xD0, 0xE9, 0x59, 0xFF, 0xFF, 0xFF, 0x83, 0xF8, 0x3F, 0x75, 0x47, 0x83, 0xF9, 0x02, 0x0F, 0x85, 0xFF, 0x03, 0x00, 0x00, 0x8B, 0x86, 0x90, 0x03, 0x00, 0x00, 0x8D, 0x4D, 0xF4, 0x51, 0x8D, 0x4D, 0x08, 0xC7, 0x45, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x51, 0x0F, 0x57, 0xC0, 0xC7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x11, 0x45, 0xE0, 0x6A, 0x01, 0x89, 0x55, 0xEC, 0x8D, 0x4E, 0x10, 0x6A, 0x00, 0x8D, 0x55, 0xE0, 0xC7, 0x45, 0xF4, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xD0, 0xE9, 0x0D, 0xFF, 0xFF, 0xFF, 0x83, 0xF8, 0x3E, 0x75, 0x4B, 0x83, 0xF9, 0x02, 0x0F, 0x85, 0xB3, 0x03, 0x00, - 0x00, 0x8B, 0x8E, 0x90, 0x03, 0x00, 0x00, 0x8D, 0x45, 0xF4, 0x50, 0x8D, 0x45, 0x08, 0xC7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x50, 0x6A, 0x01, 0x6A, 0x00, 0x8D, 0x45, 0xDC, 0xC7, 0x45, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x50, 0x0F, 0x57, 0xC0, 0x8D, 0x46, 0x10, 0x0F, 0x11, 0x45, 0xDC, 0x50, 0x66, 0x0F, 0xD6, 0x45, 0xEC, 0x89, 0x55, 0xE0, 0xC6, 0x45, 0xE4, 0x01, 0xFF, 0xD1, 0xE9, 0xBD, 0xFE, 0xFF, 0xFF, 0x83, 0xF8, 0x3D, 0x0F, 0x85, 0x68, 0x03, 0x00, 0x00, 0x83, 0xF9, 0x02, 0x0F, 0x85, 0x5F, 0x03, 0x00, 0x00, 0x8B, 0x8E, 0x90, 0x03, 0x00, 0x00, 0x8D, 0x45, 0x08, 0x50, 0x6A, 0x00, 0x6A, 0x01, 0x6A, 0x00, 0xFF, 0xB6, 0xC4, 0x03, 0x00, 0x00, 0x8D, 0x46, 0x10, 0xC7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xD1, 0x89, 0x46, 0x04, 0x8B, 0x45, 0x08, 0x85, 0xC0, 0x0F, 0x85, 0x88, 0xFE, 0xFF, 0xFF, 0xB8, 0x3A, 0x00, 0x00, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x64, 0x8B, 0x3D, 0x30, 0x00, 0x00, 0x00, 0x85, 0xFF, 0x75, 0x0C, 0x8D, 0x47, 0x2C, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x4F, 0x0C, 0x85, 0xC9, 0x0F, 0x84, 0xF0, 0x02, 0x00, 0x00, 0x83, 0x79, 0x0C, 0x00, 0x0F, 0x84, 0xE6, 0x02, 0x00, 0x00, 0xA8, 0x03, 0x0F, 0x84, 0x8C, 0x00, 0x00, 0x00, 0x8B, 0x0E, 0x8B, 0x41, 0x3C, 0x8B, 0x44, 0x08, 0x54, 0x89, 0x4D, 0xF8, 0x8D, 0x4D, 0xF4, 0x51, 0x6A, 0x40, 0x8D, 0x4D, 0x08, 0x89, 0x45, 0x08, 0x8B, 0x86, 0xAC, 0x03, 0x00, 0x00, 0x51, 0x8D, 0x4D, 0xF8, 0xC7, 0x45, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x51, 0x6A, 0xFF, 0xFF, 0xD0, 0x89, 0x46, 0x04, 0x8B, 0x46, 0x08, 0xA8, 0x01, 0x74, 0x10, 0xFF, 0x75, 0x08, 0x8B, 0x86, 0xA4, 0x03, 0x00, 0x00, 0xFF, 0x75, 0xF8, 0xFF, 0xD0, 0xEB, 0x28, 0xA8, 0x02, 0x74, 0x24, 0x8B, 0x47, 0x0C, 0x8B, 0x40, 0x0C, 0x8B, 0x00, 0x85, 0xC0, 0x0F, 0x84, 0x82, 0x02, 0x00, 0x00, 0xFF, 0x75, 0x08, 0xFF, 0x70, 0x18, 0x8B, 0x86, 0xA0, 0x03, 0x00, 0x00, 0xFF, 0x75, 0xF8, 0xFF, 0xD0, 0x83, 0xC4, 0x0C, 0x8B, 0x86, 0xAC, 0x03, 0x00, 0x00, 0x8D, 0x4D, 0xF4, 0x51, 0xFF, 0x75, 0xF4, 0x8D, 0x4D, 0x08, 0x51, 0x8D, 0x4D, 0xF8, 0x51, 0x6A, 0xFF, 0xFF, 0xD0, 0x89, 0x46, 0x04, 0xF6, 0x46, 0x08, 0x04, 0x0F, 0x84, 0xC0, 0xFD, 0xFF, 0xFF, 0x8B, 0x47, 0x0C, 0x8B, 0x78, 0x0C, 0x83, 0xC0, 0x0C, 0x3B, 0xF8, 0x74, 0x0F, 0x8B, 0x0E, 0x8B, 0x57, 0x18, 0x3B, 0xD1, 0x74, 0x14, 0x8B, 0x3F, 0x3B, 0xF8, 0x75, 0xF3, 0xB8, 0x13, 0x00, 0x00, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x8E, 0x80, 0x03, 0x00, 0x00, 0x8B, 0x9E, 0x84, 0x03, 0x00, 0x00, 0x83, 0xC1, 0x0F, 0x03, 0xD9, 0x83, 0xE3, 0xF0, 0x89, 0x13, 0x8B, 0x47, 0x20, 0x89, 0x43, 0x04, 0x8B, 0x86, 0x78, 0x03, 0x00, 0x00, 0x89, 0x43, 0x08, 0x8B, 0x86, 0xB8, 0x03, 0x00, 0x00, 0x89, 0x43, 0x0C, 0x8B, 0x86, 0xB4, 0x03, 0x00, 0x00, 0x89, 0x43, 0x10, 0x8B, 0x8E, 0x80, 0x03, 0x00, 0x00, 0x85, 0xC9, 0x74, 0x34, 0x8B, 0x86, 0x84, 0x03, 0x00, 0x00, 0x83, 0xC0, 0xFC, 0x03, 0xC1, 0x3B, 0xC8, 0x77, 0x25, 0x0F, 0x1F, 0x40, 0x00, 0x81, 0x39, 0x0C, 0xB0, 0xCE, 0xFA, 0x74, 0x07, 0x41, 0x3B, 0xC8, 0x76, 0xF3, 0xEB, 0x12, 0x89, 0x19, 0xFF, 0xB6, 0x80, 0x03, 0x00, 0x00, 0x8B, - 0x86, 0xB0, 0x03, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xD0, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x8B, 0x4F, 0x04, 0x85, 0xC9, 0x74, 0x0A, 0x89, 0x48, 0x04, 0x8B, 0x4F, 0x04, 0x8B, 0x07, 0x89, 0x01, 0x8B, 0x47, 0x10, 0x85, 0xC0, 0x74, 0x12, 0x8B, 0x4F, 0x14, 0x85, 0xC9, 0x74, 0x0B, 0x89, 0x48, 0x04, 0x8B, 0x4F, 0x14, 0x8B, 0x47, 0x10, 0x89, 0x01, 0x8B, 0x47, 0x08, 0x85, 0xC0, 0x74, 0x12, 0x8B, 0x4F, 0x0C, 0x85, 0xC9, 0x74, 0x0B, 0x89, 0x48, 0x04, 0x8B, 0x4F, 0x0C, 0x8B, 0x47, 0x08, 0x89, 0x01, 0x8B, 0x47, 0x3C, 0x85, 0xC0, 0x74, 0x12, 0x8B, 0x4F, 0x40, 0x85, 0xC9, 0x74, 0x0B, 0x89, 0x48, 0x04, 0x8B, 0x4F, 0x40, 0x8B, 0x47, 0x3C, 0x89, 0x01, 0x33, 0xC0, 0xC7, 0x45, 0x08, 0x2C, 0x00, 0x00, 0x00, 0x83, 0xBE, 0x78, 0x03, 0x00, 0x00, 0x3D, 0xBB, 0xB8, 0x00, 0x00, 0x00, 0x89, 0x45, 0xF4, 0x75, 0x55, 0x8B, 0x47, 0x50, 0x85, 0xC0, 0x74, 0x12, 0x8B, 0x4F, 0x54, 0x85, 0xC9, 0x74, 0x0B, 0x89, 0x48, 0x04, 0x8B, 0x4F, 0x54, 0x8B, 0x47, 0x50, 0x89, 0x01, 0x8B, 0x47, 0x58, 0x85, 0xC0, 0x74, 0x12, 0x8B, 0x4F, 0x5C, 0x85, 0xC9, 0x74, 0x0B, 0x89, 0x48, 0x04, 0x8B, 0x4F, 0x5C, 0x8B, 0x47, 0x58, 0x89, 0x01, 0x8B, 0x47, 0x60, 0x85, 0xC0, 0x74, 0x12, 0x8B, 0x4F, 0x64, 0x85, 0xC9, 0x74, 0x0B, 0x89, 0x48, 0x04, 0x8B, 0x4F, 0x64, 0x8B, 0x47, 0x60, 0x89, 0x01, 0xBB, 0x78, 0x00, 0x00, 0x00, 0xE9, 0x8C, 0x00, 0x00, 0x00, 0x8D, 0x47, 0x68, 0x50, 0xFF, 0xB6, 0xBC, 0x03, 0x00, 0x00, 0x8B, 0x86, 0xA8, 0x03, 0x00, 0x00, 0xFF, 0xD0, 0x8D, 0x47, 0x74, 0x50, 0xFF, 0xB6, 0xC0, 0x03, 0x00, 0x00, 0x8B, 0x86, 0xA8, 0x03, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x78, 0x03, 0x00, 0x00, 0x83, 0xF8, 0x3E, 0x75, 0x0C, 0x8D, 0x58, 0x5A, 0xC7, 0x45, 0x08, 0x30, 0x00, 0x00, 0x00, 0xEB, 0x4B, 0x83, 0xF8, 0x3F, 0x75, 0x0C, 0x8D, 0x58, 0x61, 0xC7, 0x45, 0x08, 0x30, 0x00, 0x00, 0x00, 0xEB, 0x3A, 0x83, 0xF8, 0x64, 0x72, 0x35, 0x8B, 0x86, 0x7C, 0x03, 0x00, 0x00, 0x3D, 0x5A, 0x29, 0x00, 0x00, 0x77, 0x07, 0xBB, 0xA0, 0x00, 0x00, 0x00, 0xEB, 0x21, 0x3D, 0x39, 0x38, 0x00, 0x00, 0x77, 0x07, 0xBB, 0xA4, 0x00, 0x00, 0x00, 0xEB, 0x13, 0xC7, 0x45, 0x08, 0x2C, 0x00, 0x00, 0x00, 0x3D, 0x64, 0x4A, 0x00, 0x00, 0x77, 0x05, 0xBB, 0xA8, 0x00, 0x00, 0x00, 0x8B, 0x47, 0x50, 0x89, 0x45, 0xF4, 0x0F, 0xB7, 0x47, 0x2E, 0x50, 0xFF, 0x77, 0x30, 0x8B, 0x86, 0xA4, 0x03, 0x00, 0x00, 0xFF, 0xD0, 0x0F, 0xB7, 0x47, 0x26, 0x50, 0xFF, 0x77, 0x28, 0x8B, 0x86, 0xA4, 0x03, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0xA4, 0x03, 0x00, 0x00, 0x53, 0x57, 0xFF, 0xD0, 0x8B, 0x45, 0xF4, 0x85, 0xC0, 0x0F, 0x84, 0x8F, 0xFB, 0xFF, 0xFF, 0xFF, 0x75, 0x08, 0x50, 0x8B, 0x86, 0xA4, 0x03, 0x00, 0x00, 0xFF, 0xD0, 0x33, 0xC0, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0xB8, 0x2D, 0x00, 0x00, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x5F, 0x5E, 0xB8, 0x0E, 0x00, 0x00, 0x00, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC + 0x55, 0x8B, 0xEC, 0x83, 0xEC, 0x28, 0x53, 0x56, 0x8B, 0x75, 0x08, 0x57, 0x85, 0xF6, 0x75, 0x0C, 0x8D, 0x46, 0x01, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x4E, 0x0C, 0x8D, 0x56, 0x18, 0x89, 0x56, 0x14, 0x85, 0xC9, 0x75, 0x2E, 0x8B, 0x86, 0x88, 0x03, 0x00, 0x00, 0x51, 0x51, 0x52, 0xFF, 0xD0, 0x89, 0x06, 0x85, 0xC0, 0x0F, 0x85, 0xC9, 0x00, 0x00, 0x00, 0x8B, 0x86, 0x9C, 0x03, 0x00, 0x00, 0xFF, 0xD0, 0x89, 0x46, 0x04, 0xB8, 0x28, 0x00, 0x00, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x86, 0x78, 0x03, 0x00, 0x00, 0x83, 0xF9, 0x01, 0x75, 0x3C, 0xC7, 0x45, 0xF4, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x83, 0xF8, 0x3D, 0x75, 0x0B, 0x8B, 0x86, 0xC4, 0x03, 0x00, 0x00, 0x8B, 0x40, 0x04, 0xEB, 0x07, 0x80, 0x4D, 0x08, 0x01, 0x8B, 0x45, 0x08, 0x8B, 0x96, 0x8C, 0x03, 0x00, 0x00, 0x8D, 0x4E, 0x10, 0x56, 0x51, 0x8D, 0x4D, 0xF4, 0x51, 0x50, 0xFF, 0xD2, 0x89, 0x46, 0x04, 0xEB, 0x69, 0x83, 0xF8, 0x64, 0x0F, 0x82, 0x08, 0x01, 0x00, 0x00, 0x8D, 0xBE, 0x28, 0x03, 0x00, 0x00, 0x33, 0xC0, 0x89, 0x57, 0x10, 0x81, 0xBE, 0x7C, 0x03, 0x00, 0x00, 0x5A, 0x29, 0x00, 0x00, 0xC7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x89, 0x45, 0xF8, 0x75, 0x06, 0x89, 0x57, 0x0C, 0x89, 0x47, 0x10, 0x83, 0x7E, 0x0C, 0x02, 0x8D, 0x4E, 0x10, 0x75, 0x4B, 0x81, 0xBE, 0x7C, 0x03, 0x00, 0x00, 0xEE, 0x42, 0x00, 0x00, 0x8D, 0x55, 0x08, 0x8B, 0x9E, 0x90, 0x03, 0x00, 0x00, 0x52, 0x8B, 0xD7, 0x77, 0x2E, 0x6A, 0x01, 0x50, 0xFF, 0xD3, 0x89, 0x46, 0x04, 0x8B, 0x45, 0x08, 0x85, 0xC0, 0x0F, 0x84, 0x8C, 0x01, 0x00, 0x00, 0x8B, 0x40, 0x18, 0x89, 0x06, 0x8B, 0x46, 0x08, 0xA8, 0x07, 0x0F, 0x85, 0x8A, 0x01, 0x00, 0x00, 0x33, 0xC0, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x50, 0xFF, 0xD3, 0xEB, 0xD2, 0x8D, 0x55, 0xF8, 0x8D, 0x86, 0x28, 0x02, 0x00, 0x00, 0x52, 0x89, 0x86, 0x24, 0x02, 0x00, 0x00, 0x8D, 0x96, 0x20, 0x02, 0x00, 0x00, 0x8B, 0x86, 0x98, 0x03, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xD0, 0x81, 0xBE, 0x7C, 0x03, 0x00, 0x00, 0xF0, 0x55, 0x00, 0x00, 0x8D, 0x4D, 0xF4, 0x89, 0x46, 0x04, 0x8B, 0xD7, 0x8B, 0x86, 0x94, 0x03, 0x00, 0x00, 0xC7, 0x45, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x72, 0x1A, 0x6A, 0x00, 0x51, 0x8D, 0x4D, 0x08, 0x51, 0x6A, 0x00, 0x6A, 0x00, 0x6A, 0x04, 0xFF, 0x75, 0xF8, 0x8D, 0x8E, 0x20, 0x02, 0x00, 0x00, 0xFF, 0xD0, 0xEB, 0x16, 0x51, 0x8D, 0x4D, 0x08, 0x51, 0x6A, 0x00, 0x6A, 0x00, 0x6A, 0x04, 0xFF, 0x75, 0xF8, 0x8D, 0x8E, 0x20, 0x02, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x45, 0xF4, 0x85, 0xC0, 0x0F, 0x89, 0x59, 0xFF, 0xFF, 0xFF, 0x89, 0x46, 0x04, 0xB8, 0x2B, 0x00, 0x00, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x83, 0xF8, 0x3F, 0x75, 0x47, 0x83, 0xF9, 0x02, 0x0F, 0x85, 0xFB, 0x03, 0x00, 0x00, 0x8B, 0x86, 0x90, 0x03, 0x00, 0x00, 0x8D, 0x4D, 0xF4, 0x51, 0x8D, 0x4D, 0x08, 0xC7, 0x45, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x51, 0x0F, 0x57, 0xC0, 0xC7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x11, 0x45, 0xE0, 0x6A, 0x01, 0x89, 0x55, 0xEC, 0x8D, 0x4E, 0x10, 0x6A, 0x00, 0x8D, 0x55, 0xE0, 0xC7, 0x45, 0xF4, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xD0, 0xE9, 0xF9, 0xFE, 0xFF, 0xFF, 0x83, 0xF8, 0x3E, 0x75, 0x4B, 0x83, 0xF9, 0x02, 0x0F, 0x85, 0xAF, 0x03, 0x00, 0x00, 0x8B, 0x8E, 0x90, 0x03, 0x00, 0x00, 0x8D, 0x45, 0xF4, 0x50, 0x8D, 0x45, 0x08, 0xC7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x50, 0x6A, 0x01, 0x6A, 0x00, 0x8D, 0x45, 0xDC, 0xC7, 0x45, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x50, 0x0F, 0x57, 0xC0, 0x8D, 0x46, 0x10, 0x0F, 0x11, 0x45, 0xDC, 0x50, 0x66, 0x0F, 0xD6, 0x45, 0xEC, 0x89, 0x55, 0xE0, 0xC6, 0x45, 0xE4, 0x01, 0xFF, 0xD1, 0xE9, 0xA9, 0xFE, 0xFF, 0xFF, 0x83, 0xF8, 0x3D, 0x0F, 0x85, 0x64, 0x03, 0x00, 0x00, 0x83, 0xF9, 0x02, 0x0F, 0x85, 0x5B, 0x03, 0x00, 0x00, 0x8B, 0x8E, 0x90, 0x03, 0x00, 0x00, 0x8D, 0x45, 0x08, 0x50, 0x6A, 0x00, 0x6A, 0x01, 0x6A, 0x00, 0xFF, 0xB6, 0xC4, 0x03, 0x00, 0x00, 0x8D, 0x46, 0x10, 0xC7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xD1, 0x89, 0x46, 0x04, 0x8B, 0x45, 0x08, 0x85, 0xC0, 0x0F, 0x85, 0x74, 0xFE, 0xFF, 0xFF, 0xB8, 0x3A, 0x00, 0x00, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x64, 0x8B, 0x3D, 0x30, 0x00, 0x00, 0x00, 0x85, 0xFF, 0x75, 0x0C, 0x8D, 0x47, 0x2C, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x4F, 0x0C, 0x85, 0xC9, 0x0F, 0x84, 0xEC, 0x02, 0x00, 0x00, 0x83, 0x79, 0x0C, 0x00, 0x0F, 0x84, 0xE2, 0x02, 0x00, 0x00, 0xA8, 0x03, 0x0F, 0x84, 0x8C, 0x00, 0x00, 0x00, 0x8B, 0x0E, 0x8B, 0x41, 0x3C, 0x8B, 0x44, 0x08, 0x54, 0x89, 0x4D, 0xF8, 0x8D, 0x4D, 0xF4, 0x51, 0x6A, 0x40, 0x8D, 0x4D, 0x08, 0x89, 0x45, 0x08, 0x8B, 0x86, 0xAC, 0x03, 0x00, 0x00, 0x51, 0x8D, 0x4D, 0xF8, 0xC7, 0x45, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x51, 0x6A, 0xFF, 0xFF, 0xD0, 0x89, 0x46, 0x04, 0x8B, 0x46, 0x08, 0xA8, 0x01, 0x74, 0x10, 0xFF, 0x75, 0x08, 0x8B, 0x86, 0xA4, 0x03, 0x00, 0x00, 0xFF, 0x75, 0xF8, 0xFF, 0xD0, 0xEB, 0x28, 0xA8, 0x02, 0x74, 0x24, 0x8B, 0x47, 0x0C, 0x8B, 0x40, 0x0C, 0x8B, 0x00, 0x85, 0xC0, 0x0F, 0x84, 0x7E, 0x02, 0x00, 0x00, 0xFF, 0x75, 0x08, 0xFF, 0x70, 0x18, 0x8B, 0x86, 0xA0, 0x03, 0x00, 0x00, 0xFF, 0x75, 0xF8, 0xFF, 0xD0, 0x83, 0xC4, 0x0C, 0x8B, 0x86, 0xAC, 0x03, 0x00, 0x00, 0x8D, 0x4D, 0xF4, 0x51, 0xFF, 0x75, 0xF4, 0x8D, 0x4D, 0x08, 0x51, 0x8D, 0x4D, 0xF8, 0x51, 0x6A, 0xFF, 0xFF, 0xD0, 0x89, 0x46, 0x04, 0xF6, 0x46, 0x08, 0x04, 0x0F, 0x84, 0xAC, 0xFD, 0xFF, 0xFF, 0x8B, 0x47, 0x0C, 0x8B, 0x78, 0x0C, 0x83, 0xC0, 0x0C, 0x3B, 0xF8, 0x74, 0x0F, 0x8B, 0x0E, 0x8B, 0x57, 0x18, 0x3B, 0xD1, 0x74, 0x14, 0x8B, 0x3F, 0x3B, 0xF8, 0x75, 0xF3, 0xB8, 0x13, 0x00, 0x00, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x8E, 0x80, 0x03, 0x00, 0x00, 0x8B, 0x9E, 0x84, 0x03, 0x00, 0x00, 0x83, 0xC1, 0x0F, 0x03, 0xD9, 0x83, 0xE3, 0xF0, 0x89, 0x13, 0x8B, 0x47, 0x20, 0x89, 0x43, 0x04, 0x8B, 0x86, 0x78, 0x03, 0x00, 0x00, 0x89, 0x43, 0x08, 0x8B, 0x86, 0xB8, 0x03, 0x00, 0x00, 0x89, 0x43, 0x0C, 0x8B, 0x86, 0xB4, 0x03, 0x00, 0x00, 0x89, 0x43, 0x10, 0x8B, 0x8E, 0x80, 0x03, 0x00, 0x00, 0x85, 0xC9, 0x74, 0x30, 0x8B, 0x86, 0x84, 0x03, 0x00, 0x00, 0x83, 0xC0, 0xFC, 0x03, 0xC1, 0x3B, 0xC8, 0x77, 0x21, 0x81, 0x39, 0x0C, 0xB0, 0xCE, 0xFA, 0x74, 0x07, + 0x41, 0x3B, 0xC8, 0x76, 0xF3, 0xEB, 0x12, 0x89, 0x19, 0xFF, 0xB6, 0x80, 0x03, 0x00, 0x00, 0x8B, 0x86, 0xB0, 0x03, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xD0, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x8B, 0x4F, 0x04, 0x85, 0xC9, 0x74, 0x0A, 0x89, 0x48, 0x04, 0x8B, 0x4F, 0x04, 0x8B, 0x07, 0x89, 0x01, 0x8B, 0x47, 0x10, 0x85, 0xC0, 0x74, 0x12, 0x8B, 0x4F, 0x14, 0x85, 0xC9, 0x74, 0x0B, 0x89, 0x48, 0x04, 0x8B, 0x4F, 0x14, 0x8B, 0x47, 0x10, 0x89, 0x01, 0x8B, 0x47, 0x08, 0x85, 0xC0, 0x74, 0x12, 0x8B, 0x4F, 0x0C, 0x85, 0xC9, 0x74, 0x0B, 0x89, 0x48, 0x04, 0x8B, 0x4F, 0x0C, 0x8B, 0x47, 0x08, 0x89, 0x01, 0x8B, 0x47, 0x3C, 0x85, 0xC0, 0x74, 0x12, 0x8B, 0x4F, 0x40, 0x85, 0xC9, 0x74, 0x0B, 0x89, 0x48, 0x04, 0x8B, 0x4F, 0x40, 0x8B, 0x47, 0x3C, 0x89, 0x01, 0x33, 0xC0, 0xC7, 0x45, 0x08, 0x2C, 0x00, 0x00, 0x00, 0x83, 0xBE, 0x78, 0x03, 0x00, 0x00, 0x3D, 0xBB, 0xA8, 0x00, 0x00, 0x00, 0x89, 0x45, 0xF4, 0x75, 0x55, 0x8B, 0x47, 0x50, 0x85, 0xC0, 0x74, 0x12, 0x8B, 0x4F, 0x54, 0x85, 0xC9, 0x74, 0x0B, 0x89, 0x48, 0x04, 0x8B, 0x4F, 0x54, 0x8B, 0x47, 0x50, 0x89, 0x01, 0x8B, 0x47, 0x58, 0x85, 0xC0, 0x74, 0x12, 0x8B, 0x4F, 0x5C, 0x85, 0xC9, 0x74, 0x0B, 0x89, 0x48, 0x04, 0x8B, 0x4F, 0x5C, 0x8B, 0x47, 0x58, 0x89, 0x01, 0x8B, 0x47, 0x60, 0x85, 0xC0, 0x74, 0x12, 0x8B, 0x4F, 0x64, 0x85, 0xC9, 0x74, 0x0B, 0x89, 0x48, 0x04, 0x8B, 0x4F, 0x64, 0x8B, 0x47, 0x60, 0x89, 0x01, 0xBB, 0x78, 0x00, 0x00, 0x00, 0xE9, 0x8C, 0x00, 0x00, 0x00, 0x8D, 0x47, 0x68, 0x50, 0xFF, 0xB6, 0xBC, 0x03, 0x00, 0x00, 0x8B, 0x86, 0xA8, 0x03, 0x00, 0x00, 0xFF, 0xD0, 0x8D, 0x47, 0x74, 0x50, 0xFF, 0xB6, 0xC0, 0x03, 0x00, 0x00, 0x8B, 0x86, 0xA8, 0x03, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x78, 0x03, 0x00, 0x00, 0x83, 0xF8, 0x3E, 0x75, 0x0C, 0x8D, 0x58, 0x5A, 0xC7, 0x45, 0x08, 0x30, 0x00, 0x00, 0x00, 0xEB, 0x4B, 0x83, 0xF8, 0x3F, 0x75, 0x0C, 0x8D, 0x58, 0x61, 0xC7, 0x45, 0x08, 0x30, 0x00, 0x00, 0x00, 0xEB, 0x3A, 0x83, 0xF8, 0x64, 0x72, 0x35, 0x8B, 0x86, 0x7C, 0x03, 0x00, 0x00, 0x3D, 0x5A, 0x29, 0x00, 0x00, 0x77, 0x07, 0xBB, 0xA0, 0x00, 0x00, 0x00, 0xEB, 0x21, 0x3D, 0x39, 0x38, 0x00, 0x00, 0x77, 0x07, 0xBB, 0xA4, 0x00, 0x00, 0x00, 0xEB, 0x13, 0xC7, 0x45, 0x08, 0x2C, 0x00, 0x00, 0x00, 0x3D, 0x64, 0x4A, 0x00, 0x00, 0x76, 0x05, 0xBB, 0xB8, 0x00, 0x00, 0x00, 0x8B, 0x47, 0x50, 0x89, 0x45, 0xF4, 0x0F, 0xB7, 0x47, 0x2E, 0x50, 0xFF, 0x77, 0x30, 0x8B, 0x86, 0xA4, 0x03, 0x00, 0x00, 0xFF, 0xD0, 0x0F, 0xB7, 0x47, 0x26, 0x50, 0xFF, 0x77, 0x28, 0x8B, 0x86, 0xA4, 0x03, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0xA4, 0x03, 0x00, 0x00, 0x53, 0x57, 0xFF, 0xD0, 0x8B, 0x45, 0xF4, 0x85, 0xC0, 0x0F, 0x84, 0x7F, 0xFB, 0xFF, 0xFF, 0xFF, 0x75, 0x08, 0x50, 0x8B, 0x86, 0xA4, 0x03, 0x00, 0x00, 0xFF, 0xD0, 0x33, 0xC0, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0xB8, 0x2D, 0x00, 0x00, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x5F, 0x5E, 0xB8, 0x0E, 0x00, 0x00, 0x00, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC }; inline unsigned char ManualMapping_Shell_WOW64[] = { - 0x55, 0x8B, 0xEC, 0x83, 0xEC, 0x78, 0x53, 0x56, 0x8B, 0x75, 0x08, 0x57, 0x85, 0xF6, 0x75, 0x0E, 0xB8, 0x01, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x46, 0x04, 0x89, 0x45, 0xDC, 0x8B, 0x86, 0xC8, 0x04, 0x00, 0x00, 0xC7, 0x45, 0xD0, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x45, 0xB0, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x45, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x08, 0xC7, 0x45, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x89, 0x8E, 0xD8, 0x04, 0x00, 0x00, 0x85, 0xC9, 0x75, 0x0E, 0xB8, 0x0E, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x66, 0x8B, 0x46, 0x10, 0x0F, 0x57, 0xC0, 0x66, 0x0F, 0x13, 0x45, 0x8C, 0x66, 0x89, 0x45, 0x8C, 0xB8, 0x10, 0x02, 0x00, 0x00, 0x68, 0x10, 0x02, 0x00, 0x00, 0x6A, 0x08, 0x66, 0x89, 0x45, 0x8E, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x51, 0xFF, 0xD0, 0x8B, 0xC8, 0x89, 0x4D, 0x90, 0x85, 0xC9, 0x0F, 0x84, 0x85, 0x02, 0x00, 0x00, 0x6A, 0x08, 0x8D, 0x86, 0x30, 0x04, 0x00, 0x00, 0x50, 0x8B, 0x86, 0x7C, 0x04, 0x00, 0x00, 0x51, 0xFF, 0xD0, 0x0F, 0xB7, 0x45, 0x8C, 0x50, 0x8D, 0x46, 0x18, 0x50, 0x8B, 0x45, 0x90, 0x83, 0xC0, 0x08, 0x50, 0x8B, 0x86, 0x7C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x83, 0xC4, 0x18, 0x66, 0x83, 0x45, 0x8C, 0x08, 0x6A, 0x18, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD8, 0x85, 0xDB, 0x74, 0x50, 0x6A, 0x08, 0x8D, 0x45, 0x8C, 0xC7, 0x03, 0x18, 0x00, 0x00, 0x00, 0xC7, 0x43, 0x04, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x43, 0x0C, 0x40, 0x00, 0x00, 0x00, 0x89, 0x43, 0x08, 0xC7, 0x43, 0x10, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x43, 0x14, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xF8, 0x85, 0xFF, 0x75, 0x3A, 0x53, 0x50, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x45, 0x90, 0x85, 0xC0, 0x0F, 0x84, 0xE0, 0x01, 0x00, 0x00, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x03, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x86, 0x54, 0x04, 0x00, 0x00, 0x8D, 0x4D, 0xF0, 0x6A, 0x20, 0x6A, 0x01, 0x57, 0x53, 0x68, 0x89, 0x00, 0x12, 0x00, 0x51, 0xC7, 0x45, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xD0, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x89, 0x45, 0xA4, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x45, 0x90, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x45, 0xA4, 0x85, 0xC0, 0x79, 0x22, 0x57, 0x89, 0x46, 0x08, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x02, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x18, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD8, 0x85, 0xDB, 0x75, 0x15, 0x57, 0x50, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, - 0xD0, 0xE9, 0x16, 0x01, 0x00, 0x00, 0x8B, 0x86, 0x64, 0x04, 0x00, 0x00, 0x6A, 0x05, 0x6A, 0x18, 0x53, 0x57, 0xFF, 0x75, 0xF0, 0xFF, 0xD0, 0x85, 0xC0, 0x79, 0x3E, 0x53, 0x89, 0x46, 0x08, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x07, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x6A, 0x40, 0x68, 0x00, 0x30, 0x00, 0x00, 0x8D, 0x4D, 0xD8, 0xC7, 0x45, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x03, 0x51, 0x6A, 0x00, 0x8D, 0x4D, 0xD4, 0x89, 0x45, 0xD8, 0x8B, 0x86, 0x68, 0x04, 0x00, 0x00, 0x51, 0x6A, 0xFF, 0xFF, 0xD0, 0x85, 0xC0, 0x79, 0x3E, 0x53, 0x89, 0x46, 0x08, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x08, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x08, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xC8, 0x89, 0x4D, 0xA4, 0x85, 0xC9, 0x75, 0x58, 0x53, 0x50, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8D, 0x45, 0xD8, 0xC7, 0x45, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x80, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD4, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x03, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x86, 0x60, 0x04, 0x00, 0x00, 0x6A, 0x0E, 0x6A, 0x08, 0x51, 0x57, 0xFF, 0x75, 0xF0, 0xFF, 0xD0, 0x85, 0xC0, 0x79, 0x5C, 0x53, 0x89, 0x46, 0x08, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8D, 0x45, 0xD8, 0xC7, 0x45, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD4, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x05, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0xFF, 0x75, 0xA4, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x58, 0x04, 0x00, 0x00, 0x6A, 0x00, 0x6A, 0x00, 0xFF, 0x33, 0xFF, 0x75, 0xD4, 0x57, 0x6A, 0x00, 0x6A, 0x00, 0x6A, 0x00, 0xFF, 0x75, 0xF0, 0xFF, 0xD0, 0x53, 0x6A, 0x00, 0x85, 0xC0, 0x79, 0x59, 0x89, 0x46, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, - 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8D, 0x45, 0xD8, 0xC7, 0x45, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD4, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x04, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x45, 0xD4, 0x8B, 0x55, 0xDC, 0x8B, 0x58, 0x3C, 0x03, 0xD8, 0x8B, 0xC2, 0x25, 0x00, 0x00, 0x20, 0x02, 0x89, 0x5D, 0xAC, 0x89, 0x45, 0xA8, 0x8B, 0x4B, 0x50, 0x89, 0x4D, 0xE0, 0x3D, 0x00, 0x00, 0x00, 0x02, 0x75, 0x09, 0x0F, 0xB7, 0x46, 0x0C, 0x03, 0xC8, 0x89, 0x4D, 0xE0, 0x8B, 0xC2, 0x25, 0x00, 0x00, 0x10, 0x00, 0x89, 0x45, 0xA4, 0x74, 0x09, 0x8D, 0x81, 0x00, 0x10, 0x00, 0x00, 0x89, 0x45, 0xE0, 0x8B, 0x86, 0x68, 0x04, 0x00, 0x00, 0x8D, 0x4D, 0xE0, 0x6A, 0x40, 0x68, 0x00, 0x30, 0x00, 0x00, 0x51, 0x6A, 0x00, 0x8D, 0x4D, 0xD0, 0x51, 0x6A, 0xFF, 0xFF, 0xD0, 0x8B, 0xF8, 0x89, 0x7D, 0xB8, 0x85, 0xFF, 0x79, 0x26, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8D, 0x45, 0xD8, 0x89, 0x7E, 0x08, 0x50, 0x8D, 0x45, 0xD4, 0xC7, 0x45, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xE9, 0xC9, 0xFD, 0xFF, 0xFF, 0x81, 0x7D, 0xA8, 0x00, 0x00, 0x00, 0x02, 0x8B, 0x45, 0xD0, 0x75, 0x06, 0x0F, 0xB7, 0x4E, 0x0C, 0x03, 0xC1, 0x83, 0x7D, 0xA4, 0x00, 0x89, 0x45, 0xF4, 0xC6, 0x45, 0xFB, 0x00, 0x74, 0x74, 0x8B, 0x4B, 0x50, 0x6A, 0x14, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x03, 0xC8, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x89, 0x4D, 0xB0, 0xFF, 0xD0, 0x8B, 0xD0, 0x85, 0xD2, 0x74, 0x54, 0x8B, 0x45, 0xF4, 0x89, 0x02, 0x8B, 0x43, 0x50, 0x89, 0x42, 0x04, 0x8B, 0x86, 0x40, 0x04, 0x00, 0x00, 0x89, 0x42, 0x08, 0x8B, 0x86, 0xCC, 0x04, 0x00, 0x00, 0x89, 0x42, 0x0C, 0x8B, 0x86, 0xB4, 0x04, 0x00, 0x00, 0x89, 0x42, 0x10, 0x8B, 0x8E, 0x48, 0x04, 0x00, 0x00, 0x85, 0xC9, 0x74, 0x20, 0x8B, 0x86, 0x4C, 0x04, 0x00, 0x00, 0x83, 0xC0, 0xFC, 0x03, 0xC1, 0x3B, 0xC8, 0x77, 0x11, 0x81, 0x39, 0x0C, 0xB0, 0xCE, 0xFA, 0x0F, 0x84, 0xE6, 0x00, 0x00, 0x00, 0x41, 0x3B, 0xC8, 0x76, 0xEF, 0xC6, 0x45, 0xFB, 0x00, 0xFF, 0x73, 0x54, 0x8B, 0x86, 0x7C, 0x04, 0x00, 0x00, 0xFF, 0x75, 0xD4, 0xFF, 0x75, 0xF4, 0xFF, 0xD0, 0x0F, 0xB7, 0x43, 0x14, 0x33, 0xC9, 0x83, 0xC4, 0x0C, 0x89, 0x4D, 0xB4, 0x83, 0xC0, 0x2C, 0x66, 0x39, 0x4B, 0x06, 0x74, 0x3A, 0x8B, 0x7D, 0xAC, 0x03, 0xD8, 0x8B, 0x43, 0xFC, 0x85, 0xC0, 0x74, 0x1C, 0x50, 0x8B, 0x03, 0x03, 0x45, 0xD4, 0x50, 0x8B, 0x43, 0xF8, 0x03, 0x45, 0xF4, 0x50, 0x8B, 0x86, 0x7C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x4D, 0xB4, 0x83, 0xC4, 0x0C, 0x0F, 0xB7, 0x47, 0x06, 0x41, 0x83, 0xC3, 0x28, 0x89, 0x4D, 0xB4, 0x3B, 0xC8, 0x75, 0xCE, 0x8B, 0x7D, 0xB8, 0x8B, 0x45, 0xF4, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8B, 0x48, 0x3C, 0x03, 0xC8, 0xC7, 0x45, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x8D, - 0x45, 0xD8, 0x89, 0x4D, 0xE8, 0x50, 0x8D, 0x45, 0xD4, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0x8B, 0x55, 0xE8, 0x8B, 0x5D, 0xF4, 0x8B, 0xC3, 0x2B, 0x42, 0x34, 0x89, 0x45, 0xB4, 0x0F, 0x84, 0xFA, 0x00, 0x00, 0x00, 0x83, 0xBA, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5C, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8D, 0x45, 0xE0, 0xC7, 0x45, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD0, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x09, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x89, 0x11, 0xFF, 0xB6, 0x4C, 0x04, 0x00, 0x00, 0x8B, 0x86, 0x7C, 0x04, 0x00, 0x00, 0xFF, 0xB6, 0x48, 0x04, 0x00, 0x00, 0xC6, 0x45, 0xFB, 0x01, 0xFF, 0x75, 0xB0, 0xFF, 0xD0, 0x83, 0xC4, 0x0C, 0xE9, 0xFE, 0xFE, 0xFF, 0xFF, 0x8B, 0x8A, 0xA0, 0x00, 0x00, 0x00, 0x03, 0xCB, 0x89, 0x4D, 0xBC, 0x83, 0x39, 0x00, 0x74, 0x7F, 0x0F, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x41, 0x04, 0x89, 0x45, 0xAC, 0x8D, 0x51, 0x08, 0x8B, 0x00, 0x83, 0xE8, 0x08, 0xD1, 0xE8, 0x89, 0x45, 0xA8, 0x74, 0x38, 0x8B, 0x7D, 0xBC, 0x8B, 0xF0, 0x66, 0x0F, 0x1F, 0x44, 0x00, 0x00, 0x0F, 0xB7, 0x0A, 0x8B, 0xC1, 0x25, 0x00, 0xF0, 0x00, 0x00, 0x3D, 0x00, 0x30, 0x00, 0x00, 0x75, 0x11, 0x8B, 0x45, 0xB4, 0x81, 0xE1, 0xFF, 0x0F, 0x00, 0x00, 0x03, 0x0F, 0x01, 0x04, 0x19, 0x8B, 0x5D, 0xF4, 0x83, 0xC2, 0x02, 0x83, 0xEE, 0x01, 0x75, 0xD6, 0x8B, 0x4D, 0xBC, 0x8B, 0x45, 0xAC, 0x8B, 0x55, 0xE8, 0x03, 0x08, 0x8B, 0x82, 0xA4, 0x00, 0x00, 0x00, 0x03, 0xC3, 0x89, 0x4D, 0xBC, 0x03, 0x82, 0xA0, 0x00, 0x00, 0x00, 0x3B, 0xC8, 0x73, 0x05, 0x83, 0x39, 0x00, 0x75, 0x91, 0x8B, 0x75, 0x08, 0x8B, 0x7D, 0xB8, 0x8B, 0x45, 0xB4, 0x01, 0x42, 0x34, 0x8B, 0x5D, 0xF4, 0x8B, 0x45, 0xDC, 0xA9, 0x00, 0x00, 0x40, 0x00, 0x74, 0x3D, 0x83, 0xBA, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x74, 0x34, 0x8B, 0xCB, 0x81, 0xF9, 0x4E, 0xE6, 0x40, 0xBB, 0x75, 0x05, 0x8D, 0x59, 0x01, 0xEB, 0x15, 0xF7, 0xC1, 0x00, 0x00, 0xFF, 0xFF, 0x75, 0x0D, 0x8B, 0xD9, 0x81, 0xCB, 0x11, 0x47, 0x00, 0x00, 0xC1, 0xE3, 0x10, 0x0B, 0xD9, 0x8B, 0x82, 0xC8, 0x00, 0x00, 0x00, 0x89, 0x5C, 0x08, 0x3C, 0x8B, 0x5D, 0xF4, 0x8B, 0x45, 0xDC, 0xA9, 0x00, 0x00, 0x82, 0x00, 0x0F, 0x84, 0x36, 0x05, 0x00, 0x00, 0x83, 0xBA, 0x84, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x84, 0x29, 0x05, 0x00, 0x00, 0x8B, 0x8A, 0x80, 0x00, 0x00, 0x00, 0x03, 0xCB, 0x89, 0x4D, 0xB8, 0x0F, 0x84, 0x18, 0x05, 0x00, 0x00, 0x66, 0x90, 0x8B, 0x41, 0x0C, 0x85, 0xC0, 0x0F, 0x84, 0x08, 0x05, 0x00, 0x00, 0x6A, 0x08, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x03, 0xD8, 0xC7, 0x45, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x89, 0x5D, 0xC0, 0xC7, 0x45, 0xCC, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xF8, 0x89, 0x7D, 0xAC, 0x85, 0xFF, 0x75, 0x0A, 0xBF, 0x03, 0x00, 0x40, 0x00, 0xE9, 0xC0, 0x03, 0x00, 0x00, 0x80, 0x3B, 0x00, 0x8B, 0xCB, 0x0F, 0xB7, 0xC3, 0x8B, 0xD0, 0x74, 0x0A, 0x90, 0x41, 0x0F, 0xB7, 0xC1, 0x80, 0x39, 0x00, 0x75, 0xF7, 0x2B, 0xC2, 0x0F, 0xB7, 0xD8, 0x66, 0x85, - 0xDB, 0x0F, 0x84, 0x39, 0x06, 0x00, 0x00, 0x8B, 0x8E, 0x84, 0x04, 0x00, 0x00, 0x8B, 0xC3, 0x89, 0x45, 0xA8, 0x40, 0x50, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD1, 0x8B, 0xC8, 0x89, 0x4F, 0x04, 0x85, 0xC9, 0x0F, 0x84, 0x15, 0x06, 0x00, 0x00, 0x53, 0xFF, 0x75, 0xC0, 0x8D, 0x43, 0x01, 0x66, 0x89, 0x1F, 0x66, 0x89, 0x47, 0x02, 0x8B, 0x86, 0x7C, 0x04, 0x00, 0x00, 0x51, 0xFF, 0xD0, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x83, 0xC4, 0x0C, 0x6A, 0x08, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD8, 0x85, 0xDB, 0x75, 0x32, 0x8B, 0x47, 0x04, 0x85, 0xC0, 0x74, 0x10, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xBF, 0x03, 0x00, 0x40, 0x00, 0xE9, 0x14, 0x03, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x68, 0x08, 0x02, 0x00, 0x00, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x89, 0x43, 0x04, 0xB9, 0x08, 0x02, 0x00, 0x00, 0x66, 0x89, 0x4B, 0x02, 0x85, 0xC0, 0x75, 0x43, 0x53, 0x50, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x47, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xBF, 0x03, 0x00, 0x40, 0x00, 0xE9, 0xAC, 0x02, 0x00, 0x00, 0x8B, 0x86, 0x9C, 0x04, 0x00, 0x00, 0x6A, 0x00, 0x57, 0x53, 0xFF, 0xD0, 0x8B, 0xF8, 0x85, 0xFF, 0x0F, 0x88, 0xDC, 0x04, 0x00, 0x00, 0x8B, 0x7D, 0xAC, 0x8B, 0x47, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x40, 0x04, 0x00, 0x00, 0x83, 0xF8, 0x64, 0x0F, 0x82, 0xFE, 0x00, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x68, 0x08, 0x01, 0x00, 0x00, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xC8, 0x89, 0x4D, 0xC4, 0x85, 0xC9, 0x0F, 0x84, 0x4F, 0x04, 0x00, 0x00, 0xB8, 0x00, 0x01, 0x00, 0x00, 0x8D, 0x55, 0xBC, 0x66, 0x89, 0x41, 0x02, 0x8D, 0x41, 0x08, 0x89, 0x41, 0x04, 0x8B, 0x86, 0xA0, 0x04, 0x00, 0x00, 0x52, 0x8B, 0xD1, 0xC7, 0x45, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x8B, 0xCB, 0xFF, 0xD0, 0x8B, 0x8E, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0xF8, 0x85, 0xFF, 0x0F, 0x88, 0xDB, 0x03, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x50, 0x6A, 0x08, 0x51, 0xFF, 0xD0, 0x89, 0x45, 0xA8, 0x85, 0xC0, 0x0F, 0x84, 0x7D, 0x03, 0x00, 0x00, 0x81, 0xBE, 0x44, 0x04, 0x00, 0x00, 0x5A, 0x29, 0x00, 0x00, 0x8B, 0x4B, 0x04, 0x75, 0x05, 0x89, 0x48, 0x0C, 0xEB, 0x03, 0x89, 0x48, 0x10, 0x81, 0xBE, 0x44, 0x04, 0x00, 0x00, 0xF0, 0x55, 0x00, 0x00, 0x8D, 0x4D, 0xB4, 0x8B, 0xBE, 0x90, 0x04, 0x00, 0x00, 0x8B, 0xD0, 0xC7, 0x45, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x72, 0x17, 0x6A, 0x00, 0x51, 0x8D, 0x4D, - 0xCC, 0x51, 0x8B, 0x4D, 0xC4, 0x6A, 0x00, 0x6A, 0x00, 0x6A, 0x04, 0xFF, 0x75, 0xBC, 0xFF, 0xD7, 0xEB, 0x13, 0x51, 0x8D, 0x4D, 0xCC, 0x51, 0x8B, 0x4D, 0xC4, 0x6A, 0x00, 0x6A, 0x00, 0x6A, 0x04, 0xFF, 0x75, 0xBC, 0xFF, 0xD7, 0xFF, 0x75, 0xA8, 0x8B, 0xF8, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xFF, 0x75, 0xC4, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xE9, 0xCB, 0x00, 0x00, 0x00, 0x83, 0xF8, 0x3F, 0x75, 0x47, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x14, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xC8, 0x89, 0x4D, 0xAC, 0x85, 0xC9, 0x74, 0x7D, 0x8B, 0x43, 0x04, 0x8D, 0x55, 0xA8, 0x52, 0x8D, 0x55, 0xCC, 0x89, 0x41, 0x0C, 0x8B, 0x86, 0x8C, 0x04, 0x00, 0x00, 0x52, 0x6A, 0x01, 0x8B, 0xD1, 0xC7, 0x45, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x8B, 0xCB, 0xFF, 0xD0, 0xFF, 0x75, 0xAC, 0x8B, 0xF8, 0xEB, 0x9F, 0x83, 0xF8, 0x3E, 0x75, 0x53, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x18, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xC8, 0x89, 0x4D, 0xAC, 0x85, 0xC9, 0x74, 0x31, 0x8B, 0x43, 0x04, 0x8D, 0x55, 0xA8, 0x52, 0x8D, 0x55, 0xCC, 0x89, 0x41, 0x04, 0x52, 0x6A, 0x01, 0x6A, 0x00, 0x51, 0xC6, 0x41, 0x08, 0x01, 0x8B, 0x86, 0x8C, 0x04, 0x00, 0x00, 0x53, 0xC7, 0x45, 0xA8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xD0, 0xFF, 0x75, 0xAC, 0x8B, 0xF8, 0xE9, 0x4E, 0xFF, 0xFF, 0xFF, 0xBF, 0x17, 0x00, 0x00, 0xC0, 0xEB, 0x27, 0x83, 0xF8, 0x3D, 0x75, 0x1D, 0x8B, 0x86, 0x8C, 0x04, 0x00, 0x00, 0x8D, 0x4D, 0xCC, 0x51, 0x6A, 0x00, 0x6A, 0x01, 0x6A, 0x00, 0xFF, 0xB6, 0xD0, 0x04, 0x00, 0x00, 0x53, 0xFF, 0xD0, 0x8B, 0xF8, 0xEB, 0x05, 0xBF, 0x02, 0x00, 0x00, 0xC0, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x85, 0xFF, 0x78, 0x57, 0x8B, 0x45, 0xCC, 0x85, 0xC0, 0x74, 0x4B, 0x8B, 0x58, 0x18, 0x8B, 0x86, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0x8E, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x0C, 0x6A, 0x08, 0x50, 0x89, 0x5D, 0xC8, 0xFF, 0xD1, 0x83, 0x7D, 0xEC, 0x00, 0x75, 0x10, 0x8B, 0xD0, 0x85, 0xD2, 0x74, 0x2E, 0x89, 0x12, 0x89, 0x52, 0x04, 0x89, 0x5A, 0x08, 0xEB, 0x24, 0x8B, 0x55, 0xEC, 0x85, 0xC0, 0x74, 0x1D, 0x8B, 0x4A, 0x04, 0x89, 0x01, 0x8B, 0x4A, 0x04, 0x89, 0x48, 0x04, 0x89, 0x42, 0x04, 0x89, 0x10, 0x89, 0x58, 0x08, 0xEB, 0x08, 0xBF, 0x35, 0x01, 0x00, 0xC0, 0x8B, 0x55, 0xEC, 0x89, 0x55, 0xEC, 0x85, 0xFF, 0x0F, 0x88, 0xB6, 0x02, 0x00, 0x00, 0x8B, 0x45, 0xB8, 0x8B, 0x5D, 0xF4, 0x8B, 0x08, 0x8B, 0x50, 0x10, 0x03, 0xD3, 0x85, 0xC9, 0x89, 0x55, 0xC0, 0x8D, 0x04, 0x19, 0x0F, 0x45, 0xD0, 0x89, 0x55, 0xC4, 0x8B, 0x02, 0x85, 0xC0, 0x0F, 0x84, 0xC5, 0x00, 0x00, 0x00, 0x8D, 0x8E, 0x94, 0x04, 0x00, 0x00, 0x66, 0x90, 0x89, 0x4D, 0xAC, 0x85, 0xC0, 0x79, 0x1B, 0x8B, 0x5D, 0xC0, 0x8B, 0x09, 0x53, 0x0F, 0xB7, 0xC0, 0x50, 0x6A, 0x00, 0xFF, 0x75, 0xC8, 0xFF, 0xD1, - 0x8B, 0xF8, 0x8D, 0x8E, 0x94, 0x04, 0x00, 0x00, 0xEB, 0x77, 0x6A, 0x08, 0x03, 0xC3, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x89, 0x45, 0xA8, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD8, 0x85, 0xDB, 0x0F, 0x84, 0x43, 0x02, 0x00, 0x00, 0x8B, 0x55, 0xA8, 0x83, 0xC2, 0x02, 0x0F, 0xB7, 0xCA, 0x89, 0x53, 0x04, 0x8B, 0xF9, 0x8B, 0xC1, 0x80, 0x3A, 0x00, 0x74, 0x09, 0x42, 0x0F, 0xB7, 0xC2, 0x80, 0x3A, 0x00, 0x75, 0xF7, 0xFF, 0x75, 0xC0, 0x8B, 0x4D, 0xAC, 0x2B, 0xC7, 0x66, 0x89, 0x03, 0x40, 0x66, 0x89, 0x43, 0x02, 0x8B, 0x45, 0xC4, 0x8B, 0x09, 0x0F, 0xB7, 0x00, 0x50, 0x53, 0xFF, 0x75, 0xC8, 0xFF, 0xD1, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0xF8, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x4D, 0xAC, 0x8B, 0x5D, 0xC0, 0x85, 0xFF, 0x0F, 0x88, 0xE5, 0x01, 0x00, 0x00, 0x8B, 0x55, 0xC4, 0x83, 0xC3, 0x04, 0x83, 0xC2, 0x04, 0x89, 0x5D, 0xC0, 0x8B, 0x5D, 0xF4, 0x89, 0x55, 0xC4, 0x8B, 0x02, 0x85, 0xC0, 0x0F, 0x85, 0x43, 0xFF, 0xFF, 0xFF, 0x8B, 0x55, 0xE8, 0x8B, 0x4D, 0xB8, 0x83, 0xC1, 0x14, 0x89, 0x4D, 0xB8, 0x8B, 0x82, 0x84, 0x00, 0x00, 0x00, 0x03, 0xC3, 0x03, 0x82, 0x80, 0x00, 0x00, 0x00, 0x3B, 0xC8, 0x73, 0x08, 0x85, 0xC9, 0x0F, 0x85, 0xED, 0xFA, 0xFF, 0xFF, 0x8B, 0x45, 0xDC, 0x25, 0x00, 0x00, 0x04, 0x00, 0x89, 0x45, 0x9C, 0x0F, 0x84, 0xB9, 0x08, 0x00, 0x00, 0x83, 0xBA, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x84, 0xAC, 0x08, 0x00, 0x00, 0x8B, 0x82, 0xE0, 0x00, 0x00, 0x00, 0x32, 0xC9, 0x88, 0x4D, 0xFA, 0x03, 0xC3, 0x0F, 0x84, 0x99, 0x08, 0x00, 0x00, 0x8D, 0x50, 0x08, 0x89, 0x55, 0xC4, 0x66, 0x0F, 0x1F, 0x44, 0x00, 0x00, 0x8B, 0x42, 0xFC, 0x85, 0xC0, 0x0F, 0x84, 0x9E, 0x06, 0x00, 0x00, 0x6A, 0x08, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x03, 0xD8, 0xC7, 0x45, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x89, 0x5D, 0xC0, 0xC7, 0x45, 0xC8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xF8, 0x89, 0x7D, 0xA8, 0x85, 0xFF, 0x0F, 0x85, 0x98, 0x01, 0x00, 0x00, 0xBF, 0x03, 0x00, 0x40, 0x00, 0xE9, 0x45, 0x05, 0x00, 0x00, 0xFF, 0x75, 0xC4, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xBF, 0x17, 0x00, 0x00, 0xC0, 0xE9, 0xD9, 0x00, 0x00, 0x00, 0xFF, 0x75, 0xC4, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0x51, 0xFF, 0xD0, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xE9, 0x9D, 0x00, 0x00, 0x00, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, - 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xBF, 0x17, 0x00, 0x00, 0xC0, 0xEB, 0x6D, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x5D, 0xAC, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xEB, 0x16, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xBF, 0x74, 0x03, 0x00, 0xC0, 0x8B, 0x55, 0xEC, 0x89, 0x7E, 0x08, 0x85, 0xD2, 0x74, 0x2E, 0x8B, 0x7A, 0x04, 0x8B, 0xDF, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8D, 0x45, 0xE0, 0xC7, 0x45, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD0, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x0A, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x80, 0x3B, 0x00, 0x8B, 0xCB, 0x0F, 0xB7, 0xC3, 0x8B, 0xD0, 0x74, 0x09, 0x41, 0x0F, 0xB7, 0xC1, 0x80, 0x39, 0x00, 0x75, 0xF7, 0x2B, 0xC2, 0x0F, 0xB7, 0xD8, 0x66, 0x85, 0xDB, 0x0F, 0x84, 0x77, 0x06, 0x00, 0x00, 0x8B, 0x8E, 0x84, 0x04, 0x00, 0x00, 0x8B, 0xC3, 0x89, 0x45, 0xB4, 0x40, 0x50, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD1, 0x89, 0x47, 0x04, 0x85, 0xC0, 0x0F, 0x84, 0x55, 0x06, 0x00, 0x00, 0x53, 0xFF, 0x75, 0xC0, 0x8D, 0x4B, 0x01, 0x66, 0x89, 0x1F, 0x66, 0x89, 0x4F, 0x02, 0x50, 0x8B, 0x86, 0x7C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x83, 0xC4, 0x0C, 0x6A, 0x08, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD8, 0x85, 0xDB, 0x75, 0x32, 0x8B, 0x47, 0x04, 0x85, 0xC0, 0x74, 0x10, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xBF, 0x03, 0x00, 0x40, 0x00, 0xE9, 0x0E, 0x03, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x68, 0x08, 0x02, 0x00, 0x00, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x89, 0x43, 0x04, 0xB9, 0x08, 0x02, 0x00, 0x00, 0x66, 0x89, 0x4B, 0x02, 0x85, 0xC0, 0x75, 0x43, 0x53, 0x50, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x47, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xBF, 0x03, 0x00, 0x40, - 0x00, 0xE9, 0xA6, 0x02, 0x00, 0x00, 0x8B, 0x86, 0x9C, 0x04, 0x00, 0x00, 0x6A, 0x00, 0x57, 0x53, 0xFF, 0xD0, 0x8B, 0xF8, 0x85, 0xFF, 0x0F, 0x88, 0x19, 0x05, 0x00, 0x00, 0x8B, 0x7D, 0xA8, 0x8B, 0x47, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x40, 0x04, 0x00, 0x00, 0x83, 0xF8, 0x64, 0x0F, 0x82, 0xFC, 0x00, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x68, 0x08, 0x01, 0x00, 0x00, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD0, 0x89, 0x55, 0xC0, 0x85, 0xD2, 0x0F, 0x84, 0x89, 0x04, 0x00, 0x00, 0x8D, 0x4A, 0x08, 0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x4A, 0x04, 0x8D, 0x4D, 0xB8, 0x51, 0x66, 0x89, 0x42, 0x02, 0x8B, 0xCB, 0x8B, 0x86, 0xA0, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xC7, 0x45, 0xB8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x8E, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0xF8, 0x85, 0xFF, 0x0F, 0x88, 0x17, 0x04, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x50, 0x6A, 0x08, 0x51, 0xFF, 0xD0, 0x89, 0x45, 0xA8, 0x85, 0xC0, 0x0F, 0x84, 0xB9, 0x03, 0x00, 0x00, 0x81, 0xBE, 0x44, 0x04, 0x00, 0x00, 0x5A, 0x29, 0x00, 0x00, 0x8B, 0x4B, 0x04, 0x75, 0x05, 0x89, 0x48, 0x0C, 0xEB, 0x03, 0x89, 0x48, 0x10, 0x81, 0xBE, 0x44, 0x04, 0x00, 0x00, 0xF0, 0x55, 0x00, 0x00, 0x8D, 0x4D, 0xAC, 0x8B, 0xBE, 0x90, 0x04, 0x00, 0x00, 0x8B, 0xD0, 0xC7, 0x45, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x72, 0x17, 0x6A, 0x00, 0x51, 0x8D, 0x4D, 0xC8, 0x51, 0x8B, 0x4D, 0xC0, 0x6A, 0x00, 0x6A, 0x00, 0x6A, 0x04, 0xFF, 0x75, 0xB8, 0xFF, 0xD7, 0xEB, 0x13, 0x51, 0x8D, 0x4D, 0xC8, 0x51, 0x8B, 0x4D, 0xC0, 0x6A, 0x00, 0x6A, 0x00, 0x6A, 0x04, 0xFF, 0x75, 0xB8, 0xFF, 0xD7, 0xFF, 0x75, 0xA8, 0x8B, 0xF8, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xFF, 0x75, 0xC0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xE9, 0xC7, 0x00, 0x00, 0x00, 0x83, 0xF8, 0x3F, 0x75, 0x45, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x14, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x89, 0x45, 0xB4, 0x85, 0xC0, 0x74, 0x7B, 0x8B, 0x4B, 0x04, 0x8B, 0xD0, 0x89, 0x48, 0x0C, 0x8D, 0x4D, 0xA8, 0x8B, 0xBE, 0x8C, 0x04, 0x00, 0x00, 0x51, 0x8D, 0x4D, 0xC8, 0xC7, 0x45, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x51, 0x6A, 0x01, 0x6A, 0x00, 0x8B, 0xCB, 0xFF, 0xD7, 0xFF, 0x75, 0xB4, 0x8B, 0xF8, 0xEB, 0xA1, 0x83, 0xF8, 0x3E, 0x75, 0x51, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x18, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x89, 0x45, 0xB4, 0x85, 0xC0, 0x74, 0x31, 0x8B, 0x4B, 0x04, 0x8D, 0x55, 0xA8, 0x52, 0x8D, 0x55, 0xC8, 0x89, 0x48, 0x04, 0x52, 0x6A, 0x01, 0x6A, 0x00, 0x50, 0xC6, 0x40, 0x08, 0x01, 0x8B, 0x8E, 0x8C, 0x04, 0x00, 0x00, 0x53, 0xC7, 0x45, 0xA8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xD1, 0xFF, 0x75, 0xB4, 0x8B, 0xF8, 0xE9, 0x52, 0xFF, 0xFF, 0xFF, 0xBF, 0x17, 0x00, 0x00, 0xC0, 0xEB, 0x27, 0x83, - 0xF8, 0x3D, 0x75, 0x1D, 0x8B, 0x86, 0x8C, 0x04, 0x00, 0x00, 0x8D, 0x4D, 0xC8, 0x51, 0x6A, 0x00, 0x6A, 0x01, 0x6A, 0x00, 0xFF, 0xB6, 0xD0, 0x04, 0x00, 0x00, 0x53, 0xFF, 0xD0, 0x8B, 0xF8, 0xEB, 0x05, 0xBF, 0x02, 0x00, 0x00, 0xC0, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x85, 0xFF, 0x78, 0x57, 0x8B, 0x45, 0xC8, 0x85, 0xC0, 0x74, 0x4B, 0x8B, 0x58, 0x18, 0x8B, 0x86, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0x8E, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x0C, 0x6A, 0x08, 0x50, 0x89, 0x5D, 0xBC, 0xFF, 0xD1, 0x83, 0x7D, 0xE4, 0x00, 0x75, 0x10, 0x8B, 0xD0, 0x85, 0xD2, 0x74, 0x2E, 0x89, 0x12, 0x89, 0x52, 0x04, 0x89, 0x5A, 0x08, 0xEB, 0x24, 0x8B, 0x55, 0xE4, 0x85, 0xC0, 0x74, 0x1D, 0x8B, 0x4A, 0x04, 0x89, 0x01, 0x8B, 0x4A, 0x04, 0x89, 0x48, 0x04, 0x89, 0x42, 0x04, 0x89, 0x10, 0x89, 0x58, 0x08, 0xEB, 0x08, 0xBF, 0x35, 0x01, 0x00, 0xC0, 0x8B, 0x55, 0xE4, 0x89, 0x55, 0xE4, 0x85, 0xFF, 0x0F, 0x88, 0x2A, 0x01, 0x00, 0x00, 0x8B, 0x55, 0xC4, 0x8B, 0x0A, 0x85, 0xC9, 0x74, 0x0C, 0x8B, 0x45, 0xF4, 0x8B, 0x55, 0xBC, 0x89, 0x14, 0x01, 0x8B, 0x55, 0xC4, 0x8B, 0x4A, 0x04, 0x8B, 0x5D, 0xF4, 0x03, 0xCB, 0x8B, 0x42, 0x08, 0x03, 0xC3, 0x89, 0x4D, 0xC0, 0x89, 0x45, 0xB4, 0x83, 0x39, 0x00, 0x0F, 0x84, 0xC0, 0x00, 0x00, 0x00, 0x8D, 0x96, 0x94, 0x04, 0x00, 0x00, 0x8B, 0x00, 0x89, 0x55, 0xA8, 0x85, 0xC0, 0x79, 0x16, 0x51, 0x0F, 0xB7, 0xC0, 0x50, 0x8B, 0x02, 0x6A, 0x00, 0xFF, 0x75, 0xBC, 0xFF, 0xD0, 0x8D, 0x96, 0x94, 0x04, 0x00, 0x00, 0xEB, 0x6D, 0x6A, 0x08, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x03, 0xD8, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x89, 0x45, 0xA0, 0x85, 0xC0, 0x74, 0x76, 0x8D, 0x53, 0x02, 0x8B, 0xD8, 0x0F, 0xB7, 0xCA, 0x8B, 0xF9, 0x8B, 0xC1, 0x89, 0x53, 0x04, 0x80, 0x3A, 0x00, 0x74, 0x09, 0x42, 0x0F, 0xB7, 0xC2, 0x80, 0x3A, 0x00, 0x75, 0xF7, 0xFF, 0x75, 0xC0, 0x8B, 0x4D, 0xA8, 0x2B, 0xC7, 0x66, 0x89, 0x03, 0x40, 0x66, 0x89, 0x43, 0x02, 0x8B, 0x45, 0xB4, 0x8B, 0x09, 0x0F, 0xB7, 0x00, 0x50, 0x53, 0xFF, 0x75, 0xBC, 0xFF, 0xD1, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0xF8, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x55, 0xA8, 0x8B, 0x5D, 0xF4, 0x85, 0xFF, 0x78, 0x20, 0x8B, 0x4D, 0xC0, 0x8B, 0x45, 0xB4, 0x83, 0xC1, 0x04, 0x83, 0xC0, 0x04, 0x89, 0x4D, 0xC0, 0x89, 0x45, 0xB4, 0x83, 0x39, 0x00, 0x0F, 0x85, 0x52, 0xFF, 0xFF, 0xFF, 0xEB, 0x07, 0x8B, 0x5D, 0xF4, 0xC6, 0x45, 0xFA, 0x01, 0x8B, 0x55, 0xC4, 0x8B, 0x45, 0xE8, 0x83, 0xC2, 0x20, 0x8B, 0x75, 0xE8, 0x89, 0x55, 0xC4, 0x8B, 0x80, 0xE4, 0x00, 0x00, 0x00, 0x8D, 0x4A, 0xF8, 0x03, 0x86, 0xE0, 0x00, 0x00, 0x00, 0x8B, 0x75, 0x08, 0x03, 0xC3, 0x3B, 0xC8, 0x73, 0x08, 0x85, 0xC9, 0x0F, 0x85, 0x57, 0xF9, 0xFF, 0xFF, 0x80, 0x7D, 0xFA, 0x00, 0x0F, 0x84, 0xD7, 0x01, 0x00, 0x00, 0x8B, 0x55, 0xE4, 0x89, 0x7E, 0x08, 0x85, 0xD2, 0x74, 0x2E, 0x8B, 0x7A, 0x04, 0x8B, 0xDF, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, - 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x8B, 0x45, 0xEC, 0x85, 0xC0, 0x74, 0x37, 0x8B, 0x78, 0x04, 0x8B, 0xDF, 0x66, 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8D, 0x45, 0xE0, 0xC7, 0x45, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD0, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x0B, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0xFF, 0x75, 0xC0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xBF, 0x17, 0x00, 0x00, 0xC0, 0xE9, 0x0D, 0xFF, 0xFF, 0xFF, 0xFF, 0x75, 0xC0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0x51, 0xFF, 0xD0, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xE9, 0xD1, 0xFE, 0xFF, 0xFF, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xBF, 0x17, 0x00, 0x00, 0xC0, 0xE9, 0x9E, 0xFE, 0xFF, 0xFF, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x5D, 0xA8, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xE9, 0x44, 0xFE, 0xFF, 0xFF, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xBF, 0x74, 0x03, 0x00, 0xC0, 0xE9, 0x29, 0xFE, 0xFF, 0xFF, 0x8B, 0x55, 0xE8, 0x8B, 0x45, 0xDC, 0x25, 0x00, 0x00, 0x20, 0x00, 0x89, 0x45, 0xAC, 0x0F, 0x84, 0x97, 0x01, 0x00, 0x00, 0x8B, 0x42, 0x54, 0x8D, 0x4D, 0xA8, 0x51, 0x6A, 0x20, 0x8D, 0x4D, 0xA0, 0x89, 0x45, 0xA0, 0x8B, 0x86, 0x6C, 0x04, 0x00, 0x00, 0x51, 0x8D, 0x4D, 0xF4, 0xC7, 0x45, 0xA8, 0x00, 0x00, - 0x00, 0x00, 0x51, 0x6A, 0xFF, 0xFF, 0xD0, 0x8B, 0xD0, 0x85, 0xD2, 0x0F, 0x88, 0xBA, 0x00, 0x00, 0x00, 0x8B, 0x4D, 0xE8, 0x8B, 0x5D, 0xF4, 0xC7, 0x45, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xB7, 0x79, 0x14, 0x83, 0xC7, 0x3C, 0x66, 0x83, 0x79, 0x06, 0x00, 0x0F, 0x84, 0x4C, 0x01, 0x00, 0x00, 0x03, 0xF9, 0x66, 0x90, 0x8B, 0x47, 0xE8, 0x8B, 0x0F, 0x03, 0xC3, 0x89, 0x45, 0xBC, 0x8B, 0x47, 0xEC, 0x89, 0x45, 0xB8, 0x85, 0xC0, 0x74, 0x63, 0xF7, 0xC1, 0x00, 0x00, 0x00, 0x20, 0x74, 0x1D, 0x85, 0xC9, 0x79, 0x07, 0xB9, 0x40, 0x00, 0x00, 0x00, 0xEB, 0x30, 0x81, 0xE1, 0x00, 0x00, 0x00, 0x40, 0xF7, 0xD9, 0x1B, 0xC9, 0x83, 0xE1, 0x10, 0x83, 0xC1, 0x10, 0xEB, 0x1E, 0x85, 0xC9, 0x79, 0x07, 0xB9, 0x04, 0x00, 0x00, 0x00, 0xEB, 0x13, 0xF7, 0xC1, 0x00, 0x00, 0x00, 0x40, 0xB8, 0x02, 0x00, 0x00, 0x00, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x0F, 0x45, 0xC8, 0x8B, 0x86, 0x6C, 0x04, 0x00, 0x00, 0x8D, 0x55, 0xA8, 0x52, 0x51, 0x8D, 0x4D, 0xB8, 0x51, 0x8D, 0x4D, 0xBC, 0x51, 0x6A, 0xFF, 0xFF, 0xD0, 0x8B, 0xD0, 0x85, 0xD2, 0x78, 0x23, 0x8B, 0x5D, 0xF4, 0x8B, 0x45, 0xE8, 0x83, 0xC7, 0x28, 0xFF, 0x45, 0xB4, 0x8B, 0xCA, 0x0F, 0xB7, 0x40, 0x06, 0x39, 0x45, 0xB4, 0x0F, 0x85, 0x71, 0xFF, 0xFF, 0xFF, 0x85, 0xC9, 0x0F, 0x89, 0xAE, 0x00, 0x00, 0x00, 0x8B, 0x45, 0xE4, 0x89, 0x56, 0x08, 0x85, 0xC0, 0x74, 0x38, 0x8B, 0x78, 0x04, 0x8B, 0xDF, 0x66, 0x66, 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x8B, 0x45, 0xEC, 0x85, 0xC0, 0x74, 0x2E, 0x8B, 0x78, 0x04, 0x8B, 0xDF, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8D, 0x45, 0xE0, 0xC7, 0x45, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD0, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x06, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x4D, 0xE8, 0x83, 0x7D, 0xA4, 0x00, 0x0F, 0x84, 0xE4, 0x01, 0x00, 0x00, 0x8B, 0x86, 0x40, 0x04, 0x00, 0x00, 0x83, 0xF8, 0x3F, 0x72, 0x0F, 0x8B, 0x51, 0x50, 0x8B, 0xCB, 0x8B, 0x86, 0xA4, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xEB, 0x2A, 0x83, 0xF8, 0x3E, 0x75, 0x0E, 0xFF, 0x71, 0x50, 0x8B, 0x86, 0xA4, 0x04, 0x00, 0x00, 0x53, 0xFF, 0xD0, 0xEB, 0x17, 0x83, 0xF8, 0x3D, 0x75, 0x15, 0xFF, 0x71, 0x50, 0x8B, 0x86, 0xA4, 0x04, 0x00, 0x00, 0x53, 0xFF, 0xB6, 0xCC, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x5D, 0xF4, 0x8B, 0x8E, 0xCC, 0x04, 0x00, 0x00, 0x33, 0xC0, 0xBA, 0x35, 0x01, 0x00, 0xC0, 0x8B, 0x09, 0x85, 0xC9, 0x74, 0x26, 0x83, 0xBE, 0x40, 0x04, 0x00, 0x00, 0x3E, 0x1B, 0xFF, 0x83, 0xE7, 0xFC, 0x83, 0xC7, 0x10, 0x03, 0xBE, 0xCC, 0x04, 0x00, - 0x00, 0x39, 0x5F, 0x04, 0x0F, 0x84, 0xC6, 0x00, 0x00, 0x00, 0x40, 0x83, 0xC7, 0x10, 0x3B, 0xC1, 0x72, 0xEF, 0x8B, 0x86, 0x50, 0x04, 0x00, 0x00, 0x89, 0x56, 0x08, 0x85, 0xC0, 0x74, 0x09, 0x50, 0x8B, 0x86, 0xBC, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x45, 0xE4, 0x85, 0xC0, 0x74, 0x2E, 0x8B, 0x78, 0x04, 0x8B, 0xDF, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x8B, 0x45, 0xEC, 0x85, 0xC0, 0x74, 0x35, 0x8B, 0x78, 0x04, 0x8B, 0xDF, 0x0F, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8D, 0x45, 0xE0, 0xC7, 0x45, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD0, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x0C, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x83, 0x7F, 0x0C, 0x00, 0x0F, 0x85, 0x9C, 0x00, 0x00, 0x00, 0x8B, 0x86, 0x68, 0x04, 0x00, 0x00, 0x8D, 0x4D, 0xA0, 0x6A, 0x04, 0x68, 0x00, 0x30, 0x00, 0x00, 0x51, 0x6A, 0x00, 0x8D, 0x4D, 0xA4, 0xC7, 0x45, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x51, 0x6A, 0xFF, 0xC7, 0x45, 0xA0, 0x00, 0x20, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD0, 0x85, 0xD2, 0x0F, 0x88, 0x05, 0xFF, 0xFF, 0xFF, 0x8B, 0x15, 0x30, 0x03, 0xFE, 0x7F, 0x8B, 0xC2, 0x33, 0x55, 0xA4, 0x83, 0xE0, 0x1F, 0x8B, 0xC8, 0x8B, 0xDA, 0xF7, 0xD9, 0xD3, 0xE3, 0x8B, 0xC8, 0xD3, 0xEA, 0x0B, 0xDA, 0x83, 0xBE, 0x40, 0x04, 0x00, 0x00, 0x3F, 0x72, 0x0A, 0x8B, 0x86, 0xB4, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xD0, 0x89, 0x1F, 0x83, 0xBE, 0x40, 0x04, 0x00, 0x00, 0x3F, 0x72, 0x0A, 0x8B, 0x86, 0xB4, 0x04, 0x00, 0x00, 0x6A, 0x01, 0xFF, 0xD0, 0x80, 0x7D, 0xFB, 0x00, 0x74, 0x1C, 0x83, 0xBE, 0x50, 0x04, 0x00, 0x00, 0x00, 0x75, 0x13, 0xFF, 0x75, 0xB0, 0x8B, 0x86, 0xB8, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xD0, 0x89, 0x86, 0x50, 0x04, 0x00, 0x00, 0x8B, 0x5D, 0xF4, 0xF7, 0x45, 0xDC, 0x00, 0x00, 0x08, 0x00, 0x8B, 0x7D, 0xE8, 0x0F, 0x84, 0x35, 0x01, 0x00, 0x00, 0x83, 0xBF, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x84, 0x28, 0x01, 0x00, 0x00, 0x8B, 0xBF, 0xC0, 0x00, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x03, 0xFB, 0x68, 0xB8, 0x00, 0x00, 0x00, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD8, 0x85, 0xDB, 0x0F, 0x85, 0x8C, 0x00, 0x00, 0x00, 0x8B, 0x45, 0xE4, 0x85, 0xC0, 0x74, 0x38, 0x8B, 0x78, 0x04, 0x8B, 0xDF, 0x66, 0x66, 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, - 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x8B, 0x45, 0xEC, 0x85, 0xC0, 0x74, 0x2E, 0x8B, 0x78, 0x04, 0x8B, 0xDF, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x8D, 0x45, 0xE0, 0xC7, 0x45, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x80, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD0, 0xE9, 0x4F, 0xE9, 0xFF, 0xFF, 0x8B, 0x45, 0xF4, 0x89, 0x43, 0x18, 0x83, 0xBE, 0x40, 0x04, 0x00, 0x00, 0x3E, 0x8B, 0x86, 0xA8, 0x04, 0x00, 0x00, 0x77, 0x05, 0x53, 0xFF, 0xD0, 0xEB, 0x04, 0x8B, 0xCB, 0xFF, 0xD0, 0x8B, 0x7F, 0x0C, 0x85, 0xFF, 0x74, 0x19, 0x0F, 0x1F, 0x44, 0x00, 0x00, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x0E, 0x6A, 0x00, 0x6A, 0x01, 0xFF, 0x75, 0xF4, 0xFF, 0xD0, 0x83, 0xC7, 0x04, 0x75, 0xEC, 0x8B, 0x8E, 0xD4, 0x04, 0x00, 0x00, 0x8B, 0x01, 0x3B, 0xC1, 0x74, 0x14, 0x39, 0x58, 0x20, 0x74, 0x08, 0x8B, 0x00, 0x3B, 0xC1, 0x75, 0xF5, 0xEB, 0x07, 0xC7, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x5D, 0xF4, 0x8B, 0x7D, 0xE8, 0x8B, 0x45, 0xDC, 0xA9, 0x00, 0x00, 0x80, 0x00, 0x74, 0x66, 0x83, 0x7F, 0x28, 0x00, 0x74, 0x60, 0xC7, 0x45, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x45, 0xA4, 0x00, 0x00, 0x00, 0x00, 0xA9, 0x00, 0x00, 0x00, 0x01, 0x74, 0x39, 0x8B, 0x86, 0xAC, 0x04, 0x00, 0x00, 0x8D, 0x4D, 0xA4, 0x51, 0x8D, 0x4D, 0xA0, 0x51, 0x6A, 0x00, 0xFF, 0xD0, 0x8B, 0x4D, 0xF4, 0x85, 0xC0, 0x8B, 0x47, 0x28, 0x6A, 0x00, 0x6A, 0x01, 0x0F, 0x99, 0xC3, 0x03, 0xC1, 0x51, 0xFF, 0xD0, 0x84, 0xDB, 0x74, 0x1B, 0xFF, 0x75, 0xA4, 0x8B, 0x86, 0xB0, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xD0, 0xEB, 0x0C, 0x8B, 0x47, 0x28, 0x6A, 0x00, 0x6A, 0x01, 0x53, 0x03, 0xC3, 0xFF, 0xD0, 0x8B, 0x5D, 0xF4, 0x8B, 0x45, 0xDC, 0x25, 0x00, 0x00, 0x21, 0x00, 0x3D, 0x00, 0x00, 0x01, 0x00, 0x0F, 0x85, 0x86, 0x02, 0x00, 0x00, 0x83, 0xBF, 0x84, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x84, 0x92, 0x00, 0x00, 0x00, 0x8B, 0xBF, 0x80, 0x00, 0x00, 0x00, 0x03, 0xFB, 0x83, 0x7F, 0x0C, 0x00, 0x74, 0x6A, 0x8B, 0x47, 0x0C, 0x80, 0x3C, 0x18, 0x00, 0x74, 0x05, 0xC6, 0x44, 0x18, 0x01, 0x00, 0x8B, 0x07, 0xC7, 0x47, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x55, 0xF4, 0x8D, 0x0C, 0x10, 0x85, 0xC0, 0x75, 0x05, 0x8B, 0x4F, 0x10, 0x03, 0xCA, 0x8B, 0x11, 0x85, 0xD2, 0x74, 0x23, 0x79, 0x08, 0xC7, 0x01, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x0F, 0x8B, 0x45, 0xF4, 0x80, 0x7C, 0x10, 0x02, 0x00, 0x74, 0x05, 0xC6, 0x44, 0x10, 0x03, 0x00, 0x8B, 0x51, 0x04, 0x83, 0xC1, 0x04, 0x85, 0xD2, 0x75, 0xDD, 0xC7, 0x07, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x47, 0x10, 0x00, 0x00, 0x00, 0x00, 0x83, 0xC7, 0x14, 0x83, 0x7F, 0x0C, 0x00, 0x74, 0x05, 0x8B, 0x5D, 0xF4, 0xEB, 0x96, 0x8B, 0x7D, 0xE8, 0xC7, 0x87, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x87, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x5D, 0xF4, 0x83, 0xBF, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x84, 0xD2, 0x00, 0x00, 0x00, 0x83, - 0x7D, 0x9C, 0x00, 0x0F, 0x85, 0xC8, 0x00, 0x00, 0x00, 0x8B, 0x87, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xC3, 0x83, 0x78, 0x04, 0x00, 0x0F, 0x84, 0x9F, 0x00, 0x00, 0x00, 0x83, 0xC0, 0x0C, 0x89, 0x45, 0xA4, 0x0F, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x48, 0xF8, 0x80, 0x3C, 0x19, 0x00, 0x74, 0x05, 0xC6, 0x44, 0x19, 0x01, 0x00, 0x8B, 0x38, 0x8B, 0x50, 0x04, 0xC7, 0x40, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x40, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x75, 0xF4, 0x03, 0xFE, 0x03, 0xD6, 0x83, 0x3F, 0x00, 0x74, 0x3E, 0x0F, 0x1F, 0x00, 0x8B, 0x1A, 0x85, 0xDB, 0x79, 0x08, 0xC7, 0x02, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x1A, 0x8A, 0x44, 0x33, 0x02, 0x84, 0xC0, 0x0F, 0xB6, 0xC8, 0xC7, 0x45, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x45, 0x4D, 0x9C, 0xFE, 0xC1, 0x88, 0x4C, 0x33, 0x02, 0x83, 0xC7, 0x04, 0x83, 0xC2, 0x04, 0x83, 0x3F, 0x00, 0x74, 0x05, 0x8B, 0x75, 0xF4, 0xEB, 0xC8, 0x8B, 0x45, 0xA4, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x83, 0xC0, 0x20, 0x89, 0x45, 0xA4, 0x83, 0x78, 0xF8, 0x00, 0x74, 0x08, 0x8B, 0x5D, 0xF4, 0xE9, 0x74, 0xFF, 0xFF, 0xFF, 0x8B, 0x75, 0x08, 0x8B, 0x7D, 0xE8, 0xC7, 0x87, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x87, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x5D, 0xF4, 0x83, 0xBF, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x74, 0x48, 0x8B, 0xBF, 0xA8, 0x00, 0x00, 0x00, 0x03, 0xFB, 0x8B, 0x47, 0x14, 0xFF, 0x77, 0x10, 0x03, 0xC3, 0x50, 0x8B, 0x86, 0x80, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xC7, 0x47, 0x10, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x47, 0x14, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x7D, 0xE8, 0xC7, 0x87, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x87, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x5D, 0xF4, 0x83, 0xBF, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x74, 0x4D, 0x8B, 0x8F, 0xA0, 0x00, 0x00, 0x00, 0x03, 0xCB, 0x89, 0x4D, 0x08, 0x83, 0x39, 0x00, 0x74, 0x26, 0x8B, 0x41, 0x04, 0x8D, 0x79, 0x04, 0x83, 0xE8, 0x08, 0x50, 0x8D, 0x41, 0x08, 0x50, 0x8B, 0x86, 0x80, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x4D, 0x08, 0x03, 0x0F, 0x89, 0x4D, 0x08, 0x83, 0x39, 0x00, 0x75, 0xDD, 0x8B, 0x7D, 0xE8, 0xC7, 0x87, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x87, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x5D, 0xF4, 0x83, 0xBF, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x74, 0x58, 0x8B, 0x8F, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xCB, 0x8B, 0x41, 0x0C, 0x85, 0xC0, 0x74, 0x10, 0x83, 0x38, 0x00, 0x74, 0x0B, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xC0, 0x04, 0x75, 0xF0, 0xC7, 0x41, 0x0C, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x41, 0x08, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x41, 0x04, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x41, 0x10, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x01, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x87, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x87, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x5D, 0xF4, 0xF6, 0x45, 0xDC, 0x03, 0x74, 0x73, 0x83, 0x7D, 0xAC, 0x00, 0x8B, 0x47, 0x54, 0x89, 0x5D, 0xA4, 0x89, 0x45, 0x08, 0xC7, 0x45, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x74, - 0x2A, 0x8B, 0x86, 0x6C, 0x04, 0x00, 0x00, 0x8D, 0x4D, 0xB0, 0x51, 0x6A, 0x40, 0x8D, 0x4D, 0x08, 0x51, 0x8D, 0x4D, 0xA4, 0x51, 0x6A, 0xFF, 0xFF, 0xD0, 0x85, 0xC0, 0x79, 0x08, 0x89, 0x46, 0x08, 0xE9, 0x6B, 0xF9, 0xFF, 0xFF, 0x8B, 0x5D, 0xF4, 0x8B, 0x45, 0x08, 0xF6, 0x45, 0xDC, 0x01, 0x74, 0x48, 0x50, 0x8B, 0x86, 0x80, 0x04, 0x00, 0x00, 0x53, 0xFF, 0xD0, 0x83, 0x7D, 0xAC, 0x00, 0x74, 0x1D, 0x8B, 0x86, 0x6C, 0x04, 0x00, 0x00, 0x8D, 0x4D, 0xB0, 0x51, 0xFF, 0x75, 0xB0, 0x8D, 0x4D, 0x08, 0x51, 0x8D, 0x4D, 0xA4, 0x51, 0x6A, 0xFF, 0xFF, 0xD0, 0x85, 0xC0, 0x78, 0xBF, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x45, 0xF4, 0x89, 0x06, 0x33, 0xC0, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0xF6, 0x45, 0xDC, 0x02, 0x74, 0xBC, 0x64, 0xA1, 0x30, 0x00, 0x00, 0x00, 0x85, 0xC0, 0x75, 0x19, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x0F, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x40, 0x0C, 0x85, 0xC0, 0x74, 0x48, 0x8B, 0x58, 0x0C, 0x85, 0xDB, 0x74, 0x41, 0x8B, 0x1B, 0x85, 0xDB, 0x74, 0x3B, 0x8B, 0x43, 0x18, 0x85, 0xC0, 0x74, 0x34, 0x8B, 0x78, 0x3C, 0xFF, 0x75, 0x08, 0x03, 0xF8, 0x8B, 0x86, 0x80, 0x04, 0x00, 0x00, 0xFF, 0x75, 0xF4, 0xFF, 0xD0, 0x8B, 0x4D, 0x08, 0x39, 0x4F, 0x54, 0x8B, 0x96, 0x7C, 0x04, 0x00, 0x00, 0x0F, 0x42, 0x4F, 0x54, 0x51, 0xFF, 0x73, 0x18, 0xFF, 0x75, 0xF4, 0xFF, 0xD2, 0x83, 0xC4, 0x0C, 0xE9, 0x4A, 0xFF, 0xFF, 0xFF, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x5F, 0x5E, 0xB8, 0x10, 0x00, 0x40, 0x00, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC + 0x55, 0x8B, 0xEC, 0x83, 0xEC, 0x70, 0x53, 0x56, 0x8B, 0x75, 0x08, 0x57, 0x85, 0xF6, 0x75, 0x0E, 0xB8, 0x01, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x46, 0x04, 0x33, 0xFF, 0x89, 0x45, 0xE0, 0x8B, 0x86, 0xC8, 0x04, 0x00, 0x00, 0xC7, 0x45, 0xD0, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x45, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x89, 0x7D, 0xCC, 0x8B, 0x08, 0x89, 0x7D, 0xBC, 0x89, 0x8E, 0xD8, 0x04, 0x00, 0x00, 0x85, 0xC9, 0x75, 0x0E, 0xB8, 0x0E, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x66, 0x8B, 0x46, 0x10, 0x0F, 0x57, 0xC0, 0x66, 0x0F, 0x13, 0x45, 0x90, 0x66, 0x89, 0x45, 0x90, 0xB8, 0x10, 0x02, 0x00, 0x00, 0x68, 0x10, 0x02, 0x00, 0x00, 0x6A, 0x08, 0x66, 0x89, 0x45, 0x92, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x51, 0xFF, 0xD0, 0x8B, 0xC8, 0x89, 0x4D, 0x94, 0x85, 0xC9, 0x0F, 0x84, 0x79, 0x02, 0x00, 0x00, 0x6A, 0x08, 0x8D, 0x86, 0x30, 0x04, 0x00, 0x00, 0x50, 0x8B, 0x86, 0x7C, 0x04, 0x00, 0x00, 0x51, 0xFF, 0xD0, 0x0F, 0xB7, 0x45, 0x90, 0x50, 0x8D, 0x46, 0x18, 0x50, 0x8B, 0x45, 0x94, 0x83, 0xC0, 0x08, 0x50, 0x8B, 0x86, 0x7C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x83, 0xC4, 0x18, 0x66, 0x83, 0x45, 0x90, 0x08, 0x6A, 0x18, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD8, 0x85, 0xDB, 0x74, 0x44, 0x6A, 0x08, 0x8D, 0x45, 0x90, 0xC7, 0x03, 0x18, 0x00, 0x00, 0x00, 0x89, 0x7B, 0x04, 0xC7, 0x43, 0x0C, 0x40, 0x00, 0x00, 0x00, 0x89, 0x43, 0x08, 0x89, 0x7B, 0x10, 0x89, 0x7B, 0x14, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xF8, 0x85, 0xFF, 0x75, 0x3A, 0x53, 0x50, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x45, 0x94, 0x85, 0xC0, 0x0F, 0x84, 0xE0, 0x01, 0x00, 0x00, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x03, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x86, 0x54, 0x04, 0x00, 0x00, 0x8D, 0x4D, 0xF0, 0x6A, 0x20, 0x6A, 0x01, 0x57, 0x53, 0x68, 0x89, 0x00, 0x12, 0x00, 0x51, 0xC7, 0x45, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xD0, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x89, 0x45, 0xA0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x45, 0x94, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x45, 0xA0, 0x85, 0xC0, 0x79, 0x22, 0x57, 0x89, 0x46, 0x08, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x02, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x18, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD8, 0x85, 0xDB, 0x75, 0x15, 0x57, 0x50, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xE9, 0x16, 0x01, 0x00, 0x00, 0x8B, 0x86, 0x64, 0x04, 0x00, 0x00, 0x6A, 0x05, 0x6A, 0x18, 0x53, 0x57, + 0xFF, 0x75, 0xF0, 0xFF, 0xD0, 0x85, 0xC0, 0x79, 0x3E, 0x53, 0x89, 0x46, 0x08, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x07, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x6A, 0x40, 0x68, 0x00, 0x30, 0x00, 0x00, 0x8D, 0x4D, 0xD8, 0xC7, 0x45, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x03, 0x51, 0x6A, 0x00, 0x8D, 0x4D, 0xD4, 0x89, 0x45, 0xD8, 0x8B, 0x86, 0x68, 0x04, 0x00, 0x00, 0x51, 0x6A, 0xFF, 0xFF, 0xD0, 0x85, 0xC0, 0x79, 0x3E, 0x53, 0x89, 0x46, 0x08, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x08, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x08, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xC8, 0x89, 0x4D, 0xA0, 0x85, 0xC9, 0x75, 0x58, 0x53, 0x50, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8D, 0x45, 0xD8, 0xC7, 0x45, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x80, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD4, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x03, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x86, 0x60, 0x04, 0x00, 0x00, 0x6A, 0x0E, 0x6A, 0x08, 0x51, 0x57, 0xFF, 0x75, 0xF0, 0xFF, 0xD0, 0x85, 0xC0, 0x79, 0x5C, 0x53, 0x89, 0x46, 0x08, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8D, 0x45, 0xD8, 0xC7, 0x45, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD4, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x05, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0xFF, 0x75, 0xA0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x58, 0x04, 0x00, 0x00, 0x6A, 0x00, 0x6A, 0x00, 0xFF, 0x33, 0xFF, 0x75, 0xD4, 0x57, 0x6A, 0x00, 0x6A, 0x00, 0x6A, 0x00, 0xFF, 0x75, 0xF0, 0xFF, 0xD0, 0x53, 0x6A, 0x00, 0x85, 0xC0, 0x79, 0x59, 0x89, 0x46, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8D, 0x45, 0xD8, 0xC7, + 0x45, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD4, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x04, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x45, 0xD4, 0x8B, 0x55, 0xE0, 0x8B, 0x58, 0x3C, 0x03, 0xD8, 0x8B, 0xC2, 0x25, 0x00, 0x00, 0x20, 0x02, 0x89, 0x5D, 0xB4, 0x89, 0x45, 0xA4, 0x8B, 0x4B, 0x50, 0x89, 0x4D, 0xDC, 0x3D, 0x00, 0x00, 0x00, 0x02, 0x75, 0x09, 0x0F, 0xB7, 0x46, 0x0C, 0x03, 0xC8, 0x89, 0x4D, 0xDC, 0x8B, 0xC2, 0x25, 0x00, 0x00, 0x10, 0x00, 0x89, 0x45, 0xA0, 0x74, 0x09, 0x8D, 0x81, 0x00, 0x10, 0x00, 0x00, 0x89, 0x45, 0xDC, 0x8B, 0x86, 0x68, 0x04, 0x00, 0x00, 0x8D, 0x4D, 0xDC, 0x6A, 0x40, 0x68, 0x00, 0x30, 0x00, 0x00, 0x51, 0x6A, 0x00, 0x8D, 0x4D, 0xD0, 0x51, 0x6A, 0xFF, 0xFF, 0xD0, 0x8B, 0xF8, 0x89, 0x7D, 0xB0, 0x85, 0xFF, 0x79, 0x26, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8D, 0x45, 0xD8, 0x89, 0x7E, 0x08, 0x50, 0x8D, 0x45, 0xD4, 0xC7, 0x45, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xE9, 0xC9, 0xFD, 0xFF, 0xFF, 0x81, 0x7D, 0xA4, 0x00, 0x00, 0x00, 0x02, 0x8B, 0x45, 0xD0, 0x75, 0x06, 0x0F, 0xB7, 0x4E, 0x0C, 0x03, 0xC1, 0x83, 0x7D, 0xA0, 0x00, 0x89, 0x45, 0xF4, 0xC6, 0x45, 0xFB, 0x00, 0x74, 0x74, 0x8B, 0x4B, 0x50, 0x6A, 0x14, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x03, 0xC8, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x89, 0x4D, 0xA8, 0xFF, 0xD0, 0x8B, 0xD0, 0x85, 0xD2, 0x74, 0x54, 0x8B, 0x45, 0xF4, 0x89, 0x02, 0x8B, 0x43, 0x50, 0x89, 0x42, 0x04, 0x8B, 0x86, 0x40, 0x04, 0x00, 0x00, 0x89, 0x42, 0x08, 0x8B, 0x86, 0xCC, 0x04, 0x00, 0x00, 0x89, 0x42, 0x0C, 0x8B, 0x86, 0xB4, 0x04, 0x00, 0x00, 0x89, 0x42, 0x10, 0x8B, 0x8E, 0x48, 0x04, 0x00, 0x00, 0x85, 0xC9, 0x74, 0x20, 0x8B, 0x86, 0x4C, 0x04, 0x00, 0x00, 0x83, 0xC0, 0xFC, 0x03, 0xC1, 0x3B, 0xC8, 0x77, 0x11, 0x81, 0x39, 0x0C, 0xB0, 0xCE, 0xFA, 0x0F, 0x84, 0xE6, 0x00, 0x00, 0x00, 0x41, 0x3B, 0xC8, 0x76, 0xEF, 0xC6, 0x45, 0xFB, 0x00, 0xFF, 0x73, 0x54, 0x8B, 0x86, 0x7C, 0x04, 0x00, 0x00, 0xFF, 0x75, 0xD4, 0xFF, 0x75, 0xF4, 0xFF, 0xD0, 0x0F, 0xB7, 0x43, 0x14, 0x33, 0xC9, 0x83, 0xC4, 0x0C, 0x89, 0x4D, 0xAC, 0x83, 0xC0, 0x2C, 0x66, 0x39, 0x4B, 0x06, 0x74, 0x3A, 0x8B, 0x7D, 0xB4, 0x03, 0xD8, 0x8B, 0x43, 0xFC, 0x85, 0xC0, 0x74, 0x1C, 0x50, 0x8B, 0x03, 0x03, 0x45, 0xD4, 0x50, 0x8B, 0x43, 0xF8, 0x03, 0x45, 0xF4, 0x50, 0x8B, 0x86, 0x7C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x4D, 0xAC, 0x83, 0xC4, 0x0C, 0x0F, 0xB7, 0x47, 0x06, 0x41, 0x83, 0xC3, 0x28, 0x89, 0x4D, 0xAC, 0x3B, 0xC8, 0x75, 0xCE, 0x8B, 0x7D, 0xB0, 0x8B, 0x45, 0xF4, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8B, 0x48, 0x3C, 0x03, 0xC8, 0xC7, 0x45, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x45, 0xD8, 0x89, 0x4D, 0xE4, 0x50, 0x8D, 0x45, 0xD4, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, + 0xFF, 0xD0, 0x8B, 0x55, 0xE4, 0x8B, 0x5D, 0xF4, 0x8B, 0xC3, 0x2B, 0x42, 0x34, 0x89, 0x45, 0xAC, 0x0F, 0x84, 0xED, 0x00, 0x00, 0x00, 0x83, 0xBA, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5C, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8D, 0x45, 0xDC, 0xC7, 0x45, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD0, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x09, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x89, 0x11, 0xFF, 0xB6, 0x4C, 0x04, 0x00, 0x00, 0x8B, 0x86, 0x7C, 0x04, 0x00, 0x00, 0xFF, 0xB6, 0x48, 0x04, 0x00, 0x00, 0xC6, 0x45, 0xFB, 0x01, 0xFF, 0x75, 0xA8, 0xFF, 0xD0, 0x83, 0xC4, 0x0C, 0xE9, 0xFE, 0xFE, 0xFF, 0xFF, 0x8B, 0x8A, 0xA0, 0x00, 0x00, 0x00, 0x03, 0xCB, 0x89, 0x4D, 0xB8, 0x83, 0x39, 0x00, 0x74, 0x72, 0x8D, 0x41, 0x04, 0x89, 0x45, 0xB4, 0x8D, 0x51, 0x08, 0x8B, 0x00, 0x83, 0xE8, 0x08, 0xD1, 0xE8, 0x89, 0x45, 0xA4, 0x74, 0x32, 0x8B, 0x7D, 0xB8, 0x8B, 0xF0, 0x0F, 0xB7, 0x0A, 0x8B, 0xC1, 0x25, 0x00, 0xF0, 0x00, 0x00, 0x3D, 0x00, 0x30, 0x00, 0x00, 0x75, 0x11, 0x8B, 0x45, 0xAC, 0x81, 0xE1, 0xFF, 0x0F, 0x00, 0x00, 0x03, 0x0F, 0x01, 0x04, 0x19, 0x8B, 0x5D, 0xF4, 0x83, 0xC2, 0x02, 0x83, 0xEE, 0x01, 0x75, 0xD6, 0x8B, 0x4D, 0xB8, 0x8B, 0x45, 0xB4, 0x8B, 0x55, 0xE4, 0x03, 0x08, 0x8B, 0x82, 0xA4, 0x00, 0x00, 0x00, 0x03, 0xC3, 0x89, 0x4D, 0xB8, 0x03, 0x82, 0xA0, 0x00, 0x00, 0x00, 0x3B, 0xC8, 0x73, 0x05, 0x83, 0x39, 0x00, 0x75, 0x97, 0x8B, 0x75, 0x08, 0x8B, 0x7D, 0xB0, 0x8B, 0x45, 0xAC, 0x01, 0x42, 0x34, 0x8B, 0x5D, 0xF4, 0x8B, 0x45, 0xE0, 0xA9, 0x00, 0x00, 0x40, 0x00, 0x74, 0x3D, 0x83, 0xBA, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x74, 0x34, 0x8B, 0xCB, 0x81, 0xF9, 0x4E, 0xE6, 0x40, 0xBB, 0x75, 0x05, 0x8D, 0x59, 0x01, 0xEB, 0x15, 0xF7, 0xC1, 0x00, 0x00, 0xFF, 0xFF, 0x75, 0x0D, 0x8B, 0xD9, 0x81, 0xCB, 0x11, 0x47, 0x00, 0x00, 0xC1, 0xE3, 0x10, 0x0B, 0xD9, 0x8B, 0x82, 0xC8, 0x00, 0x00, 0x00, 0x89, 0x5C, 0x08, 0x3C, 0x8B, 0x5D, 0xF4, 0x8B, 0x45, 0xE0, 0xA9, 0x00, 0x00, 0x82, 0x00, 0x0F, 0x84, 0xD3, 0x05, 0x00, 0x00, 0x83, 0xBA, 0x84, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x84, 0xC6, 0x05, 0x00, 0x00, 0x8B, 0x8A, 0x80, 0x00, 0x00, 0x00, 0x03, 0xCB, 0x89, 0x4D, 0xC0, 0x0F, 0x84, 0xB5, 0x05, 0x00, 0x00, 0x90, 0x8B, 0x41, 0x0C, 0x85, 0xC0, 0x0F, 0x84, 0xA6, 0x05, 0x00, 0x00, 0x6A, 0x08, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8D, 0x3C, 0x18, 0xC7, 0x45, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x89, 0x7D, 0xAC, 0xC7, 0x45, 0xC8, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x45, 0xEC, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD8, 0x85, 0xDB, 0x75, 0x60, 0xC7, 0x45, 0xEC, 0x03, 0x00, 0x40, 0x00, 0xBF, 0x03, 0x00, 0x40, 0x00, 0x8B, 0x45, 0xC0, 0x8B, 0x5D, 0xF4, 0x8B, 0x08, 0x8B, 0x50, 0x10, 0x03, 0xD3, 0x85, 0xC9, 0x89, 0x55, 0xC4, 0x8D, 0x04, 0x19, 0x0F, 0x45, 0xD0, 0x89, 0x55, 0xB4, 0x8B, 0x02, 0x85, 0xC0, 0x0F, 0x84, 0x1C, 0x05, 0x00, 0x00, 0x8D, 0x8E, 0x94, 0x04, 0x00, 0x00, 0x89, 0x4D, 0xAC, 0x85, 0xC0, 0x0F, 0x89, 0x70, 0x04, 0x00, 0x00, + 0x8B, 0x5D, 0xC4, 0x8B, 0x09, 0x53, 0x0F, 0xB7, 0xC0, 0x50, 0x6A, 0x00, 0xFF, 0x75, 0xE8, 0xFF, 0xD1, 0x8B, 0xF8, 0x8D, 0x8E, 0x94, 0x04, 0x00, 0x00, 0xE9, 0xC9, 0x04, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x8B, 0xCF, 0x0F, 0xB7, 0xC7, 0x8B, 0xD0, 0x74, 0x0F, 0x66, 0x0F, 0x1F, 0x44, 0x00, 0x00, 0x41, 0x0F, 0xB7, 0xC1, 0x80, 0x39, 0x00, 0x75, 0xF7, 0x2B, 0xC2, 0x0F, 0xB7, 0xF8, 0x66, 0x85, 0xFF, 0x0F, 0x84, 0xEE, 0x03, 0x00, 0x00, 0x8B, 0x8E, 0x84, 0x04, 0x00, 0x00, 0x8B, 0xC7, 0x89, 0x45, 0xA4, 0x40, 0x50, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD1, 0x8B, 0xC8, 0x89, 0x4B, 0x04, 0x85, 0xC9, 0x0F, 0x84, 0xCA, 0x03, 0x00, 0x00, 0x57, 0xFF, 0x75, 0xAC, 0x8D, 0x47, 0x01, 0x66, 0x89, 0x3B, 0x66, 0x89, 0x43, 0x02, 0x8B, 0x86, 0x7C, 0x04, 0x00, 0x00, 0x51, 0xFF, 0xD0, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x83, 0xC4, 0x0C, 0x6A, 0x08, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xF8, 0x85, 0xFF, 0x75, 0x3B, 0xC7, 0x45, 0xEC, 0x03, 0x00, 0x40, 0x00, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x10, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7D, 0xEC, 0x8B, 0xC7, 0x8B, 0xCF, 0xE9, 0x7C, 0x03, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x68, 0x08, 0x02, 0x00, 0x00, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x89, 0x47, 0x04, 0xB9, 0x08, 0x02, 0x00, 0x00, 0x66, 0x89, 0x4F, 0x02, 0x85, 0xC0, 0x75, 0x38, 0x57, 0x50, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xC7, 0x45, 0xEC, 0x03, 0x00, 0x40, 0x00, 0xFF, 0xD0, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x0F, 0x84, 0x1D, 0x03, 0x00, 0x00, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xE9, 0x07, 0x03, 0x00, 0x00, 0x8B, 0x86, 0x9C, 0x04, 0x00, 0x00, 0x6A, 0x00, 0x53, 0x57, 0xFF, 0xD0, 0x89, 0x45, 0xEC, 0x85, 0xC0, 0x79, 0x4A, 0x8B, 0x47, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x0F, 0x84, 0xC0, 0x02, 0x00, 0x00, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xE9, 0xAA, 0x02, 0x00, 0x00, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x40, 0x04, 0x00, 0x00, 0x83, 0xF8, 0x64, 0x0F, 0x82, 0x1A, 0x01, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x68, 0x08, 0x01, 0x00, 0x00, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD8, 0x85, 0xDB, 0x0F, 0x84, 0x43, 0x04, 0x00, 0x00, 0xB8, 0x00, 0x01, 0x00, 0x00, 0x8D, 0x4D, 0xB8, 0x66, 0x89, 0x43, + 0x02, 0x8B, 0xD3, 0x8D, 0x43, 0x08, 0x51, 0x89, 0x43, 0x04, 0x8B, 0xCF, 0x8B, 0x86, 0xA0, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xC7, 0x45, 0xB8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x8E, 0xD8, 0x04, 0x00, 0x00, 0x89, 0x45, 0xEC, 0x85, 0xC0, 0x79, 0x2A, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0x51, 0xFF, 0xD0, 0x8B, 0x47, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x57, 0xE9, 0xF5, 0x01, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x50, 0x6A, 0x08, 0x51, 0xFF, 0xD0, 0x89, 0x45, 0xA4, 0x85, 0xC0, 0x0F, 0x84, 0xBB, 0x03, 0x00, 0x00, 0x81, 0xBE, 0x44, 0x04, 0x00, 0x00, 0x5A, 0x29, 0x00, 0x00, 0x8B, 0x4F, 0x04, 0x75, 0x05, 0x89, 0x48, 0x0C, 0xEB, 0x03, 0x89, 0x48, 0x10, 0x81, 0xBE, 0x44, 0x04, 0x00, 0x00, 0xF0, 0x55, 0x00, 0x00, 0x8B, 0xD0, 0x8B, 0x8E, 0x90, 0x04, 0x00, 0x00, 0x89, 0x4D, 0xAC, 0x8D, 0x4D, 0xEC, 0x72, 0x17, 0x6A, 0x00, 0x51, 0x8D, 0x4D, 0xC8, 0x51, 0x6A, 0x00, 0x6A, 0x00, 0x6A, 0x04, 0xFF, 0x75, 0xB8, 0x8B, 0xCB, 0xFF, 0x55, 0xAC, 0xEB, 0x13, 0x51, 0x8D, 0x4D, 0xC8, 0x51, 0x6A, 0x00, 0x6A, 0x00, 0x6A, 0x04, 0xFF, 0x75, 0xB8, 0x8B, 0xCB, 0xFF, 0x55, 0xAC, 0xFF, 0x75, 0xA4, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xE9, 0xC6, 0x00, 0x00, 0x00, 0x83, 0xF8, 0x3F, 0x75, 0x42, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x14, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD8, 0x85, 0xDB, 0x74, 0x76, 0x8B, 0x47, 0x04, 0x8D, 0x4D, 0xA4, 0x51, 0x8D, 0x4D, 0xC8, 0x89, 0x43, 0x0C, 0x8B, 0x86, 0x8C, 0x04, 0x00, 0x00, 0x8B, 0xD3, 0x51, 0x6A, 0x01, 0x6A, 0x00, 0x8B, 0xCF, 0xC7, 0x45, 0xA4, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xD0, 0x89, 0x45, 0xEC, 0xEB, 0xA3, 0x83, 0xF8, 0x3E, 0x75, 0x50, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x18, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD8, 0x85, 0xDB, 0x74, 0x2F, 0x8B, 0x47, 0x04, 0x8D, 0x4D, 0xA4, 0x51, 0x8D, 0x4D, 0xC8, 0x89, 0x43, 0x04, 0x51, 0x6A, 0x01, 0x6A, 0x00, 0x53, 0xC6, 0x43, 0x08, 0x01, 0x8B, 0x86, 0x8C, 0x04, 0x00, 0x00, 0x57, 0xC7, 0x45, 0xA4, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xD0, 0x89, 0x45, 0xEC, 0xE9, 0x57, 0xFF, 0xFF, 0xFF, 0xC7, 0x45, 0xEC, 0x17, 0x00, 0x00, 0xC0, 0xEB, 0x2A, 0x83, 0xF8, 0x3D, 0x75, 0x1E, 0x8B, 0x86, 0x8C, 0x04, 0x00, 0x00, 0x8D, 0x4D, 0xC8, 0x51, 0x6A, 0x00, 0x6A, 0x01, 0x6A, 0x00, 0xFF, 0xB6, 0xD0, 0x04, 0x00, 0x00, 0x57, 0xFF, 0xD0, 0x89, 0x45, 0xEC, 0xEB, 0x07, 0xC7, 0x45, 0xEC, 0x02, 0x00, 0x00, 0xC0, 0x8B, 0x47, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x83, 0x7D, 0xEC, 0x00, 0x7C, 0x74, 0x8B, 0x45, 0xC8, 0x85, 0xC0, 0x74, 0x4C, 0x8B, 0x58, 0x18, 0x8B, 0x86, 0xD8, 0x04, 0x00, + 0x00, 0x8B, 0x8E, 0x84, 0x04, 0x00, 0x00, 0x8B, 0x7D, 0xCC, 0x6A, 0x0C, 0x6A, 0x08, 0x50, 0x89, 0x5D, 0xE8, 0xFF, 0xD1, 0x85, 0xFF, 0x75, 0x13, 0x8B, 0xF8, 0x89, 0x7D, 0xCC, 0x85, 0xFF, 0x74, 0x44, 0x89, 0x3F, 0x89, 0x7F, 0x04, 0x89, 0x5F, 0x08, 0xEB, 0x3A, 0x85, 0xC0, 0x74, 0x36, 0x8B, 0x4F, 0x04, 0x89, 0x01, 0x8B, 0x4F, 0x04, 0x89, 0x48, 0x04, 0x89, 0x47, 0x04, 0x89, 0x38, 0x89, 0x58, 0x08, 0xEB, 0x21, 0xC7, 0x45, 0xEC, 0x35, 0x01, 0x00, 0xC0, 0xEB, 0x18, 0xC7, 0x45, 0xEC, 0x74, 0x03, 0x00, 0xC0, 0x53, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7D, 0xEC, 0x8B, 0xC7, 0x8B, 0xC8, 0x85, 0xC0, 0x0F, 0x89, 0x6E, 0xFB, 0xFF, 0xFF, 0x81, 0xF9, 0x81, 0x04, 0x00, 0xC0, 0x0F, 0x85, 0xF2, 0x01, 0x00, 0x00, 0x8B, 0x5D, 0xF4, 0xE9, 0x9B, 0x00, 0x00, 0x00, 0x6A, 0x08, 0x03, 0xC3, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x89, 0x45, 0xA4, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD8, 0x85, 0xDB, 0x0F, 0x84, 0xC9, 0x01, 0x00, 0x00, 0x8B, 0x55, 0xA4, 0x83, 0xC2, 0x02, 0x0F, 0xB7, 0xCA, 0x89, 0x53, 0x04, 0x8B, 0xF9, 0x8B, 0xC1, 0x80, 0x3A, 0x00, 0x74, 0x09, 0x42, 0x0F, 0xB7, 0xC2, 0x80, 0x3A, 0x00, 0x75, 0xF7, 0xFF, 0x75, 0xC4, 0x8B, 0x4D, 0xAC, 0x2B, 0xC7, 0x66, 0x89, 0x03, 0x40, 0x66, 0x89, 0x43, 0x02, 0x8B, 0x45, 0xB4, 0x8B, 0x09, 0x0F, 0xB7, 0x00, 0x50, 0x53, 0xFF, 0x75, 0xE8, 0xFF, 0xD1, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0xF8, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x4D, 0xAC, 0x8B, 0x5D, 0xC4, 0x85, 0xFF, 0x0F, 0x88, 0x6B, 0x01, 0x00, 0x00, 0x8B, 0x55, 0xB4, 0x83, 0xC3, 0x04, 0x83, 0xC2, 0x04, 0x89, 0x5D, 0xC4, 0x8B, 0x5D, 0xF4, 0x89, 0x55, 0xB4, 0x8B, 0x02, 0x85, 0xC0, 0x0F, 0x85, 0xEA, 0xFA, 0xFF, 0xFF, 0x8B, 0x55, 0xE4, 0x8B, 0x4D, 0xC0, 0x83, 0xC1, 0x14, 0x89, 0x4D, 0xC0, 0x8B, 0x82, 0x84, 0x00, 0x00, 0x00, 0x03, 0xC3, 0x03, 0x82, 0x80, 0x00, 0x00, 0x00, 0x3B, 0xC8, 0x73, 0x08, 0x85, 0xC9, 0x0F, 0x85, 0x4F, 0xFA, 0xFF, 0xFF, 0x8B, 0x45, 0xE0, 0x25, 0x00, 0x00, 0x04, 0x00, 0x89, 0x45, 0x98, 0x0F, 0x84, 0xDA, 0x07, 0x00, 0x00, 0x83, 0xBA, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x84, 0xCD, 0x07, 0x00, 0x00, 0x8B, 0x8A, 0xE0, 0x00, 0x00, 0x00, 0x32, 0xC0, 0x03, 0xCB, 0x88, 0x45, 0xFA, 0x89, 0x4D, 0xC0, 0x85, 0xC9, 0x0F, 0x84, 0xB5, 0x07, 0x00, 0x00, 0x66, 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x41, 0x04, 0x85, 0xC0, 0x0F, 0x84, 0x7A, 0x06, 0x00, 0x00, 0x6A, 0x08, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x03, 0xD8, 0xC7, 0x45, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x89, 0x5D, 0xAC, 0xC7, 0x45, 0xC4, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x45, 0xE8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xF8, 0x85, 0xFF, 0x0F, 0x85, 0x1F, 0x01, 0x00, 0x00, 0xC7, 0x45, 0xE8, 0x03, 0x00, 0x40, 0x00, 0xBF, 0x03, 0x00, 0x40, 0x00, 0x8B, 0x45, 0xC0, 0x8B, 0x48, 0x08, 0x85, 0xC9, 0x74, 0x0C, 0x8B, 0x45, 0xF4, 0x8B, 0x55, 0xB8, 0x89, 0x14, 0x01, 0x8B, 0x45, 0xC0, 0x8B, 0x48, 0x0C, 0x8B, 0x5D, 0xF4, 0x03, 0xCB, 0x8B, + 0x40, 0x10, 0x03, 0xC3, 0x89, 0x4D, 0xB0, 0x89, 0x45, 0xAC, 0x83, 0x39, 0x00, 0x0F, 0x84, 0xE0, 0x05, 0x00, 0x00, 0x8D, 0x96, 0x94, 0x04, 0x00, 0x00, 0x8B, 0x00, 0x89, 0x55, 0xA4, 0x85, 0xC0, 0x0F, 0x89, 0x25, 0x05, 0x00, 0x00, 0x51, 0x0F, 0xB7, 0xC0, 0x50, 0x8B, 0x02, 0x6A, 0x00, 0xFF, 0x75, 0xB8, 0xFF, 0xD0, 0x8D, 0x96, 0x94, 0x04, 0x00, 0x00, 0xE9, 0x83, 0x05, 0x00, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x47, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xBF, 0x17, 0x00, 0x00, 0xC0, 0x89, 0x7E, 0x08, 0x8B, 0x7D, 0xCC, 0x85, 0xFF, 0x74, 0x35, 0x8B, 0x7F, 0x04, 0x8B, 0xDF, 0x0F, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8D, 0x45, 0xDC, 0xC7, 0x45, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD0, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x0A, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x80, 0x3B, 0x00, 0x8B, 0xCB, 0x0F, 0xB7, 0xC3, 0x8B, 0xD0, 0x74, 0x0D, 0x0F, 0x1F, 0x40, 0x00, 0x41, 0x0F, 0xB7, 0xC1, 0x80, 0x39, 0x00, 0x75, 0xF7, 0x2B, 0xC2, 0x0F, 0xB7, 0xD8, 0x66, 0x85, 0xDB, 0x0F, 0x84, 0xF8, 0x03, 0x00, 0x00, 0x8B, 0x8E, 0x84, 0x04, 0x00, 0x00, 0x8B, 0xC3, 0x89, 0x45, 0xA4, 0x40, 0x50, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD1, 0x89, 0x47, 0x04, 0x85, 0xC0, 0x0F, 0x84, 0xD6, 0x03, 0x00, 0x00, 0x53, 0xFF, 0x75, 0xAC, 0x8D, 0x4B, 0x01, 0x66, 0x89, 0x1F, 0x66, 0x89, 0x4F, 0x02, 0x50, 0x8B, 0x86, 0x7C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x83, 0xC4, 0x0C, 0x6A, 0x08, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD8, 0x85, 0xDB, 0x75, 0x3B, 0xC7, 0x45, 0xE8, 0x03, 0x00, 0x40, 0x00, 0x8B, 0x47, 0x04, 0x85, 0xC0, 0x74, 0x10, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7D, 0xE8, 0x8B, 0xC7, 0x8B, 0xCF, 0xE9, 0x88, 0x03, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x68, 0x08, 0x02, 0x00, 0x00, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x89, 0x43, 0x04, 0xB9, 0x08, 0x02, 0x00, 0x00, 0x66, 0x89, 0x4B, 0x02, 0x85, 0xC0, 0x75, 0x38, 0x53, 0x50, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xC7, 0x45, 0xE8, 0x03, 0x00, 0x40, 0x00, 0xFF, 0xD0, 0x8B, 0x47, 0x04, 0x85, 0xC0, 0x0F, 0x84, 0x29, 0x03, 0x00, 0x00, 0x50, 0x8B, 0x86, + 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xE9, 0x13, 0x03, 0x00, 0x00, 0x8B, 0x86, 0x9C, 0x04, 0x00, 0x00, 0x6A, 0x00, 0x57, 0x53, 0xFF, 0xD0, 0x89, 0x45, 0xE8, 0x85, 0xC0, 0x79, 0x4A, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x47, 0x04, 0x85, 0xC0, 0x0F, 0x84, 0xCC, 0x02, 0x00, 0x00, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xE9, 0xB6, 0x02, 0x00, 0x00, 0x8B, 0x47, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x40, 0x04, 0x00, 0x00, 0x83, 0xF8, 0x64, 0x0F, 0x82, 0x1A, 0x01, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x68, 0x08, 0x01, 0x00, 0x00, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xF8, 0x85, 0xFF, 0x0F, 0x84, 0x52, 0x04, 0x00, 0x00, 0x8D, 0x4F, 0x08, 0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x4F, 0x04, 0x8B, 0xD7, 0x8D, 0x4D, 0xB4, 0x66, 0x89, 0x47, 0x02, 0x8B, 0x86, 0xA0, 0x04, 0x00, 0x00, 0x51, 0x6A, 0x00, 0x8B, 0xCB, 0xC7, 0x45, 0xB4, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x8E, 0xD8, 0x04, 0x00, 0x00, 0x89, 0x45, 0xE8, 0x85, 0xC0, 0x79, 0x2A, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0x51, 0xFF, 0xD0, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x53, 0xE9, 0x01, 0x02, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x50, 0x6A, 0x08, 0x51, 0xFF, 0xD0, 0x89, 0x45, 0xA4, 0x85, 0xC0, 0x0F, 0x84, 0x97, 0x03, 0x00, 0x00, 0x81, 0xBE, 0x44, 0x04, 0x00, 0x00, 0x5A, 0x29, 0x00, 0x00, 0x8B, 0x4B, 0x04, 0x75, 0x05, 0x89, 0x48, 0x0C, 0xEB, 0x03, 0x89, 0x48, 0x10, 0x81, 0xBE, 0x44, 0x04, 0x00, 0x00, 0xF0, 0x55, 0x00, 0x00, 0x8B, 0xD0, 0x8B, 0x8E, 0x90, 0x04, 0x00, 0x00, 0x89, 0x4D, 0xAC, 0x8D, 0x4D, 0xE8, 0x72, 0x17, 0x6A, 0x00, 0x51, 0x8D, 0x4D, 0xC4, 0x51, 0x6A, 0x00, 0x6A, 0x00, 0x6A, 0x04, 0xFF, 0x75, 0xB4, 0x8B, 0xCF, 0xFF, 0x55, 0xAC, 0xEB, 0x13, 0x51, 0x8D, 0x4D, 0xC4, 0x51, 0x6A, 0x00, 0x6A, 0x00, 0x6A, 0x04, 0xFF, 0x75, 0xB4, 0x8B, 0xCF, 0xFF, 0x55, 0xAC, 0xFF, 0x75, 0xA4, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x57, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xE9, 0xCE, 0x00, 0x00, 0x00, 0x83, 0xF8, 0x3F, 0x75, 0x4A, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x14, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x89, 0x45, 0xAC, 0x85, 0xC0, 0x0F, 0x84, 0x79, 0x00, 0x00, 0x00, 0x8B, 0x4B, 0x04, 0x8B, 0xD0, 0x89, 0x48, 0x0C, 0x8D, 0x4D, 0xA4, 0x8B, 0xBE, 0x8C, 0x04, 0x00, + 0x00, 0x51, 0x8D, 0x4D, 0xC4, 0xC7, 0x45, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x51, 0x6A, 0x01, 0x6A, 0x00, 0x8B, 0xCB, 0xFF, 0xD7, 0xFF, 0x75, 0xAC, 0x89, 0x45, 0xE8, 0xEB, 0x9C, 0x83, 0xF8, 0x3E, 0x75, 0x50, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x6A, 0x18, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xF8, 0x85, 0xFF, 0x74, 0x2F, 0x8B, 0x4B, 0x04, 0x8D, 0x45, 0xA4, 0x50, 0x8D, 0x45, 0xC4, 0x89, 0x4F, 0x04, 0x50, 0x6A, 0x01, 0x6A, 0x00, 0x57, 0xC6, 0x47, 0x08, 0x01, 0x8B, 0x8E, 0x8C, 0x04, 0x00, 0x00, 0x53, 0xC7, 0x45, 0xA4, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xD1, 0x89, 0x45, 0xE8, 0xE9, 0x4F, 0xFF, 0xFF, 0xFF, 0xC7, 0x45, 0xE8, 0x17, 0x00, 0x00, 0xC0, 0xEB, 0x2A, 0x83, 0xF8, 0x3D, 0x75, 0x1E, 0x8B, 0x86, 0x8C, 0x04, 0x00, 0x00, 0x8D, 0x4D, 0xC4, 0x51, 0x6A, 0x00, 0x6A, 0x01, 0x6A, 0x00, 0xFF, 0xB6, 0xD0, 0x04, 0x00, 0x00, 0x53, 0xFF, 0xD0, 0x89, 0x45, 0xE8, 0xEB, 0x07, 0xC7, 0x45, 0xE8, 0x02, 0x00, 0x00, 0xC0, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x83, 0x7D, 0xE8, 0x00, 0x0F, 0x8C, 0x74, 0x00, 0x00, 0x00, 0x8B, 0x45, 0xC4, 0x85, 0xC0, 0x74, 0x4C, 0x8B, 0x58, 0x18, 0x8B, 0x86, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0x8E, 0x84, 0x04, 0x00, 0x00, 0x8B, 0x7D, 0xBC, 0x6A, 0x0C, 0x6A, 0x08, 0x50, 0x89, 0x5D, 0xB8, 0xFF, 0xD1, 0x85, 0xFF, 0x75, 0x13, 0x8B, 0xF8, 0x89, 0x7D, 0xBC, 0x85, 0xFF, 0x74, 0x44, 0x89, 0x3F, 0x89, 0x7F, 0x04, 0x89, 0x5F, 0x08, 0xEB, 0x3A, 0x85, 0xC0, 0x74, 0x36, 0x8B, 0x4F, 0x04, 0x89, 0x01, 0x8B, 0x4F, 0x04, 0x89, 0x48, 0x04, 0x89, 0x47, 0x04, 0x89, 0x38, 0x89, 0x58, 0x08, 0xEB, 0x21, 0xC7, 0x45, 0xE8, 0x35, 0x01, 0x00, 0xC0, 0xEB, 0x18, 0xC7, 0x45, 0xE8, 0x74, 0x03, 0x00, 0xC0, 0x57, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7D, 0xE8, 0x8B, 0xC7, 0x8B, 0xC8, 0x85, 0xC0, 0x0F, 0x89, 0xA7, 0xFA, 0xFF, 0xFF, 0x81, 0xF9, 0x81, 0x04, 0x00, 0xC0, 0x0F, 0x85, 0xDD, 0x00, 0x00, 0x00, 0xE9, 0xA5, 0x00, 0x00, 0x00, 0x6A, 0x08, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x03, 0xD8, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x89, 0x45, 0x9C, 0x85, 0xC0, 0x0F, 0x84, 0x82, 0x00, 0x00, 0x00, 0x8D, 0x53, 0x02, 0x8B, 0xD8, 0x0F, 0xB7, 0xCA, 0x8B, 0xF9, 0x8B, 0xC1, 0x89, 0x53, 0x04, 0x80, 0x3A, 0x00, 0x74, 0x0F, 0x66, 0x0F, 0x1F, 0x44, 0x00, 0x00, 0x42, 0x0F, 0xB7, 0xC2, 0x80, 0x3A, 0x00, 0x75, 0xF7, 0xFF, 0x75, 0xB0, 0x8B, 0x4D, 0xA4, 0x2B, 0xC7, 0x66, 0x89, 0x03, 0x40, 0x66, 0x89, 0x43, 0x02, 0x8B, 0x45, 0xAC, 0x8B, 0x09, 0x0F, 0xB7, 0x00, 0x50, 0x53, 0xFF, 0x75, 0xB8, 0xFF, 0xD1, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0x8B, 0xF8, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x55, 0xA4, 0x8B, 0x5D, 0xF4, 0x85, 0xFF, 0x78, 0x1D, 0x8B, 0x4D, 0xB0, 0x8B, 0x45, 0xAC, 0x83, 0xC1, 0x04, 0x83, 0xC0, 0x04, 0x89, 0x4D, 0xB0, 0x89, 0x45, 0xAC, 0x83, + 0x39, 0x00, 0x0F, 0x85, 0x35, 0xFA, 0xFF, 0xFF, 0xEB, 0x0D, 0xC6, 0x45, 0xFA, 0x01, 0xEB, 0x07, 0xC6, 0x45, 0xFA, 0x01, 0x8B, 0x5D, 0xF4, 0x8B, 0x55, 0xE4, 0x8B, 0x4D, 0xC0, 0x83, 0xC1, 0x20, 0x89, 0x4D, 0xC0, 0x8B, 0x82, 0xE4, 0x00, 0x00, 0x00, 0x03, 0x82, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xC3, 0x3B, 0xC8, 0x73, 0x08, 0x85, 0xC9, 0x0F, 0x85, 0x7B, 0xF9, 0xFF, 0xFF, 0x80, 0x7D, 0xFA, 0x00, 0x0F, 0x84, 0x1D, 0x01, 0x00, 0x00, 0x89, 0x7E, 0x08, 0x8B, 0x7D, 0xBC, 0x85, 0xFF, 0x74, 0x30, 0x8B, 0x7F, 0x04, 0x8B, 0xDF, 0x66, 0x90, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x8B, 0x45, 0xCC, 0x85, 0xC0, 0x74, 0x2E, 0x8B, 0x78, 0x04, 0x8B, 0xDF, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8D, 0x45, 0xDC, 0xC7, 0x45, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD0, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x0B, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x57, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xBF, 0x17, 0x00, 0x00, 0xC0, 0xE9, 0x16, 0xFF, 0xFF, 0xFF, 0x8B, 0x43, 0x04, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xBF, 0x17, 0x00, 0x00, 0xC0, 0xE9, 0xE3, 0xFE, 0xFF, 0xFF, 0x8B, 0x45, 0xE0, 0x25, 0x00, 0x00, 0x20, 0x00, 0x89, 0x45, 0xB0, 0x0F, 0x84, 0x98, 0x01, 0x00, 0x00, 0x8B, 0x42, 0x54, 0x8D, 0x4D, 0xA4, 0x51, 0x6A, 0x20, 0x8D, 0x4D, 0x9C, 0x89, 0x45, 0x9C, 0x8B, 0x86, 0x6C, 0x04, 0x00, 0x00, 0x51, 0x8D, 0x4D, 0xF4, 0xC7, 0x45, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x51, 0x6A, 0xFF, 0xFF, 0xD0, 0x8B, 0xD0, 0x85, 0xD2, 0x0F, 0x88, 0xBF, 0x00, 0x00, 0x00, 0x8B, 0x4D, 0xE4, 0x8B, 0x5D, 0xF4, 0xC7, 0x45, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xB7, 0x79, 0x14, 0x83, 0xC7, 0x3C, 0x66, 0x83, 0x79, 0x06, 0x00, 0x0F, 0x84, 0x4D, 0x01, 0x00, 0x00, 0x03, 0xF9, 0x0F, 0x1F, 0x00, 0x8B, 0x47, 0xE8, 0x8B, 0x0F, 0x03, 0xC3, 0x89, 0x45, 0xB8, 0x8B, 0x47, 0xEC, 0x89, 0x45, 0xB4, 0x85, 0xC0, 0x0F, 0x84, 0x63, 0x00, 0x00, 0x00, 0xF7, 0xC1, 0x00, 0x00, 0x00, 0x20, 0x74, 0x1D, 0x85, 0xC9, 0x79, 0x07, 0xB9, 0x40, 0x00, 0x00, 0x00, 0xEB, 0x30, 0x81, + 0xE1, 0x00, 0x00, 0x00, 0x40, 0xF7, 0xD9, 0x1B, 0xC9, 0x83, 0xE1, 0x10, 0x83, 0xC1, 0x10, 0xEB, 0x1E, 0x85, 0xC9, 0x79, 0x07, 0xB9, 0x04, 0x00, 0x00, 0x00, 0xEB, 0x13, 0xF7, 0xC1, 0x00, 0x00, 0x00, 0x40, 0xB8, 0x02, 0x00, 0x00, 0x00, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x0F, 0x45, 0xC8, 0x8B, 0x86, 0x6C, 0x04, 0x00, 0x00, 0x8D, 0x55, 0xA4, 0x52, 0x51, 0x8D, 0x4D, 0xB4, 0x51, 0x8D, 0x4D, 0xB8, 0x51, 0x6A, 0xFF, 0xFF, 0xD0, 0x8B, 0xD0, 0x85, 0xD2, 0x78, 0x23, 0x8B, 0x5D, 0xF4, 0x8B, 0x45, 0xE4, 0x83, 0xC7, 0x28, 0xFF, 0x45, 0xAC, 0x8B, 0xCA, 0x0F, 0xB7, 0x40, 0x06, 0x39, 0x45, 0xAC, 0x0F, 0x85, 0x6D, 0xFF, 0xFF, 0xFF, 0x85, 0xC9, 0x0F, 0x89, 0xAA, 0x00, 0x00, 0x00, 0x8B, 0x45, 0xBC, 0x89, 0x56, 0x08, 0x85, 0xC0, 0x74, 0x34, 0x8B, 0x78, 0x04, 0x8B, 0xDF, 0x66, 0x0F, 0x1F, 0x44, 0x00, 0x00, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x8B, 0x45, 0xCC, 0x85, 0xC0, 0x74, 0x2E, 0x8B, 0x78, 0x04, 0x8B, 0xDF, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8D, 0x45, 0xDC, 0xC7, 0x45, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD0, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x06, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x4D, 0xE4, 0x83, 0x7D, 0xA0, 0x00, 0x0F, 0x84, 0xE4, 0x01, 0x00, 0x00, 0x8B, 0x86, 0x40, 0x04, 0x00, 0x00, 0x83, 0xF8, 0x3F, 0x72, 0x0F, 0x8B, 0x51, 0x50, 0x8B, 0xCB, 0x8B, 0x86, 0xA4, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xEB, 0x2A, 0x83, 0xF8, 0x3E, 0x75, 0x0E, 0xFF, 0x71, 0x50, 0x8B, 0x86, 0xA4, 0x04, 0x00, 0x00, 0x53, 0xFF, 0xD0, 0xEB, 0x17, 0x83, 0xF8, 0x3D, 0x75, 0x15, 0xFF, 0x71, 0x50, 0x8B, 0x86, 0xA4, 0x04, 0x00, 0x00, 0x53, 0xFF, 0xB6, 0xCC, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x5D, 0xF4, 0x8B, 0x8E, 0xCC, 0x04, 0x00, 0x00, 0x33, 0xC0, 0xBA, 0x35, 0x01, 0x00, 0xC0, 0x8B, 0x09, 0x85, 0xC9, 0x74, 0x26, 0x83, 0xBE, 0x40, 0x04, 0x00, 0x00, 0x3E, 0x1B, 0xFF, 0x83, 0xE7, 0xFC, 0x83, 0xC7, 0x10, 0x03, 0xBE, 0xCC, 0x04, 0x00, 0x00, 0x39, 0x5F, 0x04, 0x0F, 0x84, 0xC6, 0x00, 0x00, 0x00, 0x40, 0x83, 0xC7, 0x10, 0x3B, 0xC1, 0x72, 0xEF, 0x8B, 0x86, 0x50, 0x04, 0x00, 0x00, 0x89, 0x56, 0x08, 0x85, 0xC0, 0x74, 0x09, 0x50, 0x8B, 0x86, 0xBC, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x45, 0xBC, 0x85, 0xC0, 0x74, 0x2E, 0x8B, 0x78, 0x04, 0x8B, 0xDF, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x8B, 0x45, 0xCC, + 0x85, 0xC0, 0x74, 0x35, 0x8B, 0x78, 0x04, 0x8B, 0xDF, 0x0F, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x68, 0x00, 0x80, 0x00, 0x00, 0x8D, 0x45, 0xDC, 0xC7, 0x45, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD0, 0x50, 0x8B, 0x86, 0x70, 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xFF, 0xD0, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x0C, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x83, 0x7F, 0x0C, 0x00, 0x0F, 0x85, 0x9C, 0x00, 0x00, 0x00, 0x8B, 0x86, 0x68, 0x04, 0x00, 0x00, 0x8D, 0x4D, 0x9C, 0x6A, 0x04, 0x68, 0x00, 0x30, 0x00, 0x00, 0x51, 0x6A, 0x00, 0x8D, 0x4D, 0xA0, 0xC7, 0x45, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x51, 0x6A, 0xFF, 0xC7, 0x45, 0x9C, 0x00, 0x20, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD0, 0x85, 0xD2, 0x0F, 0x88, 0x05, 0xFF, 0xFF, 0xFF, 0x8B, 0x15, 0x30, 0x03, 0xFE, 0x7F, 0x8B, 0xC2, 0x33, 0x55, 0xA0, 0x83, 0xE0, 0x1F, 0x8B, 0xC8, 0x8B, 0xDA, 0xF7, 0xD9, 0xD3, 0xE3, 0x8B, 0xC8, 0xD3, 0xEA, 0x0B, 0xDA, 0x83, 0xBE, 0x40, 0x04, 0x00, 0x00, 0x3F, 0x72, 0x0A, 0x8B, 0x86, 0xB4, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xD0, 0x89, 0x1F, 0x83, 0xBE, 0x40, 0x04, 0x00, 0x00, 0x3F, 0x72, 0x0A, 0x8B, 0x86, 0xB4, 0x04, 0x00, 0x00, 0x6A, 0x01, 0xFF, 0xD0, 0x80, 0x7D, 0xFB, 0x00, 0x74, 0x1C, 0x83, 0xBE, 0x50, 0x04, 0x00, 0x00, 0x00, 0x75, 0x13, 0xFF, 0x75, 0xA8, 0x8B, 0x86, 0xB8, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xD0, 0x89, 0x86, 0x50, 0x04, 0x00, 0x00, 0x8B, 0x5D, 0xF4, 0xF7, 0x45, 0xE0, 0x00, 0x00, 0x08, 0x00, 0x8B, 0x7D, 0xE4, 0x0F, 0x84, 0x35, 0x01, 0x00, 0x00, 0x83, 0xBF, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x84, 0x28, 0x01, 0x00, 0x00, 0x8B, 0xBF, 0xC0, 0x00, 0x00, 0x00, 0x8B, 0x86, 0x84, 0x04, 0x00, 0x00, 0x03, 0xFB, 0x68, 0xA8, 0x00, 0x00, 0x00, 0x6A, 0x08, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0xD8, 0x85, 0xDB, 0x0F, 0x85, 0x8C, 0x00, 0x00, 0x00, 0x8B, 0x45, 0xBC, 0x85, 0xC0, 0x74, 0x38, 0x8B, 0x78, 0x04, 0x8B, 0xDF, 0x66, 0x66, 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x8B, 0x45, 0xCC, 0x85, 0xC0, 0x74, 0x2E, 0x8B, 0x78, 0x04, 0x8B, 0xDF, 0xFF, 0x77, 0x08, 0x8B, 0x86, 0x98, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x7F, 0x04, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x11, 0x50, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x3B, 0xFB, 0x75, 0xD7, 0x8D, 0x45, 0xDC, 0xC7, 0x45, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x80, 0x00, 0x00, 0x50, 0x8D, 0x45, 0xD0, 0xE9, 0x9D, 0xE9, 0xFF, 0xFF, 0x8B, 0x45, 0xF4, 0x89, 0x43, 0x18, 0x83, 0xBE, 0x40, 0x04, 0x00, 0x00, 0x3E, 0x8B, + 0x86, 0xA8, 0x04, 0x00, 0x00, 0x77, 0x05, 0x53, 0xFF, 0xD0, 0xEB, 0x04, 0x8B, 0xCB, 0xFF, 0xD0, 0x8B, 0x7F, 0x0C, 0x85, 0xFF, 0x74, 0x19, 0x0F, 0x1F, 0x44, 0x00, 0x00, 0x8B, 0x07, 0x85, 0xC0, 0x74, 0x0E, 0x6A, 0x00, 0x6A, 0x01, 0xFF, 0x75, 0xF4, 0xFF, 0xD0, 0x83, 0xC7, 0x04, 0x75, 0xEC, 0x8B, 0x8E, 0xD4, 0x04, 0x00, 0x00, 0x8B, 0x01, 0x3B, 0xC1, 0x74, 0x14, 0x39, 0x58, 0x20, 0x74, 0x08, 0x8B, 0x00, 0x3B, 0xC1, 0x75, 0xF5, 0xEB, 0x07, 0xC7, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x86, 0x88, 0x04, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xB6, 0xD8, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x5D, 0xF4, 0x8B, 0x7D, 0xE4, 0x8B, 0x45, 0xE0, 0xA9, 0x00, 0x00, 0x80, 0x00, 0x74, 0x66, 0x83, 0x7F, 0x28, 0x00, 0x74, 0x60, 0xC7, 0x45, 0x9C, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x45, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xA9, 0x00, 0x00, 0x00, 0x01, 0x74, 0x39, 0x8B, 0x86, 0xAC, 0x04, 0x00, 0x00, 0x8D, 0x4D, 0xA0, 0x51, 0x8D, 0x4D, 0x9C, 0x51, 0x6A, 0x00, 0xFF, 0xD0, 0x8B, 0x4D, 0xF4, 0x85, 0xC0, 0x8B, 0x47, 0x28, 0x6A, 0x00, 0x6A, 0x01, 0x0F, 0x99, 0xC3, 0x03, 0xC1, 0x51, 0xFF, 0xD0, 0x84, 0xDB, 0x74, 0x1B, 0xFF, 0x75, 0xA0, 0x8B, 0x86, 0xB0, 0x04, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0xD0, 0xEB, 0x0C, 0x8B, 0x47, 0x28, 0x6A, 0x00, 0x6A, 0x01, 0x53, 0x03, 0xC3, 0xFF, 0xD0, 0x8B, 0x5D, 0xF4, 0x8B, 0x45, 0xE0, 0x25, 0x00, 0x00, 0x21, 0x00, 0x3D, 0x00, 0x00, 0x01, 0x00, 0x0F, 0x85, 0x86, 0x02, 0x00, 0x00, 0x83, 0xBF, 0x84, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x84, 0x92, 0x00, 0x00, 0x00, 0x8B, 0xBF, 0x80, 0x00, 0x00, 0x00, 0x03, 0xFB, 0x83, 0x7F, 0x0C, 0x00, 0x74, 0x6A, 0x8B, 0x47, 0x0C, 0x80, 0x3C, 0x18, 0x00, 0x74, 0x05, 0xC6, 0x44, 0x18, 0x01, 0x00, 0x8B, 0x07, 0xC7, 0x47, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x55, 0xF4, 0x8D, 0x0C, 0x10, 0x85, 0xC0, 0x75, 0x05, 0x8B, 0x4F, 0x10, 0x03, 0xCA, 0x8B, 0x11, 0x85, 0xD2, 0x74, 0x23, 0x79, 0x08, 0xC7, 0x01, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x0F, 0x8B, 0x45, 0xF4, 0x80, 0x7C, 0x10, 0x02, 0x00, 0x74, 0x05, 0xC6, 0x44, 0x10, 0x03, 0x00, 0x8B, 0x51, 0x04, 0x83, 0xC1, 0x04, 0x85, 0xD2, 0x75, 0xDD, 0xC7, 0x07, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x47, 0x10, 0x00, 0x00, 0x00, 0x00, 0x83, 0xC7, 0x14, 0x83, 0x7F, 0x0C, 0x00, 0x74, 0x05, 0x8B, 0x5D, 0xF4, 0xEB, 0x96, 0x8B, 0x7D, 0xE4, 0xC7, 0x87, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x87, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x5D, 0xF4, 0x83, 0xBF, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x84, 0xD2, 0x00, 0x00, 0x00, 0x83, 0x7D, 0x98, 0x00, 0x0F, 0x85, 0xC8, 0x00, 0x00, 0x00, 0x8B, 0x87, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xC3, 0x83, 0x78, 0x04, 0x00, 0x0F, 0x84, 0x9F, 0x00, 0x00, 0x00, 0x83, 0xC0, 0x0C, 0x89, 0x45, 0xA0, 0x0F, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x48, 0xF8, 0x80, 0x3C, 0x19, 0x00, 0x74, 0x05, 0xC6, 0x44, 0x19, 0x01, 0x00, 0x8B, 0x38, 0x8B, 0x50, 0x04, 0xC7, 0x40, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x40, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x75, 0xF4, 0x03, 0xFE, 0x03, 0xD6, 0x83, 0x3F, 0x00, 0x74, 0x3E, 0x0F, 0x1F, 0x00, 0x8B, 0x1A, 0x85, 0xDB, 0x79, 0x08, 0xC7, 0x02, + 0x00, 0x00, 0x00, 0x00, 0xEB, 0x1A, 0x8A, 0x44, 0x33, 0x02, 0x84, 0xC0, 0x0F, 0xB6, 0xC8, 0xC7, 0x45, 0x98, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x45, 0x4D, 0x98, 0xFE, 0xC1, 0x88, 0x4C, 0x33, 0x02, 0x83, 0xC7, 0x04, 0x83, 0xC2, 0x04, 0x83, 0x3F, 0x00, 0x74, 0x05, 0x8B, 0x75, 0xF4, 0xEB, 0xC8, 0x8B, 0x45, 0xA0, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x83, 0xC0, 0x20, 0x89, 0x45, 0xA0, 0x83, 0x78, 0xF8, 0x00, 0x74, 0x08, 0x8B, 0x5D, 0xF4, 0xE9, 0x74, 0xFF, 0xFF, 0xFF, 0x8B, 0x75, 0x08, 0x8B, 0x7D, 0xE4, 0xC7, 0x87, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x87, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x5D, 0xF4, 0x83, 0xBF, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x74, 0x48, 0x8B, 0xBF, 0xA8, 0x00, 0x00, 0x00, 0x03, 0xFB, 0x8B, 0x47, 0x14, 0xFF, 0x77, 0x10, 0x03, 0xC3, 0x50, 0x8B, 0x86, 0x80, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xC7, 0x47, 0x10, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x47, 0x14, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x7D, 0xE4, 0xC7, 0x87, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x87, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x5D, 0xF4, 0x83, 0xBF, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x74, 0x4D, 0x8B, 0x8F, 0xA0, 0x00, 0x00, 0x00, 0x03, 0xCB, 0x89, 0x4D, 0x08, 0x83, 0x39, 0x00, 0x74, 0x26, 0x8B, 0x41, 0x04, 0x8D, 0x79, 0x04, 0x83, 0xE8, 0x08, 0x50, 0x8D, 0x41, 0x08, 0x50, 0x8B, 0x86, 0x80, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x4D, 0x08, 0x03, 0x0F, 0x89, 0x4D, 0x08, 0x83, 0x39, 0x00, 0x75, 0xDD, 0x8B, 0x7D, 0xE4, 0xC7, 0x87, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x87, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x5D, 0xF4, 0x83, 0xBF, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x74, 0x58, 0x8B, 0x8F, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xCB, 0x8B, 0x41, 0x0C, 0x85, 0xC0, 0x74, 0x10, 0x83, 0x38, 0x00, 0x74, 0x0B, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xC0, 0x04, 0x75, 0xF0, 0xC7, 0x41, 0x0C, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x41, 0x08, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x41, 0x04, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x41, 0x10, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x01, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x87, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x87, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x5D, 0xF4, 0xF6, 0x45, 0xE0, 0x03, 0x74, 0x73, 0x83, 0x7D, 0xB0, 0x00, 0x8B, 0x47, 0x54, 0x89, 0x5D, 0xA0, 0x89, 0x45, 0x08, 0xC7, 0x45, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x74, 0x2A, 0x8B, 0x86, 0x6C, 0x04, 0x00, 0x00, 0x8D, 0x4D, 0xA8, 0x51, 0x6A, 0x40, 0x8D, 0x4D, 0x08, 0x51, 0x8D, 0x4D, 0xA0, 0x51, 0x6A, 0xFF, 0xFF, 0xD0, 0x85, 0xC0, 0x79, 0x08, 0x89, 0x46, 0x08, 0xE9, 0x6B, 0xF9, 0xFF, 0xFF, 0x8B, 0x5D, 0xF4, 0x8B, 0x45, 0x08, 0xF6, 0x45, 0xE0, 0x01, 0x74, 0x48, 0x50, 0x8B, 0x86, 0x80, 0x04, 0x00, 0x00, 0x53, 0xFF, 0xD0, 0x83, 0x7D, 0xB0, 0x00, 0x74, 0x1D, 0x8B, 0x86, 0x6C, 0x04, 0x00, 0x00, 0x8D, 0x4D, 0xA8, 0x51, 0xFF, 0x75, 0xA8, 0x8D, 0x4D, 0x08, 0x51, 0x8D, 0x4D, 0xA0, 0x51, 0x6A, 0xFF, 0xFF, 0xD0, 0x85, 0xC0, 0x78, 0xBF, 0xFF, 0x75, + 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x8B, 0x45, 0xF4, 0x89, 0x06, 0x33, 0xC0, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0xF6, 0x45, 0xE0, 0x02, 0x74, 0xBC, 0x64, 0xA1, 0x30, 0x00, 0x00, 0x00, 0x85, 0xC0, 0x75, 0x19, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0xB8, 0x0F, 0x00, 0x40, 0x00, 0x5F, 0x5E, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0x8B, 0x40, 0x0C, 0x85, 0xC0, 0x74, 0x48, 0x8B, 0x58, 0x0C, 0x85, 0xDB, 0x74, 0x41, 0x8B, 0x1B, 0x85, 0xDB, 0x74, 0x3B, 0x8B, 0x43, 0x18, 0x85, 0xC0, 0x74, 0x34, 0x8B, 0x78, 0x3C, 0xFF, 0x75, 0x08, 0x03, 0xF8, 0x8B, 0x86, 0x80, 0x04, 0x00, 0x00, 0xFF, 0x75, 0xF4, 0xFF, 0xD0, 0x8B, 0x4D, 0x08, 0x39, 0x4F, 0x54, 0x8B, 0x96, 0x7C, 0x04, 0x00, 0x00, 0x0F, 0x42, 0x4F, 0x54, 0x51, 0xFF, 0x73, 0x18, 0xFF, 0x75, 0xF4, 0xFF, 0xD2, 0x83, 0xC4, 0x0C, 0xE9, 0x4A, 0xFF, 0xFF, 0xFF, 0xFF, 0x75, 0xF0, 0x8B, 0x86, 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xD0, 0x5F, 0x5E, 0xB8, 0x10, 0x00, 0x40, 0x00, 0x5B, 0x8B, 0xE5, 0x5D, 0xC2, 0x04, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC }; inline unsigned char VectoredHandlerShell_WOW64[] = diff --git a/GH Injector SM/GH Injector SM/GH Injector SM.aps b/GH Injector SM/GH Injector SM/GH Injector SM.aps index 284f111..2e0739b 100644 Binary files a/GH Injector SM/GH Injector SM/GH Injector SM.aps and b/GH Injector SM/GH Injector SM/GH Injector SM.aps differ diff --git a/GH Injector SM/GH Injector SM/GH Injector SM.rc b/GH Injector SM/GH Injector SM/GH Injector SM.rc index 1548180..f676aed 100644 --- a/GH Injector SM/GH Injector SM/GH Injector SM.rc +++ b/GH Injector SM/GH Injector SM/GH Injector SM.rc @@ -51,8 +51,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 4,5,0,0 - PRODUCTVERSION 4,5,0,0 + FILEVERSION 4,6,0,0 + PRODUCTVERSION 4,6,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -69,10 +69,10 @@ BEGIN BEGIN VALUE "CompanyName", "Guided Hacking" VALUE "FileDescription", "Utility program for the GH Injector" - VALUE "FileVersion", "4.5.0.0" + VALUE "FileVersion", "4.6.0.0" VALUE "LegalCopyright", "Broihon (C) 1987 - 2035" VALUE "ProductName", "GH StartMethod" - VALUE "ProductVersion", "4.5.0.0" + VALUE "ProductVersion", "4.6.0.0" END END BLOCK "VarFileInfo" diff --git a/GH Injector SM/GH Injector SM/GH Injector SM.vcxproj b/GH Injector SM/GH Injector SM/GH Injector SM.vcxproj index d8ced95..7085f91 100644 --- a/GH Injector SM/GH Injector SM/GH Injector SM.vcxproj +++ b/GH Injector SM/GH Injector SM/GH Injector SM.vcxproj @@ -22,7 +22,7 @@ 15.0 {6F0A0AA5-4B61-4323-B9A5-B3EF0088DC1B} GHInjectorSM - 10.0 + 10.0.20348.0