section .text align=4 exec

%include "C:\development\shell\cplusplus-filter\nasm-cc\x64\seh64.asm"

%include "C:\development\shell\cplusplus-filter\nasm-cc\x64\macros64.asm"

%include "C:\development\shell\cplusplus-filter\nasm-cc\x64\math_mac.asm"

section .bss align=4 noexec

_szAppName : resq 1
_szTitle : resq 1
_szMessage : resq 1
_szFontName : resq 1
_szErrorMessage : resq 1
_hWindow : resq 1
_hButton : resq 1

section .text align=4 exec

struc struc__FILETIME
   ._dwLowDateTime: resb 4
   ._dwHighDateTime: resb 4
   .size:
endstruc

struc struc__SYSTEMTIME
   ._wYear: resb 2
   ._wMonth: resb 2
   ._wDayOfWeek: resb 2
   ._wDay: resb 2
   ._wHour: resb 2
   ._wMinute: resb 2
   ._wSecond: resb 2
   ._wMilliseconds: resb 2
   .size:
endstruc

struc struc__ULARGE_INTEGER__auto__0
   ._LowPart: resb 4
   ._HighPart: resb 4
   .size:
endstruc

struc struc__ULARGE_INTEGER__auto__1
   ._LowPart: resb 4
   ._HighPart: resb 4
   .size:
endstruc

struc struc__ULARGE_INTEGER
   ._DUMMYSTRUCTNAME: resb 0
   ._u: resb 0
   ._QuadPart: resb 0
   .data: resb 8
   .size:
endstruc

struc struc__PROCESS_INFORMATION
   ._hProcess: resb 8
   ._hThread: resb 8
   ._dwProcessId: resb 4
   ._dwThreadId: resb 4
   .size:
endstruc

struc struc__STARTUPINFOA
   ._cb: resb 4
   ._lpReserved: resb 8
   ._lpDesktop: resb 8
   ._lpTitle: resb 8
   ._dwX: resb 4
   ._dwY: resb 4
   ._dwXSize: resb 4
   ._dwYSize: resb 4
   ._dwXCountChars: resb 4
   ._dwYCountChars: resb 4
   ._dwFillAttribute: resb 4
   ._dwFlags: resb 4
   ._wShowWindow: resb 2
   ._cbReserved2: resb 2
   ._lpReserved2: resb 8
   ._hStdInput: resb 8
   ._hStdOutput: resb 8
   ._hStdError: resb 8
   .size:
endstruc

struc struc__RTL_CRITICAL_SECTION
   ._DebugInfo: resb 8
   ._LockCount: resb 4
   ._RecursionCount: resb 4
   ._OwningThread: resb 8
   ._LockSemaphore: resb 8
   ._SpinCount: resb 8
   .size:
endstruc

struc struc__SYSTEM_INFO
   ._DUMMYUNIONNAME: resb 4
   ._dwPageSize: resb 4
   ._lpMinimumApplicationAddress: resb 8
   ._lpMaximumApplicationAddress: resb 8
   ._dwActiveProcessorMask: resb 8
   ._dwNumberOfProcessors: resb 4
   ._dwProcessorType: resb 4
   ._dwAllocationGranularity: resb 4
   ._wProcessorLevel: resb 2
   ._wProcessorRevision: resb 2
   .size:
endstruc

struc struc__SYSTEM_INFO__auto__2
   ._dwOemId: resb 0
   ._DUMMYSTRUCTNAME: resb 0
   .data: resb 4
   .size:
endstruc

struc struc__SYSTEM_INFO__auto__2__auto__3
   ._wProcessorArchitecture: resb 2
   ._wReserved: resb 2
   .size:
endstruc

struc struc_tagRECT
   ._left: resb 4
   ._top: resb 4
   ._right: resb 4
   ._bottom: resb 4
   .size:
endstruc

struc struc_tagPOINT
   ._x: resb 4
   ._y: resb 4
   .size:
endstruc

struc struc_tagMSG
   ._lPrivate2: resb 4
   ._hwnd: resb 8
   ._message: resb 4
   ._wParam: resb 8
   ._lParam: resb 8
   ._time: resb 4
   ._pt: resb 8
   ._lPrivate: resb 4
   .size:
endstruc

struc struc_tagWNDCLASSA
   ._style: resb 4
   ._lpfnWndProc: resb 8
   ._cbClsExtra: resb 4
   ._cbWndExtra: resb 4
   ._hInstance: resb 8
   ._hIcon: resb 8
   ._hCursor: resb 8
   ._hbrBackground: resb 8
   ._lpszMenuName: resb 8
   ._lpszClassName: resb 8
   .size:
endstruc

struc struc_tagWNDCLASSEXA
   ._cbSize: resb 4
   ._style: resb 4
   ._lpfnWndProc: resb 8
   ._cbClsExtra: resb 4
   ._cbWndExtra: resb 4
   ._hInstance: resb 8
   ._hIcon: resb 8
   ._hCursor: resb 8
   ._hbrBackground: resb 8
   ._lpszMenuName: resb 8
   ._lpszClassName: resb 8
   ._hIconSm: resb 8
   .size:
endstruc

struc struc_tagSIZE
   ._cx: resb 4
   ._cy: resb 4
   .size:
endstruc

struc struc_tagPAINTSTRUCT
   ._hdc: resb 8
   ._fErase: resb 4
   ._rcPaint: resb 16
   ._fRestore: resb 4
   ._fIncUpdate: resb 4
   ._rgbReserved: resb 32
   ._pad: resb 4
   .size:
endstruc

struc struc__SECURITY_ATTRIBUTES
   ._nLength: resb 4
   ._lpSecurityDescriptor: resb 8
   ._bInheritHandle: resb 4
   .size:
endstruc

struc struc__CONDITION_VARIABLE
   ._buffer: resb 8
   .size:
endstruc

struc struc__FILETIME
   ._dwLowDateTime: resb 4
   ._dwHighDateTime: resb 4
   .size:
endstruc

struc struc__WIN32_FILE_ATTRIBUTE_DATA
   ._dwFileAttributes: resb 4
   ._ftCreationTime: resb 8
   ._ftLastAccessTime: resb 8
   ._ftLastWriteTime: resb 8
   ._nFileSizeHigh: resb 4
   ._nFileSizeLow: resb 4
   .size:
endstruc

struc struc__LARGE_INTEGER__auto__4
   ._LowPart: resb 4
   ._HighPart: resb 4
   .size:
endstruc

struc struc__LARGE_INTEGER__auto__5
   ._LowPart: resb 4
   ._HighPart: resb 4
   .size:
endstruc

struc struc__LARGE_INTEGER
   ._DUMMYSTRUCTNAME: resb 0
   ._u: resb 0
   ._QuadPart: resb 0
   .data: resb 8
   .size:
endstruc

struc struc__TIME_ZONE_INFORMATION
   ._Bias: resb 4
   ._StandardName: resb 64
   ._StandardDate: resb 16
   ._StandardBias: resb 4
   ._DaylightName: resb 64
   ._DaylightDate: resb 16
   ._DaylightBias: resb 4
   .size:
endstruc

struc struc___sFILE
   ._stream: resb 8
   ._buffer: resb 8
   ._offset: resb 8
   ._error: resb 4
   ._ch: resb 4
   ._un: resb 4
   .size:
endstruc

extern _get_bit8
extern _get_bit16
extern _get_bit32
extern _get_bit64
extern _set_bit8
extern _set_bit16
extern _set_bit32
extern _set_bit64
extern exit
extern ___argc
extern ___argv
extern __environ
extern __putenv
extern _getenv
extern __chdir
extern __mkdir
extern __rmdir
extern __getcwd
extern _exitA
extern _malloc
extern _realloc
extern _free
extern _memset
extern _atoi
extern _atod
extern _atol
extern atof
extern _system
extern _unlink
extern _srand
extern _rand
extern _atexitA
extern _qsort0
extern _bsearch0
extern _tempnam
extern CallWindowProc
extern CreateDirectoryA
extern RemoveDirectoryA
extern CreateSolidBrush
extern SetRect
extern CreateBitmap
extern CreateCompatibleDC
extern BitBlt
extern PostThreadMessageA
extern LineTo
extern MoveToEx
extern CreatePen
extern BeginPaint
extern EndPaint
extern GetCurrentDirectoryA
extern SetCurrentDirectoryA
extern GetFileSize
extern GetFileSizeEx
extern GetFileTime
extern GetTimeZoneInformation
extern SetUnhandledExceptionFilter
extern SystemTimeToFileTime
extern GetSystemTime
extern MessageBoxA
extern TranslateMessage
extern DispatchMessageA
extern ExitProcess
extern RegisterClassExA
extern CreateWindowExA
extern FileTimeToLocalFileTime
extern FileTimeToSystemTime
extern GetTickCount64
extern GetTickCount
extern GetSystemTimeAsFileTime
extern GetLastError
extern GetSystemMetrics
extern GetClientRect
extern ShowWindow
extern UpdateWindow
extern MoveWindow
extern DefWindowProcA
extern PostQuitMessage
extern FillRect
extern LoadCursorA
extern GetModuleHandleA
extern DestroyWindow
extern GetMessageA
extern GetDC
extern DeleteDC
extern DrawEdge
extern GetTextExtentPoint32A
extern DrawTextA
extern SetTextColor
extern DeleteObject
extern SelectObject
extern CreateFontA
extern SetFocus
extern GetFocus
extern SendMessageA
extern PostMessageA
extern SetBkMode
extern RegisterClassA
extern UnregisterClassA
extern SetWindowPos
extern IsDialogMessageA
extern GetWindowRect
extern WriteConsoleA
extern ReadConsoleA
extern GetStdHandle
extern WriteFile
extern GetCommandLineA
extern ReadFile
extern SetConsoleMode
extern GetConsoleMode
extern CreateFileA
extern CloseHandle
extern SetFilePointer
extern SetFilePointerEx
extern WriteConsoleW
extern DeleteFileA
extern GetEnvironmentStrings
extern FreeEnvironmentStringsA
extern SetEnvironmentVariableA
extern GetEnvironmentVariableA
extern VirtualAlloc
extern VirtualFree
extern GetProcessHeap
extern HeapAlloc
extern HeapFree
extern HeapCreate
extern HeapDestroy
extern CreateThread
extern WaitForSingleObject
extern CreateMutexA
extern ReleaseMutex
extern GetModuleFileNameA
extern GetFullPathNameA
extern SetConsoleCtrlHandler
extern TerminateThread
extern LockFile
extern UnlockFile
extern Sleep
extern GetCurrentThreadId
extern InitializeCriticalSection
extern InitializeConditionVariable
extern EnterCriticalSection
extern LeaveCriticalSection
extern SleepConditionVariableCS
extern WakeConditionVariable
extern DeleteCriticalSection
extern WakeAllConditionVariable
extern TlsAlloc
extern TlsGetValue
extern TlsSetValue
extern TlsFree
extern GetCurrentThread
extern GetCurrentProcess
extern VirtualAllocEx
extern VirtualFreeEx
extern GetSystemInfo
extern FlushFileBuffers
extern GetStartupInfoA
extern CreatePipe
extern CreateProcessA
extern GetExitCodeProcess
extern GetFileAttributesA
extern GetFileAttributesExA
extern ExitThread
extern GetExitCodeThread
extern GlobalFindAtom
extern GlobalAddAtom
extern GlobalDeleteAtom
extern GlobalGetAtomName
extern GlobalFindAtomW
extern GlobalAddAtomW
extern GlobalDeleteAtomW
extern FindAtomA
extern AddAtomA
extern DeleteAtomA
extern GetAtomNameA
extern FindAtomW
extern AddAtomW
extern DeleteAtomW
extern MessageBoxW
extern __stdout
extern __stderr
extern __stdin
extern _fileno
extern _ferror
extern _remove
extern _fread
extern _fwrite
extern _fopen
extern _freopen
extern _clearerr
extern _ftell
extern _gets
extern _fseek
extern _feof
extern _fprintf
extern _fgets
extern _fscanf
extern _fflush
extern _fclose
extern _ungetc
extern _printf
extern _scanf
extern _sscanf
extern _getchar
extern _fgetc
extern _fgetwc
extern _fputc
extern _puts
extern _putws
extern sprintf
extern _perror
extern _lock_fileA
extern _unlock_fileA
extern __stricmp
extern _strcmp
extern strncmp
extern _strcpy
extern _strncpy
extern _strstr
extern _strrstr
extern _strchr
extern _strrchr
extern _strdup
extern _memcpy
extern _memcmp
extern _strlen
extern _strtok
extern _strtok_r
extern _strcat
extern _strncat
extern _snprintf
global _mainA
global _ginit_cwin32_obj

extern ExitProcess
extern MessageBoxA
extern _puts
exception_code_begin:
%define _hInstance rsp+208
%define _hPrevInstance rsp+216
%define _lpCmdLine rsp+224
%define _nCmdShow rsp+232
%define _msg rsp+120
%define temp_341 rsp+112
%define arg0 rsp+0
%define arg1 rsp+8
%define arg2 rsp+16
%define arg3 rsp+24
%define arg4 rsp+32
%define arg5 rsp+40
%define arg6 rsp+48
%define arg7 rsp+56
ALIGN 32,db 0xCC
_mainA:
	mov [rsp+8],rcx
	mov [rsp+16],rdx
	mov [rsp+24],r8
	mov [rsp+32],r9
	sub rsp,200
	mov rcx,qword [_hInstance]
	call _RegisterHelloClass
	mov rcx,qword [_hInstance]
	mov edx,dword [_nCmdShow]
	call _InitInstance
	mov rcx,rax
	cmp ecx,0
	sete al
	movzx rax,al
	cmp rax,0
	jz .L1
	mov rcx,0
	mov rdx,16
	___my_int_b_or
	mov [temp_341],rax
	mov rcx,0
	mov rdx,qword [_szErrorMessage]
	mov r8,qword [_szErrorMessage]
	mov r9,qword [temp_341]
	call MessageBoxA
	mov rcx,0
	call ExitProcess
	jmp .L0
.L1:
.L0:
	lea rax,[_msg]
	mov rcx,rax
	mov rdx,0
	mov r8,48
	call _memset
.L2:
	lea rax,[_msg]
	mov rcx,rax
	mov rdx,0
	mov r8,0
	mov r9,0
	call GetMessageA
	cmp rax,0
	jz .L3
	lea rax,[_msg]
	mov rcx,rax
	call TranslateMessage
	lea rax,[_msg]
	mov rcx,rax
	call DispatchMessageA
	jmp .L2
.L3:
	mov rcx,struc_tagMSG._wParam
	lea rax,[_msg]
	add rax,rcx
	mov rdx,[rax]
	mov rax,rdx
	add rsp,200
	ret
%undef _msg
%undef temp_341
%undef _hInstance
%undef _hPrevInstance
%undef _lpCmdLine
%undef _nCmdShow
%undef arg0
%undef arg1
%undef arg2
%undef arg3
%undef arg4
%undef arg5
%undef arg6
%undef arg7


%define arg0 rsp+0
%define arg1 rsp+8
%define arg2 rsp+16
%define arg3 rsp+24
%define arg4 rsp+32
%define arg5 rsp+40
%define arg6 rsp+48
%define arg7 rsp+56
ALIGN 32,db 0xCC
_OnDestroyWindow:
	sub rsp,104
	mov rcx,qword [_hButton]
	call DestroyWindow
	mov rcx,qword [_hWindow]
	call DestroyWindow
	add rsp,104
	ret
%undef arg0
%undef arg1
%undef arg2
%undef arg3
%undef arg4
%undef arg5
%undef arg6
%undef arg7


%define _hInstance rsp+240
%define _wClass rsp+144
%define temp_301 rsp+136
%define temp_321 rsp+128
%define temp_336 rsp+120
%define temp_337 rsp+112
%define arg0 rsp+0
%define arg1 rsp+8
%define arg2 rsp+16
%define arg3 rsp+24
%define arg4 rsp+32
%define arg5 rsp+40
%define arg6 rsp+48
%define arg7 rsp+56
ALIGN 32,db 0xCC
_RegisterHelloClass:
	mov [rsp+8],rcx
	sub rsp,232
	lea rax,[_wClass]
	mov rcx,rax
	mov rdx,0
	mov r8,80
	call _memset
	mov rcx,struc_tagWNDCLASSEXA._cbClsExtra
	lea rax,[_wClass]
	add rax,rcx
	mov rcx,0
	mov [rax],ecx
	mov eax,ecx
	mov rcx,80
	___my_ul2ui
	mov [temp_301],rax
	mov rcx,struc_tagWNDCLASSEXA._cbSize
	lea rax,[_wClass]
	add rax,rcx
	mov rcx,qword [temp_301]
	mov [rax],ecx
	mov eax,ecx
	mov rcx,struc_tagWNDCLASSEXA._cbWndExtra
	lea rax,[_wClass]
	add rax,rcx
	mov rcx,0
	mov [rax],ecx
	mov eax,ecx
	mov rcx,struc_tagWNDCLASSEXA._hbrBackground
	lea rax,[_wClass]
	add rax,rcx
	mov rcx,0
	mov [rax],rcx
	mov rcx,0
	mov rdx,32512
	call LoadCursorA
	mov [temp_336],rax
	mov rcx,struc_tagWNDCLASSEXA._hCursor
	lea rax,[_wClass]
	add rax,rcx
	mov rcx,[temp_336]
	mov [rax],rcx
	mov rcx,struc_tagWNDCLASSEXA._hIcon
	lea rax,[_wClass]
	add rax,rcx
	mov rcx,0
	mov [rax],rcx
	mov rcx,struc_tagWNDCLASSEXA._hIconSm
	lea rax,[_wClass]
	add rax,rcx
	mov rcx,0
	mov [rax],rcx
	mov rcx,struc_tagWNDCLASSEXA._hInstance
	lea rax,[_wClass]
	add rax,rcx
	mov rcx,qword [_hInstance]
	mov [rax],rcx
	lea rax,[_WndProc]
	mov [temp_337],rax
	mov rcx,struc_tagWNDCLASSEXA._lpfnWndProc
	lea rax,[_wClass]
	add rax,rcx
	mov rcx,[temp_337]
	mov [rax],rcx
	mov rcx,struc_tagWNDCLASSEXA._lpszMenuName
	lea rax,[_wClass]
	add rax,rcx
	mov rcx,0
	mov [rax],rcx
	mov rcx,1
	mov rdx,2
	___my_int_b_or
	mov rcx,rax
	___my_i2ui
	mov [temp_321],rax
	mov rcx,struc_tagWNDCLASSEXA._style
	lea rax,[_wClass]
	add rax,rcx
	mov rcx,qword [temp_321]
	mov [rax],ecx
	mov eax,ecx
	mov rcx,struc_tagWNDCLASSEXA._lpszClassName
	lea rax,[_wClass]
	add rax,rcx
	mov rcx,qword [_szAppName]
	mov [rax],rcx
	lea rax,[_wClass]
	mov rcx,rax
	call RegisterClassExA
	add rsp,232
	ret
%undef _wClass
%undef temp_301
%undef temp_321
%undef temp_336
%undef temp_337
%undef _hInstance
%undef arg0
%undef arg1
%undef arg2
%undef arg3
%undef arg4
%undef arg5
%undef arg6
%undef arg7


%define _hInstance rsp+256
%define _nCmdShow rsp+264
%define _hWnd rsp+224
%define _bRet rsp+220
%define _rect rsp+204
%define _xPos rsp+200
%define _yPos rsp+196
%define temp_68 rsp+188
%define temp_93 rsp+180
%define temp_94 rsp+172
%define temp_95 rsp+164
%define temp_96 rsp+156
%define temp_97 rsp+148
%define temp_98 rsp+140
%define arg0 rsp+0
%define arg1 rsp+8
%define arg2 rsp+16
%define arg3 rsp+24
%define arg4 rsp+32
%define arg5 rsp+40
%define arg6 rsp+48
%define arg7 rsp+56
%define arg8 rsp+64
%define arg9 rsp+72
%define arg10 rsp+80
%define arg11 rsp+88
ALIGN 32,db 0xCC
_InitInstance:
	mov [rsp+8],rcx
	mov [rsp+16],rdx
	sub rsp,248
	mov dword [_bRet],dword 1
	mov rcx,0
	call GetSystemMetrics
	mov rcx,2
	mov rdx,rax
	mov dword [rsp+8H],edx
	mov dword [rsp],ecx
	xor edx,edx
	mov eax,dword [rsp+8H]
	idiv dword [rsp]
	mov rcx,300
	mov rdx,rax
	mov eax,ecx
	mov ecx,edx
	sub ecx,eax
	mov eax,ecx
	mov dword [_xPos],eax
	mov eax,dword [_xPos]
	mov rcx,0
	cmp eax,ecx
	setl al
	movzx rax,al
	cmp rax,0
	jz .L5
	mov dword [_xPos],dword 0
	jmp .L4
.L5:
.L4:
	mov rcx,1
	call GetSystemMetrics
	mov rcx,2
	mov rdx,rax
	mov dword [rsp+8H],edx
	mov dword [rsp],ecx
	xor edx,edx
	mov eax,dword [rsp+8H]
	idiv dword [rsp]
	mov rcx,150
	mov rdx,rax
	mov eax,ecx
	mov ecx,edx
	sub ecx,eax
	mov eax,ecx
	mov dword [_yPos],eax
	mov eax,dword [_yPos]
	mov rcx,0
	cmp eax,ecx
	setl al
	movzx rax,al
	cmp rax,0
	jz .L7
	mov dword [_yPos],dword 0
	jmp .L6
.L7:
.L6:
	mov eax,dword [_yPos]
	mov [temp_96],rax
	mov eax,dword [_xPos]
	mov [temp_94],rax
	mov rcx,0
	mov rdx,qword [_szAppName]
	mov r8,qword [_szTitle]
	mov r9,13565952
	mov rbx,[temp_94]
	mov qword [arg4],rbx
	mov rbx,[temp_96]
	mov qword [arg5],rbx
	mov qword [arg6],600
	mov qword [arg7],300
	mov qword [arg8],0
	mov qword [arg9],0
	mov rbx,qword [_hInstance]
	mov qword [arg10],rbx
	mov qword [arg11],0
	call CreateWindowExA
	mov [_hWnd],rax
	lea rax,[_hWindow]
	mov rcx,qword [_hWnd]
	mov [rax],rcx
	mov rcx,qword [_hWnd]
	cmp rcx,0
	sete al
	movzx rax,al
	cmp rax,0
	jz .L9
	mov dword [_bRet],dword 0
	jmp .L8
.L9:
	mov rax,qword [_hWnd]
	cmp rax,0
	jz .L11
	lea rax,[_rect]
	mov rcx,qword [_hWnd]
	mov rdx,rax
	call GetClientRect
	mov rcx,struc_tagRECT._right
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,0
	cmp eax,ecx
	setg al
	movzx rax,al
	cmp rax,0
	jz .L13
	mov rcx,struc_tagRECT._right
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,2
	mov rdx,rax
	mov dword [rsp+8H],edx
	mov dword [rsp],ecx
	xor edx,edx
	mov eax,dword [rsp+8H]
	idiv dword [rsp]
	mov rcx,50
	mov rdx,rax
	mov eax,ecx
	mov ecx,edx
	sub ecx,eax
	mov eax,ecx
	mov dword [_xPos],eax
	jmp .L12
.L13:
.L12:
	mov eax,dword [_xPos]
	mov rcx,0
	cmp eax,ecx
	setl al
	movzx rax,al
	cmp rax,0
	jz .L15
	mov dword [_xPos],dword 0
	jmp .L14
.L15:
.L14:
	mov rcx,struc_tagRECT._bottom
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,0
	cmp eax,ecx
	setg al
	movzx rax,al
	cmp rax,0
	jz .L17
	mov rcx,struc_tagRECT._bottom
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,2
	mov rdx,rax
	mov dword [rsp+8H],edx
	mov dword [rsp],ecx
	xor edx,edx
	mov eax,dword [rsp+8H]
	idiv dword [rsp]
	mov rcx,55
	mov rdx,rax
	mov eax,edx
	add eax,ecx
	mov dword [_yPos],eax
	jmp .L16
.L17:
.L16:
	mov eax,dword [_yPos]
	mov [temp_93],rax
	mov rcx,struc_tagRECT._bottom
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,rax
	mov rax,[temp_93]
	cmp eax,ecx
	setge al
	movzx rax,al
	cmp rax,0
	jz .L19
	mov rcx,struc_tagRECT._bottom
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,1
	mov rdx,rax
	mov eax,ecx
	mov ecx,edx
	sub ecx,eax
	mov eax,ecx
	mov dword [_yPos],eax
	jmp .L18
.L19:
.L18:
	mov eax,dword [_yPos]
	mov rcx,0
	cmp eax,ecx
	setl al
	movzx rax,al
	cmp rax,0
	jz .L21
	mov dword [_yPos],dword 0
	jmp .L20
.L21:
.L20:
	mov rcx,0
	call GetModuleHandleA
	mov [temp_98],rax
	mov eax,dword [_yPos]
	mov [temp_97],rax
	mov eax,dword [_xPos]
	mov [temp_95],rax
	mov rcx,268435456
	mov rdx,65536
	___my_uint_b_or
	mov rcx,1073741824
	mov rdx,rax
	___my_uint_b_or
	mov rcx,1
	mov rdx,rax
	___my_uint_b_or
	mov [temp_68],rax
	mov rcx,0
	mov rdx,C4
	mov r8,C5
	mov r9,qword [temp_68]
	mov rbx,[temp_95]
	mov qword [arg4],rbx
	mov rbx,[temp_97]
	mov qword [arg5],rbx
	mov rbx,100
	mov qword [arg6],rbx
	mov rbx,50
	mov qword [arg7],rbx
	mov rbx,qword [_hWnd]
	mov qword [arg8],rbx
	mov rbx,101
	mov qword [arg9],rbx
	mov rbx,[temp_98]
	mov qword [arg10],rbx
	mov rbx,0
	mov qword [arg11],rbx
	call CreateWindowExA
	mov [_hButton],rax
	mov rcx,qword [_hButton]
	cmp rcx,0
	sete al
	movzx rax,al
	cmp rax,0
	jz .L23
	mov dword [_bRet],dword 0
	jmp .L22
.L23:
	mov rcx,qword [_hWnd]
	mov edx,dword [_nCmdShow]
	call ShowWindow
	mov rcx,qword [_hButton]
	mov edx,dword [_nCmdShow]
	call ShowWindow
	mov rcx,qword [_hWnd]
	call UpdateWindow
	mov rcx,qword [_hButton]
	call UpdateWindow
.L22:
	jmp .L10
.L11:
.L10:
.L8:
	mov eax,dword [_bRet]
	add rsp,248
	ret
%undef _hWnd
%undef _bRet
%undef _rect
%undef _xPos
%undef _yPos
%undef temp_68
%undef temp_93
%undef temp_94
%undef temp_95
%undef temp_96
%undef temp_97
%undef temp_98
%undef _hInstance
%undef _nCmdShow
%undef arg0
%undef arg1
%undef arg2
%undef arg3
%undef arg4
%undef arg5
%undef arg6
%undef arg7
%undef arg8
%undef arg9
%undef arg10
%undef arg11


%define _hWnd rsp+336
%define _message rsp+344
%define _wParam rsp+352
%define _lParam rsp+360
%define _rect rsp+280
%define _rect2 rsp+264
%define _hdc rsp+256
%define _sz rsp+248
%define _hFont rsp+240
%define temp_152 rsp+232
%define temp_159 rsp+224
%define temp_163 rsp+216
%define temp_167 rsp+208
%define temp_174 rsp+200
%define temp_178 rsp+192
%define temp_194 rsp+184
%define temp_200 rsp+176
%define temp_208 rsp+168
%define temp_248 rsp+160
%define temp_249 rsp+152
%define arg0 rsp+0
%define arg1 rsp+8
%define arg2 rsp+16
%define arg3 rsp+24
%define arg4 rsp+32
%define arg5 rsp+40
%define arg6 rsp+48
%define arg7 rsp+56
%define arg8 rsp+64
%define arg9 rsp+72
%define arg10 rsp+80
%define arg11 rsp+88
%define arg12 rsp+96
%define arg13 rsp+104
ALIGN 32,db 0xCC
_OnPaint:
	mov [rsp+8],rcx
	mov [rsp+16],rdx
	mov [rsp+24],r8
	mov [rsp+32],r9
	sub rsp,328
	mov rcx,qword [_hWnd]
	mov r8,qword [_wParam]
	mov r9,qword [_lParam]
	mov edx,dword [_message]
	call DefWindowProcA
	lea rax,[_rect]
	mov rcx,qword [_hWnd]
	mov rdx,rax
	call GetClientRect
	mov rcx,qword [_hWnd]
	call GetDC
	mov [_hdc],rax
	lea rax,[_rect]
	mov rcx,qword [_hdc]
	mov rdx,rax
	mov r8,0
	call FillRect
	mov rcx,50
	mov rdx,25
	mov r8,0
	mov r9,0
	mov qword [arg4],0
	mov qword [arg5],0
	mov qword [arg6],0
	mov qword [arg7],0
	mov qword [arg8],0
	mov qword [arg9],0
	mov qword [arg10],0
	mov qword [arg11],0
	mov qword [arg12],48
	mov rbx,qword [_szFontName]
	mov qword [arg13],rbx
	call CreateFontA
	mov [_hFont],rax
	mov rcx,qword [_hdc]
	mov rdx,qword [_hFont]
	call SelectObject
	lea rax,[_rect]
	mov [temp_208],rax
	lea rax,[_rect2]
	mov rcx,rax
	mov rdx,[temp_208]
	mov r8,[rdx]
	mov [rcx],r8
	mov r8,[rdx+8]
	mov [rcx+8],r8
	mov rax,rcx
	mov rcx,struc_tagRECT._left
	lea rax,[_rect2]
	add rax,rcx
	mov eax,[rax]
	mov [temp_248],rax
	mov rcx,struc_tagRECT._right
	lea rax,[_rect2]
	add rax,rcx
	mov eax,[rax]
	mov rcx,5
	mov rdx,rax
	mov eax,ecx
	mov ecx,edx
	sub ecx,eax
	mov eax,ecx
	mov rcx,rax
	mov rax,[temp_248]
	cmp eax,ecx
	setle al
	movzx rax,al
	cmp rax,0
	jz .L25
	mov rcx,struc_tagRECT._left
	lea rax,[_rect2]
	add rax,rcx
	mov rcx,rax
	mov rdx,5
	add [rcx],edx
	mov eax,[rcx]
	jmp .L24
.L25:
.L24:
	mov rcx,struc_tagRECT._right
	lea rax,[_rect2]
	add rax,rcx
	mov eax,[rax]
	mov rcx,5
	cmp eax,ecx
	setge al
	movzx rax,al
	cmp rax,0
	jz .L27
	mov rcx,struc_tagRECT._right
	lea rax,[_rect2]
	add rax,rcx
	mov rcx,rax
	mov rdx,5
	sub [rcx],edx
	mov eax,[rcx]
	jmp .L26
.L27:
.L26:
	mov rcx,struc_tagRECT._top
	lea rax,[_rect2]
	add rax,rcx
	mov eax,[rax]
	mov [temp_249],rax
	mov rcx,struc_tagRECT._bottom
	lea rax,[_rect2]
	add rax,rcx
	mov eax,[rax]
	mov rcx,5
	mov rdx,rax
	mov eax,ecx
	mov ecx,edx
	sub ecx,eax
	mov eax,ecx
	mov rcx,rax
	mov rax,[temp_249]
	cmp eax,ecx
	setle al
	movzx rax,al
	cmp rax,0
	jz .L29
	mov rcx,struc_tagRECT._top
	lea rax,[_rect2]
	add rax,rcx
	mov rcx,rax
	mov rdx,5
	add [rcx],edx
	mov eax,[rcx]
	jmp .L28
.L29:
.L28:
	mov rcx,struc_tagRECT._bottom
	lea rax,[_rect2]
	add rax,rcx
	mov eax,[rax]
	mov rcx,5
	cmp eax,ecx
	setge al
	movzx rax,al
	cmp rax,0
	jz .L31
	mov rcx,struc_tagRECT._bottom
	lea rax,[_rect2]
	add rax,rcx
	mov rcx,rax
	mov rdx,5
	sub [rcx],edx
	mov eax,[rcx]
	jmp .L30
.L31:
.L30:
	mov rcx,qword [_hdc]
	mov rdx,qword [_szTitle]
	mov r8,13
	lea r9,[_sz]
	call GetTextExtentPoint32A
	mov rcx,struc_tagRECT._bottom
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,0
	cmp eax,ecx
	setg al
	movzx rax,al
	mov [temp_152],rax
	mov rcx,struc_tagSIZE._cy
	lea rax,[_sz]
	add rax,rcx
	mov eax,[rax]
	mov rcx,0
	cmp eax,ecx
	setg al
	movzx rcx,al
	mov rdx,qword [temp_152]
	___my_long_and
	cmp rax,0
	jz .L33
	mov rcx,struc_tagRECT._bottom
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,2
	mov rdx,rax
	mov dword [rsp+8H],edx
	mov dword [rsp],ecx
	xor edx,edx
	mov eax,dword [rsp+8H]
	idiv dword [rsp]
	mov [temp_159],rax
	mov rcx,struc_tagSIZE._cy
	lea rax,[_sz]
	add rax,rcx
	mov eax,[rax]
	mov rcx,2
	mov rdx,rax
	mov dword [rsp+8H],edx
	mov dword [rsp],ecx
	xor edx,edx
	mov eax,dword [rsp+8H]
	idiv dword [rsp]
	mov rcx,rax
	mov rdx,qword [temp_159]
	mov eax,ecx
	mov ecx,edx
	sub ecx,eax
	mov eax,ecx
	mov [temp_163],rax
	mov rcx,struc_tagRECT._top
	lea rax,[_rect]
	add rax,rcx
	mov rcx,qword [temp_163]
	mov [rax],ecx
	mov eax,ecx
	jmp .L32
.L33:
.L32:
	mov rcx,struc_tagRECT._right
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,0
	cmp eax,ecx
	setg al
	movzx rax,al
	mov [temp_167],rax
	mov rcx,struc_tagSIZE._cx
	lea rax,[_sz]
	add rax,rcx
	mov eax,[rax]
	mov rcx,0
	cmp eax,ecx
	setg al
	movzx rcx,al
	mov rdx,qword [temp_167]
	___my_long_and
	cmp rax,0
	jz .L35
	mov rcx,struc_tagRECT._right
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,2
	mov rdx,rax
	mov dword [rsp+8H],edx
	mov dword [rsp],ecx
	xor edx,edx
	mov eax,dword [rsp+8H]
	idiv dword [rsp]
	mov [temp_174],rax
	mov rcx,struc_tagSIZE._cx
	lea rax,[_sz]
	add rax,rcx
	mov eax,[rax]
	mov rcx,2
	mov rdx,rax
	mov dword [rsp+8H],edx
	mov dword [rsp],ecx
	xor edx,edx
	mov eax,dword [rsp+8H]
	idiv dword [rsp]
	mov rcx,rax
	mov rdx,qword [temp_174]
	mov eax,ecx
	mov ecx,edx
	sub ecx,eax
	mov eax,ecx
	mov [temp_178],rax
	mov rcx,struc_tagRECT._left
	lea rax,[_rect]
	add rax,rcx
	mov rcx,qword [temp_178]
	mov [rax],ecx
	mov eax,ecx
	jmp .L34
.L35:
.L34:
	mov rcx,struc_tagRECT._top
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,0
	cmp eax,ecx
	setl al
	movzx rax,al
	cmp rax,0
	jz .L37
	mov rcx,struc_tagRECT._top
	lea rax,[_rect]
	add rax,rcx
	mov rcx,0
	mov [rax],ecx
	mov eax,ecx
	jmp .L36
.L37:
.L36:
	mov rcx,struc_tagRECT._left
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,0
	cmp eax,ecx
	setl al
	movzx rax,al
	cmp rax,0
	jz .L39
	mov rcx,struc_tagRECT._left
	lea rax,[_rect]
	add rax,rcx
	mov rcx,0
	mov [rax],ecx
	mov eax,ecx
	jmp .L38
.L39:
.L38:
	mov rcx,8
	mov rdx,0
	___my_int_lsh
	mov rcx,rax
	mov rdx,0
	___my_int_b_or
	mov [temp_194],rax
	mov rcx,16
	mov rdx,0
	___my_int_lsh
	mov rcx,rax
	mov rdx,qword [temp_194]
	___my_int_b_or
	mov rcx,qword [_hdc]
	mov rdx,rax
	call SetTextColor
	mov rax,-1
	mov [temp_200],rax
	mov rcx,qword [_hdc]
	mov rdx,qword [_szMessage]
	mov r8,qword [temp_200]
	lea r9,[_rect]
	mov rbx,32
	mov qword [arg4],rbx
	call DrawTextA
	lea rax,[_rect2]
	mov rcx,qword [_hdc]
	mov rdx,rax
	mov r8,10
	mov r9,15
	call DrawEdge
	mov rcx,qword [_hFont]
	call DeleteObject
	mov rcx,qword [_hdc]
	call DeleteDC
	add rsp,328
	ret
%undef _rect
%undef _rect2
%undef _hdc
%undef _sz
%undef _hFont
%undef temp_152
%undef temp_159
%undef temp_163
%undef temp_167
%undef temp_174
%undef temp_178
%undef temp_194
%undef temp_200
%undef temp_208
%undef temp_248
%undef temp_249
%undef _hWnd
%undef _message
%undef _wParam
%undef _lParam
%undef arg0
%undef arg1
%undef arg2
%undef arg3
%undef arg4
%undef arg5
%undef arg6
%undef arg7
%undef arg8
%undef arg9
%undef arg10
%undef arg11
%undef arg12
%undef arg13


%define _hWnd rsp+192
%define _message rsp+200
%define _wParam rsp+208
%define _lParam rsp+216
%define _rect rsp+136
%define _xPos rsp+132
%define _yPos rsp+128
%define temp_296 rsp+120
%define temp_297 rsp+112
%define arg0 rsp+0
%define arg1 rsp+8
%define arg2 rsp+16
%define arg3 rsp+24
%define arg4 rsp+32
%define arg5 rsp+40
%define arg6 rsp+48
%define arg7 rsp+56
ALIGN 32,db 0xCC
_OnResize:
	mov [rsp+8],rcx
	mov [rsp+16],rdx
	mov [rsp+24],r8
	mov [rsp+32],r9
	sub rsp,184
	lea rax,[_rect]
	mov rcx,qword [_hWnd]
	mov rdx,rax
	call GetClientRect
	mov rcx,struc_tagRECT._right
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,0
	cmp eax,ecx
	setg al
	movzx rax,al
	cmp rax,0
	jz .L41
	mov rcx,struc_tagRECT._right
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,2
	mov rdx,rax
	mov dword [rsp+8H],edx
	mov dword [rsp],ecx
	xor edx,edx
	mov eax,dword [rsp+8H]
	idiv dword [rsp]
	mov rcx,50
	mov rdx,rax
	mov eax,ecx
	mov ecx,edx
	sub ecx,eax
	mov eax,ecx
	mov dword [_xPos],eax
	jmp .L40
.L41:
.L40:
	mov rcx,struc_tagRECT._bottom
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,0
	cmp eax,ecx
	setg al
	movzx rax,al
	cmp rax,0
	jz .L43
	mov rcx,struc_tagRECT._bottom
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,2
	mov rdx,rax
	mov dword [rsp+8H],edx
	mov dword [rsp],ecx
	xor edx,edx
	mov eax,dword [rsp+8H]
	idiv dword [rsp]
	mov rcx,55
	mov rdx,rax
	mov eax,edx
	add eax,ecx
	mov dword [_yPos],eax
	jmp .L42
.L43:
.L42:
	mov eax,dword [_xPos]
	mov [temp_296],rax
	mov rcx,struc_tagRECT._right
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,rax
	mov rax,[temp_296]
	cmp eax,ecx
	setge al
	movzx rax,al
	cmp rax,0
	jz .L45
	mov rcx,struc_tagRECT._right
	lea rax,[_rect]
	add rax,rcx
	mov eax,[rax]
	mov rcx,1
	mov rdx,rax
	mov eax,ecx
	mov ecx,edx
	sub ecx,eax
	mov eax,ecx
	mov dword [_xPos],eax
	jmp .L44
.L45:
.L44:
	mov eax,dword [_xPos]
	mov rcx,0
	cmp eax,ecx
	setl al
	movzx rax,al
	cmp rax,0
	jz .L47
	mov dword [_xPos],dword 0
	jmp .L46
.L47:
.L46:
	mov eax,dword [_xPos]
	mov rcx,0
	cmp eax,ecx
	setl al
	movzx rax,al
	cmp rax,0
	jz .L49
	mov dword [_xPos],dword 0
	jmp .L48
.L49:
.L48:
	mov eax,dword [_yPos]
	mov [temp_297],rax
	mov eax,dword [_xPos]
	mov rcx,qword [_hButton]
	mov rdx,rax
	mov r8,[temp_297]
	mov r9,100
	mov qword [arg4],50
	mov qword [arg5],1
	call MoveWindow
	mov rcx,qword [_hWnd]
	mov r8,qword [_wParam]
	mov r9,qword [_lParam]
	mov edx,dword [_message]
	call _OnPaint
	add rsp,184
	ret
%undef _rect
%undef _xPos
%undef _yPos
%undef temp_296
%undef temp_297
%undef _hWnd
%undef _message
%undef _wParam
%undef _lParam
%undef arg0
%undef arg1
%undef arg2
%undef arg3
%undef arg4
%undef arg5
%undef arg6
%undef arg7


%define _hWnd rsp+128
%define arg0 rsp+0
%define arg1 rsp+8
%define arg2 rsp+16
%define arg3 rsp+24
%define arg4 rsp+32
%define arg5 rsp+40
%define arg6 rsp+48
%define arg7 rsp+56
ALIGN 32,db 0xCC
_OnHello:
	mov [rsp+8],rcx
	sub rsp,120
	mov rcx,0
	call PostQuitMessage
	add rsp,120
	ret
%undef _hWnd
%undef arg0
%undef arg1
%undef arg2
%undef arg3
%undef arg4
%undef arg5
%undef arg6
%undef arg7


%define _hWnd rsp+160
%define _message rsp+168
%define _wParam rsp+176
%define _lParam rsp+184
%define _cmd rsp+116
%define arg0 rsp+0
%define arg1 rsp+8
%define arg2 rsp+16
%define arg3 rsp+24
%define arg4 rsp+32
%define arg5 rsp+40
%define arg6 rsp+48
%define arg7 rsp+56
ALIGN 32,db 0xCC
_OnCommand:
	mov [rsp+8],rcx
	mov [rsp+16],rdx
	mov [rsp+24],r8
	mov [rsp+32],r9
	sub rsp,152
	mov rcx,qword [_wParam]
	___my_l2ul
	mov rcx,4294967295
	mov rdx,rax
	___my_ulong_b_and
	mov rcx,rax
	___my_ul2i
	mov dword [_cmd],eax
	mov eax,dword [_cmd]
	mov rcx,rax
	___my_i2l
	mov rcx,rax
	mov rdx,101
	mov rax,rdx
	cmp rax,rcx
	sete al
	movzx rax,al
	cmp rax,0
	jz .L51
	mov rcx,qword [_hWnd]
	call _OnHello
	jmp .L50
	jmp .L52
.L51:
.L52:
	mov rcx,qword [_hWnd]
	mov r8,qword [_wParam]
	mov r9,qword [_lParam]
	mov edx,dword [_message]
	call DefWindowProcA
.L50:
	add rsp,152
	ret
%undef _cmd
%undef _hWnd
%undef _message
%undef _wParam
%undef _lParam
%undef arg0
%undef arg1
%undef arg2
%undef arg3
%undef arg4
%undef arg5
%undef arg6
%undef arg7


%define _hWnd rsp+176
%define _message rsp+184
%define _wParam rsp+192
%define _lParam rsp+200
%define _lRet rsp+128
%define _rect rsp+112
%define temp_9 rsp+104
%define arg0 rsp+0
%define arg1 rsp+8
%define arg2 rsp+16
%define arg3 rsp+24
%define arg4 rsp+32
%define arg5 rsp+40
%define arg6 rsp+48
%define arg7 rsp+56
ALIGN 32,db 0xCC
_WndProc:
	mov [rsp+8],rcx
	mov [rsp+16],rdx
	mov [rsp+24],r8
	mov [rsp+32],r9
	sub rsp,168
	mov qword [_lRet],qword 0
	lea rax,[_lRet]
	mov eax,dword [_message]
	mov rcx,rax
	___my_ui2l
	mov rcx,rax
	mov qword [temp_9],rcx
	mov rdx,1
	mov rax,rdx
	cmp rax,rcx
	sete al
	movzx rax,al
	cmp rax,0
	jz .L54
	mov rcx,qword [_hWnd]
	mov r8,qword [_wParam]
	mov r9,qword [_lParam]
	mov edx,dword [_message]
	call _OnPaint
	jmp .L53
	jmp .L55
.L54:
	mov rcx,qword [temp_9]
	mov rdx,16
	mov rax,rdx
	cmp rax,rcx
	sete al
	movzx rax,al
	cmp rax,0
	jz .L56
.L55:
	mov rcx,0
	call PostQuitMessage
	jmp .L53
	jmp .L57
.L56:
	mov rcx,qword [temp_9]
	mov rdx,2
	mov rax,rdx
	cmp rax,rcx
	sete al
	movzx rax,al
	cmp rax,0
	jz .L58
.L57:
	call _OnDestroyWindow
	jmp .L53
	jmp .L59
.L58:
	mov rcx,qword [temp_9]
	mov rdx,273
	mov rax,rdx
	cmp rax,rcx
	sete al
	movzx rax,al
	cmp rax,0
	jz .L60
.L59:
	mov rcx,qword [_hWnd]
	mov r8,qword [_wParam]
	mov r9,qword [_lParam]
	mov edx,dword [_message]
	call _OnCommand
	jmp .L53
	jmp .L61
.L60:
	mov rcx,qword [temp_9]
	mov rdx,5
	mov rax,rdx
	cmp rax,rcx
	sete al
	movzx rax,al
	cmp rax,0
	jz .L62
.L61:
	mov rcx,qword [_hWnd]
	mov r8,qword [_wParam]
	mov r9,qword [_lParam]
	mov edx,dword [_message]
	call _OnResize
	jmp .L53
	jmp .L63
.L62:
	mov rcx,qword [temp_9]
	mov rdx,15
	mov rax,rdx
	cmp rax,rcx
	sete al
	movzx rax,al
	cmp rax,0
	jz .L64
.L63:
	mov rcx,qword [_hWnd]
	mov r8,qword [_wParam]
	mov r9,qword [_lParam]
	mov edx,dword [_message]
	call _OnPaint
	jmp .L53
	jmp .L65
.L64:
	mov rcx,qword [temp_9]
	mov rdx,258
	mov rax,rdx
	cmp rax,rcx
	sete al
	movzx rax,al
	cmp rax,0
	jz .L66
.L65:
	mov rcx,0
	mov rdx,C6
	mov r8,C6
	mov r9,0
	call MessageBoxA
	jmp .L53
	jmp .L67
.L66:
.L67:
	mov rcx,qword [_hWnd]
	mov r8,qword [_wParam]
	mov r9,qword [_lParam]
	mov edx,dword [_message]
	call DefWindowProcA
	mov [_lRet],rax
.L53:
	mov rax,qword [_lRet]
	add rsp,168
	ret
%undef _lRet
%undef _rect
%undef temp_9
%undef _hWnd
%undef _message
%undef _wParam
%undef _lParam
%undef arg0
%undef arg1
%undef arg2
%undef arg3
%undef arg4
%undef arg5
%undef arg6
%undef arg7


%define arg0 rsp+0
%define arg1 rsp+8
%define arg2 rsp+16
%define arg3 rsp+24
%define arg4 rsp+32
%define arg5 rsp+40
%define arg6 rsp+48
%define arg7 rsp+56
ALIGN 32,db 0xCC
_ginit_cwin32_obj:
	sub rsp,104
	lea rax,[C0]
	mov [_szAppName],rax
	lea rax,[C1]
	mov [_szTitle],rax
	lea rax,[C1]
	mov [_szMessage],rax
	lea rax,[C2]
	mov [_szFontName],rax
	lea rax,[C3]
	mov [_szErrorMessage],rax
	lea rax,[_hWindow]
	mov rcx,0
	mov [rax],rcx
	lea rax,[_hButton]
	mov rcx,0
	mov [rax],rcx
	add rsp,104
	ret
%undef arg0
%undef arg1
%undef arg2
%undef arg3
%undef arg4
%undef arg5
%undef arg6
%undef arg7



exception_code_end:

exception_handler:
	mov [rsp+8*1],rcx
	mov [rsp+8*2],rdx
	mov [rsp+8*3],r8
	mov [rsp+8*4],r9
	sub rsp,40
	mov r9,16
	mov r8,EX
	mov rdx,EX
	mov rcx,0
	call MessageBoxA
	mov rcx,1
	call ExitProcess
	add rsp,40
	ret

section .data align=4 noexec

C0 : db 'Hello Window',0;DE
C1 : db 'Hello, world!',0;DE
C2 : db 'Times New Roman',0;DE
C3 : db 'Error: Can',39,'t create window!',0;DE
C4 : db 'BUTTON',0;DE
C5 : db 'Click to exit...',0;DE
C6 : db 'WM_CHAR',0;DE

EX : db 'software exception...',10,0
